From 687d761bdeb5800800c858b49e2e4657386d08f8 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 28 Jul 2026 00:22:00 -0600 Subject: [PATCH] =?UTF-8?q?feat(phase-29):=20wave22=20families=20swept=205?= =?UTF-8?q?48/548=20(R22=20140/140)=20=E2=80=94=20parallel=20gating=20prov?= =?UTF-8?q?en=20at=20scale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4 families x 137 members: BANKED 548 / 0 failed. R22 clean-fleet 140 passed / 0 failed of 140. MEASURED: fn-count 318,859 -> 319,412 (+553); instr-weighted 84.4 -> 84.7% (+36,640 ins); distinct-code 74.4 -> 74.5% (+134 unique fns). TODAY'S PARALLEL GATE WIRING PROVED AT SCALE: this run reported `gating 411 group(s) across distinct binaries, -j12`. When I shipped it earlier I could only smoke-test 4 fail-fast groups and said explicitly that the 1.5x measured there was NOT the 8-16x claim; 411 full build-and-gate cycles is the shape the claim was about. A PERFECT 548/548 also says the wave's exemplars were right for the right reasons — a body that templates across 137 byte-variant siblings with zero rejections is not a marginal match. BAND NOTE: the first sweep attempt used --band substantial and staged NOTHING; these exemplars are 60-76 ins, i.e. the MID band (substantial is >=80). The tool reported that honestly ("0 matched-exemplar families (band=substantial); 0 candidate members") rather than returning a clean-looking 0 banked — the skip-vs-result distinction this session kept running into. --- .run/backlog.jsonl | 5 - docs/backlog.md | 3347 ++++++++++----------- docs/progress.fleet.md | 288 +- src/ov_SC01_000/ov_SC01_000.c | 47 +- src/ov_SC01_000/ov_SC01_000_after.c | 98 +- src/ov_SC01_000/ov_SC01_000_jr_8015C32C.c | 47 +- src/ov_SC01_001/ov_SC01_001.c | 47 +- src/ov_SC01_001/ov_SC01_001_after.c | 98 +- src/ov_SC01_001/ov_SC01_001_jr_8015C32C.c | 47 +- src/ov_SC01_004/ov_SC01_004.c | 47 +- src/ov_SC01_004/ov_SC01_004_after.c | 98 +- src/ov_SC01_004/ov_SC01_004_jr_8015C32C.c | 47 +- src/ov_SC01_005/ov_SC01_005.c | 47 +- src/ov_SC01_005/ov_SC01_005_after.c | 98 +- src/ov_SC01_005/ov_SC01_005_jr_8015C32C.c | 47 +- src/ov_SC01_006/ov_SC01_006.c | 47 +- src/ov_SC01_006/ov_SC01_006_after.c | 98 +- src/ov_SC01_006/ov_SC01_006_jr_8015C32C.c | 47 +- src/ov_SC01_008/ov_SC01_008.c | 47 +- src/ov_SC01_008/ov_SC01_008_after.c | 98 +- src/ov_SC01_008/ov_SC01_008_jr_8015C32C.c | 47 +- src/ov_SC01_009/ov_SC01_009.c | 47 +- src/ov_SC01_009/ov_SC01_009_after.c | 98 +- src/ov_SC01_009/ov_SC01_009_jr_8015C32C.c | 47 +- src/ov_SC01_074/ov_SC01_074.c | 47 +- src/ov_SC01_074/ov_SC01_074_after.c | 98 +- src/ov_SC01_074/ov_SC01_074_jr_8015C32C.c | 47 +- src/ov_SC01_080/ov_SC01_080.c | 47 +- src/ov_SC01_080/ov_SC01_080_after.c | 98 +- src/ov_SC01_080/ov_SC01_080_jr_8015C32C.c | 47 +- src/ov_SC01_084/ov_SC01_084.c | 47 +- src/ov_SC01_084/ov_SC01_084_after.c | 98 +- src/ov_SC01_084/ov_SC01_084_jr_8015C32C.c | 47 +- src/ov_SC02_000/ov_SC02_000.c | 47 +- src/ov_SC02_000/ov_SC02_000_after.c | 98 +- src/ov_SC02_000/ov_SC02_000_jr_8015C32C.c | 47 +- src/ov_SC02_003/ov_SC02_003.c | 47 +- src/ov_SC02_003/ov_SC02_003_after.c | 98 +- src/ov_SC02_003/ov_SC02_003_jr_8015C32C.c | 47 +- src/ov_SC02_004/ov_SC02_004.c | 47 +- src/ov_SC02_004/ov_SC02_004_after.c | 98 +- src/ov_SC02_004/ov_SC02_004_jr_8015C32C.c | 47 +- src/ov_SC02_005/ov_SC02_005.c | 47 +- src/ov_SC02_005/ov_SC02_005_after.c | 98 +- src/ov_SC02_005/ov_SC02_005_jr_8015C32C.c | 47 +- src/ov_SC02_011/ov_SC02_011.c | 47 +- src/ov_SC02_011/ov_SC02_011_after.c | 98 +- src/ov_SC02_011/ov_SC02_011_jr_8015C32C.c | 47 +- src/ov_SC02_015/ov_SC02_015.c | 47 +- src/ov_SC02_015/ov_SC02_015_after.c | 98 +- src/ov_SC02_015/ov_SC02_015_jr_8015C32C.c | 47 +- src/ov_SC02_016/ov_SC02_016.c | 47 +- src/ov_SC02_016/ov_SC02_016_after.c | 98 +- src/ov_SC02_016/ov_SC02_016_jr_8015C32C.c | 47 +- src/ov_SC02_017/ov_SC02_017.c | 47 +- src/ov_SC02_017/ov_SC02_017_after.c | 98 +- src/ov_SC02_017/ov_SC02_017_jr_8015C32C.c | 47 +- src/ov_SC02_021/ov_SC02_021.c | 47 +- src/ov_SC02_021/ov_SC02_021_after.c | 98 +- src/ov_SC02_021/ov_SC02_021_jr_8015C32C.c | 47 +- src/ov_SC02_026/ov_SC02_026.c | 47 +- src/ov_SC02_026/ov_SC02_026_after.c | 98 +- src/ov_SC02_026/ov_SC02_026_jr_8015C32C.c | 47 +- src/ov_SC02_027/ov_SC02_027.c | 47 +- src/ov_SC02_027/ov_SC02_027_after.c | 98 +- src/ov_SC02_027/ov_SC02_027_jr_8015C32C.c | 47 +- src/ov_SC02_028/ov_SC02_028.c | 47 +- src/ov_SC02_028/ov_SC02_028_after.c | 98 +- src/ov_SC02_028/ov_SC02_028_jr_8015C32C.c | 47 +- src/ov_SC02_031/ov_SC02_031.c | 47 +- src/ov_SC02_031/ov_SC02_031_after.c | 98 +- src/ov_SC02_031/ov_SC02_031_jr_8015C32C.c | 47 +- src/ov_SC02_035/ov_SC02_035.c | 47 +- src/ov_SC02_035/ov_SC02_035_after.c | 98 +- src/ov_SC02_035/ov_SC02_035_jr_8015C32C.c | 47 +- src/ov_SC02_039/ov_SC02_039.c | 47 +- src/ov_SC02_039/ov_SC02_039_after.c | 98 +- src/ov_SC02_039/ov_SC02_039_jr_8015C32C.c | 47 +- src/ov_SC02_041/ov_SC02_041.c | 47 +- src/ov_SC02_041/ov_SC02_041_after.c | 98 +- src/ov_SC02_041/ov_SC02_041_jr_8015C32C.c | 47 +- src/ov_SC03_001/ov_SC03_001.c | 47 +- src/ov_SC03_001/ov_SC03_001_after.c | 98 +- src/ov_SC03_001/ov_SC03_001_jr_8015C32C.c | 47 +- src/ov_SC03_002/ov_SC03_002.c | 47 +- src/ov_SC03_002/ov_SC03_002_after.c | 98 +- src/ov_SC03_002/ov_SC03_002_jr_8015C32C.c | 47 +- src/ov_SC03_003/ov_SC03_003.c | 47 +- src/ov_SC03_003/ov_SC03_003_after.c | 98 +- src/ov_SC03_003/ov_SC03_003_jr_8015C32C.c | 47 +- src/ov_SC03_006/ov_SC03_006.c | 47 +- src/ov_SC03_006/ov_SC03_006_after.c | 98 +- src/ov_SC03_006/ov_SC03_006_jr_8015C32C.c | 47 +- src/ov_SC03_007/ov_SC03_007.c | 47 +- src/ov_SC03_007/ov_SC03_007_after.c | 98 +- src/ov_SC03_007/ov_SC03_007_jr_8015C32C.c | 47 +- src/ov_SC03_010/ov_SC03_010.c | 47 +- src/ov_SC03_010/ov_SC03_010_after.c | 98 +- src/ov_SC03_010/ov_SC03_010_jr_8015C32C.c | 47 +- src/ov_SC03_011/ov_SC03_011.c | 47 +- src/ov_SC03_011/ov_SC03_011_after.c | 98 +- src/ov_SC03_011/ov_SC03_011_jr_8015C32C.c | 47 +- src/ov_SC03_012/ov_SC03_012.c | 47 +- src/ov_SC03_012/ov_SC03_012_after.c | 98 +- src/ov_SC03_012/ov_SC03_012_jr_8015C32C.c | 47 +- src/ov_SC03_013/ov_SC03_013.c | 47 +- src/ov_SC03_013/ov_SC03_013_after.c | 98 +- src/ov_SC03_013/ov_SC03_013_jr_8015C32C.c | 47 +- src/ov_SC03_014/ov_SC03_014.c | 47 +- src/ov_SC03_014/ov_SC03_014_after.c | 98 +- src/ov_SC03_014/ov_SC03_014_jr_8015C32C.c | 47 +- src/ov_SC03_015/ov_SC03_015.c | 47 +- src/ov_SC03_015/ov_SC03_015_after.c | 98 +- src/ov_SC03_015/ov_SC03_015_jr_8015C32C.c | 47 +- src/ov_SC03_023/ov_SC03_023.c | 47 +- src/ov_SC03_023/ov_SC03_023_after.c | 98 +- src/ov_SC03_023/ov_SC03_023_jr_8015C32C.c | 47 +- src/ov_SC03_024/ov_SC03_024.c | 47 +- src/ov_SC03_024/ov_SC03_024_after.c | 98 +- src/ov_SC03_024/ov_SC03_024_jr_8015C32C.c | 47 +- src/ov_SC03_028/ov_SC03_028.c | 47 +- src/ov_SC03_028/ov_SC03_028_after.c | 98 +- src/ov_SC03_028/ov_SC03_028_jr_8015C32C.c | 47 +- src/ov_SC03_029/ov_SC03_029.c | 47 +- src/ov_SC03_029/ov_SC03_029_after.c | 98 +- src/ov_SC03_029/ov_SC03_029_jr_8015C32C.c | 47 +- src/ov_SC03_030/ov_SC03_030.c | 47 +- src/ov_SC03_030/ov_SC03_030_after.c | 98 +- src/ov_SC03_030/ov_SC03_030_jr_8015C32C.c | 47 +- src/ov_SC03_031/ov_SC03_031.c | 47 +- src/ov_SC03_031/ov_SC03_031_after.c | 98 +- src/ov_SC03_031/ov_SC03_031_jr_8015C32C.c | 47 +- src/ov_SC03_089/ov_SC03_089.c | 47 +- src/ov_SC03_089/ov_SC03_089_after.c | 98 +- src/ov_SC03_089/ov_SC03_089_jr_8015C32C.c | 47 +- src/ov_SC03_090/ov_SC03_090.c | 47 +- src/ov_SC03_090/ov_SC03_090_after.c | 98 +- src/ov_SC03_090/ov_SC03_090_jr_8015C32C.c | 47 +- src/ov_SC03_091/ov_SC03_091.c | 47 +- src/ov_SC03_091/ov_SC03_091_after.c | 98 +- src/ov_SC03_091/ov_SC03_091_jr_8015C32C.c | 47 +- src/ov_SC03_092/ov_SC03_092.c | 47 +- src/ov_SC03_092/ov_SC03_092_after.c | 98 +- src/ov_SC03_092/ov_SC03_092_jr_8015C32C.c | 47 +- src/ov_SC03_093/ov_SC03_093.c | 47 +- src/ov_SC03_093/ov_SC03_093_after.c | 98 +- src/ov_SC03_093/ov_SC03_093_jr_8015C32C.c | 47 +- src/ov_SC03_094/ov_SC03_094.c | 47 +- src/ov_SC03_094/ov_SC03_094_after.c | 98 +- src/ov_SC03_094/ov_SC03_094_jr_8015C32C.c | 47 +- src/ov_SC03_095/ov_SC03_095.c | 47 +- src/ov_SC03_095/ov_SC03_095_after.c | 98 +- src/ov_SC03_095/ov_SC03_095_jr_8015C32C.c | 47 +- src/ov_SC03_096/ov_SC03_096.c | 47 +- src/ov_SC03_096/ov_SC03_096_after.c | 98 +- src/ov_SC03_096/ov_SC03_096_jr_8015C32C.c | 47 +- src/ov_SC03_097/ov_SC03_097.c | 47 +- src/ov_SC03_097/ov_SC03_097_after.c | 98 +- src/ov_SC03_097/ov_SC03_097_jr_8015C32C.c | 47 +- src/ov_SC03_098/ov_SC03_098.c | 47 +- src/ov_SC03_098/ov_SC03_098_after.c | 98 +- src/ov_SC03_098/ov_SC03_098_jr_8015C32C.c | 47 +- src/ov_SC03_099/ov_SC03_099.c | 47 +- src/ov_SC03_099/ov_SC03_099_after.c | 98 +- src/ov_SC03_099/ov_SC03_099_jr_8015C32C.c | 47 +- src/ov_SC03_100/ov_SC03_100.c | 47 +- src/ov_SC03_100/ov_SC03_100_after.c | 98 +- src/ov_SC03_100/ov_SC03_100_jr_8015C32C.c | 47 +- src/ov_SC03_101/ov_SC03_101.c | 47 +- src/ov_SC03_101/ov_SC03_101_after.c | 98 +- src/ov_SC03_101/ov_SC03_101_jr_8015C32C.c | 47 +- src/ov_SC03_102/ov_SC03_102.c | 47 +- src/ov_SC03_102/ov_SC03_102_after.c | 98 +- src/ov_SC03_102/ov_SC03_102_jr_8015C32C.c | 47 +- src/ov_SC03_103/ov_SC03_103.c | 47 +- src/ov_SC03_103/ov_SC03_103_after.c | 98 +- src/ov_SC03_103/ov_SC03_103_jr_8015C32C.c | 47 +- src/ov_SC03_104/ov_SC03_104.c | 47 +- src/ov_SC03_104/ov_SC03_104_after.c | 98 +- src/ov_SC03_104/ov_SC03_104_jr_8015C32C.c | 47 +- src/ov_SC03_105/ov_SC03_105.c | 47 +- src/ov_SC03_105/ov_SC03_105_after.c | 98 +- src/ov_SC03_105/ov_SC03_105_jr_8015C32C.c | 47 +- src/ov_SC03_108/ov_SC03_108.c | 47 +- src/ov_SC03_108/ov_SC03_108_after.c | 98 +- src/ov_SC03_108/ov_SC03_108_jr_8015C32C.c | 47 +- src/ov_SC03_109/ov_SC03_109.c | 47 +- src/ov_SC03_109/ov_SC03_109_after.c | 98 +- src/ov_SC03_109/ov_SC03_109_jr_8015C32C.c | 47 +- src/ov_SC03_110/ov_SC03_110.c | 47 +- src/ov_SC03_110/ov_SC03_110_after.c | 98 +- src/ov_SC03_110/ov_SC03_110_jr_8015C32C.c | 47 +- src/ov_SC03_111/ov_SC03_111.c | 47 +- src/ov_SC03_111/ov_SC03_111_after.c | 98 +- src/ov_SC03_111/ov_SC03_111_jr_8015C32C.c | 47 +- src/ov_SC03_112/ov_SC03_112.c | 47 +- src/ov_SC03_112/ov_SC03_112_after.c | 98 +- src/ov_SC03_112/ov_SC03_112_jr_8015C32C.c | 47 +- src/ov_SC03_113/ov_SC03_113.c | 47 +- src/ov_SC03_113/ov_SC03_113_after.c | 98 +- src/ov_SC03_113/ov_SC03_113_jr_8015C32C.c | 47 +- src/ov_SC03_114/ov_SC03_114.c | 47 +- src/ov_SC03_114/ov_SC03_114_after.c | 98 +- src/ov_SC03_114/ov_SC03_114_jr_8015C32C.c | 47 +- src/ov_SC03_115/ov_SC03_115.c | 47 +- src/ov_SC03_115/ov_SC03_115_after.c | 98 +- src/ov_SC03_115/ov_SC03_115_jr_8015C32C.c | 47 +- src/ov_SC03_116/ov_SC03_116.c | 47 +- src/ov_SC03_116/ov_SC03_116_after.c | 98 +- src/ov_SC03_116/ov_SC03_116_jr_8015C32C.c | 47 +- src/ov_SC03_117/ov_SC03_117.c | 47 +- src/ov_SC03_117/ov_SC03_117_after.c | 98 +- src/ov_SC03_117/ov_SC03_117_jr_8015C32C.c | 47 +- src/ov_SC03_118/ov_SC03_118.c | 47 +- src/ov_SC03_118/ov_SC03_118_after.c | 98 +- src/ov_SC03_118/ov_SC03_118_jr_8015C32C.c | 47 +- src/ov_SC03_119/ov_SC03_119.c | 47 +- src/ov_SC03_119/ov_SC03_119_after.c | 98 +- src/ov_SC03_119/ov_SC03_119_jr_8015C32C.c | 47 +- src/ov_SC03_121/ov_SC03_121.c | 47 +- src/ov_SC03_121/ov_SC03_121_after.c | 98 +- src/ov_SC03_121/ov_SC03_121_jr_8015C32C.c | 47 +- src/ov_SC03_124/ov_SC03_124.c | 47 +- src/ov_SC03_124/ov_SC03_124_after.c | 98 +- src/ov_SC03_124/ov_SC03_124_jr_8015C32C.c | 47 +- src/ov_SC03_125/ov_SC03_125.c | 47 +- src/ov_SC03_125/ov_SC03_125_after.c | 98 +- src/ov_SC03_125/ov_SC03_125_jr_8015C32C.c | 47 +- src/ov_SC03_126/ov_SC03_126.c | 47 +- src/ov_SC03_126/ov_SC03_126_after.c | 98 +- src/ov_SC03_126/ov_SC03_126_jr_8015C32C.c | 47 +- src/ov_SC04_000/ov_SC04_000.c | 47 +- src/ov_SC04_000/ov_SC04_000_after.c | 98 +- src/ov_SC04_000/ov_SC04_000_jr_8015C32C.c | 47 +- src/ov_SC04_002/ov_SC04_002.c | 47 +- src/ov_SC04_002/ov_SC04_002_after.c | 98 +- src/ov_SC04_002/ov_SC04_002_jr_8015C32C.c | 47 +- src/ov_SC04_003/ov_SC04_003.c | 47 +- src/ov_SC04_003/ov_SC04_003_after.c | 98 +- src/ov_SC04_003/ov_SC04_003_jr_8015C32C.c | 47 +- src/ov_SC04_004/ov_SC04_004.c | 47 +- src/ov_SC04_004/ov_SC04_004_after.c | 98 +- src/ov_SC04_004/ov_SC04_004_jr_8015C32C.c | 47 +- src/ov_SC04_005/ov_SC04_005.c | 47 +- src/ov_SC04_005/ov_SC04_005_after.c | 98 +- src/ov_SC04_005/ov_SC04_005_jr_8015C32C.c | 47 +- src/ov_SC04_006/ov_SC04_006.c | 47 +- src/ov_SC04_006/ov_SC04_006_after.c | 98 +- src/ov_SC04_006/ov_SC04_006_jr_8015C32C.c | 47 +- src/ov_SC04_007/ov_SC04_007.c | 47 +- src/ov_SC04_007/ov_SC04_007_after.c | 98 +- src/ov_SC04_007/ov_SC04_007_jr_8015C32C.c | 47 +- src/ov_SC04_008/ov_SC04_008.c | 47 +- src/ov_SC04_008/ov_SC04_008_after.c | 98 +- src/ov_SC04_008/ov_SC04_008_jr_8015C32C.c | 47 +- src/ov_SC04_009/ov_SC04_009.c | 47 +- src/ov_SC04_009/ov_SC04_009_after.c | 98 +- src/ov_SC04_009/ov_SC04_009_jr_8015C32C.c | 47 +- src/ov_SC04_010/ov_SC04_010.c | 47 +- src/ov_SC04_010/ov_SC04_010_after.c | 98 +- src/ov_SC04_010/ov_SC04_010_jr_8015C32C.c | 47 +- src/ov_SC04_011/ov_SC04_011.c | 47 +- src/ov_SC04_011/ov_SC04_011_after.c | 98 +- src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c | 47 +- src/ov_SC04_012/ov_SC04_012.c | 47 +- src/ov_SC04_012/ov_SC04_012_after.c | 98 +- src/ov_SC04_012/ov_SC04_012_jr_8015C32C.c | 47 +- src/ov_SC04_015/ov_SC04_015.c | 47 +- src/ov_SC04_015/ov_SC04_015_after.c | 98 +- src/ov_SC04_015/ov_SC04_015_jr_8015C32C.c | 47 +- src/ov_SC04_016/ov_SC04_016.c | 47 +- src/ov_SC04_016/ov_SC04_016_after.c | 98 +- src/ov_SC04_016/ov_SC04_016_jr_8015C32C.c | 47 +- src/ov_SC04_018/ov_SC04_018.c | 47 +- src/ov_SC04_018/ov_SC04_018_after.c | 98 +- src/ov_SC04_018/ov_SC04_018_jr_8015C32C.c | 47 +- src/ov_SC04_019/ov_SC04_019.c | 47 +- src/ov_SC04_019/ov_SC04_019_after.c | 98 +- src/ov_SC04_019/ov_SC04_019_jr_8015C32C.c | 47 +- src/ov_SC04_020/ov_SC04_020.c | 47 +- src/ov_SC04_020/ov_SC04_020_after.c | 98 +- src/ov_SC04_020/ov_SC04_020_jr_8015C32C.c | 47 +- src/ov_SC04_021/ov_SC04_021.c | 47 +- src/ov_SC04_021/ov_SC04_021_after.c | 98 +- src/ov_SC04_021/ov_SC04_021_jr_8015C32C.c | 47 +- src/ov_SC05_000/ov_SC05_000.c | 47 +- src/ov_SC05_000/ov_SC05_000_after.c | 98 +- src/ov_SC05_000/ov_SC05_000_jr_8015C32C.c | 47 +- src/ov_SC05_001/ov_SC05_001.c | 47 +- src/ov_SC05_001/ov_SC05_001_after.c | 98 +- src/ov_SC05_001/ov_SC05_001_jr_8015C32C.c | 47 +- src/ov_SC05_002/ov_SC05_002.c | 47 +- src/ov_SC05_002/ov_SC05_002_after.c | 98 +- src/ov_SC05_002/ov_SC05_002_jr_8015C32C.c | 47 +- src/ov_SC05_003/ov_SC05_003.c | 47 +- src/ov_SC05_003/ov_SC05_003_after.c | 98 +- src/ov_SC05_003/ov_SC05_003_jr_8015C32C.c | 47 +- src/ov_SC05_004/ov_SC05_004.c | 47 +- src/ov_SC05_004/ov_SC05_004_after.c | 98 +- src/ov_SC05_004/ov_SC05_004_jr_8015C32C.c | 47 +- src/ov_SC05_005/ov_SC05_005.c | 47 +- src/ov_SC05_005/ov_SC05_005_after.c | 98 +- src/ov_SC05_005/ov_SC05_005_jr_8015C32C.c | 47 +- src/ov_SC05_006/ov_SC05_006.c | 47 +- src/ov_SC05_006/ov_SC05_006_after.c | 98 +- src/ov_SC05_006/ov_SC05_006_jr_8015C32C.c | 47 +- src/ov_SC05_007/ov_SC05_007.c | 47 +- src/ov_SC05_007/ov_SC05_007_after.c | 98 +- src/ov_SC05_007/ov_SC05_007_jr_8015C32C.c | 47 +- src/ov_SC05_008/ov_SC05_008.c | 47 +- src/ov_SC05_008/ov_SC05_008_after.c | 98 +- src/ov_SC05_008/ov_SC05_008_jr_8015C32C.c | 47 +- src/ov_SC05_009/ov_SC05_009.c | 47 +- src/ov_SC05_009/ov_SC05_009_after.c | 98 +- src/ov_SC05_009/ov_SC05_009_jr_8015C32C.c | 47 +- src/ov_SC05_010/ov_SC05_010.c | 47 +- src/ov_SC05_010/ov_SC05_010_after.c | 98 +- src/ov_SC05_010/ov_SC05_010_jr_8015C32C.c | 47 +- src/ov_SC05_011/ov_SC05_011.c | 47 +- src/ov_SC05_011/ov_SC05_011_after.c | 98 +- src/ov_SC05_011/ov_SC05_011_jr_8015C32C.c | 47 +- src/ov_SC05_017/ov_SC05_017.c | 47 +- src/ov_SC05_017/ov_SC05_017_after.c | 98 +- src/ov_SC05_017/ov_SC05_017_jr_8015C32C.c | 47 +- src/ov_SC05_018/ov_SC05_018.c | 47 +- src/ov_SC05_018/ov_SC05_018_after.c | 98 +- src/ov_SC05_018/ov_SC05_018_jr_8015C32C.c | 47 +- src/ov_SC05_019/ov_SC05_019.c | 47 +- src/ov_SC05_019/ov_SC05_019_after.c | 98 +- src/ov_SC05_019/ov_SC05_019_jr_8015C32C.c | 47 +- src/ov_SC06_000/ov_SC06_000.c | 47 +- src/ov_SC06_000/ov_SC06_000_after.c | 98 +- src/ov_SC06_000/ov_SC06_000_jr_8015C32C.c | 47 +- src/ov_SC06_006/ov_SC06_006.c | 47 +- src/ov_SC06_006/ov_SC06_006_after.c | 98 +- src/ov_SC06_006/ov_SC06_006_jr_8015C32C.c | 47 +- src/ov_SC06_008/ov_SC06_008.c | 47 +- src/ov_SC06_008/ov_SC06_008_after.c | 98 +- src/ov_SC06_008/ov_SC06_008_jr_8015C32C.c | 47 +- src/ov_SC06_010/ov_SC06_010.c | 47 +- src/ov_SC06_010/ov_SC06_010_after.c | 98 +- src/ov_SC06_010/ov_SC06_010_jr_8015C32C.c | 47 +- src/ov_SC06_011/ov_SC06_011.c | 47 +- src/ov_SC06_011/ov_SC06_011_after.c | 98 +- src/ov_SC06_011/ov_SC06_011_jr_8015C32C.c | 47 +- src/ov_SC06_013/ov_SC06_013.c | 47 +- src/ov_SC06_013/ov_SC06_013_after.c | 98 +- src/ov_SC06_013/ov_SC06_013_jr_8015C32C.c | 47 +- src/ov_SC06_014/ov_SC06_014.c | 47 +- src/ov_SC06_014/ov_SC06_014_after.c | 98 +- src/ov_SC06_014/ov_SC06_014_jr_8015C32C.c | 47 +- src/ov_SC06_015/ov_SC06_015.c | 47 +- src/ov_SC06_015/ov_SC06_015_after.c | 98 +- src/ov_SC06_015/ov_SC06_015_jr_8015C32C.c | 47 +- src/ov_SC06_016/ov_SC06_016.c | 47 +- src/ov_SC06_016/ov_SC06_016_after.c | 98 +- src/ov_SC06_016/ov_SC06_016_jr_8015C32C.c | 47 +- src/ov_SC06_018/ov_SC06_018.c | 47 +- src/ov_SC06_018/ov_SC06_018_after.c | 98 +- src/ov_SC06_018/ov_SC06_018_jr_8015C32C.c | 47 +- src/ov_SC06_020/ov_SC06_020.c | 47 +- src/ov_SC06_020/ov_SC06_020_after.c | 98 +- src/ov_SC06_020/ov_SC06_020_jr_8015C32C.c | 47 +- src/ov_SC06_022/ov_SC06_022.c | 47 +- src/ov_SC06_022/ov_SC06_022_after.c | 98 +- src/ov_SC06_022/ov_SC06_022_jr_8015C32C.c | 47 +- src/ov_SC06_024/ov_SC06_024.c | 47 +- src/ov_SC06_024/ov_SC06_024_after.c | 98 +- src/ov_SC06_024/ov_SC06_024_jr_8015C32C.c | 47 +- src/ov_SC06_025/ov_SC06_025.c | 47 +- src/ov_SC06_025/ov_SC06_025_after.c | 98 +- src/ov_SC06_025/ov_SC06_025_jr_8015C32C.c | 47 +- src/ov_SC06_027/ov_SC06_027.c | 47 +- src/ov_SC06_027/ov_SC06_027_after.c | 98 +- src/ov_SC06_027/ov_SC06_027_jr_8015C32C.c | 47 +- src/ov_SC06_029/ov_SC06_029.c | 47 +- src/ov_SC06_029/ov_SC06_029_after.c | 98 +- src/ov_SC06_029/ov_SC06_029_jr_8015C32C.c | 47 +- src/ov_SC06_030/ov_SC06_030.c | 47 +- src/ov_SC06_030/ov_SC06_030_after.c | 98 +- src/ov_SC06_030/ov_SC06_030_jr_8015C32C.c | 47 +- src/ov_SC06_032/ov_SC06_032.c | 47 +- src/ov_SC06_032/ov_SC06_032_after.c | 98 +- src/ov_SC06_032/ov_SC06_032_jr_8015C32C.c | 47 +- src/ov_SC06_033/ov_SC06_033.c | 47 +- src/ov_SC06_033/ov_SC06_033_after.c | 98 +- src/ov_SC06_033/ov_SC06_033_jr_8015C32C.c | 47 +- src/ov_SC07_000/ov_SC07_000.c | 47 +- src/ov_SC07_000/ov_SC07_000_after.c | 98 +- src/ov_SC07_000/ov_SC07_000_jr_8015C32C.c | 47 +- src/ov_SC07_001/ov_SC07_001.c | 47 +- src/ov_SC07_001/ov_SC07_001_after.c | 98 +- src/ov_SC07_001/ov_SC07_001_jr_8015C32C.c | 47 +- src/ov_SC07_002/ov_SC07_002.c | 47 +- src/ov_SC07_002/ov_SC07_002_after.c | 98 +- src/ov_SC07_002/ov_SC07_002_jr_8015C32C.c | 47 +- src/ov_SC07_006/ov_SC07_006.c | 48 +- src/ov_SC07_006/ov_SC07_006_jr_80140608.c | 95 +- src/ov_SC07_006/ov_SC07_006_jr_8015C32C.c | 47 +- src/ov_SC07_007/ov_SC07_007.c | 48 +- src/ov_SC07_007/ov_SC07_007_jr_80140608.c | 95 +- src/ov_SC07_007/ov_SC07_007_jr_8015C32C.c | 47 +- src/ov_SC07_008/ov_SC07_008.c | 47 +- src/ov_SC07_008/ov_SC07_008_after.c | 98 +- src/ov_SC07_008/ov_SC07_008_jr_8015C32C.c | 47 +- src/ov_SC07_009/ov_SC07_009.c | 47 +- src/ov_SC07_009/ov_SC07_009_after.c | 98 +- src/ov_SC07_009/ov_SC07_009_jr_8015C32C.c | 47 +- src/ov_SC07_010/ov_SC07_010.c | 48 +- src/ov_SC07_010/ov_SC07_010_jr_80140608.c | 96 +- src/ov_SC07_010/ov_SC07_010_jr_8015C32C.c | 47 +- src/ov_SC07_011/ov_SC07_011.c | 48 +- src/ov_SC07_011/ov_SC07_011_jr_80140608.c | 95 +- src/ov_SC07_011/ov_SC07_011_jr_8015C32C.c | 47 +- 414 files changed, 27564 insertions(+), 2373 deletions(-) diff --git a/.run/backlog.jsonl b/.run/backlog.jsonl index 51afcbcfaa..7d4037ee69 100644 --- a/.run/backlog.jsonl +++ b/.run/backlog.jsonl @@ -13,9 +13,7 @@ {"ts": "2026-06-21 22:01:56", "addr": "0x80174cb0", "name": "func_80174CB0", "reach": 134, "klass": "regalloc-order", "nins": 123, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (match_one 123/123). Levers: (1) \u00a721 one combined stack struct {s32 a[5]; ...}", "best_draft": ".run/backlog_drafts/func_80174CB0.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-07-14 12:56:18", "addr": "0x8014d610", "name": "func_8014D610", "reach": 134, "klass": "WAVE", "nins": 74, "status": "near", "closeness": 60, "where_stuck": "WAVE: 60 mismatch", "best_draft": ".run/backlog_drafts/func_8014D610.c", "binary": "ov_SC01_077", "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-06-22 00:05:13", "addr": "0x8016163c", "name": "func_8016163C", "reach": 134, "klass": "plumbing", "nins": 78, "status": "near", "closeness": 50, "where_stuck": "none \u2014 MATCH (78 ins). First arm calls func_801599A4 with NO arg (asm nop delay slot) via fn-ptr cast ((void(*)(void))func_801599A4)().", "best_draft": ".run/backlog_drafts/func_8016163C.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} -{"ts": "2026-07-24 14:33:44", "addr": "0x80163534", "name": "func_80163534", "reach": 138, "klass": "schedule", "nins": 76, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (76 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_80163534.c", "binary": "ov_SC07_006", "source": "t6-recover", "residual": null, "passes_tried": null} {"ts": "2026-06-22 03:29:52", "addr": "0x80140d68", "name": "func_80140D68", "reach": 134, "klass": "schedule", "nins": 65, "status": "near", "closeness": 5, "where_stuck": "5-ins near-miss \u2014 gcc hoists `lui 0xff00` (the 0xFF000000 mask) one slot too early in the first AddPrim block, so the D_800B9A02 index value lands in $v1 instead of $a1 and *param_1 is read late (idx 35-43). Structure + regs otherwise byte-exact (frame eliminated via struct-array D_800AE7BC, &D_800B9A02 held in $a2 via the pB $6 pin, param_1+8 grouping fixes the rest). Pure sched1 list-order residual -> permuter candidate (try reg-hint + reorder around the lui 0xff00 / lw 0($a0) pair).", "best_draft": ".run/backlog_drafts/func_80140D68.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} -{"ts": "2026-07-24 14:33:44", "addr": "0x8014a738", "name": "func_8014A738", "reach": 138, "klass": "struct", "nins": 62, "status": "near", "closeness": 11, "where_stuck": "wip", "best_draft": ".run/backlog_drafts/func_8014A738.c", "binary": "ov_SC07_006", "source": "t6-recover", "residual": [[9, "00002821 move\ta1,zero", "00003021 addu $a2, $zero, $zero"], [11, "3c060000 lui\ta2,0x0", "3c058012 lui $a1, %hi(D_801202A0)"], [12, "24c6000e addiu\ta2,a2,14", "24a502a0 addiu $a1, $a1, %lo(D_801202A0)"], [13, "90c200b3 lbu\tv0,179(a2)", "90a200c1 lbu $v0, 0xC1($a1)"], [18, "94c2fff8 lhu\tv0,-8(a2)", "94a20006 lhu $v0, 0x6($a1)"], [23, "94c30000 lhu\tv1,0(a2)", "94a3000e lhu $v1, 0xE($a1)"], [34, "24a50001 addiu\ta1,a1,1", "24c60001 addiu $a2, $a2, 0x1"], [47, "24a50001 addiu\ta1,a1,1", "24c60001 addiu $a2, $a2, 0x1"], [52, "24a50001 addiu\ta1,a1,1", "24c60001 addiu $a2, $a2, 0x1"], [53, "2ca20060 sltiu\tv0,a1,96", "2cc20060 sltiu $v0, $a2, 0x60"], [55, "24c6010c addiu\ta2,a2,268", "24a5010c addiu $a1, $a1, 0x10C"]], "passes_tried": null} {"ts": "2026-06-22 00:05:13", "addr": "0x80161774", "name": "func_80161774", "reach": 134, "klass": "plumbing", "nins": 69, "status": "near", "closeness": 53, "where_stuck": "none \u2014 MATCH (69 ins, match_one verified; clean nested-if; param_1 -> $s0 call-crossing)", "best_draft": ".run/backlog_drafts/func_80161774.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-06-22 00:53:10", "addr": "0x8014e5b4", "name": "func_8014E5B4", "reach": 134, "klass": "regalloc-order", "nins": 59, "status": "near", "closeness": 23, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_8014E5B4.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-06-22 00:53:11", "addr": "0x801759d8", "name": "func_801759D8", "reach": 134, "klass": "schedule", "nins": 56, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (56 ins)", "best_draft": ".run/backlog_drafts/func_801759D8.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} @@ -61,10 +59,8 @@ {"ts": "2026-06-23 10:33:31", "addr": "0x80159a20", "name": "func_80159A20", "reach": 1, "klass": "struct", "nins": 58, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH. Key lever: block tail-MERGE (gcc shared `bne ...,$L1` cross-jump) by making the two return-tests STRUCTURALLY DIFFERENT \u2014 positive `if(==){goto mask;} return;` per branch (not `if(!=) return;`), so neither tail can merge. Then fix block ORDER by inverting the outer test (`if(d!=1)` makes the ==4/return path the inline fall-through, the d==1/p[2] path the forward `beq`-target block \u2014 matching the target layout).", "best_draft": ".run/backlog_drafts/func_80159A20.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-06-23 10:33:31", "addr": "0x8015fbe0", "name": "func_8015FBE0", "reach": 1, "klass": "schedule", "nins": 58, "status": "near", "closeness": 1, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_8015FBE0.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-06-23 10:33:31", "addr": "0x80183cf4", "name": "func_80183CF4", "reach": 1, "klass": "struct", "nins": 57, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (clean switch + jtbl; orchestrator owns jtbl/rodata migration)", "best_draft": ".run/backlog_drafts/func_80183CF4.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} -{"ts": "2026-06-23 11:48:02", "addr": "0x80148e54", "name": "func_80148E54", "reach": 1, "klass": "regalloc-order", "nins": 67, "status": "near", "closeness": 40, "where_stuck": "67/67 ins, structure+branches+block-order+body-reload all match; residual is pure register-allocation order (permuter-eligible, no register-pins). (1) masked first-angle folds andi->$s1; target keeps it in $a0 then copies addu $s1,$a0 lazily into the beq delay-slot (the s1-copy schedules 1 slot later). (2) the 0x80 const is CSE-held in $a2 across both test+body; target re-materializes 0x80 in $v0 per block (it gets clobbered by `srl v0,v1,8`), which both renames the compare regs ($v0 not $a2) AND fills the body's reload load-delay slot (mine emits a nop there). (3) single-exit ret funnels $v1->$v0 (move v0,v1) where target writes $v0 directly. All three are gcc regalloc/value-prop tie-breaks no C reshape steered (tried: $v0 pin, temp-split, low-mask-reuse compare, memory-clobber-vs-volatile reload) \u2014 leave for the permuter.", "best_draft": ".run/backlog_drafts/func_80148E54.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-06-23 11:48:02", "addr": "0x80177da8", "name": "func_80177DA8", "reach": 1, "klass": "remat", "nins": 63, "status": "near", "closeness": 58, "where_stuck": "gcc narrows `&0xfffffeff` on a 16-bit (lhu) value to `andi 0xfeff` (inline), but target hoisted -0x101 into $t4 (and-reg) in the loop preheader \u2014 a gcc-2.7.2 LICM-before-combine pass-ordering quirk unsteerable from C; that 1-ins gap cascades the constant-reg numbering + tail reassoc. Secondary: single-IV loop ptr anchors at +0xA (short, 2 accesses) not +0xC (byte) like target.", "best_draft": ".run/backlog_drafts/func_80177DA8.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-06-23 11:09:10", "addr": "0x801842c8", "name": "func_801842C8", "reach": 1, "klass": "plumbing", "nins": 62, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_801842C8.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} -{"ts": "2026-06-23 11:48:02", "addr": "0x80171b4c", "name": "func_80171B4C", "reach": 1, "klass": "schedule", "nins": 70, "status": "near", "closeness": 3, "where_stuck": "3-off in the tail only (body+prologue MATCH via $s1 pin on arg1). gcc fills the", "best_draft": ".run/backlog_drafts/func_80171B4C.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-06-25 20:30:02", "addr": "0x8017f114", "name": "func_8017F114", "reach": 1, "klass": "regalloc-order", "nins": 75, "status": "near", "closeness": 1, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_8017F114.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-07-14 12:56:21", "addr": "0x80161a90", "name": "func_80161A90", "reach": 134, "klass": "O1", "nins": 34, "status": "near", "closeness": 26, "where_stuck": "WAVE: 26 mismatch", "best_draft": ".run/backlog_drafts/func_80161A90.c", "binary": "ov_SC01_077", "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-06-23 12:17:56", "addr": "0x80162ccc", "name": "func_80162CCC", "reach": 134, "klass": "plumbing", "nins": 23, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH expected; direct translation, psVar1 as u16* gives lhu, $s0=param_1 survives both calls", "best_draft": ".run/backlog_drafts/func_80162CCC.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} @@ -73,7 +69,6 @@ {"ts": "2026-06-24 20:13:27", "addr": "0x8012e014", "name": "func_8012E014", "reach": 134, "klass": "other", "nins": 73, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (expected; straightforward struct-field + global-copy body)", "best_draft": ".run/backlog_drafts/func_8012E014.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-07-14 12:56:15", "addr": "0x80132f40", "name": "func_80132F40", "reach": 134, "klass": "STRUCT", "nins": 72, "status": "near", "closeness": 59, "where_stuck": "STRUCT: 59 mismatch", "best_draft": ".run/backlog_drafts/func_80132F40.c", "binary": "ov_SC01_077", "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-06-24 20:13:28", "addr": "0x80133298", "name": "func_80133298", "reach": 134, "klass": "struct", "nins": 65, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (65 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_80133298.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} -{"ts": "2026-06-24 21:52:35", "addr": "0x8012a328", "name": "func_8012A328", "reach": 134, "klass": "schedule", "nins": 60, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (60 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_8012A328.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-06-24 22:47:48", "addr": "0x8012b77c", "name": "func_8012B77C", "reach": 134, "klass": "schedule", "nins": 58, "status": "near", "closeness": 33, "where_stuck": "gcc instruction-scheduler load-ordering + 1st-ratan2 delay-slot fill differ (s2 subtraction lands early instead of in the delay slot; `lh s1,2(a2)` hoisted ahead of the iVar8 loads). All regs/ops correct (result pinned $s4 reads uninit then RMW-builds the u32; iVar8 unpinned so both halves load to temps -> `subu s5,v1,v0`). Residual is the \u00a720 store-vs-load/delay-slot scheduler tie-break (source reorder/barrier/precompute all tried, do not move it); ~3-4 real slots, count inflated by offset cascade. move==addu rd,rs,zero byte-identical.", "best_draft": ".run/backlog_drafts/func_8012B77C.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} {"ts": "2026-07-24 14:33:43", "addr": "0x8012f49c", "name": "func_8012F49C", "reach": 138, "klass": "regalloc-order", "nins": 51, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (51 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_8012F49C.c", "binary": "ov_SC07_006", "source": "t6-recover", "residual": null, "passes_tried": null} {"ts": "2026-06-24 21:52:36", "addr": "0x801376e8", "name": "func_801376E8", "reach": 134, "klass": "schedule", "nins": 51, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (51 ins). 3 levers: (1) adjacent-field array u16 D_80126A14[] for A14/A16", "best_draft": ".run/backlog_drafts/func_801376E8.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null} diff --git a/docs/backlog.md b/docs/backlog.md index 95f4bb830c..68ced22dda 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -2,7 +2,7 @@ > Generated by `tools/backlog.py render` from `.run/backlog.jsonl`. These are functions the Phase-21 automation got **close** on but did NOT byte-match. The whole-binary byte-gate is the sole arbiter (G3/P9): **byte-matches bank and are NOT listed here** — only genuine near-misses/blockers are. Ranked by hand-session priority: **reach** (×N propagation leverage) → **closeness** (match_one mismatch count, lower = closer) → **size**. Each row's `best_draft` is the closest C the machine reached — resume from there. -**Open near-misses:** 1679 · by status {'near': 1597, 'failed': 82} · by class {'struct': 24, 'schedule': 26, 'regalloc-order': 31, 'plumbing': 15, 'other': 7, 'WAVE': 13, 'PINS': 4, 'remat': 3, 'STUB': 1, 'O0': 2, 'O1': 1, 'STRUCT': 3, 'iv-combine': 1, None: 1546, 'loose-typing': 2} +**Open near-misses:** 1674 · by status {'near': 1592, 'failed': 82} · by class {'struct': 23, 'schedule': 23, 'regalloc-order': 30, 'plumbing': 15, 'other': 7, 'WAVE': 13, 'PINS': 4, 'remat': 3, 'STUB': 1, 'O0': 2, 'O1': 1, 'STRUCT': 3, 'iv-combine': 1, None: 1546, 'loose-typing': 2} | # | addr | reach | class | nins | status | closeness | where it stuck | best draft | |--:|------|------:|-------|-----:|--------|----------:|----------------|------------| @@ -10,1678 +10,1673 @@ | 2 | func_8014C4AC | 138 | schedule | 47 | near | 0 | none — MATCH | `.run/backlog_drafts/func_8014C4AC.c` | | 3 | func_8012F49C | 138 | regalloc-order | 51 | near | 0 | none — MATCH (51 ins, relocation-masked) | `.run/backlog_drafts/func_8012F49C.c` | | 4 | func_80176144 | 138 | schedule | 53 | near | 0 | none — MATCH | `.run/backlog_drafts/func_80176144.c` | -| 5 | func_80163534 | 138 | schedule | 76 | near | 0 | none — MATCH (76 ins, relocation-masked) | `.run/backlog_drafts/func_80163534.c` | -| 6 | func_80175820 | 138 | schedule | 55 | near | 4 | body BYTE-EXACT (52 ins match); only residual is target's phantom 0x10 stack frame (args_size=16 from an eliminated call) which mine lacks — 4 mismatches, all frame/tail. Barrier blocks the frame from filling block-2's delay slot where the target schedules it. | `.run/backlog_drafts/func_80175820.c` | -| 7 | func_8014A738 | 138 | struct | 62 | near | 11 | wip | `.run/backlog_drafts/func_8014A738.c` | -| 8 | func_8014F4C0 | 138 | struct | 141 | near | 130 | none — MATCH (expansion of proven DEFINE_func_8014F4C0 macro, matched in 137 sibling overlays) | `.run/backlog_drafts/func_8014F4C0.c` | -| 9 | func_80167714 | 138 | schedule | 104 | failed | | reload (move vs lw) + iVar2 a0-vs-v0 register cascade at the +0x1c merge | `.run/backlog_drafts/func_80167714.c` | -| 10 | func_80161208 | 134 | plumbing | 14 | near | 0 | none — MATCH expected (param saved across call → natural $s0, no pin needed) | `.run/backlog_drafts/func_80161208.c` | -| 11 | func_80131CA8 | 134 | other | 19 | near | 0 | none — MATCH (call-through-fnptr dispatcher: explicit return 1/return 0) | `.run/backlog_drafts/func_80131CA8.c` | -| 12 | func_80172C50 | 134 | WAVE | 20 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80172C50.c` | -| 13 | func_8016BF50 | 134 | schedule | 22 | near | 0 | none — MATCH; short buf[3] keeps all 3 stores live + hoisting *(int*)(p+0x34) into a local | `.run/backlog_drafts/func_8016BF50.c` | -| 14 | func_80162CCC | 134 | plumbing | 23 | near | 0 | none — MATCH expected; direct translation, psVar1 as u16* gives lhu, $s0=param_1 survives both calls | `.run/backlog_drafts/func_80162CCC.c` | -| 15 | func_8012A598 | 134 | struct | 24 | near | 0 | none — MATCH (24 ins, relocation-masked) | `.run/backlog_drafts/func_8012A598.c` | -| 16 | func_801733FC | 134 | struct | 25 | near | 0 | none — modeled on sibling func_80173460 (packed 8-byte struct copy + two s16=1 stores) | `.run/backlog_drafts/func_801733FC.c` | -| 17 | func_8016F0E4 | 134 | PINS | 26 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8016F0E4.c` | -| 18 | func_80137614 | 134 | regalloc-order | 26 | near | 0 | none — MATCH (sibling func_8013767C pattern; all 3 params live across the call) | `.run/backlog_drafts/func_80137614.c` | -| 19 | func_80168B70 | 134 | WAVE | 27 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80168B70.c` | -| 20 | func_8012F274 | 134 | remat | 29 | near | 0 | none — MATCH (29 ins, match_one byte-clean via relocation-masked pipeline) | `.run/backlog_drafts/func_8012F274.c` | -| 21 | func_801708B0 | 134 | WAVE | 30 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801708B0.c` | -| 22 | func_80151664 | 134 | plumbing | 35 | near | 0 | none — MATCH (35 ins, relocation-masked); canonical externs kept, call-site casts only | `.run/backlog_drafts/func_80151664.c` | -| 23 | func_8012F40C | 134 | regalloc-order | 36 | near | 0 | none — MATCH (address rematerialized per call via caller-saved $a0 pin) | `.run/backlog_drafts/func_8012F40C.c` | -| 24 | func_801376E8 | 134 | schedule | 51 | near | 0 | none — MATCH (51 ins). 3 levers: (1) adjacent-field array u16 D_80126A14[] for A14/A16 | `.run/backlog_drafts/func_801376E8.c` | -| 25 | func_80151C54 | 134 | PINS | 52 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80151C54.c` | -| 26 | func_801758FC | 134 | schedule | 55 | near | 0 | none — MATCH (55 ins) | `.run/backlog_drafts/func_801758FC.c` | -| 27 | func_801759D8 | 134 | schedule | 56 | near | 0 | none — MATCH (56 ins) | `.run/backlog_drafts/func_801759D8.c` | -| 28 | func_80173A60 | 134 | WAVE | 59 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80173A60.c` | -| 29 | func_8012A328 | 134 | schedule | 60 | near | 0 | none — MATCH (60 ins, relocation-masked) | `.run/backlog_drafts/func_8012A328.c` | -| 30 | func_80138DE0 | 134 | other | 60 | near | 0 | none — MATCH (60 ins) | `.run/backlog_drafts/func_80138DE0.c` | -| 31 | func_80133298 | 134 | struct | 65 | near | 0 | none — MATCH (65 ins, relocation-masked) | `.run/backlog_drafts/func_80133298.c` | -| 32 | func_8012E014 | 134 | other | 73 | near | 0 | none — MATCH (expected; straightforward struct-field + global-copy body) | `.run/backlog_drafts/func_8012E014.c` | -| 33 | func_80174CB0 | 134 | regalloc-order | 123 | near | 0 | none — MATCH (match_one 123/123). Levers: (1) §21 one combined stack struct {s32 a[5]; ...} | `.run/backlog_drafts/func_80174CB0.c` | -| 34 | func_8016BA68 | 134 | STUB | 29 | near | 1 | STUB: 1 mismatch | `.run/backlog_drafts/func_8016BA68.c` | -| 35 | func_80131A34 | 134 | regalloc-order | 37 | near | 3 | 3-off — (a) prologue saves $ra before $s0 (target: $s0 then $ra) and (b) return-0 path reuses $a1's proven-zero (move $v0,$a1) instead of $zero; both are gcc prologue/return scheduling tie-breaks. Body matches incl. the $v0->$a1 result copy (forced via the $a1-pinned asm anchor), the $v1=-5 mask hoist into the bne delay slot, and the shared-store merge. | `.run/backlog_drafts/func_80131A34.c` | -| 36 | func_801466F0 | 134 | plumbing | 24 | near | 4 | none — MATCH (struct param-spill + branch-polarity) | `.run/backlog_drafts/func_801466F0.c` | -| 37 | func_80147364 | 134 | remat | 30 | near | 4 | none — MATCH (30 ins). Lever: hoist &D_80126B58 into a local ptr `u8 *p=&D_80126B58;` so gcc | `.run/backlog_drafts/func_80147364.c` | -| 38 | func_80146A6C | 134 | struct | 18 | near | 5 | none — MATCH | `.run/backlog_drafts/func_80146A6C.c` | -| 39 | func_80140D68 | 134 | schedule | 65 | near | 5 | 5-ins near-miss — gcc hoists `lui 0xff00` (the 0xFF000000 mask) one slot too early in the first AddPrim block, so the D_800B9A02 index value lands in $v1 instead of $a1 and *param_1 is read late (idx 35-43). Structure + regs otherwise byte-exact (frame eliminated via struct-array D_800AE7BC, &D_800B9A02 held in $a2 via the pB $6 pin, param_1+8 grouping fixes the rest). Pure sched1 list-order residual -> permuter candidate (try reg-hint + reorder around the lui 0xff00 / lw 0($a0) pair). | `.run/backlog_drafts/func_80140D68.c` | -| 40 | func_8016130C | 134 | WAVE | 26 | near | 9 | WAVE: 9 mismatch | `.run/backlog_drafts/func_8016130C.c` | -| 41 | func_80161374 | 134 | schedule | 41 | near | 10 | none — MATCH (41/41 relocation-masked) | `.run/backlog_drafts/func_80161374.c` | -| 42 | func_80163764 | 134 | regalloc-order | 42 | near | 10 | none — MATCH (42 ins). pins $s2/$s1/$s0/$s3 + u32 counter (sltiu) + init order s2,s3,i,p | `.run/backlog_drafts/func_80163764.c` | -| 43 | func_8012EFB8 | 134 | other | 32 | near | 11 | none — MATCH (32 ins, byte-verified via objdump -dz; match_one's default objdump elides the 2 consecutive rtps-delay nops as "..." and miscounts 30, but raw bytes are identical) | `.run/backlog_drafts/func_8012EFB8.c` | -| 44 | func_80146AFC | 134 | schedule | 40 | near | 13 | none — MATCH | `.run/backlog_drafts/func_80146AFC.c` | -| 45 | func_80131CF4 | 134 | schedule | 29 | near | 15 | 15 mismatches cascade from a 2-instruction gap — target reloads *param_1 (lw v0,0(a0)) into v0 before the loop + a loop-label nop; gcc CSEs the guard-read with the loop-entry read so the pre-loop reload never emits. Top 9 instructions (bnez a0 + j epilogue + shared return-block-at-top) MATCH with this for-form. | `.run/backlog_drafts/func_80131CF4.c` | -| 46 | func_80151B98 | 134 | PINS | 47 | near | 15 | PINS: 15 mismatch | `.run/backlog_drafts/func_80151B98.c` | -| 47 | func_8015C030 | 134 | WAVE | 23 | near | 17 | WAVE: 17 mismatch | `.run/backlog_drafts/func_8015C030.c` | -| 48 | func_80170CF0 | 134 | PINS | 30 | near | 17 | PINS: 17 mismatch | `.run/backlog_drafts/func_80170CF0.c` | -| 49 | func_8016191C | 134 | plumbing | 24 | near | 20 | none — MATCH (24 ins). early-return-per-arm: each arm sets $v0 directly + j-tail merges | `.run/backlog_drafts/func_8016191C.c` | -| 50 | func_8014E5B4 | 134 | regalloc-order | 59 | near | 23 | none — MATCH | `.run/backlog_drafts/func_8014E5B4.c` | -| 51 | func_8013C08C | 134 | O0 | 27 | near | 26 | WAVE: 26 mismatch | `.run/backlog_drafts/func_8013C08C.c` | -| 52 | func_80161A90 | 134 | O1 | 34 | near | 26 | WAVE: 26 mismatch | `.run/backlog_drafts/func_80161A90.c` | -| 53 | func_80161888 | 134 | schedule | 37 | near | 30 | none — MATCH (proxy verified) | `.run/backlog_drafts/func_80161888.c` | -| 54 | func_80144B14 | 134 | schedule | 34 | near | 31 | none — MATCH (34 ins). Two stack structs (s16[3] each) passed by addr to | `.run/backlog_drafts/func_80144B14.c` | -| 55 | func_8012B77C | 134 | schedule | 58 | near | 33 | gcc instruction-scheduler load-ordering + 1st-ratan2 delay-slot fill differ (s2 subtraction lands early instead of in the delay slot; `lh s1,2(a2)` hoisted ahead of the iVar8 loads). All regs/ops correct (result pinned $s4 reads uninit then RMW-builds the u32; iVar8 unpinned so both halves load to temps -> `subu s5,v1,v0`). Residual is the §20 store-vs-load/delay-slot scheduler tie-break (source reorder/barrier/precompute all tried, do not move it); ~3-4 real slots, count inflated by offset cascade. move==addu rd,rs,zero byte-identical. | `.run/backlog_drafts/func_8012B77C.c` | -| 56 | func_801778A8 | 134 | WAVE | 38 | near | 36 | WAVE: 36 mismatch | `.run/backlog_drafts/func_801778A8.c` | -| 57 | func_8012A1BC | 134 | schedule | 78 | near | 42 | 42/78 — block-copy bytes correct (char[8] => lwl/lwr/swl/swr); residual is gcc's load-hoist split. Target hoists all 9 non-block scalar loads to the top then stores 4, blk, blk, then late-stores the rest; a "memory" barrier is needed to stop the block copy hoisting+spilling but it also pins the 5 late scalars' stores too early. No single source/barrier shape reproduces "loads cross the block copy but the copy itself does not" — permuter/schedule residual. | `.run/backlog_drafts/func_8012A1BC.c` | -| 58 | func_80146750 | 134 | WAVE | 47 | near | 45 | WAVE: 45 mismatch | `.run/backlog_drafts/func_80146750.c` | -| 59 | func_8016163C | 134 | plumbing | 78 | near | 50 | none — MATCH (78 ins). First arm calls func_801599A4 with NO arg (asm nop delay slot) via fn-ptr cast ((void(*)(void))func_801599A4)(). | `.run/backlog_drafts/func_8016163C.c` | -| 60 | func_80161774 | 134 | plumbing | 69 | near | 53 | none — MATCH (69 ins, match_one verified; clean nested-if; param_1 -> $s0 call-crossing) | `.run/backlog_drafts/func_80161774.c` | -| 61 | func_80132F40 | 134 | STRUCT | 72 | near | 59 | STRUCT: 59 mismatch | `.run/backlog_drafts/func_80132F40.c` | -| 62 | func_8014D610 | 134 | WAVE | 74 | near | 60 | WAVE: 60 mismatch | `.run/backlog_drafts/func_8014D610.c` | -| 63 | func_80178004 | 134 | regalloc-order | 165 | near | 91 | [Phase-27 T8 corrected] close=91 pure local-alloc regalloc wall (§52 flagship; the 'MATCH' claim was a retracted myth — never a real match) | `.run/backlog_drafts/func_80178004.c` | -| 64 | func_801412A8 | 134 | regalloc-order | 198 | near | 110 | 110 mismatch (count-exact 198/198). S11 LUID(x)alloc: register-assignment permutation + prim2 store-schedule. §31 permuter seed (was mis-logged 164). | `.run/backlog_drafts/func_801412A8.c` | -| 65 | func_80156600 | 134 | other | 18 | failed | | none — MATCH (simple counted scan, do-while form per Ghidra-C) | `.run/backlog_drafts/func_80156600.c` | -| 66 | func_801718AC | 134 | WAVE | 22 | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801718AC.c` | -| 67 | func_80151944 | 4 | struct | 15 | near | 0 | none — MATCH (fn-pointer table dispatch; array-of-ptr indexing folds %lo) | `.run/backlog_drafts/func_80151944.c` | -| 68 | func_8017C294 | 2 | regalloc-order | 246 | near | 230 | structurally matched (246 ins, param_3 in $fp, spurious psVar7[1] giv killed via | `.run/backlog_drafts/func_8017C294.c` | -| 69 | func_80157D20 | 1 | plumbing | 21 | near | 0 | none — MATCH expected (call, indexed u16-global load as 2nd arg, then call; param_1 saved across all three calls) | `.run/backlog_drafts/func_80157D20.c` | -| 70 | func_80182988 | 1 | plumbing | 22 | near | 0 | none — MATCH (u16 store of 0xAA10 forces ori, not sign-extended addiu) | `.run/backlog_drafts/func_80182988.c` | -| 71 | func_8017E224 | 1 | struct | 29 | near | 0 | none — MATCH (unaligned 8-byte memcpy of global onto stack + cond byte incr) | `.run/backlog_drafts/func_8017E224.c` | -| 72 | func_801549F8 | 1 | iv-combine | 31 | near | 0 | none — MATCH (31 ins). Re-tie barrier on the index defeats gcc's pointer-giv | `.run/backlog_drafts/func_801549F8.c` | -| 73 | func_801754A8 | 1 | regalloc-order | 37 | near | 0 | none — MATCH (37 ins, relocation-masked proxy) | `.run/backlog_drafts/func_801754A8.c` | -| 74 | func_80183BAC | 1 | struct | 41 | near | 0 | switch jump-table dispatch (jtbl_801D9420); verifying case grouping 0,1,2,5,6/3,7/4 emits the target table + tail | `.run/backlog_drafts/func_80183BAC.c` | -| 75 | func_80183C50 | 1 | struct | 41 | near | 0 | none — MATCH (cross-jump exploit §cookbook L1543: dup func_8012C218 into case3/7 + case4 → merged jal;nop) | `.run/backlog_drafts/func_80183C50.c` | -| 76 | func_8014358C | 1 | regalloc-order | 45 | near | 0 | none — MATCH (relocation-masked match_one) | `.run/backlog_drafts/func_8014358C.c` | -| 77 | func_80183AF0 | 1 | regalloc-order | 47 | near | 0 | none — MATCH (mask pinned $a1/$5 + p pinned $v0/$2; switch w/ distributed func_8012C218 tail via dup calls + cross-jump merge) | `.run/backlog_drafts/func_80183AF0.c` | -| 78 | func_8017EC7C | 1 | struct | 52 | near | 0 | none — MATCH (52 ins, relocation-masked) | `.run/backlog_drafts/func_8017EC7C.c` | -| 79 | func_80183CF4 | 1 | struct | 57 | near | 0 | none — MATCH (clean switch + jtbl; orchestrator owns jtbl/rodata migration) | `.run/backlog_drafts/func_80183CF4.c` | -| 80 | func_801842C8 | 1 | plumbing | 62 | near | 0 | none — MATCH | `.run/backlog_drafts/func_801842C8.c` | -| 81 | func_8018281C | 1 | struct | 76 | near | 0 | none — MATCH (76 ins). jtbl forced via explicit case 4/6 (count>=5 over MIPS tablejump threshold); case-5 block placed between if-block and default via goto so the if-block emits j default w/ e2=0 in the delay slot | `.run/backlog_drafts/func_8018281C.c` | -| 82 | func_80182E7C | 1 | struct | 85 | near | 0 | none — MATCH (85 ins, relocation-masked). Two switch-codegen levers: | `.run/backlog_drafts/func_80182E7C.c` | -| 83 | func_801820DC | 1 | struct | 94 | near | 0 | none — MATCH (switch on entity state at 0x34, inner jtbl on (s8)(u70>>8)) | `.run/backlog_drafts/func_801820DC.c` | -| 84 | func_80184D50 | 1 | schedule | 98 | near | 0 | none — MATCH (98 ins, relocation-masked) | `.run/backlog_drafts/func_80184D50.c` | -| 85 | func_8018103C | 1 | STRUCT | 579 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018103C.c` | -| 86 | func_8017CFD4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFD4.c` | -| 87 | func_8017CFFC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFFC.c` | -| 88 | func_8017CF78 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CF78.c` | -| 89 | func_8017CFA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFA0.c` | -| 90 | func_8017D13C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D13C.c` | -| 91 | func_8017D164 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D164.c` | -| 92 | func_8017D18C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D18C.c` | -| 93 | func_8017D5D4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D5D4.c` | -| 94 | func_8017D5FC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D5FC.c` | -| 95 | func_8017D02C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D02C.c` | -| 96 | func_8017D054 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D054.c` | -| 97 | func_8017D07C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D07C.c` | -| 98 | func_8017D134 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D134.c` | -| 99 | func_8017D15C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D15C.c` | -| 100 | func_8017D3FC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D3FC.c` | -| 101 | func_8017D6D4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D6D4.c` | -| 102 | func_8017D964 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D964.c` | -| 103 | func_8017F458 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F458.c` | -| 104 | func_8017D418 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D418.c` | -| 105 | func_8017D440 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D440.c` | -| 106 | func_8017E034 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E034.c` | -| 107 | func_8017ED30 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ED30.c` | -| 108 | func_8017ED58 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ED58.c` | -| 109 | func_8017D34C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D34C.c` | -| 110 | func_8017D374 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D374.c` | -| 111 | func_8017D00C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D00C.c` | -| 112 | func_8017D034 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D034.c` | -| 113 | func_8017F1C8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F1C8.c` | -| 114 | func_80182B9C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182B9C.c` | -| 115 | func_801599A4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801599A4.c` | -| 116 | func_8017BEC4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017BEC4.c` | -| 117 | func_8017C150 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017C150.c` | -| 118 | func_8017E734 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E734.c` | -| 119 | func_8017C078 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017C078.c` | -| 120 | func_8017C268 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017C268.c` | -| 121 | func_801803A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801803A0.c` | -| 122 | func_80185D6C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80185D6C.c` | -| 123 | func_8017ED90 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ED90.c` | -| 124 | func_8017ED68 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ED68.c` | -| 125 | func_8017EDB4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDB4.c` | -| 126 | func_8017EDD8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDD8.c` | -| 127 | func_8017CFAC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFAC.c` | -| 128 | func_8017CF70 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CF70.c` | -| 129 | func_801832D0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801832D0.c` | -| 130 | func_8017D008 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D008.c` | -| 131 | func_8017EDDC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDDC.c` | -| 132 | func_8017EFB8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EFB8.c` | -| 133 | func_80183E04 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183E04.c` | -| 134 | func_8017CFCC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFCC.c` | -| 135 | func_8017CFF4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFF4.c` | -| 136 | func_8017CF58 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CF58.c` | -| 137 | func_8017CF98 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CF98.c` | -| 138 | func_80180EF4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180EF4.c` | -| 139 | func_8017D664 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D664.c` | -| 140 | func_8017F02C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F02C.c` | -| 141 | func_8017D698 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D698.c` | -| 142 | func_8017D880 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D880.c` | -| 143 | func_8017CF80 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CF80.c` | -| 144 | func_8017F054 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F054.c` | -| 145 | func_8017DCBC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DCBC.c` | -| 146 | func_80181274 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80181274.c` | -| 147 | func_80180F3C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180F3C.c` | -| 148 | func_80180EE0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180EE0.c` | -| 149 | func_8017EA0C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA0C.c` | -| 150 | func_8017D68C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D68C.c` | -| 151 | func_8017D9FC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D9FC.c` | -| 152 | func_8017E2A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E2A0.c` | -| 153 | func_8017D798 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D798.c` | -| 154 | func_8017D46C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D46C.c` | -| 155 | func_8017D370 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D370.c` | -| 156 | func_8017D0A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D0A0.c` | -| 157 | func_8017D6C0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D6C0.c` | -| 158 | func_8017D884 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D884.c` | -| 159 | func_8017EA24 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA24.c` | -| 160 | func_8017EE00 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EE00.c` | -| 161 | func_80182288 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182288.c` | -| 162 | func_801838F0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801838F0.c` | -| 163 | func_8017D03C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D03C.c` | -| 164 | func_8017E008 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E008.c` | -| 165 | func_8017DA24 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DA24.c` | -| 166 | func_8017D770 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D770.c` | -| 167 | func_8017EA64 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA64.c` | -| 168 | func_8017D0C8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D0C8.c` | -| 169 | func_8017D24C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D24C.c` | -| 170 | func_8017ECC8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ECC8.c` | -| 171 | func_8017EA4C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA4C.c` | -| 172 | func_8017D478 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D478.c` | -| 173 | func_8017D074 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D074.c` | -| 174 | func_8018096C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018096C.c` | -| 175 | func_8017D0CC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D0CC.c` | -| 176 | func_8017D064 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D064.c` | -| 177 | func_8017E278 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E278.c` | -| 178 | func_8017DF8C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DF8C.c` | -| 179 | func_8017EAB0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EAB0.c` | -| 180 | func_8017E030 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E030.c` | -| 181 | func_8017D094 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D094.c` | -| 182 | func_8017F0F0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F0F0.c` | -| 183 | func_8017E640 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E640.c` | -| 184 | func_8017D290 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D290.c` | -| 185 | func_8017E01C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E01C.c` | -| 186 | func_8017D04C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D04C.c` | -| 187 | func_80182258 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182258.c` | -| 188 | func_8017DBB0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DBB0.c` | -| 189 | func_8017DCA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DCA0.c` | -| 190 | func_8017F2CC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F2CC.c` | -| 191 | func_8017F644 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F644.c` | -| 192 | func_8017DE84 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DE84.c` | -| 193 | func_8017DEB0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DEB0.c` | -| 194 | func_8017EF2C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EF2C.c` | -| 195 | func_8017EA88 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA88.c` | -| 196 | func_8017D0AC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D0AC.c` | -| 197 | func_8017D7C0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D7C0.c` | -| 198 | func_8017F0C8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F0C8.c` | -| 199 | func_8017F118 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F118.c` | -| 200 | func_8017EAA4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EAA4.c` | -| 201 | func_8017D494 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D494.c` | -| 202 | func_8017DAAC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DAAC.c` | -| 203 | func_8017E1EC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E1EC.c` | -| 204 | func_8017E0B0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E0B0.c` | -| 205 | func_8017E044 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E044.c` | -| 206 | func_8017E124 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E124.c` | -| 207 | func_80182758 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182758.c` | -| 208 | func_8017DC74 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DC74.c` | -| 209 | func_8017DE6C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DE6C.c` | -| 210 | func_8017F2A4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F2A4.c` | -| 211 | func_8017DF1C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DF1C.c` | -| 212 | func_8017D06C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D06C.c` | -| 213 | func_8017F49C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F49C.c` | -| 214 | func_8017E110 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E110.c` | -| 215 | func_8017E138 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E138.c` | -| 216 | func_8017EACC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EACC.c` | -| 217 | func_8017E1C0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E1C0.c` | -| 218 | func_8017E2C8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E2C8.c` | -| 219 | func_8017E0D8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E0D8.c` | -| 220 | func_8017D030 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D030.c` | -| 221 | func_8018019C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018019C.c` | -| 222 | func_8017D274 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D274.c` | -| 223 | func_8017D4A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D4A0.c` | -| 224 | func_8017DD88 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DD88.c` | -| 225 | func_8017D150 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D150.c` | -| 226 | func_8017EA28 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA28.c` | -| 227 | func_80180C1C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180C1C.c` | -| 228 | func_8017F254 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F254.c` | -| 229 | func_8017DF54 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DF54.c` | -| 230 | func_8017FAD8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017FAD8.c` | -| 231 | func_80180C7C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180C7C.c` | -| 232 | func_80182860 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182860.c` | -| 233 | func_801844D4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801844D4.c` | -| 234 | func_8017DD60 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DD60.c` | -| 235 | func_8017DE88 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DE88.c` | -| 236 | func_8017D1A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D1A0.c` | -| 237 | func_8017F060 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F060.c` | -| 238 | func_8018234C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018234C.c` | -| 239 | func_8017FB00 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017FB00.c` | -| 240 | func_8017E088 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E088.c` | -| 241 | func_8017DBB4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DBB4.c` | -| 242 | func_8017D078 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D078.c` | -| 243 | func_8017DAA4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DAA4.c` | -| 244 | func_801835C0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801835C0.c` | -| 245 | func_80180FF8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180FF8.c` | -| 246 | func_8017D3A4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D3A4.c` | -| 247 | func_80186BC4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80186BC4.c` | -| 248 | func_80187794 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80187794.c` | -| 249 | func_80180AEC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180AEC.c` | -| 250 | func_80182E04 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182E04.c` | -| 251 | func_8017DA94 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DA94.c` | -| 252 | func_80180EAC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180EAC.c` | -| 253 | func_8017E0A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E0A0.c` | -| 254 | func_8017DA7C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DA7C.c` | -| 255 | func_8017DB78 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DB78.c` | -| 256 | func_8017DD30 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DD30.c` | -| 257 | func_80184674 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80184674.c` | -| 258 | func_80184C90 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80184C90.c` | -| 259 | func_80184884 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80184884.c` | -| 260 | func_8017CFC8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFC8.c` | -| 261 | func_80185D7C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80185D7C.c` | -| 262 | func_8017F06C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F06C.c` | -| 263 | func_8018F6DC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018F6DC.c` | -| 264 | func_80185D00 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80185D00.c` | -| 265 | func_801801A8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801801A8.c` | -| 266 | func_8017DFC0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DFC0.c` | -| 267 | func_8017EFD4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EFD4.c` | -| 268 | func_8018266C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018266C.c` | -| 269 | func_80182C88 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182C88.c` | -| 270 | func_8017EB0C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EB0C.c` | -| 271 | func_8017EB34 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EB34.c` | -| 272 | func_8017EDCC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDCC.c` | -| 273 | func_80187814 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80187814.c` | -| 274 | func_8017FBF8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017FBF8.c` | -| 275 | func_80188080 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80188080.c` | -| 276 | func_8017F0D4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F0D4.c` | -| 277 | func_8017ECA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ECA0.c` | -| 278 | func_8017F54C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F54C.c` | -| 279 | func_80187CD8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80187CD8.c` | -| 280 | func_8017EDA4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDA4.c` | -| 281 | func_8017E58C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E58C.c` | -| 282 | func_8017DDE0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DDE0.c` | -| 283 | func_8017E294 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E294.c` | -| 284 | func_8018355C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018355C.c` | -| 285 | func_8018BE0C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018BE0C.c` | -| 286 | func_8017EDA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDA0.c` | -| 287 | func_8017EEA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EEA0.c` | -| 288 | func_8017FD88 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017FD88.c` | -| 289 | func_8017D350 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D350.c` | -| 290 | func_8017F630 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F630.c` | -| 291 | func_80186500 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80186500.c` | -| 292 | func_8017DA78 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DA78.c` | -| 293 | func_8017DB34 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DB34.c` | -| 294 | func_80183284 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183284.c` | -| 295 | func_8017DCF0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DCF0.c` | -| 296 | func_8018189C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018189C.c` | -| 297 | func_8017D2C8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D2C8.c` | -| 298 | func_80184C28 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80184C28.c` | -| 299 | func_8017DAA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DAA0.c` | -| 300 | func_8018F63C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018F63C.c` | -| 301 | func_8017DCC8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DCC8.c` | -| 302 | func_8017DE4C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DE4C.c` | -| 303 | func_801803B8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801803B8.c` | -| 304 | func_8017D2A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D2A0.c` | -| 305 | func_80182148 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182148.c` | -| 306 | func_80186BD8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80186BD8.c` | -| 307 | func_80187CA8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80187CA8.c` | -| 308 | func_80185BA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80185BA0.c` | -| 309 | func_80183B9C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183B9C.c` | -| 310 | func_8018C24C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018C24C.c` | -| 311 | func_80182A18 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182A18.c` | -| 312 | func_8018BDE0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018BDE0.c` | -| 313 | func_8018C3A4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018C3A4.c` | -| 314 | func_80186C1C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80186C1C.c` | -| 315 | func_80180264 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180264.c` | -| 316 | func_8017D700 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D700.c` | -| 317 | func_80186BF8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80186BF8.c` | -| 318 | func_8017D4C0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D4C0.c` | -| 319 | func_8017D5A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D5A0.c` | -| 320 | func_80183554 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183554.c` | -| 321 | func_80180A58 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180A58.c` | -| 322 | func_80188DA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80188DA0.c` | -| 323 | func_8018A484 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018A484.c` | -| 324 | func_8017D014 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D014.c` | -| 325 | func_8017D5D0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D5D0.c` | -| 326 | func_8017D944 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D944.c` | -| 327 | func_8018540C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018540C.c` | -| 328 | func_8018F704 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018F704.c` | -| 329 | func_80183054 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183054.c` | -| 330 | func_801895A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801895A0.c` | -| 331 | func_80183DF8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183DF8.c` | -| 332 | func_80180534 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180534.c` | -| 333 | func_8017F214 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F214.c` | -| 334 | func_80188DC8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80188DC8.c` | -| 335 | func_80189620 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80189620.c` | -| 336 | func_80185A2C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80185A2C.c` | -| 337 | func_80183100 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183100.c` | -| 338 | func_8018166C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018166C.c` | -| 339 | func_8017D9AC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D9AC.c` | -| 340 | func_8018BAE0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018BAE0.c` | -| 341 | func_8018C118 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018C118.c` | -| 342 | func_8018C4BC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018C4BC.c` | -| 343 | func_80188720 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80188720.c` | -| 344 | func_80180860 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180860.c` | -| 345 | func_80180944 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180944.c` | -| 346 | func_8018603C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018603C.c` | -| 347 | func_80181D30 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80181D30.c` | -| 348 | func_801819E0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801819E0.c` | -| 349 | func_8018C2CC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018C2CC.c` | -| 350 | func_8018BC34 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018BC34.c` | -| 351 | func_8017E464 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E464.c` | -| 352 | func_800CFE60 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_800CFE60.c` | -| 353 | func_800D0214 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_800D0214.c` | -| 354 | func_8018598C | None | regalloc-order | None | near | 0 | none — MATCH (168/168). $s4/$s5 pins for base+&local28; s32 sVar1 for single lh; | `.run/backlog_drafts/func_8018598C.c` | -| 355 | func_80187DD0 | None | regalloc-order | None | near | 0 | none — MATCH (174 ins). Levers: obj = *(*(b+0x20)+0x20) reads via b not a (store side uses a); | `.run/backlog_drafts/func_80187DD0.c` | -| 356 | func_801886B0 | None | struct | None | near | 0 | none — MATCH (276 ins, relocation-masked) | `.run/backlog_drafts/func_801886B0.c` | -| 357 | func_80168070 | None | regalloc-order | None | near | 0 | none — MATCH (adapted from proven sibling func_8016A290; matrix is param_4 not a local) | `.run/backlog_drafts/func_80168070.c` | -| 358 | func_80169058 | None | plumbing | None | near | 0 | none — MATCH (verbatim from matched sibling ov_SC07_010 func_80169058) | `.run/backlog_drafts/func_80169058.c` | -| 359 | func_80161D20 | 1 | struct | 14 | near | 1 | none — MATCH (array-of-u16 %lo-fold, §18) | `.run/backlog_drafts/func_80161D20.c` | -| 360 | func_8017F714 | 1 | plumbing | 27 | near | 1 | none — MATCH (27/27 ins, match_one verified) | `.run/backlog_drafts/func_8017F714.c` | -| 361 | func_80142A10 | 1 | struct | 28 | near | 1 | none — MATCH (pending byte-gate) | `.run/backlog_drafts/func_80142A10.c` | -| 362 | func_80161C24 | 1 | struct | 29 | near | 1 | none — MATCH (array-of-struct %lo-fold; even/odd u16 fields at off 0/2, stride 4) | `.run/backlog_drafts/func_80161C24.c` | -| 363 | func_80184C0C | 1 | struct | 48 | near | 1 | none — MATCH (array-of-struct %lo-fold for &D_8018AEB8[idx], stride 0x34) | `.run/backlog_drafts/func_80184C0C.c` | -| 364 | func_801803B0 | 1 | other | 51 | near | 1 | none — MATCH expected; simple if/else, no call-crossing locals beyond param in $s0 | `.run/backlog_drafts/func_801803B0.c` | -| 365 | func_8015FBE0 | 1 | schedule | 58 | near | 1 | none — MATCH | `.run/backlog_drafts/func_8015FBE0.c` | -| 366 | func_8017F114 | 1 | regalloc-order | 75 | near | 1 | none — MATCH | `.run/backlog_drafts/func_8017F114.c` | -| 367 | func_801807D8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801807D8.c` | -| 368 | func_80180AD0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180AD0.c` | -| 369 | func_8017FDB0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017FDB0.c` | -| 370 | func_80180720 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180720.c` | -| 371 | func_80184A28 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184A28.c` | -| 372 | func_80183AFC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80183AFC.c` | -| 373 | func_8017EE50 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017EE50.c` | -| 374 | func_80181FF8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80181FF8.c` | -| 375 | func_801832F4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801832F4.c` | -| 376 | func_8017FE4C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017FE4C.c` | -| 377 | func_801827C4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801827C4.c` | -| 378 | func_80182B68 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182B68.c` | -| 379 | func_80185E38 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80185E38.c` | -| 380 | func_8017FD70 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017FD70.c` | -| 381 | func_801811D4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801811D4.c` | -| 382 | func_801819DC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801819DC.c` | -| 383 | func_8018ADF8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018ADF8.c` | -| 384 | func_80186554 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80186554.c` | -| 385 | func_80180C44 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180C44.c` | -| 386 | func_801873FC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801873FC.c` | -| 387 | func_80183FB4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80183FB4.c` | -| 388 | func_80180E7C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180E7C.c` | -| 389 | func_801835FC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801835FC.c` | -| 390 | func_801892B4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801892B4.c` | -| 391 | func_80184970 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184970.c` | -| 392 | func_801863D4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801863D4.c` | -| 393 | func_80181540 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80181540.c` | -| 394 | func_801809D4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801809D4.c` | -| 395 | func_801802A4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801802A4.c` | -| 396 | func_801830A8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801830A8.c` | -| 397 | func_8017E858 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017E858.c` | -| 398 | func_80186BD4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80186BD4.c` | -| 399 | func_8017FB98 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017FB98.c` | -| 400 | func_8017EE14 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017EE14.c` | -| 401 | func_80181DA0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80181DA0.c` | -| 402 | func_80187840 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80187840.c` | -| 403 | func_80184E58 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184E58.c` | -| 404 | func_80184354 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184354.c` | -| 405 | func_8018011C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018011C.c` | -| 406 | func_8017E29C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017E29C.c` | -| 407 | func_8017D930 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017D930.c` | -| 408 | func_80182A8C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182A8C.c` | -| 409 | func_80181FCC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80181FCC.c` | -| 410 | func_801893E0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801893E0.c` | -| 411 | func_80186908 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80186908.c` | -| 412 | func_80189DC4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80189DC4.c` | -| 413 | func_80182AB0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182AB0.c` | -| 414 | func_80183EA4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80183EA4.c` | -| 415 | func_8018B344 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018B344.c` | -| 416 | func_80188858 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80188858.c` | -| 417 | func_8018773C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018773C.c` | -| 418 | func_80182E9C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182E9C.c` | -| 419 | func_8017F378 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017F378.c` | -| 420 | func_80184BAC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184BAC.c` | -| 421 | func_801852D4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801852D4.c` | -| 422 | func_80189B60 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80189B60.c` | -| 423 | func_8018445C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018445C.c` | -| 424 | func_8018AA08 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018AA08.c` | -| 425 | func_80182CEC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182CEC.c` | -| 426 | func_8017FBB4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017FBB4.c` | -| 427 | func_8018C8A0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018C8A0.c` | -| 428 | func_8018944C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018944C.c` | -| 429 | func_8018A598 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018A598.c` | -| 430 | func_8017EA40 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017EA40.c` | -| 431 | func_801826C8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801826C8.c` | -| 432 | func_801854C0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801854C0.c` | -| 433 | func_8017EC64 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017EC64.c` | -| 434 | func_80184C94 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184C94.c` | -| 435 | func_80185CE4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80185CE4.c` | -| 436 | func_8017EA68 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017EA68.c` | -| 437 | func_80180074 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180074.c` | -| 438 | func_801847E4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801847E4.c` | -| 439 | func_80182470 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182470.c` | -| 440 | func_8017E3D8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017E3D8.c` | -| 441 | func_8018386C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018386C.c` | -| 442 | func_80187A0C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80187A0C.c` | -| 443 | func_8018893C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018893C.c` | -| 444 | func_80186AE8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80186AE8.c` | -| 445 | func_80185BEC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80185BEC.c` | -| 446 | func_801900B0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801900B0.c` | -| 447 | func_80180AA4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180AA4.c` | -| 448 | func_8017BFC8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017BFC8.c` | -| 449 | func_8016EC0C | 1 | schedule | 88 | near | 2 | none — MATCH (88 ins). Sparse switch(uVar2) = gcc's beq-pivot+slti comparison | `.run/backlog_drafts/func_8016EC0C.c` | -| 450 | func_8017F6B0 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017F6B0.c` | -| 451 | func_8017DDFC | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017DDFC.c` | -| 452 | func_801817DC | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_801817DC.c` | -| 453 | func_80182264 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80182264.c` | -| 454 | func_80181834 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80181834.c` | -| 455 | func_8018558C | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8018558C.c` | -| 456 | func_801843CC | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_801843CC.c` | -| 457 | func_8017FC8C | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017FC8C.c` | -| 458 | func_80183228 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80183228.c` | -| 459 | func_80183118 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80183118.c` | -| 460 | func_8017E404 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017E404.c` | -| 461 | func_80183B4C | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80183B4C.c` | -| 462 | func_801879B0 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_801879B0.c` | -| 463 | func_801828C8 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_801828C8.c` | -| 464 | func_8017FA80 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017FA80.c` | -| 465 | func_8017E874 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017E874.c` | -| 466 | func_80185000 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80185000.c` | -| 467 | func_80180F18 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80180F18.c` | -| 468 | func_8018C658 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8018C658.c` | -| 469 | func_80184294 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80184294.c` | -| 470 | func_80183F48 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80183F48.c` | -| 471 | func_80180834 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80180834.c` | -| 472 | func_8018BA9C | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8018BA9C.c` | -| 473 | func_80186DAC | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80186DAC.c` | -| 474 | func_8017EE78 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017EE78.c` | -| 475 | func_801804C8 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_801804C8.c` | -| 476 | func_80171B4C | 1 | schedule | 70 | near | 3 | 3-off in the tail only (body+prologue MATCH via $s1 pin on arg1). gcc fills the | `.run/backlog_drafts/func_80171B4C.c` | -| 477 | func_8017D468 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017D468.c` | -| 478 | func_8017DCE4 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017DCE4.c` | -| 479 | func_801816FC | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801816FC.c` | -| 480 | func_8017DE90 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017DE90.c` | -| 481 | func_80190480 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80190480.c` | -| 482 | func_8018AFDC | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018AFDC.c` | -| 483 | func_80180D34 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80180D34.c` | -| 484 | func_8017F38C | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017F38C.c` | -| 485 | func_8018AE6C | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018AE6C.c` | -| 486 | func_80181720 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80181720.c` | -| 487 | func_80183BC8 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80183BC8.c` | -| 488 | func_8017F0C0 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017F0C0.c` | -| 489 | func_8018D4B4 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018D4B4.c` | -| 490 | func_801874E8 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801874E8.c` | -| 491 | func_80183320 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80183320.c` | -| 492 | func_801857D4 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801857D4.c` | -| 493 | func_8018A184 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018A184.c` | -| 494 | func_8018B234 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018B234.c` | -| 495 | func_8017F534 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017F534.c` | -| 496 | func_801861DC | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801861DC.c` | -| 497 | func_801896EC | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801896EC.c` | -| 498 | func_8018C7C8 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018C7C8.c` | -| 499 | func_80187B80 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80187B80.c` | -| 500 | func_80181060 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80181060.c` | -| 501 | func_801806C8 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801806C8.c` | -| 502 | func_8018CA10 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018CA10.c` | -| 503 | func_8018672C | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018672C.c` | -| 504 | func_801894B0 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801894B0.c` | -| 505 | func_80184D98 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80184D98.c` | -| 506 | func_8018B1E0 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018B1E0.c` | -| 507 | func_80184870 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80184870.c` | -| 508 | func_8017E6B0 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017E6B0.c` | -| 509 | func_80188484 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80188484.c` | -| 510 | func_8017F8E4 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8017F8E4.c` | -| 511 | func_80187074 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80187074.c` | -| 512 | func_8017FF90 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8017FF90.c` | -| 513 | func_8017FAE0 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8017FAE0.c` | -| 514 | func_8017E918 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8017E918.c` | -| 515 | func_80180ED4 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80180ED4.c` | -| 516 | func_80183444 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80183444.c` | -| 517 | func_80186700 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80186700.c` | -| 518 | func_80183710 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80183710.c` | -| 519 | func_80181CD8 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80181CD8.c` | -| 520 | func_80184880 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80184880.c` | -| 521 | func_8018CC04 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8018CC04.c` | -| 522 | func_8017DED8 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8017DED8.c` | -| 523 | func_80181ECC | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80181ECC.c` | -| 524 | func_80182E5C | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80182E5C.c` | -| 525 | func_8018B2F4 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8018B2F4.c` | -| 526 | func_80183638 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80183638.c` | -| 527 | func_8018455C | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8018455C.c` | -| 528 | func_80181B08 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80181B08.c` | -| 529 | func_801823F0 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_801823F0.c` | -| 530 | func_80188510 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80188510.c` | -| 531 | func_80181A44 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80181A44.c` | -| 532 | func_80182CD4 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80182CD4.c` | -| 533 | func_8018119C | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8018119C.c` | -| 534 | func_8018C394 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8018C394.c` | -| 535 | func_80135260 | 1 | other | 136 | near | 5 | none — MATCH | `.run/backlog_drafts/func_80135260.c` | -| 536 | func_801803F0 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_801803F0.c` | -| 537 | func_8017F7D8 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017F7D8.c` | -| 538 | func_80181B8C | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80181B8C.c` | -| 539 | func_80180564 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80180564.c` | -| 540 | func_801809F4 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_801809F4.c` | -| 541 | func_8017F250 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017F250.c` | -| 542 | func_8017F66C | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017F66C.c` | -| 543 | func_80181E18 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80181E18.c` | -| 544 | func_801852C8 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_801852C8.c` | -| 545 | func_80180100 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80180100.c` | -| 546 | func_80181EF0 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80181EF0.c` | -| 547 | func_801821B8 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_801821B8.c` | -| 548 | func_8018312C | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8018312C.c` | -| 549 | func_8017F11C | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017F11C.c` | -| 550 | func_80182810 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80182810.c` | -| 551 | func_8017FDA8 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017FDA8.c` | -| 552 | func_80182938 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80182938.c` | -| 553 | func_8018517C | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8018517C.c` | -| 554 | func_80182B18 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80182B18.c` | -| 555 | func_8017DA90 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017DA90.c` | -| 556 | func_80181BB4 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80181BB4.c` | -| 557 | func_80185338 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80185338.c` | -| 558 | func_80185978 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80185978.c` | -| 559 | func_80185E54 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80185E54.c` | -| 560 | func_80187DAC | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80187DAC.c` | -| 561 | func_80183DB8 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80183DB8.c` | -| 562 | func_80180AE8 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80180AE8.c` | -| 563 | func_8017D398 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017D398.c` | -| 564 | func_80184A58 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80184A58.c` | -| 565 | func_80182280 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80182280.c` | -| 566 | func_80180744 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80180744.c` | -| 567 | func_8017F4CC | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017F4CC.c` | -| 568 | func_80181C78 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80181C78.c` | -| 569 | func_801855DC | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_801855DC.c` | -| 570 | func_8017FCD4 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017FCD4.c` | -| 571 | func_80183158 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80183158.c` | -| 572 | func_80182E2C | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80182E2C.c` | -| 573 | func_8017F704 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017F704.c` | -| 574 | func_8017E06C | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017E06C.c` | -| 575 | func_80187AD4 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80187AD4.c` | -| 576 | func_8018595C | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8018595C.c` | -| 577 | func_80185B20 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80185B20.c` | -| 578 | func_801802CC | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_801802CC.c` | -| 579 | func_8017E2C4 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017E2C4.c` | -| 580 | func_8017F0EC | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017F0EC.c` | -| 581 | func_80180FFC | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80180FFC.c` | -| 582 | func_80188F80 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80188F80.c` | -| 583 | func_80181FF4 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80181FF4.c` | -| 584 | func_80189240 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80189240.c` | -| 585 | func_80184618 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80184618.c` | -| 586 | func_8018413C | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8018413C.c` | -| 587 | func_801816E0 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_801816E0.c` | -| 588 | func_801819A0 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_801819A0.c` | -| 589 | func_801855F0 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_801855F0.c` | -| 590 | func_80182048 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80182048.c` | -| 591 | func_80181230 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80181230.c` | -| 592 | func_80186A28 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80186A28.c` | -| 593 | func_80186A88 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80186A88.c` | -| 594 | func_80180F4C | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80180F4C.c` | -| 595 | func_80186C88 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80186C88.c` | -| 596 | func_801815D8 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_801815D8.c` | -| 597 | func_80189898 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80189898.c` | -| 598 | func_8017CF40 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8017CF40.c` | -| 599 | func_8017FF6C | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8017FF6C.c` | -| 600 | func_8018B184 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8018B184.c` | -| 601 | func_80182198 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80182198.c` | -| 602 | func_8018B5C0 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8018B5C0.c` | -| 603 | func_80180458 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80180458.c` | -| 604 | func_8018D7CC | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8018D7CC.c` | -| 605 | func_80185C6C | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80185C6C.c` | -| 606 | func_8018B450 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8018B450.c` | -| 607 | func_8018146C | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8018146C.c` | -| 608 | func_8017C104 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8017C104.c` | -| 609 | func_80186D5C | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80186D5C.c` | -| 610 | func_80185AEC | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80185AEC.c` | -| 611 | func_80180410 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80180410.c` | -| 612 | func_80185DB8 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80185DB8.c` | -| 613 | func_80180754 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80180754.c` | -| 614 | func_80186720 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80186720.c` | -| 615 | func_8017EA60 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8017EA60.c` | -| 616 | func_8017F710 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8017F710.c` | -| 617 | func_80184990 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80184990.c` | -| 618 | func_80185344 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80185344.c` | -| 619 | func_80182230 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80182230.c` | -| 620 | func_80183184 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80183184.c` | -| 621 | func_80185F24 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80185F24.c` | -| 622 | func_80189858 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80189858.c` | -| 623 | func_8017FFF0 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017FFF0.c` | -| 624 | func_8017E908 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017E908.c` | -| 625 | func_8017CF9C | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017CF9C.c` | -| 626 | func_8017D8AC | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017D8AC.c` | -| 627 | func_801832B0 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801832B0.c` | -| 628 | func_801813B8 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801813B8.c` | -| 629 | func_80184734 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80184734.c` | -| 630 | func_801825C8 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801825C8.c` | -| 631 | func_80182A5C | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80182A5C.c` | -| 632 | func_80182E30 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80182E30.c` | -| 633 | func_80183430 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80183430.c` | -| 634 | func_80186120 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80186120.c` | -| 635 | func_8018108C | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8018108C.c` | -| 636 | func_801848B0 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801848B0.c` | -| 637 | func_80181688 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80181688.c` | -| 638 | func_80181034 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80181034.c` | -| 639 | func_80188508 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80188508.c` | -| 640 | func_80187370 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80187370.c` | -| 641 | func_8018D330 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8018D330.c` | -| 642 | func_80186A70 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80186A70.c` | -| 643 | func_8017DBE4 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017DBE4.c` | -| 644 | func_8017F474 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017F474.c` | -| 645 | func_8017E804 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017E804.c` | -| 646 | func_80182D50 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80182D50.c` | -| 647 | func_801843B8 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801843B8.c` | -| 648 | func_80183D60 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80183D60.c` | -| 649 | func_80181C84 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80181C84.c` | -| 650 | func_801842D4 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801842D4.c` | -| 651 | func_80185EB4 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80185EB4.c` | -| 652 | func_80188690 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80188690.c` | -| 653 | func_80185F20 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80185F20.c` | -| 654 | func_80183FD8 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80183FD8.c` | -| 655 | func_8018F658 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8018F658.c` | -| 656 | func_8017F228 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017F228.c` | -| 657 | func_801801F4 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801801F4.c` | -| 658 | func_8017F358 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017F358.c` | -| 659 | func_80180E9C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80180E9C.c` | -| 660 | func_8017BEBC | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017BEBC.c` | -| 661 | func_80180854 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80180854.c` | -| 662 | func_80180E54 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80180E54.c` | -| 663 | func_8017F7F4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017F7F4.c` | -| 664 | func_8017EF28 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017EF28.c` | -| 665 | func_801816E4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801816E4.c` | -| 666 | func_8017D400 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017D400.c` | -| 667 | func_8017D6E8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017D6E8.c` | -| 668 | func_8017E4F8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017E4F8.c` | -| 669 | func_801829F4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801829F4.c` | -| 670 | func_801822A8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801822A8.c` | -| 671 | func_8017E954 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017E954.c` | -| 672 | func_80181F84 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80181F84.c` | -| 673 | func_801827FC | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801827FC.c` | -| 674 | func_8017FE88 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017FE88.c` | -| 675 | func_801806B8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801806B8.c` | -| 676 | func_80180EC0 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80180EC0.c` | -| 677 | func_80181C4C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80181C4C.c` | -| 678 | func_801817A4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801817A4.c` | -| 679 | func_8017E52C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017E52C.c` | -| 680 | func_801805B0 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801805B0.c` | -| 681 | func_8018897C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018897C.c` | -| 682 | func_8018AA88 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018AA88.c` | -| 683 | func_8017FED4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017FED4.c` | -| 684 | func_801835F0 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801835F0.c` | -| 685 | func_8017CCD4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017CCD4.c` | -| 686 | func_801858C4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801858C4.c` | -| 687 | func_8018C310 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018C310.c` | -| 688 | func_80182AD4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80182AD4.c` | -| 689 | func_8018868C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018868C.c` | -| 690 | func_8017F624 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017F624.c` | -| 691 | func_8017FEB4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017FEB4.c` | -| 692 | func_80182298 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80182298.c` | -| 693 | func_80187114 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80187114.c` | -| 694 | func_80184590 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80184590.c` | -| 695 | func_80181B34 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80181B34.c` | -| 696 | func_801860F8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801860F8.c` | -| 697 | func_8017FFD8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017FFD8.c` | -| 698 | func_80188BF8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80188BF8.c` | -| 699 | func_80183BD0 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80183BD0.c` | -| 700 | func_801860F4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801860F4.c` | -| 701 | func_80183628 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80183628.c` | -| 702 | func_8018964C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018964C.c` | -| 703 | func_801854C8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801854C8.c` | -| 704 | func_80184664 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80184664.c` | -| 705 | func_80185528 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80185528.c` | -| 706 | func_80187454 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80187454.c` | -| 707 | func_8017F7BC | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017F7BC.c` | -| 708 | func_801830C8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801830C8.c` | -| 709 | func_8017D4F0 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017D4F0.c` | -| 710 | func_801825E8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801825E8.c` | -| 711 | func_8018C3EC | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018C3EC.c` | -| 712 | func_80183C1C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80183C1C.c` | -| 713 | func_80180C3C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80180C3C.c` | -| 714 | func_80191C50 | None | schedule | None | near | 9 | close=9 — only the case-7 sp20[] setup window (0x80192380..0x801923A4): gcc's list scheduler picks the D_80126B62 lui 2nd (its extra `addiu -0x38` gives that chain +1 priority) where the target picks D_80126B66 2nd (LUID/program order); everything else (710/710 ins, frame 0x40, $s0/$s1, jtbl, 3 entity loops, 8 sync blocks, cross-jumped L4AC tail) is byte-identical. | `.run/backlog_drafts/func_80191C50.c` | -| 715 | func_80185A00 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80185A00.c` | -| 716 | func_8017FCC0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017FCC0.c` | -| 717 | func_8017F2D0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017F2D0.c` | -| 718 | func_801833C8 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801833C8.c` | -| 719 | func_8017FFD0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017FFD0.c` | -| 720 | func_80180E34 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80180E34.c` | -| 721 | func_801844C4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801844C4.c` | -| 722 | func_8018AB24 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018AB24.c` | -| 723 | func_80188C84 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80188C84.c` | -| 724 | func_8017E184 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017E184.c` | -| 725 | func_80181434 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80181434.c` | -| 726 | func_80181A70 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80181A70.c` | -| 727 | func_8017DF88 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017DF88.c` | -| 728 | func_801841D0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801841D0.c` | -| 729 | func_80184204 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80184204.c` | -| 730 | func_8018534C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018534C.c` | -| 731 | func_80184940 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80184940.c` | -| 732 | func_80180B60 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80180B60.c` | -| 733 | func_8017FB0C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017FB0C.c` | -| 734 | func_8017E72C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017E72C.c` | -| 735 | func_80189C4C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80189C4C.c` | -| 736 | func_8017E670 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017E670.c` | -| 737 | func_80180014 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80180014.c` | -| 738 | func_80180B90 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80180B90.c` | -| 739 | func_801848E8 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801848E8.c` | -| 740 | func_8017E094 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017E094.c` | -| 741 | func_8018082C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018082C.c` | -| 742 | func_8018373C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018373C.c` | -| 743 | func_8017DF48 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017DF48.c` | -| 744 | func_80182724 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80182724.c` | -| 745 | func_8018257C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018257C.c` | -| 746 | func_80182EC0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80182EC0.c` | -| 747 | func_80188E8C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80188E8C.c` | -| 748 | func_801806E0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801806E0.c` | -| 749 | func_8018A5A4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018A5A4.c` | -| 750 | func_80181AC0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80181AC0.c` | -| 751 | func_801841A0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801841A0.c` | -| 752 | func_80183744 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80183744.c` | -| 753 | func_8018924C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018924C.c` | -| 754 | func_80185778 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80185778.c` | -| 755 | func_801870B4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801870B4.c` | -| 756 | func_80185E3C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80185E3C.c` | -| 757 | func_8017F5E8 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017F5E8.c` | -| 758 | func_801823D4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801823D4.c` | -| 759 | func_80186EE4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80186EE4.c` | -| 760 | func_80180AF4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80180AF4.c` | -| 761 | func_801831FC | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801831FC.c` | -| 762 | func_801862D4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801862D4.c` | -| 763 | func_80184578 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80184578.c` | -| 764 | func_8017F804 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017F804.c` | -| 765 | func_80183888 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80183888.c` | -| 766 | func_8017F2EC | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017F2EC.c` | -| 767 | func_80187224 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80187224.c` | -| 768 | func_801850F8 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801850F8.c` | -| 769 | func_80183F7C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80183F7C.c` | -| 770 | func_801800DC | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801800DC.c` | -| 771 | func_80182190 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80182190.c` | -| 772 | func_80185C90 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80185C90.c` | -| 773 | func_80182380 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80182380.c` | -| 774 | func_8018EDB8 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018EDB8.c` | -| 775 | func_80190298 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80190298.c` | -| 776 | func_8018311C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018311C.c` | -| 777 | func_8018A594 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018A594.c` | -| 778 | func_8017DED0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017DED0.c` | -| 779 | func_8018228C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018228C.c` | -| 780 | func_801889E0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801889E0.c` | -| 781 | func_8017DEEC | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017DEEC.c` | -| 782 | func_80183FAC | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80183FAC.c` | -| 783 | func_8017F300 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017F300.c` | -| 784 | func_80184794 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80184794.c` | -| 785 | func_80185648 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80185648.c` | -| 786 | func_80186D64 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80186D64.c` | -| 787 | func_8018151C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018151C.c` | -| 788 | func_8016E9EC | 1 | schedule | 53 | near | 11 | 11 left — all GNU scheduler/canon tie-breaks (regs all match via pins): (a) prologue hoists `addiu a1,0x1C` into the save block; (b) first lbu reads $a0 not $s1 (incoming-arg still live); (c) iCopy copy `addu s4,s0` lands early (scheduler) vs target's func_800D2CA8 delay-slot; (d) `addu a2,s2,s3` vs target `s3,s2` commutative-canon (unflippable w/o breaking load order). Permuter can't run (register __asm__ pins rejected, cookbook §5a). | `.run/backlog_drafts/func_8016E9EC.c` | -| 789 | func_8017F7E8 | 1 | WAVE | 177 | near | 11 | WAVE: 11 mismatch | `.run/backlog_drafts/func_8017F7E8.c` | -| 790 | func_801824D0 | 1 | WAVE | 181 | near | 11 | WAVE: 11 mismatch | `.run/backlog_drafts/func_801824D0.c` | -| 791 | func_80182F4C | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80182F4C.c` | -| 792 | func_801835C8 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_801835C8.c` | -| 793 | func_8017D6C4 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017D6C4.c` | -| 794 | func_80181960 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80181960.c` | -| 795 | func_8017D7C8 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017D7C8.c` | -| 796 | func_8017F67C | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017F67C.c` | -| 797 | func_80181724 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80181724.c` | -| 798 | func_8017F450 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017F450.c` | -| 799 | func_8017F128 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017F128.c` | -| 800 | func_80180154 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80180154.c` | -| 801 | func_80180240 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80180240.c` | -| 802 | func_80185274 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80185274.c` | -| 803 | func_801833D4 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_801833D4.c` | -| 804 | func_80184028 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80184028.c` | -| 805 | func_80180EA8 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80180EA8.c` | -| 806 | func_8018F91C | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8018F91C.c` | -| 807 | func_801835F4 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_801835F4.c` | -| 808 | func_80187404 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80187404.c` | -| 809 | func_801848B4 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_801848B4.c` | -| 810 | func_8017E5D4 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017E5D4.c` | -| 811 | func_80182118 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80182118.c` | -| 812 | func_8017E2C0 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017E2C0.c` | -| 813 | func_80181744 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80181744.c` | -| 814 | func_8017EECC | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017EECC.c` | -| 815 | func_80182F78 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80182F78.c` | -| 816 | func_8017F154 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017F154.c` | -| 817 | func_8017DC94 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017DC94.c` | -| 818 | func_80180CD0 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80180CD0.c` | -| 819 | func_8013C964 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8013C964.c` | -| 820 | func_8013B568 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8013B568.c` | -| 821 | func_8018150C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018150C.c` | -| 822 | func_801803A4 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801803A4.c` | -| 823 | func_8017D7F8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017D7F8.c` | -| 824 | func_8017FFFC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017FFFC.c` | -| 825 | func_8018766C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018766C.c` | -| 826 | func_8017DFF8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017DFF8.c` | -| 827 | func_8017D08C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017D08C.c` | -| 828 | func_8017DE40 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017DE40.c` | -| 829 | func_8017DBD8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017DBD8.c` | -| 830 | func_801833BC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801833BC.c` | -| 831 | func_8017F574 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017F574.c` | -| 832 | func_80187344 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80187344.c` | -| 833 | func_80183AC8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80183AC8.c` | -| 834 | func_80181C08 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80181C08.c` | -| 835 | func_801822C8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801822C8.c` | -| 836 | func_80181388 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80181388.c` | -| 837 | func_80185C2C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80185C2C.c` | -| 838 | func_80183BEC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80183BEC.c` | -| 839 | func_801846EC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801846EC.c` | -| 840 | func_80184DB4 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80184DB4.c` | -| 841 | func_8018AE08 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018AE08.c` | -| 842 | func_80184698 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80184698.c` | -| 843 | func_80184718 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80184718.c` | -| 844 | func_8018134C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018134C.c` | -| 845 | func_8017F4BC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017F4BC.c` | -| 846 | func_80181070 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80181070.c` | -| 847 | func_801810A4 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801810A4.c` | -| 848 | func_801810D8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801810D8.c` | -| 849 | func_801819CC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801819CC.c` | -| 850 | func_80180554 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80180554.c` | -| 851 | func_80181E5C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80181E5C.c` | -| 852 | func_80189DDC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80189DDC.c` | -| 853 | func_8018ABE0 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018ABE0.c` | -| 854 | func_80189A60 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80189A60.c` | -| 855 | func_8018278C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018278C.c` | -| 856 | func_801827C0 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801827C0.c` | -| 857 | func_80186A58 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80186A58.c` | -| 858 | func_8017F2BC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017F2BC.c` | -| 859 | func_8017DEA4 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017DEA4.c` | -| 860 | func_8017F184 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017F184.c` | -| 861 | func_80185F58 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80185F58.c` | -| 862 | func_8018A3C8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8018A3C8.c` | -| 863 | func_8017EA20 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017EA20.c` | -| 864 | func_80180528 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80180528.c` | -| 865 | func_80180BCC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80180BCC.c` | -| 866 | func_801818EC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801818EC.c` | -| 867 | func_8017DA3C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017DA3C.c` | -| 868 | func_8017EDA8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017EDA8.c` | -| 869 | func_801816CC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801816CC.c` | -| 870 | func_8017D914 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D914.c` | -| 871 | func_801828A8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801828A8.c` | -| 872 | func_8017FD58 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017FD58.c` | -| 873 | func_8017F830 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017F830.c` | -| 874 | func_801807B8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801807B8.c` | -| 875 | func_8018276C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8018276C.c` | -| 876 | func_80183AF8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80183AF8.c` | -| 877 | func_801858D0 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801858D0.c` | -| 878 | func_80180C34 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80180C34.c` | -| 879 | func_80182D3C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80182D3C.c` | -| 880 | func_8018BDA4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8018BDA4.c` | -| 881 | func_8017C8E4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017C8E4.c` | -| 882 | func_80186D30 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80186D30.c` | -| 883 | func_80182D6C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80182D6C.c` | -| 884 | func_8017E84C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017E84C.c` | -| 885 | func_8017F094 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017F094.c` | -| 886 | func_8017F0D8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017F0D8.c` | -| 887 | func_8017D670 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D670.c` | -| 888 | func_8017D3BC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D3BC.c` | -| 889 | func_8017E358 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017E358.c` | -| 890 | func_80180420 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80180420.c` | -| 891 | func_8017CFE4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017CFE4.c` | -| 892 | func_8017E35C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017E35C.c` | -| 893 | func_801834E4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801834E4.c` | -| 894 | func_801811B4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801811B4.c` | -| 895 | func_8017D0D4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D0D4.c` | -| 896 | func_8017E060 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017E060.c` | -| 897 | func_8017D0F4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D0F4.c` | -| 898 | func_8017DEC4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017DEC4.c` | -| 899 | func_801811DC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801811DC.c` | -| 900 | func_8017D6A4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D6A4.c` | -| 901 | func_8017D348 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D348.c` | -| 902 | func_8017CDBC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017CDBC.c` | -| 903 | func_80187BAC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80187BAC.c` | -| 904 | func_8017D224 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D224.c` | -| 905 | func_80161CD0 | 1 | regalloc-order | 20 | near | 14 | param_2 must survive the call in $s0; try plain C first then pin to $16 | `.run/backlog_drafts/func_80161CD0.c` | -| 906 | func_80180D10 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80180D10.c` | -| 907 | func_8018316C | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8018316C.c` | -| 908 | func_8017E808 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017E808.c` | -| 909 | func_8017EDC4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017EDC4.c` | -| 910 | func_80180654 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80180654.c` | -| 911 | func_8017C6F4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017C6F4.c` | -| 912 | func_8017E4F0 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017E4F0.c` | -| 913 | func_8018B2DC | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8018B2DC.c` | -| 914 | func_80183398 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80183398.c` | -| 915 | func_801812F0 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801812F0.c` | -| 916 | func_80181468 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80181468.c` | -| 917 | func_80184384 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80184384.c` | -| 918 | func_8018A934 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8018A934.c` | -| 919 | func_8018B50C | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8018B50C.c` | -| 920 | func_80182844 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80182844.c` | -| 921 | func_801884AC | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801884AC.c` | -| 922 | func_80181B90 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80181B90.c` | -| 923 | func_80185F98 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80185F98.c` | -| 924 | func_80185EEC | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80185EEC.c` | -| 925 | func_80186DE8 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80186DE8.c` | -| 926 | func_801838EC | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801838EC.c` | -| 927 | func_80182348 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80182348.c` | -| 928 | func_80185CD4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80185CD4.c` | -| 929 | func_801892C0 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801892C0.c` | -| 930 | func_801859E4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801859E4.c` | -| 931 | func_80184B70 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80184B70.c` | -| 932 | func_801871C4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801871C4.c` | -| 933 | func_80189504 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80189504.c` | -| 934 | func_8017C918 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017C918.c` | -| 935 | func_80181DC4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80181DC4.c` | -| 936 | func_8017D63C | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017D63C.c` | -| 937 | func_801813F0 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801813F0.c` | -| 938 | func_80181F6C | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80181F6C.c` | -| 939 | func_8017EA04 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017EA04.c` | -| 940 | func_8017EF68 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017EF68.c` | -| 941 | func_8017EBA8 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017EBA8.c` | -| 942 | func_80185404 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80185404.c` | -| 943 | func_8017D7C4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017D7C4.c` | -| 944 | func_80181CBC | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80181CBC.c` | -| 945 | func_8017D974 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017D974.c` | -| 946 | func_80180950 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80180950.c` | -| 947 | func_80181784 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181784.c` | -| 948 | func_8017FFE8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017FFE8.c` | -| 949 | func_80183DC4 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80183DC4.c` | -| 950 | func_801820F0 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_801820F0.c` | -| 951 | func_8018B0EC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8018B0EC.c` | -| 952 | func_801803F4 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_801803F4.c` | -| 953 | func_8017E818 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E818.c` | -| 954 | func_80181B0C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181B0C.c` | -| 955 | func_80184010 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80184010.c` | -| 956 | func_8018648C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8018648C.c` | -| 957 | func_8017F138 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F138.c` | -| 958 | func_8017D9B8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D9B8.c` | -| 959 | func_8017F3C0 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F3C0.c` | -| 960 | func_80180DB0 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80180DB0.c` | -| 961 | func_8017E290 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E290.c` | -| 962 | func_8017EDC8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017EDC8.c` | -| 963 | func_80181A94 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181A94.c` | -| 964 | func_8017E318 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E318.c` | -| 965 | func_80181B44 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181B44.c` | -| 966 | func_8017D1B4 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D1B4.c` | -| 967 | func_8017E778 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E778.c` | -| 968 | func_80180D5C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80180D5C.c` | -| 969 | func_8017CDB8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CDB8.c` | -| 970 | func_8017CE20 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CE20.c` | -| 971 | func_8017CE40 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CE40.c` | -| 972 | func_8017D220 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D220.c` | -| 973 | func_8017E89C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E89C.c` | -| 974 | func_8017E8DC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E8DC.c` | -| 975 | func_80183718 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80183718.c` | -| 976 | func_8017EB1C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017EB1C.c` | -| 977 | func_80181028 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181028.c` | -| 978 | func_8017DACC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017DACC.c` | -| 979 | func_8018533C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8018533C.c` | -| 980 | func_8017D104 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D104.c` | -| 981 | func_8017F268 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F268.c` | -| 982 | func_8017F120 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F120.c` | -| 983 | func_80185A68 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80185A68.c` | -| 984 | func_8017CE48 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CE48.c` | -| 985 | func_8017CEB0 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CEB0.c` | -| 986 | func_80180E88 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80180E88.c` | -| 987 | func_801801C4 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_801801C4.c` | -| 988 | func_8017CEEC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CEEC.c` | -| 989 | func_8017CDDC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CDDC.c` | -| 990 | func_8017DDD8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017DDD8.c` | -| 991 | func_8017DD9C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017DD9C.c` | -| 992 | func_8017DF80 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017DF80.c` | -| 993 | func_8017D49C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D49C.c` | -| 994 | func_8017F5E0 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F5E0.c` | -| 995 | func_8017DFCC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017DFCC.c` | -| 996 | func_80181C1C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181C1C.c` | -| 997 | func_8017D22C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D22C.c` | -| 998 | func_8018338C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8018338C.c` | -| 999 | func_8017EEB8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017EEB8.c` | -| 1000 | func_8017E9F4 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E9F4.c` | -| 1001 | func_8017E6CC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E6CC.c` | -| 1002 | func_8017F3A8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F3A8.c` | -| 1003 | func_8017D040 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D040.c` | -| 1004 | func_8017E7AC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E7AC.c` | -| 1005 | func_8017E304 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E304.c` | -| 1006 | func_8017D084 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D084.c` | -| 1007 | func_8017D19C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D19C.c` | -| 1008 | func_8017E700 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E700.c` | -| 1009 | func_8013C938 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8013C938.c` | -| 1010 | func_8017E0F0 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017E0F0.c` | -| 1011 | func_8017E7D8 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017E7D8.c` | -| 1012 | func_80183988 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80183988.c` | -| 1013 | func_80184154 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80184154.c` | -| 1014 | func_80182D78 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80182D78.c` | -| 1015 | func_80183074 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80183074.c` | -| 1016 | func_80184EA4 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80184EA4.c` | -| 1017 | func_8017F920 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017F920.c` | -| 1018 | func_80180EDC | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80180EDC.c` | -| 1019 | func_80187A8C | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80187A8C.c` | -| 1020 | func_8017F1F8 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017F1F8.c` | -| 1021 | func_8017EC84 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017EC84.c` | -| 1022 | func_8017E9CC | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017E9CC.c` | -| 1023 | func_8017EAE0 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017EAE0.c` | -| 1024 | func_80186984 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80186984.c` | -| 1025 | func_8017F414 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017F414.c` | -| 1026 | func_8017E090 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017E090.c` | -| 1027 | func_801853F8 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_801853F8.c` | -| 1028 | func_8017F20C | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017F20C.c` | -| 1029 | func_80182654 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80182654.c` | -| 1030 | func_8017CDE4 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017CDE4.c` | -| 1031 | func_8017DFAC | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017DFAC.c` | -| 1032 | func_8017EF1C | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017EF1C.c` | -| 1033 | func_8017EEF4 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017EEF4.c` | -| 1034 | func_8017E814 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017E814.c` | -| 1035 | func_80184EE0 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80184EE0.c` | -| 1036 | func_8017FA44 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017FA44.c` | -| 1037 | func_80182D1C | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80182D1C.c` | -| 1038 | func_8018384C | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8018384C.c` | -| 1039 | func_8017E950 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017E950.c` | -| 1040 | func_8017CDD8 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017CDD8.c` | -| 1041 | func_80180890 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80180890.c` | -| 1042 | func_8017D5F8 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017D5F8.c` | -| 1043 | func_80180D74 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80180D74.c` | -| 1044 | func_8017F568 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017F568.c` | -| 1045 | func_80180D14 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80180D14.c` | -| 1046 | func_80183C58 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80183C58.c` | -| 1047 | func_8018208C | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8018208C.c` | -| 1048 | func_8017FD6C | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017FD6C.c` | -| 1049 | func_801877DC | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_801877DC.c` | -| 1050 | func_8017D010 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017D010.c` | -| 1051 | func_8017D84C | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017D84C.c` | -| 1052 | func_8017BF34 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017BF34.c` | -| 1053 | func_8017DA10 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017DA10.c` | -| 1054 | func_80189630 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80189630.c` | -| 1055 | func_80184630 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80184630.c` | -| 1056 | func_80185334 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80185334.c` | -| 1057 | func_8017DDB0 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017DDB0.c` | -| 1058 | func_8017E850 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017E850.c` | -| 1059 | func_8017DCF4 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017DCF4.c` | -| 1060 | func_8017D988 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017D988.c` | -| 1061 | func_80182E38 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80182E38.c` | -| 1062 | func_80183138 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80183138.c` | -| 1063 | func_80180B54 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80180B54.c` | -| 1064 | func_8017DC2C | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017DC2C.c` | -| 1065 | func_8017D600 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017D600.c` | -| 1066 | func_8017F6C4 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017F6C4.c` | -| 1067 | func_8017E9E4 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017E9E4.c` | -| 1068 | func_801827D4 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_801827D4.c` | -| 1069 | func_80185888 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80185888.c` | -| 1070 | func_80180574 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80180574.c` | -| 1071 | func_80183F1C | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80183F1C.c` | -| 1072 | func_8017FFCC | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017FFCC.c` | -| 1073 | func_80182344 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80182344.c` | -| 1074 | func_801811F4 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_801811F4.c` | -| 1075 | func_80180DB8 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80180DB8.c` | -| 1076 | func_8017D184 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017D184.c` | -| 1077 | func_8017F160 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017F160.c` | -| 1078 | func_8017F4D0 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017F4D0.c` | -| 1079 | func_8018033C | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8018033C.c` | -| 1080 | func_80181138 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80181138.c` | -| 1081 | func_8017E048 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017E048.c` | -| 1082 | func_8017F3BC | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017F3BC.c` | -| 1083 | func_80180DEC | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80180DEC.c` | -| 1084 | func_801845B4 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_801845B4.c` | -| 1085 | func_80181C74 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80181C74.c` | -| 1086 | func_80182234 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80182234.c` | -| 1087 | func_8017FF30 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017FF30.c` | -| 1088 | func_80185288 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80185288.c` | -| 1089 | func_8017E890 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017E890.c` | -| 1090 | func_8017D174 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017D174.c` | -| 1091 | func_8017CD9C | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017CD9C.c` | -| 1092 | func_8018555C | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8018555C.c` | -| 1093 | func_801826EC | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_801826EC.c` | -| 1094 | func_8017DB00 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017DB00.c` | -| 1095 | func_80181054 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_80181054.c` | -| 1096 | func_8017F87C | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017F87C.c` | -| 1097 | func_8017D704 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017D704.c` | -| 1098 | func_80180AD8 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_80180AD8.c` | -| 1099 | func_8018774C | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8018774C.c` | -| 1100 | func_8017DE7C | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017DE7C.c` | -| 1101 | func_8017FA00 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017FA00.c` | -| 1102 | func_8018B6F4 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8018B6F4.c` | -| 1103 | func_8017EEC8 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017EEC8.c` | -| 1104 | func_8017E134 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017E134.c` | -| 1105 | func_8017C6B8 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017C6B8.c` | -| 1106 | func_801871E8 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_801871E8.c` | -| 1107 | func_80188668 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_80188668.c` | -| 1108 | func_8017DB44 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017DB44.c` | -| 1109 | func_80187050 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_80187050.c` | -| 1110 | func_8017DD18 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017DD18.c` | -| 1111 | func_8018288C | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8018288C.c` | -| 1112 | func_8017E1C8 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017E1C8.c` | -| 1113 | func_8017D308 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017D308.c` | -| 1114 | func_8017EAC8 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017EAC8.c` | -| 1115 | func_8017D8B0 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017D8B0.c` | -| 1116 | func_8017F080 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017F080.c` | -| 1117 | func_8017CD14 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017CD14.c` | -| 1118 | func_80180548 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_80180548.c` | -| 1119 | func_8017DE78 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017DE78.c` | -| 1120 | func_80185A18 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_80185A18.c` | -| 1121 | func_8017D990 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017D990.c` | -| 1122 | func_8017FF2C | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017FF2C.c` | -| 1123 | func_801803E0 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_801803E0.c` | -| 1124 | func_8017D828 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017D828.c` | -| 1125 | func_80180E18 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_80180E18.c` | -| 1126 | func_8017DC08 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017DC08.c` | -| 1127 | func_80184388 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_80184388.c` | -| 1128 | func_80187C64 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_80187C64.c` | -| 1129 | func_8018A030 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8018A030.c` | -| 1130 | func_8017D688 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017D688.c` | -| 1131 | func_8017FA90 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017FA90.c` | -| 1132 | func_8017F320 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017F320.c` | -| 1133 | func_801813AC | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_801813AC.c` | -| 1134 | func_80181478 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_80181478.c` | -| 1135 | func_801868E0 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_801868E0.c` | -| 1136 | func_8018AB74 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8018AB74.c` | -| 1137 | func_8017DE70 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017DE70.c` | -| 1138 | func_8013BC7C | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8013BC7C.c` | -| 1139 | func_8018A640 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8018A640.c` | -| 1140 | func_8012E364 | 1 | regalloc-order | 67 | near | 23 | 23/67 masked. Structure+idioms exact (barrier fixes the late D9498 load; k=0x1000 CSE'd into $a3 hoisted to the blez delay slot; 6 register pins land arg/$a2, k/$a3, D9498/$v1, temp_a1/$a1, var_v0(_2)/$v0). Residual is the discontinuous q<->temp_v0 reuse chain (q reuses $v0 but target puts it in $a0 reusing x's dead reg; every whole-function pin that forces q->$a0 chains hi>>5 or var_v0 wrong) + 2nd-half schedule (0x2C lhu interleaved before the +k addu; the abs copies temp_v1->$v0 via addu-move). Permuter-class (register renaming) but pins block pycparser -> hand/human finish. | `.run/backlog_drafts/func_8012E364.c` | -| 1141 | func_8017E5A0 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017E5A0.c` | -| 1142 | func_8017DC54 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017DC54.c` | -| 1143 | func_8017F480 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017F480.c` | -| 1144 | func_8017EF7C | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017EF7C.c` | -| 1145 | func_80182FF0 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_80182FF0.c` | -| 1146 | func_80182EE8 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_80182EE8.c` | -| 1147 | func_8017E240 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017E240.c` | -| 1148 | func_8017CE94 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017CE94.c` | -| 1149 | func_8017D2A4 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017D2A4.c` | -| 1150 | func_8017FAC8 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017FAC8.c` | -| 1151 | func_80181E1C | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_80181E1C.c` | -| 1152 | func_80181F60 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_80181F60.c` | -| 1153 | func_8018381C | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8018381C.c` | -| 1154 | func_80182488 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80182488.c` | -| 1155 | func_8017F500 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017F500.c` | -| 1156 | func_8017D1E0 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017D1E0.c` | -| 1157 | func_8017DDBC | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017DDBC.c` | -| 1158 | func_8017F1BC | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017F1BC.c` | -| 1159 | func_8017D384 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017D384.c` | -| 1160 | func_8017EFB0 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017EFB0.c` | -| 1161 | func_80182708 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80182708.c` | -| 1162 | func_8017F8A8 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017F8A8.c` | -| 1163 | func_8017EBEC | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017EBEC.c` | -| 1164 | func_801850A0 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_801850A0.c` | -| 1165 | func_80184DE8 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80184DE8.c` | -| 1166 | func_801834B4 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_801834B4.c` | -| 1167 | func_8018333C | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8018333C.c` | -| 1168 | func_8018056C | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8018056C.c` | -| 1169 | func_80182154 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80182154.c` | -| 1170 | func_80182C68 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80182C68.c` | -| 1171 | func_8017EA18 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017EA18.c` | -| 1172 | func_80180EB8 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80180EB8.c` | -| 1173 | func_801856F0 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_801856F0.c` | -| 1174 | func_8018DFDC | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8018DFDC.c` | -| 1175 | func_801827A8 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_801827A8.c` | -| 1176 | func_8017CFC4 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017CFC4.c` | -| 1177 | func_8017D7A4 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017D7A4.c` | -| 1178 | func_8017D790 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017D790.c` | -| 1179 | func_80182514 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80182514.c` | -| 1180 | func_8018545C | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8018545C.c` | -| 1181 | func_8017D3B8 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017D3B8.c` | -| 1182 | func_80189FCC | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80189FCC.c` | -| 1183 | func_80181134 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80181134.c` | -| 1184 | func_8017FE10 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017FE10.c` | -| 1185 | func_8017DB64 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017DB64.c` | -| 1186 | func_80185AF8 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80185AF8.c` | -| 1187 | func_80182E34 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80182E34.c` | -| 1188 | func_8017D864 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017D864.c` | -| 1189 | func_8017DB70 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017DB70.c` | -| 1190 | func_80180FD0 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80180FD0.c` | -| 1191 | func_8017FB68 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8017FB68.c` | -| 1192 | func_8018ACB4 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8018ACB4.c` | -| 1193 | func_8017EBF4 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8017EBF4.c` | -| 1194 | func_80180A5C | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_80180A5C.c` | -| 1195 | func_801830EC | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_801830EC.c` | -| 1196 | func_801804F4 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_801804F4.c` | -| 1197 | func_8017E6C0 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8017E6C0.c` | -| 1198 | func_8017DD64 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8017DD64.c` | -| 1199 | func_8017F024 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8017F024.c` | -| 1200 | func_80181254 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_80181254.c` | -| 1201 | func_80181020 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_80181020.c` | -| 1202 | func_80184A1C | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_80184A1C.c` | -| 1203 | func_801825EC | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_801825EC.c` | -| 1204 | func_80184430 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_80184430.c` | -| 1205 | func_80185934 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_80185934.c` | -| 1206 | func_8017E4B0 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_8017E4B0.c` | -| 1207 | func_801841B0 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_801841B0.c` | -| 1208 | func_80180D28 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_80180D28.c` | -| 1209 | func_8017E1F4 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_8017E1F4.c` | -| 1210 | func_80182C24 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80182C24.c` | -| 1211 | func_8017DAD0 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017DAD0.c` | -| 1212 | func_8017EE08 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017EE08.c` | -| 1213 | func_80183C4C | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80183C4C.c` | -| 1214 | func_80181300 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80181300.c` | -| 1215 | func_8017E218 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017E218.c` | -| 1216 | func_8017F8AC | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017F8AC.c` | -| 1217 | func_80180E98 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80180E98.c` | -| 1218 | func_8017D21C | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017D21C.c` | -| 1219 | func_80188650 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80188650.c` | -| 1220 | func_801810C0 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_801810C0.c` | -| 1221 | func_8017D004 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017D004.c` | -| 1222 | func_80183A18 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80183A18.c` | -| 1223 | func_80182324 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80182324.c` | -| 1224 | func_80183A24 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80183A24.c` | -| 1225 | func_8017D404 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017D404.c` | -| 1226 | func_80182544 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_80182544.c` | -| 1227 | func_80180CA0 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_80180CA0.c` | -| 1228 | func_8017ED0C | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_8017ED0C.c` | -| 1229 | func_8017FB4C | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_8017FB4C.c` | -| 1230 | func_801840C0 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_801840C0.c` | -| 1231 | func_8017F344 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_8017F344.c` | -| 1232 | func_80180214 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_80180214.c` | -| 1233 | func_801803DC | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_801803DC.c` | -| 1234 | func_80181304 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_80181304.c` | -| 1235 | func_8018B9DC | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_8018B9DC.c` | -| 1236 | func_80180840 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_80180840.c` | -| 1237 | func_80182E08 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_80182E08.c` | -| 1238 | func_8018AF0C | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8018AF0C.c` | -| 1239 | func_8017F750 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8017F750.c` | -| 1240 | func_8018133C | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8018133C.c` | -| 1241 | func_80183C10 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_80183C10.c` | -| 1242 | func_80180B2C | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_80180B2C.c` | -| 1243 | func_8017D894 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8017D894.c` | -| 1244 | func_8017D1DC | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8017D1DC.c` | -| 1245 | func_8017D9A8 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8017D9A8.c` | -| 1246 | func_801845E8 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_801845E8.c` | -| 1247 | func_8017CE0C | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8017CE0C.c` | -| 1248 | func_80182268 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_80182268.c` | -| 1249 | func_8018337C | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8018337C.c` | -| 1250 | func_801800F4 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_801800F4.c` | -| 1251 | func_80181990 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_80181990.c` | -| 1252 | func_8017D8C8 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8017D8C8.c` | -| 1253 | func_80184AA8 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_80184AA8.c` | -| 1254 | func_8017E9EC | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8017E9EC.c` | -| 1255 | func_80182D18 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_80182D18.c` | -| 1256 | func_8017D524 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8017D524.c` | -| 1257 | func_8017D784 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8017D784.c` | -| 1258 | func_80139BE0 | 1 | loose-typing | 39 | near | 32 | target has redundant andi a1,v0,0xff (uchar zero-extend) gcc proves away; else identical | `.run/backlog_drafts/func_80139BE0.c` | -| 1259 | func_801856E4 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_801856E4.c` | -| 1260 | func_8017D1D0 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017D1D0.c` | -| 1261 | func_8017EEFC | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017EEFC.c` | -| 1262 | func_8017FC50 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017FC50.c` | -| 1263 | func_8017D554 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017D554.c` | -| 1264 | func_80183018 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_80183018.c` | -| 1265 | func_8017F370 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017F370.c` | -| 1266 | func_8018739C | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8018739C.c` | -| 1267 | func_8017DBC0 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017DBC0.c` | -| 1268 | func_80182000 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_80182000.c` | -| 1269 | func_8017E55C | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017E55C.c` | -| 1270 | func_80182600 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_80182600.c` | -| 1271 | func_8017FCE8 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017FCE8.c` | -| 1272 | func_8017FEC8 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017FEC8.c` | -| 1273 | func_8017D874 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017D874.c` | -| 1274 | func_8017FACC | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017FACC.c` | -| 1275 | func_8017F7F8 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017F7F8.c` | -| 1276 | func_8017FB78 | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_8017FB78.c` | -| 1277 | func_80181A40 | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_80181A40.c` | -| 1278 | func_801800D4 | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_801800D4.c` | -| 1279 | func_80182E1C | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_80182E1C.c` | -| 1280 | func_80181F4C | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_80181F4C.c` | -| 1281 | func_8017EEB0 | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_8017EEB0.c` | -| 1282 | func_8017BF14 | None | | None | near | 34 | residual: 34 mismatch | `.run/backlog_drafts/func_8017BF14.c` | -| 1283 | func_801859A0 | None | | None | near | 34 | residual: 34 mismatch | `.run/backlog_drafts/func_801859A0.c` | -| 1284 | func_8017F8E0 | None | | None | near | 34 | residual: 34 mismatch | `.run/backlog_drafts/func_8017F8E0.c` | -| 1285 | func_8017E740 | None | | None | near | 34 | residual: 34 mismatch | `.run/backlog_drafts/func_8017E740.c` | -| 1286 | func_8017FB54 | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_8017FB54.c` | -| 1287 | func_8017D804 | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_8017D804.c` | -| 1288 | func_8017DA0C | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_8017DA0C.c` | -| 1289 | func_80180030 | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_80180030.c` | -| 1290 | func_8017E038 | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_8017E038.c` | -| 1291 | func_8017E32C | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_8017E32C.c` | -| 1292 | func_80181090 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_80181090.c` | -| 1293 | func_8017EC78 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_8017EC78.c` | -| 1294 | func_8017E79C | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_8017E79C.c` | -| 1295 | func_80182A08 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_80182A08.c` | -| 1296 | func_8017F0E8 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_8017F0E8.c` | -| 1297 | func_8017D294 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_8017D294.c` | -| 1298 | func_80189B38 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_80189B38.c` | -| 1299 | func_80180F08 | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_80180F08.c` | -| 1300 | func_8017D024 | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017D024.c` | -| 1301 | func_8017EB5C | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017EB5C.c` | -| 1302 | func_8017EB4C | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017EB4C.c` | -| 1303 | func_8017EAD8 | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017EAD8.c` | -| 1304 | func_8017D29C | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017D29C.c` | -| 1305 | func_8017D450 | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017D450.c` | -| 1306 | func_8017E230 | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017E230.c` | -| 1307 | func_8017DA00 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017DA00.c` | -| 1308 | func_8017E6FC | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017E6FC.c` | -| 1309 | func_8017FE08 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017FE08.c` | -| 1310 | func_8017D80C | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017D80C.c` | -| 1311 | func_8018263C | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8018263C.c` | -| 1312 | func_80186FA8 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_80186FA8.c` | -| 1313 | func_80180A38 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_80180A38.c` | -| 1314 | func_8017D740 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017D740.c` | -| 1315 | func_8017DD44 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017DD44.c` | -| 1316 | func_8017E840 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017E840.c` | -| 1317 | func_8017D1F0 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017D1F0.c` | -| 1318 | func_8017E014 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017E014.c` | -| 1319 | func_8017D09C | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017D09C.c` | -| 1320 | func_8017EC70 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017EC70.c` | -| 1321 | func_80180C2C | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_80180C2C.c` | -| 1322 | func_8017ECC0 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017ECC0.c` | -| 1323 | func_8017F724 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017F724.c` | -| 1324 | func_8017E36C | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017E36C.c` | -| 1325 | func_8018ACD4 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8018ACD4.c` | -| 1326 | func_80148E54 | 1 | regalloc-order | 67 | near | 40 | 67/67 ins, structure+branches+block-order+body-reload all match; residual is pure register-allocation order (permuter-eligible, no register-pins). (1) masked first-angle folds andi->$s1; target keeps it in $a0 then copies addu $s1,$a0 lazily into the beq delay-slot (the s1-copy schedules 1 slot later). (2) the 0x80 const is CSE-held in $a2 across both test+body; target re-materializes 0x80 in $v0 per block (it gets clobbered by `srl v0,v1,8`), which both renames the compare regs ($v0 not $a2) AND fills the body's reload load-delay slot (mine emits a nop there). (3) single-exit ret funnels $v1->$v0 (move v0,v1) where target writes $v0 directly. All three are gcc regalloc/value-prop tie-breaks no C reshape steered (tried: $v0 pin, temp-split, low-mask-reuse compare, memory-clobber-vs-volatile reload) — leave for the permuter. | `.run/backlog_drafts/func_80148E54.c` | -| 1327 | func_8017ED80 | None | | None | near | 40 | residual: 40 mismatch | `.run/backlog_drafts/func_8017ED80.c` | -| 1328 | func_8017E4C8 | None | | None | near | 40 | residual: 40 mismatch | `.run/backlog_drafts/func_8017E4C8.c` | -| 1329 | func_80180850 | None | | None | near | 40 | residual: 40 mismatch | `.run/backlog_drafts/func_80180850.c` | -| 1330 | func_80181438 | None | | None | near | 40 | residual: 40 mismatch | `.run/backlog_drafts/func_80181438.c` | -| 1331 | func_8017D0BC | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8017D0BC.c` | -| 1332 | func_8017E94C | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8017E94C.c` | -| 1333 | func_8017E170 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8017E170.c` | -| 1334 | func_8018043C | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8018043C.c` | -| 1335 | func_8018A3F0 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8018A3F0.c` | -| 1336 | func_80183364 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_80183364.c` | -| 1337 | func_801824F0 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_801824F0.c` | -| 1338 | func_8017F4A0 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8017F4A0.c` | -| 1339 | func_801877E4 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_801877E4.c` | -| 1340 | func_80183F4C | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_80183F4C.c` | -| 1341 | func_80186044 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_80186044.c` | -| 1342 | func_80166054 | None | regalloc-order | None | near | 41 | untested v2 — force eager shift+negate of call1 result BEFORE call2 (2 saved regs s3/s4) | `.run/backlog_drafts/func_80166054.c` | -| 1343 | func_80180010 | None | | None | near | 42 | residual: 42 mismatch | `.run/backlog_drafts/func_80180010.c` | -| 1344 | func_8017E824 | None | | None | near | 42 | residual: 42 mismatch | `.run/backlog_drafts/func_8017E824.c` | -| 1345 | func_80183598 | None | | None | near | 42 | residual: 42 mismatch | `.run/backlog_drafts/func_80183598.c` | -| 1346 | func_8017ECF4 | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8017ECF4.c` | -| 1347 | func_8018118C | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8018118C.c` | -| 1348 | func_8018FB8C | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8018FB8C.c` | -| 1349 | func_8017D6D0 | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8017D6D0.c` | -| 1350 | func_8017D96C | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8017D96C.c` | -| 1351 | func_8017DF44 | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8017DF44.c` | -| 1352 | func_801812FC | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_801812FC.c` | -| 1353 | func_80186B08 | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_80186B08.c` | -| 1354 | func_8017E578 | None | | None | near | 44 | residual: 44 mismatch | `.run/backlog_drafts/func_8017E578.c` | -| 1355 | func_80185C70 | None | | None | near | 44 | residual: 44 mismatch | `.run/backlog_drafts/func_80185C70.c` | -| 1356 | func_8017F90C | None | | None | near | 44 | residual: 44 mismatch | `.run/backlog_drafts/func_8017F90C.c` | -| 1357 | func_8017D6FC | None | | None | near | 44 | residual: 44 mismatch | `.run/backlog_drafts/func_8017D6FC.c` | -| 1358 | func_8013C360 | None | schedule | None | near | 44 | none — MATCH (-O0 pointer-walk copy; for-update post-inc gives the addu-copy, no trailing return merges loop-exit into epilogue) | `.run/backlog_drafts/func_8013C360.c` | -| 1359 | func_8017E7D0 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_8017E7D0.c` | -| 1360 | func_80189304 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_80189304.c` | -| 1361 | func_8017D01C | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_8017D01C.c` | -| 1362 | func_8017E380 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_8017E380.c` | -| 1363 | func_80180A88 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_80180A88.c` | -| 1364 | func_8017E9D8 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_8017E9D8.c` | -| 1365 | func_80189DB4 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_80189DB4.c` | -| 1366 | func_8018001C | None | | None | near | 46 | residual: 46 mismatch | `.run/backlog_drafts/func_8018001C.c` | -| 1367 | func_8017F2A0 | None | | None | near | 46 | residual: 46 mismatch | `.run/backlog_drafts/func_8017F2A0.c` | -| 1368 | func_8017EF24 | None | | None | near | 46 | residual: 46 mismatch | `.run/backlog_drafts/func_8017EF24.c` | -| 1369 | func_8018ADA4 | None | | None | near | 46 | residual: 46 mismatch | `.run/backlog_drafts/func_8018ADA4.c` | -| 1370 | func_80185EA8 | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_80185EA8.c` | -| 1371 | func_8018912C | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_8018912C.c` | -| 1372 | func_80188BEC | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_80188BEC.c` | -| 1373 | func_801804DC | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_801804DC.c` | -| 1374 | func_801808D8 | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_801808D8.c` | -| 1375 | func_8017E8D0 | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_8017E8D0.c` | -| 1376 | func_8017DF0C | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_8017DF0C.c` | -| 1377 | func_801846AC | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_801846AC.c` | -| 1378 | func_801805DC | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_801805DC.c` | -| 1379 | func_80184D0C | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_80184D0C.c` | -| 1380 | func_8017D900 | 1 | plumbing | 35 | near | 48 | none — expect MATCH (STUB: ordered global stores + single tail call, sibling of func_8017D840) | `.run/backlog_drafts/func_8017D900.c` | -| 1381 | func_8017F84C | None | | None | near | 48 | residual: 48 mismatch | `.run/backlog_drafts/func_8017F84C.c` | -| 1382 | func_8017EF54 | None | | None | near | 48 | residual: 48 mismatch | `.run/backlog_drafts/func_8017EF54.c` | -| 1383 | func_80181CE0 | None | | None | near | 48 | residual: 48 mismatch | `.run/backlog_drafts/func_80181CE0.c` | -| 1384 | func_8017FCF0 | None | | None | near | 48 | residual: 48 mismatch | `.run/backlog_drafts/func_8017FCF0.c` | -| 1385 | func_8017D6F0 | None | | None | near | 49 | residual: 49 mismatch | `.run/backlog_drafts/func_8017D6F0.c` | -| 1386 | func_8017DF40 | None | | None | near | 49 | residual: 49 mismatch | `.run/backlog_drafts/func_8017DF40.c` | -| 1387 | func_8017E968 | None | | None | near | 49 | residual: 49 mismatch | `.run/backlog_drafts/func_8017E968.c` | -| 1388 | func_801845EC | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_801845EC.c` | -| 1389 | func_8017F4C4 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_8017F4C4.c` | -| 1390 | func_80188BB0 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_80188BB0.c` | -| 1391 | func_80181B78 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_80181B78.c` | -| 1392 | func_8017DE74 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_8017DE74.c` | -| 1393 | func_80183D48 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_80183D48.c` | -| 1394 | func_8017EC08 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_8017EC08.c` | -| 1395 | func_80184130 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_80184130.c` | -| 1396 | func_80181124 | None | | None | near | 52 | residual: 52 mismatch | `.run/backlog_drafts/func_80181124.c` | -| 1397 | func_8017FB48 | None | | None | near | 52 | residual: 52 mismatch | `.run/backlog_drafts/func_8017FB48.c` | -| 1398 | func_80186A0C | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_80186A0C.c` | -| 1399 | func_8017F050 | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8017F050.c` | -| 1400 | func_8018592C | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8018592C.c` | -| 1401 | func_8018CFF4 | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8018CFF4.c` | -| 1402 | func_8017D4B4 | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8017D4B4.c` | -| 1403 | func_8017DB6C | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8017DB6C.c` | -| 1404 | func_8018048C | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8018048C.c` | -| 1405 | func_8017D57C | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8017D57C.c` | -| 1406 | func_80168BDC | None | regalloc-order | None | near | 53 | loop-increment materialization (target keeps i+1 in temp, dup in delay slot) | `.run/backlog_drafts/func_80168BDC.c` | -| 1407 | func_8018465C | None | | None | near | 54 | residual: 54 mismatch | `.run/backlog_drafts/func_8018465C.c` | -| 1408 | func_80183C54 | None | | None | near | 54 | residual: 54 mismatch | `.run/backlog_drafts/func_80183C54.c` | -| 1409 | func_80180D58 | None | | None | near | 54 | residual: 54 mismatch | `.run/backlog_drafts/func_80180D58.c` | -| 1410 | func_80180B7C | None | | None | near | 54 | residual: 54 mismatch | `.run/backlog_drafts/func_80180B7C.c` | -| 1411 | func_8017F7B8 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_8017F7B8.c` | -| 1412 | func_8017FE54 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_8017FE54.c` | -| 1413 | func_8017ED60 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_8017ED60.c` | -| 1414 | func_80183C9C | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_80183C9C.c` | -| 1415 | func_801802BC | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_801802BC.c` | -| 1416 | func_80182030 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_80182030.c` | -| 1417 | func_80180204 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_80180204.c` | -| 1418 | func_801824F8 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_801824F8.c` | -| 1419 | func_8017EE2C | None | | None | near | 56 | residual: 56 mismatch | `.run/backlog_drafts/func_8017EE2C.c` | -| 1420 | func_80181DEC | None | | None | near | 57 | residual: 57 mismatch | `.run/backlog_drafts/func_80181DEC.c` | -| 1421 | func_8017E524 | None | | None | near | 57 | residual: 57 mismatch | `.run/backlog_drafts/func_8017E524.c` | -| 1422 | func_8017E8CC | None | | None | near | 57 | residual: 57 mismatch | `.run/backlog_drafts/func_8017E8CC.c` | -| 1423 | func_8018A538 | None | | None | near | 57 | residual: 57 mismatch | `.run/backlog_drafts/func_8018A538.c` | -| 1424 | func_80177DA8 | 1 | remat | 63 | near | 58 | gcc narrows `&0xfffffeff` on a 16-bit (lhu) value to `andi 0xfeff` (inline), but target hoisted -0x101 into $t4 (and-reg) in the loop preheader — a gcc-2.7.2 LICM-before-combine pass-ordering quirk unsteerable from C; that 1-ins gap cascades the constant-reg numbering + tail reassoc. Secondary: single-IV loop ptr anchors at +0xA (short, 2 accesses) not +0xC (byte) like target. | `.run/backlog_drafts/func_80177DA8.c` | -| 1425 | func_8017ECB0 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_8017ECB0.c` | -| 1426 | func_801898C8 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_801898C8.c` | -| 1427 | func_80184920 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_80184920.c` | -| 1428 | func_80182EA0 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_80182EA0.c` | -| 1429 | func_8017F1C4 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_8017F1C4.c` | -| 1430 | func_80181A5C | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_80181A5C.c` | -| 1431 | func_8017D544 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_8017D544.c` | -| 1432 | func_8017EA2C | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_8017EA2C.c` | -| 1433 | func_80182BF4 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_80182BF4.c` | -| 1434 | func_80180D38 | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_80180D38.c` | -| 1435 | func_8017F24C | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_8017F24C.c` | -| 1436 | func_8017D4CC | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_8017D4CC.c` | -| 1437 | func_80183624 | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_80183624.c` | -| 1438 | func_8017FB10 | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_8017FB10.c` | -| 1439 | func_80180B50 | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_80180B50.c` | -| 1440 | func_8018567C | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_8018567C.c` | -| 1441 | func_8017E75C | None | | None | near | 61 | residual: 61 mismatch | `.run/backlog_drafts/func_8017E75C.c` | -| 1442 | func_80184778 | None | | None | near | 61 | residual: 61 mismatch | `.run/backlog_drafts/func_80184778.c` | -| 1443 | func_8017EEE0 | None | | None | near | 62 | residual: 62 mismatch | `.run/backlog_drafts/func_8017EEE0.c` | -| 1444 | func_80188204 | None | | None | near | 62 | residual: 62 mismatch | `.run/backlog_drafts/func_80188204.c` | -| 1445 | func_8017F25C | None | | None | near | 62 | residual: 62 mismatch | `.run/backlog_drafts/func_8017F25C.c` | -| 1446 | func_8017EB74 | None | | None | near | 63 | residual: 63 mismatch | `.run/backlog_drafts/func_8017EB74.c` | -| 1447 | func_8017E798 | None | | None | near | 64 | residual: 64 mismatch | `.run/backlog_drafts/func_8017E798.c` | -| 1448 | func_8017D610 | None | | None | near | 64 | residual: 64 mismatch | `.run/backlog_drafts/func_8017D610.c` | -| 1449 | func_8017CD10 | None | | None | near | 64 | residual: 64 mismatch | `.run/backlog_drafts/func_8017CD10.c` | -| 1450 | func_8017F1A0 | None | | None | near | 64 | residual: 64 mismatch | `.run/backlog_drafts/func_8017F1A0.c` | -| 1451 | func_8017D928 | None | | None | near | 64 | residual: 64 mismatch | `.run/backlog_drafts/func_8017D928.c` | -| 1452 | func_8018656C | None | | None | near | 65 | residual: 65 mismatch | `.run/backlog_drafts/func_8018656C.c` | -| 1453 | func_8013B598 | 1 | O0 | 66 | near | 66 | WAVE: 66 mismatch | `.run/backlog_drafts/func_8013B598.c` | -| 1454 | func_80184854 | None | | None | near | 66 | residual: 66 mismatch | `.run/backlog_drafts/func_80184854.c` | -| 1455 | func_80185B5C | None | | None | near | 67 | residual: 67 mismatch | `.run/backlog_drafts/func_80185B5C.c` | -| 1456 | func_8017E910 | None | | None | near | 68 | residual: 68 mismatch | `.run/backlog_drafts/func_8017E910.c` | -| 1457 | func_80182378 | None | | None | near | 69 | residual: 69 mismatch | `.run/backlog_drafts/func_80182378.c` | -| 1458 | func_80183544 | None | | None | near | 69 | residual: 69 mismatch | `.run/backlog_drafts/func_80183544.c` | -| 1459 | func_8018434C | None | | None | near | 69 | residual: 69 mismatch | `.run/backlog_drafts/func_8018434C.c` | -| 1460 | func_80180224 | None | | None | near | 71 | residual: 71 mismatch | `.run/backlog_drafts/func_80180224.c` | -| 1461 | func_80184238 | None | | None | near | 72 | residual: 72 mismatch | `.run/backlog_drafts/func_80184238.c` | -| 1462 | func_801866B0 | None | | None | near | 72 | residual: 72 mismatch | `.run/backlog_drafts/func_801866B0.c` | -| 1463 | func_8017D9E4 | None | | None | near | 73 | residual: 73 mismatch | `.run/backlog_drafts/func_8017D9E4.c` | -| 1464 | func_80181344 | None | | None | near | 73 | residual: 73 mismatch | `.run/backlog_drafts/func_80181344.c` | -| 1465 | func_80189B3C | None | | None | near | 74 | residual: 74 mismatch | `.run/backlog_drafts/func_80189B3C.c` | -| 1466 | func_80182B90 | None | | None | near | 74 | residual: 74 mismatch | `.run/backlog_drafts/func_80182B90.c` | -| 1467 | func_8018165C | None | | None | near | 74 | residual: 74 mismatch | `.run/backlog_drafts/func_8018165C.c` | -| 1468 | func_8017F468 | None | | None | near | 74 | residual: 74 mismatch | `.run/backlog_drafts/func_8017F468.c` | -| 1469 | func_8017DAB4 | None | | None | near | 75 | residual: 75 mismatch | `.run/backlog_drafts/func_8017DAB4.c` | -| 1470 | func_80181500 | None | | None | near | 75 | residual: 75 mismatch | `.run/backlog_drafts/func_80181500.c` | -| 1471 | func_801814A8 | None | | None | near | 76 | residual: 76 mismatch | `.run/backlog_drafts/func_801814A8.c` | -| 1472 | func_8017E81C | None | | None | near | 76 | residual: 76 mismatch | `.run/backlog_drafts/func_8017E81C.c` | -| 1473 | func_8018474C | None | | None | near | 76 | residual: 76 mismatch | `.run/backlog_drafts/func_8018474C.c` | -| 1474 | func_80184DDC | None | | None | near | 77 | residual: 77 mismatch | `.run/backlog_drafts/func_80184DDC.c` | -| 1475 | func_8017E2F4 | None | | None | near | 77 | residual: 77 mismatch | `.run/backlog_drafts/func_8017E2F4.c` | -| 1476 | func_8017EDBC | None | | None | near | 78 | residual: 78 mismatch | `.run/backlog_drafts/func_8017EDBC.c` | -| 1477 | func_8017E5F0 | None | | None | near | 79 | residual: 79 mismatch | `.run/backlog_drafts/func_8017E5F0.c` | -| 1478 | func_801815AC | None | | None | near | 79 | residual: 79 mismatch | `.run/backlog_drafts/func_801815AC.c` | -| 1479 | func_8017D54C | None | | None | near | 79 | residual: 79 mismatch | `.run/backlog_drafts/func_8017D54C.c` | -| 1480 | func_80181260 | None | | None | near | 79 | residual: 79 mismatch | `.run/backlog_drafts/func_80181260.c` | -| 1481 | func_801805D0 | None | | None | near | 79 | residual: 79 mismatch | `.run/backlog_drafts/func_801805D0.c` | -| 1482 | func_8017F290 | 1 | regalloc-order | 86 | near | 81 | none — MATCH. Two levers: (1) hold &D_801270CC in a `int *state` local so its | `.run/backlog_drafts/func_8017F290.c` | -| 1483 | func_80181068 | None | | None | near | 81 | residual: 81 mismatch | `.run/backlog_drafts/func_80181068.c` | -| 1484 | func_80184E00 | None | | None | near | 82 | residual: 82 mismatch | `.run/backlog_drafts/func_80184E00.c` | -| 1485 | func_8017EB88 | None | | None | near | 82 | residual: 82 mismatch | `.run/backlog_drafts/func_8017EB88.c` | -| 1486 | func_8017FB3C | None | | None | near | 82 | residual: 82 mismatch | `.run/backlog_drafts/func_8017FB3C.c` | -| 1487 | func_8017F840 | None | | None | near | 82 | residual: 82 mismatch | `.run/backlog_drafts/func_8017F840.c` | -| 1488 | func_8017DA9C | None | | None | near | 83 | residual: 83 mismatch | `.run/backlog_drafts/func_8017DA9C.c` | -| 1489 | func_801829F0 | None | | None | near | 83 | residual: 83 mismatch | `.run/backlog_drafts/func_801829F0.c` | -| 1490 | func_8017FBA4 | None | | None | near | 83 | residual: 83 mismatch | `.run/backlog_drafts/func_8017FBA4.c` | -| 1491 | func_801848AC | None | | None | near | 84 | residual: 84 mismatch | `.run/backlog_drafts/func_801848AC.c` | -| 1492 | func_8017DC9C | None | | None | near | 84 | residual: 84 mismatch | `.run/backlog_drafts/func_8017DC9C.c` | -| 1493 | func_801840FC | None | | None | near | 85 | residual: 85 mismatch | `.run/backlog_drafts/func_801840FC.c` | -| 1494 | func_80186094 | None | | None | near | 85 | residual: 85 mismatch | `.run/backlog_drafts/func_80186094.c` | -| 1495 | func_801847FC | None | | None | near | 86 | residual: 86 mismatch | `.run/backlog_drafts/func_801847FC.c` | -| 1496 | func_8018006C | None | | None | near | 86 | residual: 86 mismatch | `.run/backlog_drafts/func_8018006C.c` | -| 1497 | func_8017DFD8 | None | | None | near | 87 | residual: 87 mismatch | `.run/backlog_drafts/func_8017DFD8.c` | -| 1498 | func_8017D1F8 | None | | None | near | 87 | residual: 87 mismatch | `.run/backlog_drafts/func_8017D1F8.c` | -| 1499 | func_8017CE68 | None | | None | near | 87 | residual: 87 mismatch | `.run/backlog_drafts/func_8017CE68.c` | -| 1500 | func_8017D7D0 | None | | None | near | 88 | residual: 88 mismatch | `.run/backlog_drafts/func_8017D7D0.c` | -| 1501 | func_80181838 | None | | None | near | 88 | residual: 88 mismatch | `.run/backlog_drafts/func_80181838.c` | -| 1502 | func_801821D4 | None | | None | near | 90 | residual: 90 mismatch | `.run/backlog_drafts/func_801821D4.c` | -| 1503 | func_8017F0A8 | None | | None | near | 90 | residual: 90 mismatch | `.run/backlog_drafts/func_8017F0A8.c` | -| 1504 | func_8018AD3C | None | | None | near | 90 | residual: 90 mismatch | `.run/backlog_drafts/func_8018AD3C.c` | -| 1505 | func_8017DD5C | None | | None | near | 90 | residual: 90 mismatch | `.run/backlog_drafts/func_8017DD5C.c` | -| 1506 | func_8017EDC0 | None | | None | near | 91 | residual: 91 mismatch | `.run/backlog_drafts/func_8017EDC0.c` | -| 1507 | func_801807DC | None | | None | near | 92 | residual: 92 mismatch | `.run/backlog_drafts/func_801807DC.c` | -| 1508 | func_80180170 | None | | None | near | 92 | residual: 92 mismatch | `.run/backlog_drafts/func_80180170.c` | -| 1509 | func_8017D98C | 1 | plumbing | 31 | near | 93 | none — MATCH (expected): straight global stores + tail call; const 0x140 reused for two halves | `.run/backlog_drafts/func_8017D98C.c` | -| 1510 | func_8017EFFC | None | | None | near | 93 | residual: 93 mismatch | `.run/backlog_drafts/func_8017EFFC.c` | -| 1511 | func_8017D940 | None | | None | near | 94 | residual: 94 mismatch | `.run/backlog_drafts/func_8017D940.c` | -| 1512 | func_8017D934 | None | | None | near | 95 | residual: 95 mismatch | `.run/backlog_drafts/func_8017D934.c` | -| 1513 | func_8017DAB8 | None | | None | near | 97 | residual: 97 mismatch | `.run/backlog_drafts/func_8017DAB8.c` | -| 1514 | func_80180040 | None | | None | near | 97 | residual: 97 mismatch | `.run/backlog_drafts/func_80180040.c` | -| 1515 | func_8017FBE0 | None | | None | near | 97 | residual: 97 mismatch | `.run/backlog_drafts/func_8017FBE0.c` | -| 1516 | func_8017F240 | 1 | regalloc-order | 20 | near | 98 | none — MATCH (base &D_801270D0 pinned to $s0 holds across call; one lui/addiu reused for load+store) | `.run/backlog_drafts/func_8017F240.c` | -| 1517 | func_801863B0 | None | | None | near | 98 | residual: 98 mismatch | `.run/backlog_drafts/func_801863B0.c` | -| 1518 | func_80182728 | None | | None | near | 98 | residual: 98 mismatch | `.run/backlog_drafts/func_80182728.c` | -| 1519 | func_8018038C | None | | None | near | 100 | residual: 100 mismatch | `.run/backlog_drafts/func_8018038C.c` | -| 1520 | func_8017D808 | None | | None | near | 102 | residual: 102 mismatch | `.run/backlog_drafts/func_8017D808.c` | -| 1521 | func_80182D10 | None | | None | near | 102 | residual: 102 mismatch | `.run/backlog_drafts/func_80182D10.c` | -| 1522 | func_8017DC40 | None | | None | near | 104 | residual: 104 mismatch | `.run/backlog_drafts/func_8017DC40.c` | -| 1523 | func_80180F34 | None | | None | near | 105 | residual: 105 mismatch | `.run/backlog_drafts/func_80180F34.c` | -| 1524 | func_80181C44 | None | | None | near | 105 | residual: 105 mismatch | `.run/backlog_drafts/func_80181C44.c` | -| 1525 | func_8017F96C | None | | None | near | 106 | residual: 106 mismatch | `.run/backlog_drafts/func_8017F96C.c` | -| 1526 | func_8017EFEC | None | | None | near | 107 | residual: 107 mismatch | `.run/backlog_drafts/func_8017EFEC.c` | -| 1527 | func_80182BC8 | None | | None | near | 107 | residual: 107 mismatch | `.run/backlog_drafts/func_80182BC8.c` | -| 1528 | func_8017F69C | None | | None | near | 107 | residual: 107 mismatch | `.run/backlog_drafts/func_8017F69C.c` | -| 1529 | func_80184828 | None | | None | near | 109 | residual: 109 mismatch | `.run/backlog_drafts/func_80184828.c` | -| 1530 | func_8017F3E4 | None | | None | near | 110 | residual: 110 mismatch | `.run/backlog_drafts/func_8017F3E4.c` | -| 1531 | func_8017DAF4 | None | | None | near | 111 | residual: 111 mismatch | `.run/backlog_drafts/func_8017DAF4.c` | -| 1532 | func_8017FE9C | None | | None | near | 111 | residual: 111 mismatch | `.run/backlog_drafts/func_8017FE9C.c` | -| 1533 | func_8017F768 | None | | None | near | 112 | residual: 112 mismatch | `.run/backlog_drafts/func_8017F768.c` | -| 1534 | func_8017F3B8 | None | | None | near | 112 | residual: 112 mismatch | `.run/backlog_drafts/func_8017F3B8.c` | -| 1535 | func_8017D508 | None | | None | near | 113 | residual: 113 mismatch | `.run/backlog_drafts/func_8017D508.c` | -| 1536 | func_8018788C | None | | None | near | 113 | residual: 113 mismatch | `.run/backlog_drafts/func_8018788C.c` | -| 1537 | func_8017E978 | None | | None | near | 115 | residual: 115 mismatch | `.run/backlog_drafts/func_8017E978.c` | -| 1538 | func_80181858 | None | | None | near | 117 | residual: 117 mismatch | `.run/backlog_drafts/func_80181858.c` | -| 1539 | func_80184CD0 | None | | None | near | 118 | residual: 118 mismatch | `.run/backlog_drafts/func_80184CD0.c` | -| 1540 | func_8017E8F8 | None | | None | near | 120 | residual: 120 mismatch | `.run/backlog_drafts/func_8017E8F8.c` | -| 1541 | func_80184358 | None | | None | near | 121 | residual: 121 mismatch | `.run/backlog_drafts/func_80184358.c` | -| 1542 | func_8017F074 | None | | None | near | 121 | residual: 121 mismatch | `.run/backlog_drafts/func_8017F074.c` | -| 1543 | func_8017D890 | None | | None | near | 124 | residual: 124 mismatch | `.run/backlog_drafts/func_8017D890.c` | -| 1544 | func_8017DECC | None | | None | near | 125 | residual: 125 mismatch | `.run/backlog_drafts/func_8017DECC.c` | -| 1545 | func_80185020 | None | | None | near | 125 | residual: 125 mismatch | `.run/backlog_drafts/func_80185020.c` | -| 1546 | func_8017DD2C | None | | None | near | 125 | residual: 125 mismatch | `.run/backlog_drafts/func_8017DD2C.c` | -| 1547 | func_801884BC | None | | None | near | 125 | residual: 125 mismatch | `.run/backlog_drafts/func_801884BC.c` | -| 1548 | func_801892CC | None | | None | near | 127 | residual: 127 mismatch | `.run/backlog_drafts/func_801892CC.c` | -| 1549 | func_8017EB00 | None | | None | near | 127 | residual: 127 mismatch | `.run/backlog_drafts/func_8017EB00.c` | -| 1550 | func_8017E538 | None | | None | near | 128 | residual: 128 mismatch | `.run/backlog_drafts/func_8017E538.c` | -| 1551 | func_8017D50C | None | | None | near | 128 | residual: 128 mismatch | `.run/backlog_drafts/func_8017D50C.c` | -| 1552 | func_801803F8 | None | | None | near | 129 | residual: 129 mismatch | `.run/backlog_drafts/func_801803F8.c` | -| 1553 | func_80185E68 | 1 | STRUCT | 132 | near | 131 | STRUCT: 131 mismatch | `.run/backlog_drafts/func_80185E68.c` | -| 1554 | func_80188754 | None | | None | near | 131 | residual: 131 mismatch | `.run/backlog_drafts/func_80188754.c` | -| 1555 | func_8017E378 | None | | None | near | 134 | residual: 134 mismatch | `.run/backlog_drafts/func_8017E378.c` | -| 1556 | func_80185730 | None | | None | near | 136 | residual: 136 mismatch | `.run/backlog_drafts/func_80185730.c` | -| 1557 | func_8018523C | None | | None | near | 136 | residual: 136 mismatch | `.run/backlog_drafts/func_8018523C.c` | -| 1558 | func_80186530 | None | | None | near | 139 | residual: 139 mismatch | `.run/backlog_drafts/func_80186530.c` | -| 1559 | func_80184F08 | None | regalloc-order | None | near | 141 | none — MATCH (145/145 ins, match_one confirmed) | `.run/backlog_drafts/func_80184F08.c` | -| 1560 | func_80185668 | None | | None | near | 142 | residual: 142 mismatch | `.run/backlog_drafts/func_80185668.c` | -| 1561 | func_8017DB0C | None | | None | near | 142 | residual: 142 mismatch | `.run/backlog_drafts/func_8017DB0C.c` | -| 1562 | func_801814B0 | None | | None | near | 144 | residual: 144 mismatch | `.run/backlog_drafts/func_801814B0.c` | -| 1563 | func_801801A4 | None | | None | near | 148 | residual: 148 mismatch | `.run/backlog_drafts/func_801801A4.c` | -| 1564 | func_80180868 | None | | None | near | 148 | residual: 148 mismatch | `.run/backlog_drafts/func_80180868.c` | -| 1565 | func_801829BC | None | | None | near | 150 | residual: 150 mismatch | `.run/backlog_drafts/func_801829BC.c` | -| 1566 | func_8017FBE8 | None | | None | near | 151 | residual: 151 mismatch | `.run/backlog_drafts/func_8017FBE8.c` | -| 1567 | func_8018200C | None | | None | near | 152 | residual: 152 mismatch | `.run/backlog_drafts/func_8018200C.c` | -| 1568 | func_80181984 | None | | None | near | 153 | residual: 153 mismatch | `.run/backlog_drafts/func_80181984.c` | -| 1569 | func_80183280 | None | | None | near | 154 | residual: 154 mismatch | `.run/backlog_drafts/func_80183280.c` | -| 1570 | func_80184CA0 | None | | None | near | 162 | residual: 162 mismatch | `.run/backlog_drafts/func_80184CA0.c` | -| 1571 | func_8017FA54 | None | | None | near | 166 | residual: 166 mismatch | `.run/backlog_drafts/func_8017FA54.c` | -| 1572 | func_8017D708 | None | | None | near | 166 | residual: 166 mismatch | `.run/backlog_drafts/func_8017D708.c` | -| 1573 | func_8017E6EC | None | | None | near | 172 | residual: 172 mismatch | `.run/backlog_drafts/func_8017E6EC.c` | -| 1574 | func_8017D5DC | None | | None | near | 173 | residual: 173 mismatch | `.run/backlog_drafts/func_8017D5DC.c` | -| 1575 | func_8017D47C | None | | None | near | 173 | residual: 173 mismatch | `.run/backlog_drafts/func_8017D47C.c` | -| 1576 | func_8017F40C | None | | None | near | 174 | residual: 174 mismatch | `.run/backlog_drafts/func_8017F40C.c` | -| 1577 | func_80184210 | None | | None | near | 176 | residual: 176 mismatch | `.run/backlog_drafts/func_80184210.c` | -| 1578 | func_80185E34 | None | | None | near | 185 | residual: 185 mismatch | `.run/backlog_drafts/func_80185E34.c` | -| 1579 | func_80180568 | None | | None | near | 185 | residual: 185 mismatch | `.run/backlog_drafts/func_80180568.c` | -| 1580 | func_801809C4 | None | | None | near | 190 | residual: 190 mismatch | `.run/backlog_drafts/func_801809C4.c` | -| 1581 | func_8013BD74 | 1 | struct | 198 | near | 192 | none — MATCH | `.run/backlog_drafts/func_8013BD74.c` | -| 1582 | func_80183D84 | None | | None | near | 192 | residual: 192 mismatch | `.run/backlog_drafts/func_80183D84.c` | -| 1583 | func_80183FEC | None | | None | near | 198 | residual: 198 mismatch | `.run/backlog_drafts/func_80183FEC.c` | -| 1584 | func_801823B8 | None | | None | near | 204 | residual: 204 mismatch | `.run/backlog_drafts/func_801823B8.c` | -| 1585 | func_801826C4 | None | | None | near | 207 | residual: 207 mismatch | `.run/backlog_drafts/func_801826C4.c` | -| 1586 | func_8017E374 | None | | None | near | 234 | residual: 234 mismatch | `.run/backlog_drafts/func_8017E374.c` | -| 1587 | func_8018C3F8 | None | | None | near | 236 | residual: 236 mismatch | `.run/backlog_drafts/func_8018C3F8.c` | -| 1588 | func_80183438 | None | | None | near | 237 | residual: 237 mismatch | `.run/backlog_drafts/func_80183438.c` | -| 1589 | func_8017E7D4 | None | | None | near | 241 | residual: 241 mismatch | `.run/backlog_drafts/func_8017E7D4.c` | -| 1590 | func_80183BF8 | None | | None | near | 258 | residual: 258 mismatch | `.run/backlog_drafts/func_80183BF8.c` | -| 1591 | func_8017EB30 | None | | None | near | 278 | residual: 278 mismatch | `.run/backlog_drafts/func_8017EB30.c` | -| 1592 | func_801804A0 | None | | None | near | 280 | residual: 280 mismatch | `.run/backlog_drafts/func_801804A0.c` | -| 1593 | func_80187EDC | None | | None | near | 296 | residual: 296 mismatch | `.run/backlog_drafts/func_80187EDC.c` | -| 1594 | func_8017F554 | None | | None | near | 299 | residual: 299 mismatch | `.run/backlog_drafts/func_8017F554.c` | -| 1595 | func_8017FEF0 | None | | None | near | 304 | residual: 304 mismatch | `.run/backlog_drafts/func_8017FEF0.c` | -| 1596 | func_80181670 | None | | None | near | 311 | residual: 311 mismatch | `.run/backlog_drafts/func_80181670.c` | -| 1597 | func_801833F0 | None | | None | near | 328 | residual: 328 mismatch | `.run/backlog_drafts/func_801833F0.c` | -| 1598 | func_80181128 | None | | None | near | 385 | residual: 385 mismatch | `.run/backlog_drafts/func_80181128.c` | -| 1599 | func_8017EA84 | None | | None | near | 578 | residual: 578 mismatch | `.run/backlog_drafts/func_8017EA84.c` | -| 1600 | func_8018057C | None | | None | near | 897 | residual: 897 mismatch | `.run/backlog_drafts/func_8018057C.c` | -| 1601 | func_80184A68 | 1 | regalloc-order | 33 | failed | | none — MATCH | `.run/backlog_drafts/func_80184A68.c` | -| 1602 | func_80159A20 | 1 | struct | 58 | failed | | none — MATCH. Key lever: block tail-MERGE (gcc shared `bne ...,$L1` cross-jump) by making the two return-tests STRUCTURALLY DIFFERENT — positive `if(==){goto mask;} return;` per branch (not `if(!=) return;`), so neither tail can merge. Then fix block ORDER by inverting the outer test (`if(d!=1)` makes the ==4/return path the inline fall-through, the d==1/p[2] path the forward `beq`-target block — matching the target layout). | `.run/backlog_drafts/func_80159A20.c` | -| 1603 | func_80180B64 | 1 | struct | 75 | failed | | none — MATCH (75 ins, relocation-masked) | `.run/backlog_drafts/func_80180B64.c` | -| 1604 | func_80183DE0 | 1 | regalloc-order | 91 | failed | | testing if(!=1) layout + counter-before-pointer init order | `.run/backlog_drafts/func_80183DE0.c` | -| 1605 | func_80182C9C | 1 | schedule | 101 | failed | | none — MATCH (101 ins). Inner-switch break-to-shared-tail must be written as | `.run/backlog_drafts/func_80182C9C.c` | -| 1606 | func_80183FB8 | 1 | loose-typing | 101 | failed | | none — MATCH (relocation-masked match_one, 101/101 ins) | `.run/backlog_drafts/func_80183FB8.c` | -| 1607 | func_80185BA4 | 1 | WAVE | 177 | failed | | won't compile standalone (loose-typing / missing decl) | | -| 1608 | func_8017D8DC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017D8DC.c` | -| 1609 | func_80187750 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80187750.c` | -| 1610 | func_8017FFEC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017FFEC.c` | -| 1611 | func_80184018 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80184018.c` | -| 1612 | func_8017DC18 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017DC18.c` | -| 1613 | func_801853CC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801853CC.c` | -| 1614 | func_80181894 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181894.c` | -| 1615 | func_8018BFBC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018BFBC.c` | -| 1616 | func_801807F4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801807F4.c` | -| 1617 | func_8017FFC8 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017FFC8.c` | -| 1618 | func_8017E99C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017E99C.c` | -| 1619 | func_80180294 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80180294.c` | -| 1620 | func_80184504 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80184504.c` | -| 1621 | func_80180B1C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80180B1C.c` | -| 1622 | func_8017E76C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017E76C.c` | -| 1623 | func_8017F29C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017F29C.c` | -| 1624 | func_8018253C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018253C.c` | -| 1625 | func_8017F00C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017F00C.c` | -| 1626 | func_801802B0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801802B0.c` | -| 1627 | func_80181FDC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181FDC.c` | -| 1628 | func_8017DB3C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017DB3C.c` | -| 1629 | func_801854DC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801854DC.c` | -| 1630 | func_8017DA1C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017DA1C.c` | -| 1631 | func_80180D04 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80180D04.c` | -| 1632 | func_8017BF20 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017BF20.c` | -| 1633 | func_8017FFC4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017FFC4.c` | -| 1634 | func_8017C004 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017C004.c` | -| 1635 | func_8017E2F0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017E2F0.c` | -| 1636 | func_8017F4D4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017F4D4.c` | -| 1637 | func_8018358C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018358C.c` | -| 1638 | func_801841E4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801841E4.c` | -| 1639 | func_80181738 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181738.c` | -| 1640 | func_801873D8 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801873D8.c` | -| 1641 | func_80181E90 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181E90.c` | -| 1642 | func_80185628 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80185628.c` | -| 1643 | func_80182384 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80182384.c` | -| 1644 | func_80184268 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80184268.c` | -| 1645 | func_80184234 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80184234.c` | -| 1646 | func_801829D8 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801829D8.c` | -| 1647 | func_80181A78 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181A78.c` | -| 1648 | func_80186E58 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80186E58.c` | -| 1649 | func_80183BF0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80183BF0.c` | -| 1650 | func_80180EC4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80180EC4.c` | -| 1651 | func_801805D4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801805D4.c` | -| 1652 | func_8017EA1C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017EA1C.c` | -| 1653 | func_80181FA4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181FA4.c` | -| 1654 | func_80184558 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80184558.c` | -| 1655 | func_8017F098 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017F098.c` | -| 1656 | func_801822CC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801822CC.c` | -| 1657 | func_80185BA8 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80185BA8.c` | -| 1658 | func_8018E710 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018E710.c` | -| 1659 | func_80183F80 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80183F80.c` | -| 1660 | func_80182D9C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80182D9C.c` | -| 1661 | func_80183028 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80183028.c` | -| 1662 | func_80183104 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80183104.c` | -| 1663 | func_801831EC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801831EC.c` | -| 1664 | func_8018326C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018326C.c` | -| 1665 | func_8018305C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018305C.c` | -| 1666 | func_801852D0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801852D0.c` | -| 1667 | func_8017E3F4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017E3F4.c` | -| 1668 | func_800D1658 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_800D1658.c` | -| 1669 | func_800D1984 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_800D1984.c` | -| 1670 | func_800D24A0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_800D24A0.c` | -| 1671 | func_8018457C | None | regalloc-order | None | failed | | none — MATCH (160 ins). case1-tail needed a $a0 pin on the state temp | `.run/backlog_drafts/func_8018457C.c` | -| 1672 | func_8018D870 | None | regalloc-order | None | failed | | none — MATCH (match_one 380/380, relocation-masked). Levers: &&-DeMorgan for the mult block layout; lhu-corrected reads; split temps (t=func_8012C658 ret->v1, d8p=d8 load-temp->a0, s60/amt pinned $v1/$a1 for the mult chain); accumulate-in-place for the 0xe add; unsigned-short store for ori 0x8800; d8-load-via-temp to force the addu s3,a0 copy (fixes -1 length drift). | `.run/backlog_drafts/func_8018D870.c` | -| 1673 | func_80142B2C | None | plumbing | None | failed | | none — MATCH | `.run/backlog_drafts/func_80142B2C.c` | -| 1674 | func_80144090 | None | regalloc-order | None | failed | | 154/154 ins structural match (callees/consts/ctrl-flow/stack/GPU-packet all byte-correct); residual 25 = caller-saved temp-reg coalescing in the final ring-vertex block (target reuses dead $s0=iVar3 for iVar3-(iVar4>>6) subu where gcc reuses iVar4>>6's reg; iVar4 mflo -> $a3 vs target $v0) + 2-ins schedule swap of giv-increment vs iVar2*4 -> permuter grinder territory (§27 step-5) | `.run/backlog_drafts/func_80144090.c` | -| 1675 | func_80133AB0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80133AB0.c` | -| 1676 | func_80143D28 | None | regalloc-order | None | failed | | none — MATCH (80 ins, relocation-masked). iVar2/iVar3 pinned $s1/$s2; sVar4 is an | `.run/backlog_drafts/func_80143D28.c` | -| 1677 | func_80144B9C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80144B9C.c` | -| 1678 | func_80166994 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80166994.c` | -| 1679 | func_8013DD68 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8013DD68.c` | +| 5 | func_80175820 | 138 | schedule | 55 | near | 4 | body BYTE-EXACT (52 ins match); only residual is target's phantom 0x10 stack frame (args_size=16 from an eliminated call) which mine lacks — 4 mismatches, all frame/tail. Barrier blocks the frame from filling block-2's delay slot where the target schedules it. | `.run/backlog_drafts/func_80175820.c` | +| 6 | func_8014F4C0 | 138 | struct | 141 | near | 130 | none — MATCH (expansion of proven DEFINE_func_8014F4C0 macro, matched in 137 sibling overlays) | `.run/backlog_drafts/func_8014F4C0.c` | +| 7 | func_80167714 | 138 | schedule | 104 | failed | | reload (move vs lw) + iVar2 a0-vs-v0 register cascade at the +0x1c merge | `.run/backlog_drafts/func_80167714.c` | +| 8 | func_80161208 | 134 | plumbing | 14 | near | 0 | none — MATCH expected (param saved across call → natural $s0, no pin needed) | `.run/backlog_drafts/func_80161208.c` | +| 9 | func_80131CA8 | 134 | other | 19 | near | 0 | none — MATCH (call-through-fnptr dispatcher: explicit return 1/return 0) | `.run/backlog_drafts/func_80131CA8.c` | +| 10 | func_80172C50 | 134 | WAVE | 20 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80172C50.c` | +| 11 | func_8016BF50 | 134 | schedule | 22 | near | 0 | none — MATCH; short buf[3] keeps all 3 stores live + hoisting *(int*)(p+0x34) into a local | `.run/backlog_drafts/func_8016BF50.c` | +| 12 | func_80162CCC | 134 | plumbing | 23 | near | 0 | none — MATCH expected; direct translation, psVar1 as u16* gives lhu, $s0=param_1 survives both calls | `.run/backlog_drafts/func_80162CCC.c` | +| 13 | func_8012A598 | 134 | struct | 24 | near | 0 | none — MATCH (24 ins, relocation-masked) | `.run/backlog_drafts/func_8012A598.c` | +| 14 | func_801733FC | 134 | struct | 25 | near | 0 | none — modeled on sibling func_80173460 (packed 8-byte struct copy + two s16=1 stores) | `.run/backlog_drafts/func_801733FC.c` | +| 15 | func_8016F0E4 | 134 | PINS | 26 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8016F0E4.c` | +| 16 | func_80137614 | 134 | regalloc-order | 26 | near | 0 | none — MATCH (sibling func_8013767C pattern; all 3 params live across the call) | `.run/backlog_drafts/func_80137614.c` | +| 17 | func_80168B70 | 134 | WAVE | 27 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80168B70.c` | +| 18 | func_8012F274 | 134 | remat | 29 | near | 0 | none — MATCH (29 ins, match_one byte-clean via relocation-masked pipeline) | `.run/backlog_drafts/func_8012F274.c` | +| 19 | func_801708B0 | 134 | WAVE | 30 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801708B0.c` | +| 20 | func_80151664 | 134 | plumbing | 35 | near | 0 | none — MATCH (35 ins, relocation-masked); canonical externs kept, call-site casts only | `.run/backlog_drafts/func_80151664.c` | +| 21 | func_8012F40C | 134 | regalloc-order | 36 | near | 0 | none — MATCH (address rematerialized per call via caller-saved $a0 pin) | `.run/backlog_drafts/func_8012F40C.c` | +| 22 | func_801376E8 | 134 | schedule | 51 | near | 0 | none — MATCH (51 ins). 3 levers: (1) adjacent-field array u16 D_80126A14[] for A14/A16 | `.run/backlog_drafts/func_801376E8.c` | +| 23 | func_80151C54 | 134 | PINS | 52 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80151C54.c` | +| 24 | func_801758FC | 134 | schedule | 55 | near | 0 | none — MATCH (55 ins) | `.run/backlog_drafts/func_801758FC.c` | +| 25 | func_801759D8 | 134 | schedule | 56 | near | 0 | none — MATCH (56 ins) | `.run/backlog_drafts/func_801759D8.c` | +| 26 | func_80173A60 | 134 | WAVE | 59 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80173A60.c` | +| 27 | func_80138DE0 | 134 | other | 60 | near | 0 | none — MATCH (60 ins) | `.run/backlog_drafts/func_80138DE0.c` | +| 28 | func_80133298 | 134 | struct | 65 | near | 0 | none — MATCH (65 ins, relocation-masked) | `.run/backlog_drafts/func_80133298.c` | +| 29 | func_8012E014 | 134 | other | 73 | near | 0 | none — MATCH (expected; straightforward struct-field + global-copy body) | `.run/backlog_drafts/func_8012E014.c` | +| 30 | func_80174CB0 | 134 | regalloc-order | 123 | near | 0 | none — MATCH (match_one 123/123). Levers: (1) §21 one combined stack struct {s32 a[5]; ...} | `.run/backlog_drafts/func_80174CB0.c` | +| 31 | func_8016BA68 | 134 | STUB | 29 | near | 1 | STUB: 1 mismatch | `.run/backlog_drafts/func_8016BA68.c` | +| 32 | func_80131A34 | 134 | regalloc-order | 37 | near | 3 | 3-off — (a) prologue saves $ra before $s0 (target: $s0 then $ra) and (b) return-0 path reuses $a1's proven-zero (move $v0,$a1) instead of $zero; both are gcc prologue/return scheduling tie-breaks. Body matches incl. the $v0->$a1 result copy (forced via the $a1-pinned asm anchor), the $v1=-5 mask hoist into the bne delay slot, and the shared-store merge. | `.run/backlog_drafts/func_80131A34.c` | +| 33 | func_801466F0 | 134 | plumbing | 24 | near | 4 | none — MATCH (struct param-spill + branch-polarity) | `.run/backlog_drafts/func_801466F0.c` | +| 34 | func_80147364 | 134 | remat | 30 | near | 4 | none — MATCH (30 ins). Lever: hoist &D_80126B58 into a local ptr `u8 *p=&D_80126B58;` so gcc | `.run/backlog_drafts/func_80147364.c` | +| 35 | func_80146A6C | 134 | struct | 18 | near | 5 | none — MATCH | `.run/backlog_drafts/func_80146A6C.c` | +| 36 | func_80140D68 | 134 | schedule | 65 | near | 5 | 5-ins near-miss — gcc hoists `lui 0xff00` (the 0xFF000000 mask) one slot too early in the first AddPrim block, so the D_800B9A02 index value lands in $v1 instead of $a1 and *param_1 is read late (idx 35-43). Structure + regs otherwise byte-exact (frame eliminated via struct-array D_800AE7BC, &D_800B9A02 held in $a2 via the pB $6 pin, param_1+8 grouping fixes the rest). Pure sched1 list-order residual -> permuter candidate (try reg-hint + reorder around the lui 0xff00 / lw 0($a0) pair). | `.run/backlog_drafts/func_80140D68.c` | +| 37 | func_8016130C | 134 | WAVE | 26 | near | 9 | WAVE: 9 mismatch | `.run/backlog_drafts/func_8016130C.c` | +| 38 | func_80161374 | 134 | schedule | 41 | near | 10 | none — MATCH (41/41 relocation-masked) | `.run/backlog_drafts/func_80161374.c` | +| 39 | func_80163764 | 134 | regalloc-order | 42 | near | 10 | none — MATCH (42 ins). pins $s2/$s1/$s0/$s3 + u32 counter (sltiu) + init order s2,s3,i,p | `.run/backlog_drafts/func_80163764.c` | +| 40 | func_8012EFB8 | 134 | other | 32 | near | 11 | none — MATCH (32 ins, byte-verified via objdump -dz; match_one's default objdump elides the 2 consecutive rtps-delay nops as "..." and miscounts 30, but raw bytes are identical) | `.run/backlog_drafts/func_8012EFB8.c` | +| 41 | func_80146AFC | 134 | schedule | 40 | near | 13 | none — MATCH | `.run/backlog_drafts/func_80146AFC.c` | +| 42 | func_80131CF4 | 134 | schedule | 29 | near | 15 | 15 mismatches cascade from a 2-instruction gap — target reloads *param_1 (lw v0,0(a0)) into v0 before the loop + a loop-label nop; gcc CSEs the guard-read with the loop-entry read so the pre-loop reload never emits. Top 9 instructions (bnez a0 + j epilogue + shared return-block-at-top) MATCH with this for-form. | `.run/backlog_drafts/func_80131CF4.c` | +| 43 | func_80151B98 | 134 | PINS | 47 | near | 15 | PINS: 15 mismatch | `.run/backlog_drafts/func_80151B98.c` | +| 44 | func_8015C030 | 134 | WAVE | 23 | near | 17 | WAVE: 17 mismatch | `.run/backlog_drafts/func_8015C030.c` | +| 45 | func_80170CF0 | 134 | PINS | 30 | near | 17 | PINS: 17 mismatch | `.run/backlog_drafts/func_80170CF0.c` | +| 46 | func_8016191C | 134 | plumbing | 24 | near | 20 | none — MATCH (24 ins). early-return-per-arm: each arm sets $v0 directly + j-tail merges | `.run/backlog_drafts/func_8016191C.c` | +| 47 | func_8014E5B4 | 134 | regalloc-order | 59 | near | 23 | none — MATCH | `.run/backlog_drafts/func_8014E5B4.c` | +| 48 | func_8013C08C | 134 | O0 | 27 | near | 26 | WAVE: 26 mismatch | `.run/backlog_drafts/func_8013C08C.c` | +| 49 | func_80161A90 | 134 | O1 | 34 | near | 26 | WAVE: 26 mismatch | `.run/backlog_drafts/func_80161A90.c` | +| 50 | func_80161888 | 134 | schedule | 37 | near | 30 | none — MATCH (proxy verified) | `.run/backlog_drafts/func_80161888.c` | +| 51 | func_80144B14 | 134 | schedule | 34 | near | 31 | none — MATCH (34 ins). Two stack structs (s16[3] each) passed by addr to | `.run/backlog_drafts/func_80144B14.c` | +| 52 | func_8012B77C | 134 | schedule | 58 | near | 33 | gcc instruction-scheduler load-ordering + 1st-ratan2 delay-slot fill differ (s2 subtraction lands early instead of in the delay slot; `lh s1,2(a2)` hoisted ahead of the iVar8 loads). All regs/ops correct (result pinned $s4 reads uninit then RMW-builds the u32; iVar8 unpinned so both halves load to temps -> `subu s5,v1,v0`). Residual is the §20 store-vs-load/delay-slot scheduler tie-break (source reorder/barrier/precompute all tried, do not move it); ~3-4 real slots, count inflated by offset cascade. move==addu rd,rs,zero byte-identical. | `.run/backlog_drafts/func_8012B77C.c` | +| 53 | func_801778A8 | 134 | WAVE | 38 | near | 36 | WAVE: 36 mismatch | `.run/backlog_drafts/func_801778A8.c` | +| 54 | func_8012A1BC | 134 | schedule | 78 | near | 42 | 42/78 — block-copy bytes correct (char[8] => lwl/lwr/swl/swr); residual is gcc's load-hoist split. Target hoists all 9 non-block scalar loads to the top then stores 4, blk, blk, then late-stores the rest; a "memory" barrier is needed to stop the block copy hoisting+spilling but it also pins the 5 late scalars' stores too early. No single source/barrier shape reproduces "loads cross the block copy but the copy itself does not" — permuter/schedule residual. | `.run/backlog_drafts/func_8012A1BC.c` | +| 55 | func_80146750 | 134 | WAVE | 47 | near | 45 | WAVE: 45 mismatch | `.run/backlog_drafts/func_80146750.c` | +| 56 | func_8016163C | 134 | plumbing | 78 | near | 50 | none — MATCH (78 ins). First arm calls func_801599A4 with NO arg (asm nop delay slot) via fn-ptr cast ((void(*)(void))func_801599A4)(). | `.run/backlog_drafts/func_8016163C.c` | +| 57 | func_80161774 | 134 | plumbing | 69 | near | 53 | none — MATCH (69 ins, match_one verified; clean nested-if; param_1 -> $s0 call-crossing) | `.run/backlog_drafts/func_80161774.c` | +| 58 | func_80132F40 | 134 | STRUCT | 72 | near | 59 | STRUCT: 59 mismatch | `.run/backlog_drafts/func_80132F40.c` | +| 59 | func_8014D610 | 134 | WAVE | 74 | near | 60 | WAVE: 60 mismatch | `.run/backlog_drafts/func_8014D610.c` | +| 60 | func_80178004 | 134 | regalloc-order | 165 | near | 91 | [Phase-27 T8 corrected] close=91 pure local-alloc regalloc wall (§52 flagship; the 'MATCH' claim was a retracted myth — never a real match) | `.run/backlog_drafts/func_80178004.c` | +| 61 | func_801412A8 | 134 | regalloc-order | 198 | near | 110 | 110 mismatch (count-exact 198/198). S11 LUID(x)alloc: register-assignment permutation + prim2 store-schedule. §31 permuter seed (was mis-logged 164). | `.run/backlog_drafts/func_801412A8.c` | +| 62 | func_80156600 | 134 | other | 18 | failed | | none — MATCH (simple counted scan, do-while form per Ghidra-C) | `.run/backlog_drafts/func_80156600.c` | +| 63 | func_801718AC | 134 | WAVE | 22 | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801718AC.c` | +| 64 | func_80151944 | 4 | struct | 15 | near | 0 | none — MATCH (fn-pointer table dispatch; array-of-ptr indexing folds %lo) | `.run/backlog_drafts/func_80151944.c` | +| 65 | func_8017C294 | 2 | regalloc-order | 246 | near | 230 | structurally matched (246 ins, param_3 in $fp, spurious psVar7[1] giv killed via | `.run/backlog_drafts/func_8017C294.c` | +| 66 | func_80157D20 | 1 | plumbing | 21 | near | 0 | none — MATCH expected (call, indexed u16-global load as 2nd arg, then call; param_1 saved across all three calls) | `.run/backlog_drafts/func_80157D20.c` | +| 67 | func_80182988 | 1 | plumbing | 22 | near | 0 | none — MATCH (u16 store of 0xAA10 forces ori, not sign-extended addiu) | `.run/backlog_drafts/func_80182988.c` | +| 68 | func_8017E224 | 1 | struct | 29 | near | 0 | none — MATCH (unaligned 8-byte memcpy of global onto stack + cond byte incr) | `.run/backlog_drafts/func_8017E224.c` | +| 69 | func_801549F8 | 1 | iv-combine | 31 | near | 0 | none — MATCH (31 ins). Re-tie barrier on the index defeats gcc's pointer-giv | `.run/backlog_drafts/func_801549F8.c` | +| 70 | func_801754A8 | 1 | regalloc-order | 37 | near | 0 | none — MATCH (37 ins, relocation-masked proxy) | `.run/backlog_drafts/func_801754A8.c` | +| 71 | func_80183BAC | 1 | struct | 41 | near | 0 | switch jump-table dispatch (jtbl_801D9420); verifying case grouping 0,1,2,5,6/3,7/4 emits the target table + tail | `.run/backlog_drafts/func_80183BAC.c` | +| 72 | func_80183C50 | 1 | struct | 41 | near | 0 | none — MATCH (cross-jump exploit §cookbook L1543: dup func_8012C218 into case3/7 + case4 → merged jal;nop) | `.run/backlog_drafts/func_80183C50.c` | +| 73 | func_8014358C | 1 | regalloc-order | 45 | near | 0 | none — MATCH (relocation-masked match_one) | `.run/backlog_drafts/func_8014358C.c` | +| 74 | func_80183AF0 | 1 | regalloc-order | 47 | near | 0 | none — MATCH (mask pinned $a1/$5 + p pinned $v0/$2; switch w/ distributed func_8012C218 tail via dup calls + cross-jump merge) | `.run/backlog_drafts/func_80183AF0.c` | +| 75 | func_8017EC7C | 1 | struct | 52 | near | 0 | none — MATCH (52 ins, relocation-masked) | `.run/backlog_drafts/func_8017EC7C.c` | +| 76 | func_80183CF4 | 1 | struct | 57 | near | 0 | none — MATCH (clean switch + jtbl; orchestrator owns jtbl/rodata migration) | `.run/backlog_drafts/func_80183CF4.c` | +| 77 | func_801842C8 | 1 | plumbing | 62 | near | 0 | none — MATCH | `.run/backlog_drafts/func_801842C8.c` | +| 78 | func_8018281C | 1 | struct | 76 | near | 0 | none — MATCH (76 ins). jtbl forced via explicit case 4/6 (count>=5 over MIPS tablejump threshold); case-5 block placed between if-block and default via goto so the if-block emits j default w/ e2=0 in the delay slot | `.run/backlog_drafts/func_8018281C.c` | +| 79 | func_80182E7C | 1 | struct | 85 | near | 0 | none — MATCH (85 ins, relocation-masked). Two switch-codegen levers: | `.run/backlog_drafts/func_80182E7C.c` | +| 80 | func_801820DC | 1 | struct | 94 | near | 0 | none — MATCH (switch on entity state at 0x34, inner jtbl on (s8)(u70>>8)) | `.run/backlog_drafts/func_801820DC.c` | +| 81 | func_80184D50 | 1 | schedule | 98 | near | 0 | none — MATCH (98 ins, relocation-masked) | `.run/backlog_drafts/func_80184D50.c` | +| 82 | func_8018103C | 1 | STRUCT | 579 | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018103C.c` | +| 83 | func_8017CFD4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFD4.c` | +| 84 | func_8017CFFC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFFC.c` | +| 85 | func_8017CF78 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CF78.c` | +| 86 | func_8017CFA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFA0.c` | +| 87 | func_8017D13C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D13C.c` | +| 88 | func_8017D164 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D164.c` | +| 89 | func_8017D18C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D18C.c` | +| 90 | func_8017D5D4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D5D4.c` | +| 91 | func_8017D5FC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D5FC.c` | +| 92 | func_8017D02C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D02C.c` | +| 93 | func_8017D054 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D054.c` | +| 94 | func_8017D07C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D07C.c` | +| 95 | func_8017D134 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D134.c` | +| 96 | func_8017D15C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D15C.c` | +| 97 | func_8017D3FC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D3FC.c` | +| 98 | func_8017D6D4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D6D4.c` | +| 99 | func_8017D964 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D964.c` | +| 100 | func_8017F458 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F458.c` | +| 101 | func_8017D418 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D418.c` | +| 102 | func_8017D440 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D440.c` | +| 103 | func_8017E034 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E034.c` | +| 104 | func_8017ED30 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ED30.c` | +| 105 | func_8017ED58 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ED58.c` | +| 106 | func_8017D34C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D34C.c` | +| 107 | func_8017D374 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D374.c` | +| 108 | func_8017D00C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D00C.c` | +| 109 | func_8017D034 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D034.c` | +| 110 | func_8017F1C8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F1C8.c` | +| 111 | func_80182B9C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182B9C.c` | +| 112 | func_801599A4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801599A4.c` | +| 113 | func_8017BEC4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017BEC4.c` | +| 114 | func_8017C150 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017C150.c` | +| 115 | func_8017E734 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E734.c` | +| 116 | func_8017C078 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017C078.c` | +| 117 | func_8017C268 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017C268.c` | +| 118 | func_801803A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801803A0.c` | +| 119 | func_80185D6C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80185D6C.c` | +| 120 | func_8017ED90 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ED90.c` | +| 121 | func_8017ED68 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ED68.c` | +| 122 | func_8017EDB4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDB4.c` | +| 123 | func_8017EDD8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDD8.c` | +| 124 | func_8017CFAC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFAC.c` | +| 125 | func_8017CF70 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CF70.c` | +| 126 | func_801832D0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801832D0.c` | +| 127 | func_8017D008 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D008.c` | +| 128 | func_8017EDDC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDDC.c` | +| 129 | func_8017EFB8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EFB8.c` | +| 130 | func_80183E04 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183E04.c` | +| 131 | func_8017CFCC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFCC.c` | +| 132 | func_8017CFF4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFF4.c` | +| 133 | func_8017CF58 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CF58.c` | +| 134 | func_8017CF98 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CF98.c` | +| 135 | func_80180EF4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180EF4.c` | +| 136 | func_8017D664 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D664.c` | +| 137 | func_8017F02C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F02C.c` | +| 138 | func_8017D698 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D698.c` | +| 139 | func_8017D880 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D880.c` | +| 140 | func_8017CF80 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CF80.c` | +| 141 | func_8017F054 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F054.c` | +| 142 | func_8017DCBC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DCBC.c` | +| 143 | func_80181274 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80181274.c` | +| 144 | func_80180F3C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180F3C.c` | +| 145 | func_80180EE0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180EE0.c` | +| 146 | func_8017EA0C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA0C.c` | +| 147 | func_8017D68C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D68C.c` | +| 148 | func_8017D9FC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D9FC.c` | +| 149 | func_8017E2A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E2A0.c` | +| 150 | func_8017D798 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D798.c` | +| 151 | func_8017D46C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D46C.c` | +| 152 | func_8017D370 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D370.c` | +| 153 | func_8017D0A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D0A0.c` | +| 154 | func_8017D6C0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D6C0.c` | +| 155 | func_8017D884 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D884.c` | +| 156 | func_8017EA24 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA24.c` | +| 157 | func_8017EE00 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EE00.c` | +| 158 | func_80182288 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182288.c` | +| 159 | func_801838F0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801838F0.c` | +| 160 | func_8017D03C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D03C.c` | +| 161 | func_8017E008 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E008.c` | +| 162 | func_8017DA24 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DA24.c` | +| 163 | func_8017D770 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D770.c` | +| 164 | func_8017EA64 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA64.c` | +| 165 | func_8017D0C8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D0C8.c` | +| 166 | func_8017D24C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D24C.c` | +| 167 | func_8017ECC8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ECC8.c` | +| 168 | func_8017EA4C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA4C.c` | +| 169 | func_8017D478 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D478.c` | +| 170 | func_8017D074 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D074.c` | +| 171 | func_8018096C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018096C.c` | +| 172 | func_8017D0CC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D0CC.c` | +| 173 | func_8017D064 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D064.c` | +| 174 | func_8017E278 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E278.c` | +| 175 | func_8017DF8C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DF8C.c` | +| 176 | func_8017EAB0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EAB0.c` | +| 177 | func_8017E030 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E030.c` | +| 178 | func_8017D094 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D094.c` | +| 179 | func_8017F0F0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F0F0.c` | +| 180 | func_8017E640 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E640.c` | +| 181 | func_8017D290 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D290.c` | +| 182 | func_8017E01C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E01C.c` | +| 183 | func_8017D04C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D04C.c` | +| 184 | func_80182258 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182258.c` | +| 185 | func_8017DBB0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DBB0.c` | +| 186 | func_8017DCA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DCA0.c` | +| 187 | func_8017F2CC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F2CC.c` | +| 188 | func_8017F644 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F644.c` | +| 189 | func_8017DE84 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DE84.c` | +| 190 | func_8017DEB0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DEB0.c` | +| 191 | func_8017EF2C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EF2C.c` | +| 192 | func_8017EA88 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA88.c` | +| 193 | func_8017D0AC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D0AC.c` | +| 194 | func_8017D7C0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D7C0.c` | +| 195 | func_8017F0C8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F0C8.c` | +| 196 | func_8017F118 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F118.c` | +| 197 | func_8017EAA4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EAA4.c` | +| 198 | func_8017D494 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D494.c` | +| 199 | func_8017DAAC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DAAC.c` | +| 200 | func_8017E1EC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E1EC.c` | +| 201 | func_8017E0B0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E0B0.c` | +| 202 | func_8017E044 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E044.c` | +| 203 | func_8017E124 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E124.c` | +| 204 | func_80182758 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182758.c` | +| 205 | func_8017DC74 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DC74.c` | +| 206 | func_8017DE6C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DE6C.c` | +| 207 | func_8017F2A4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F2A4.c` | +| 208 | func_8017DF1C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DF1C.c` | +| 209 | func_8017D06C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D06C.c` | +| 210 | func_8017F49C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F49C.c` | +| 211 | func_8017E110 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E110.c` | +| 212 | func_8017E138 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E138.c` | +| 213 | func_8017EACC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EACC.c` | +| 214 | func_8017E1C0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E1C0.c` | +| 215 | func_8017E2C8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E2C8.c` | +| 216 | func_8017E0D8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E0D8.c` | +| 217 | func_8017D030 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D030.c` | +| 218 | func_8018019C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018019C.c` | +| 219 | func_8017D274 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D274.c` | +| 220 | func_8017D4A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D4A0.c` | +| 221 | func_8017DD88 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DD88.c` | +| 222 | func_8017D150 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D150.c` | +| 223 | func_8017EA28 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EA28.c` | +| 224 | func_80180C1C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180C1C.c` | +| 225 | func_8017F254 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F254.c` | +| 226 | func_8017DF54 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DF54.c` | +| 227 | func_8017FAD8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017FAD8.c` | +| 228 | func_80180C7C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180C7C.c` | +| 229 | func_80182860 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182860.c` | +| 230 | func_801844D4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801844D4.c` | +| 231 | func_8017DD60 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DD60.c` | +| 232 | func_8017DE88 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DE88.c` | +| 233 | func_8017D1A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D1A0.c` | +| 234 | func_8017F060 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F060.c` | +| 235 | func_8018234C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018234C.c` | +| 236 | func_8017FB00 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017FB00.c` | +| 237 | func_8017E088 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E088.c` | +| 238 | func_8017DBB4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DBB4.c` | +| 239 | func_8017D078 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D078.c` | +| 240 | func_8017DAA4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DAA4.c` | +| 241 | func_801835C0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801835C0.c` | +| 242 | func_80180FF8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180FF8.c` | +| 243 | func_8017D3A4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D3A4.c` | +| 244 | func_80186BC4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80186BC4.c` | +| 245 | func_80187794 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80187794.c` | +| 246 | func_80180AEC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180AEC.c` | +| 247 | func_80182E04 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182E04.c` | +| 248 | func_8017DA94 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DA94.c` | +| 249 | func_80180EAC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180EAC.c` | +| 250 | func_8017E0A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E0A0.c` | +| 251 | func_8017DA7C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DA7C.c` | +| 252 | func_8017DB78 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DB78.c` | +| 253 | func_8017DD30 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DD30.c` | +| 254 | func_80184674 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80184674.c` | +| 255 | func_80184C90 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80184C90.c` | +| 256 | func_80184884 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80184884.c` | +| 257 | func_8017CFC8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017CFC8.c` | +| 258 | func_80185D7C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80185D7C.c` | +| 259 | func_8017F06C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F06C.c` | +| 260 | func_8018F6DC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018F6DC.c` | +| 261 | func_80185D00 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80185D00.c` | +| 262 | func_801801A8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801801A8.c` | +| 263 | func_8017DFC0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DFC0.c` | +| 264 | func_8017EFD4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EFD4.c` | +| 265 | func_8018266C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018266C.c` | +| 266 | func_80182C88 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182C88.c` | +| 267 | func_8017EB0C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EB0C.c` | +| 268 | func_8017EB34 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EB34.c` | +| 269 | func_8017EDCC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDCC.c` | +| 270 | func_80187814 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80187814.c` | +| 271 | func_8017FBF8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017FBF8.c` | +| 272 | func_80188080 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80188080.c` | +| 273 | func_8017F0D4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F0D4.c` | +| 274 | func_8017ECA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017ECA0.c` | +| 275 | func_8017F54C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F54C.c` | +| 276 | func_80187CD8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80187CD8.c` | +| 277 | func_8017EDA4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDA4.c` | +| 278 | func_8017E58C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E58C.c` | +| 279 | func_8017DDE0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DDE0.c` | +| 280 | func_8017E294 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E294.c` | +| 281 | func_8018355C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018355C.c` | +| 282 | func_8018BE0C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018BE0C.c` | +| 283 | func_8017EDA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EDA0.c` | +| 284 | func_8017EEA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017EEA0.c` | +| 285 | func_8017FD88 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017FD88.c` | +| 286 | func_8017D350 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D350.c` | +| 287 | func_8017F630 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F630.c` | +| 288 | func_80186500 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80186500.c` | +| 289 | func_8017DA78 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DA78.c` | +| 290 | func_8017DB34 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DB34.c` | +| 291 | func_80183284 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183284.c` | +| 292 | func_8017DCF0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DCF0.c` | +| 293 | func_8018189C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018189C.c` | +| 294 | func_8017D2C8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D2C8.c` | +| 295 | func_80184C28 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80184C28.c` | +| 296 | func_8017DAA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DAA0.c` | +| 297 | func_8018F63C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018F63C.c` | +| 298 | func_8017DCC8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DCC8.c` | +| 299 | func_8017DE4C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017DE4C.c` | +| 300 | func_801803B8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801803B8.c` | +| 301 | func_8017D2A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D2A0.c` | +| 302 | func_80182148 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182148.c` | +| 303 | func_80186BD8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80186BD8.c` | +| 304 | func_80187CA8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80187CA8.c` | +| 305 | func_80185BA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80185BA0.c` | +| 306 | func_80183B9C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183B9C.c` | +| 307 | func_8018C24C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018C24C.c` | +| 308 | func_80182A18 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80182A18.c` | +| 309 | func_8018BDE0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018BDE0.c` | +| 310 | func_8018C3A4 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018C3A4.c` | +| 311 | func_80186C1C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80186C1C.c` | +| 312 | func_80180264 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180264.c` | +| 313 | func_8017D700 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D700.c` | +| 314 | func_80186BF8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80186BF8.c` | +| 315 | func_8017D4C0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D4C0.c` | +| 316 | func_8017D5A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D5A0.c` | +| 317 | func_80183554 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183554.c` | +| 318 | func_80180A58 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180A58.c` | +| 319 | func_80188DA0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80188DA0.c` | +| 320 | func_8018A484 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018A484.c` | +| 321 | func_8017D014 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D014.c` | +| 322 | func_8017D5D0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D5D0.c` | +| 323 | func_8017D944 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D944.c` | +| 324 | func_8018540C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018540C.c` | +| 325 | func_8018F704 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018F704.c` | +| 326 | func_80183054 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183054.c` | +| 327 | func_801895A0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801895A0.c` | +| 328 | func_80183DF8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183DF8.c` | +| 329 | func_80180534 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180534.c` | +| 330 | func_8017F214 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017F214.c` | +| 331 | func_80188DC8 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80188DC8.c` | +| 332 | func_80189620 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80189620.c` | +| 333 | func_80185A2C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80185A2C.c` | +| 334 | func_80183100 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80183100.c` | +| 335 | func_8018166C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018166C.c` | +| 336 | func_8017D9AC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017D9AC.c` | +| 337 | func_8018BAE0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018BAE0.c` | +| 338 | func_8018C118 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018C118.c` | +| 339 | func_8018C4BC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018C4BC.c` | +| 340 | func_80188720 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80188720.c` | +| 341 | func_80180860 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180860.c` | +| 342 | func_80180944 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80180944.c` | +| 343 | func_8018603C | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018603C.c` | +| 344 | func_80181D30 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80181D30.c` | +| 345 | func_801819E0 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_801819E0.c` | +| 346 | func_8018C2CC | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018C2CC.c` | +| 347 | func_8018BC34 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018BC34.c` | +| 348 | func_8017E464 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8017E464.c` | +| 349 | func_800CFE60 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_800CFE60.c` | +| 350 | func_800D0214 | None | | None | near | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_800D0214.c` | +| 351 | func_8018598C | None | regalloc-order | None | near | 0 | none — MATCH (168/168). $s4/$s5 pins for base+&local28; s32 sVar1 for single lh; | `.run/backlog_drafts/func_8018598C.c` | +| 352 | func_80187DD0 | None | regalloc-order | None | near | 0 | none — MATCH (174 ins). Levers: obj = *(*(b+0x20)+0x20) reads via b not a (store side uses a); | `.run/backlog_drafts/func_80187DD0.c` | +| 353 | func_801886B0 | None | struct | None | near | 0 | none — MATCH (276 ins, relocation-masked) | `.run/backlog_drafts/func_801886B0.c` | +| 354 | func_80168070 | None | regalloc-order | None | near | 0 | none — MATCH (adapted from proven sibling func_8016A290; matrix is param_4 not a local) | `.run/backlog_drafts/func_80168070.c` | +| 355 | func_80169058 | None | plumbing | None | near | 0 | none — MATCH (verbatim from matched sibling ov_SC07_010 func_80169058) | `.run/backlog_drafts/func_80169058.c` | +| 356 | func_80161D20 | 1 | struct | 14 | near | 1 | none — MATCH (array-of-u16 %lo-fold, §18) | `.run/backlog_drafts/func_80161D20.c` | +| 357 | func_8017F714 | 1 | plumbing | 27 | near | 1 | none — MATCH (27/27 ins, match_one verified) | `.run/backlog_drafts/func_8017F714.c` | +| 358 | func_80142A10 | 1 | struct | 28 | near | 1 | none — MATCH (pending byte-gate) | `.run/backlog_drafts/func_80142A10.c` | +| 359 | func_80161C24 | 1 | struct | 29 | near | 1 | none — MATCH (array-of-struct %lo-fold; even/odd u16 fields at off 0/2, stride 4) | `.run/backlog_drafts/func_80161C24.c` | +| 360 | func_80184C0C | 1 | struct | 48 | near | 1 | none — MATCH (array-of-struct %lo-fold for &D_8018AEB8[idx], stride 0x34) | `.run/backlog_drafts/func_80184C0C.c` | +| 361 | func_801803B0 | 1 | other | 51 | near | 1 | none — MATCH expected; simple if/else, no call-crossing locals beyond param in $s0 | `.run/backlog_drafts/func_801803B0.c` | +| 362 | func_8015FBE0 | 1 | schedule | 58 | near | 1 | none — MATCH | `.run/backlog_drafts/func_8015FBE0.c` | +| 363 | func_8017F114 | 1 | regalloc-order | 75 | near | 1 | none — MATCH | `.run/backlog_drafts/func_8017F114.c` | +| 364 | func_801807D8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801807D8.c` | +| 365 | func_80180AD0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180AD0.c` | +| 366 | func_8017FDB0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017FDB0.c` | +| 367 | func_80180720 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180720.c` | +| 368 | func_80184A28 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184A28.c` | +| 369 | func_80183AFC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80183AFC.c` | +| 370 | func_8017EE50 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017EE50.c` | +| 371 | func_80181FF8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80181FF8.c` | +| 372 | func_801832F4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801832F4.c` | +| 373 | func_8017FE4C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017FE4C.c` | +| 374 | func_801827C4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801827C4.c` | +| 375 | func_80182B68 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182B68.c` | +| 376 | func_80185E38 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80185E38.c` | +| 377 | func_8017FD70 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017FD70.c` | +| 378 | func_801811D4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801811D4.c` | +| 379 | func_801819DC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801819DC.c` | +| 380 | func_8018ADF8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018ADF8.c` | +| 381 | func_80186554 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80186554.c` | +| 382 | func_80180C44 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180C44.c` | +| 383 | func_801873FC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801873FC.c` | +| 384 | func_80183FB4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80183FB4.c` | +| 385 | func_80180E7C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180E7C.c` | +| 386 | func_801835FC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801835FC.c` | +| 387 | func_801892B4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801892B4.c` | +| 388 | func_80184970 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184970.c` | +| 389 | func_801863D4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801863D4.c` | +| 390 | func_80181540 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80181540.c` | +| 391 | func_801809D4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801809D4.c` | +| 392 | func_801802A4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801802A4.c` | +| 393 | func_801830A8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801830A8.c` | +| 394 | func_8017E858 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017E858.c` | +| 395 | func_80186BD4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80186BD4.c` | +| 396 | func_8017FB98 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017FB98.c` | +| 397 | func_8017EE14 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017EE14.c` | +| 398 | func_80181DA0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80181DA0.c` | +| 399 | func_80187840 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80187840.c` | +| 400 | func_80184E58 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184E58.c` | +| 401 | func_80184354 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184354.c` | +| 402 | func_8018011C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018011C.c` | +| 403 | func_8017E29C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017E29C.c` | +| 404 | func_8017D930 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017D930.c` | +| 405 | func_80182A8C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182A8C.c` | +| 406 | func_80181FCC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80181FCC.c` | +| 407 | func_801893E0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801893E0.c` | +| 408 | func_80186908 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80186908.c` | +| 409 | func_80189DC4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80189DC4.c` | +| 410 | func_80182AB0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182AB0.c` | +| 411 | func_80183EA4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80183EA4.c` | +| 412 | func_8018B344 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018B344.c` | +| 413 | func_80188858 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80188858.c` | +| 414 | func_8018773C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018773C.c` | +| 415 | func_80182E9C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182E9C.c` | +| 416 | func_8017F378 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017F378.c` | +| 417 | func_80184BAC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184BAC.c` | +| 418 | func_801852D4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801852D4.c` | +| 419 | func_80189B60 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80189B60.c` | +| 420 | func_8018445C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018445C.c` | +| 421 | func_8018AA08 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018AA08.c` | +| 422 | func_80182CEC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182CEC.c` | +| 423 | func_8017FBB4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017FBB4.c` | +| 424 | func_8018C8A0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018C8A0.c` | +| 425 | func_8018944C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018944C.c` | +| 426 | func_8018A598 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018A598.c` | +| 427 | func_8017EA40 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017EA40.c` | +| 428 | func_801826C8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801826C8.c` | +| 429 | func_801854C0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801854C0.c` | +| 430 | func_8017EC64 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017EC64.c` | +| 431 | func_80184C94 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80184C94.c` | +| 432 | func_80185CE4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80185CE4.c` | +| 433 | func_8017EA68 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017EA68.c` | +| 434 | func_80180074 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180074.c` | +| 435 | func_801847E4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801847E4.c` | +| 436 | func_80182470 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80182470.c` | +| 437 | func_8017E3D8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017E3D8.c` | +| 438 | func_8018386C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018386C.c` | +| 439 | func_80187A0C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80187A0C.c` | +| 440 | func_8018893C | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8018893C.c` | +| 441 | func_80186AE8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80186AE8.c` | +| 442 | func_80185BEC | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80185BEC.c` | +| 443 | func_801900B0 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_801900B0.c` | +| 444 | func_80180AA4 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_80180AA4.c` | +| 445 | func_8017BFC8 | None | | None | near | 1 | residual: 1 mismatch | `.run/backlog_drafts/func_8017BFC8.c` | +| 446 | func_8016EC0C | 1 | schedule | 88 | near | 2 | none — MATCH (88 ins). Sparse switch(uVar2) = gcc's beq-pivot+slti comparison | `.run/backlog_drafts/func_8016EC0C.c` | +| 447 | func_8017F6B0 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017F6B0.c` | +| 448 | func_8017DDFC | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017DDFC.c` | +| 449 | func_801817DC | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_801817DC.c` | +| 450 | func_80182264 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80182264.c` | +| 451 | func_80181834 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80181834.c` | +| 452 | func_8018558C | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8018558C.c` | +| 453 | func_801843CC | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_801843CC.c` | +| 454 | func_8017FC8C | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017FC8C.c` | +| 455 | func_80183228 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80183228.c` | +| 456 | func_80183118 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80183118.c` | +| 457 | func_8017E404 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017E404.c` | +| 458 | func_80183B4C | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80183B4C.c` | +| 459 | func_801879B0 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_801879B0.c` | +| 460 | func_801828C8 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_801828C8.c` | +| 461 | func_8017FA80 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017FA80.c` | +| 462 | func_8017E874 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017E874.c` | +| 463 | func_80185000 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80185000.c` | +| 464 | func_80180F18 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80180F18.c` | +| 465 | func_8018C658 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8018C658.c` | +| 466 | func_80184294 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80184294.c` | +| 467 | func_80183F48 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80183F48.c` | +| 468 | func_80180834 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80180834.c` | +| 469 | func_8018BA9C | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8018BA9C.c` | +| 470 | func_80186DAC | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_80186DAC.c` | +| 471 | func_8017EE78 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_8017EE78.c` | +| 472 | func_801804C8 | None | | None | near | 2 | residual: 2 mismatch | `.run/backlog_drafts/func_801804C8.c` | +| 473 | func_8017D468 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017D468.c` | +| 474 | func_8017DCE4 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017DCE4.c` | +| 475 | func_801816FC | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801816FC.c` | +| 476 | func_8017DE90 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017DE90.c` | +| 477 | func_80190480 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80190480.c` | +| 478 | func_8018AFDC | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018AFDC.c` | +| 479 | func_80180D34 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80180D34.c` | +| 480 | func_8017F38C | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017F38C.c` | +| 481 | func_8018AE6C | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018AE6C.c` | +| 482 | func_80181720 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80181720.c` | +| 483 | func_80183BC8 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80183BC8.c` | +| 484 | func_8017F0C0 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017F0C0.c` | +| 485 | func_8018D4B4 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018D4B4.c` | +| 486 | func_801874E8 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801874E8.c` | +| 487 | func_80183320 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80183320.c` | +| 488 | func_801857D4 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801857D4.c` | +| 489 | func_8018A184 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018A184.c` | +| 490 | func_8018B234 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018B234.c` | +| 491 | func_8017F534 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017F534.c` | +| 492 | func_801861DC | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801861DC.c` | +| 493 | func_801896EC | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801896EC.c` | +| 494 | func_8018C7C8 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018C7C8.c` | +| 495 | func_80187B80 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80187B80.c` | +| 496 | func_80181060 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80181060.c` | +| 497 | func_801806C8 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801806C8.c` | +| 498 | func_8018CA10 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018CA10.c` | +| 499 | func_8018672C | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018672C.c` | +| 500 | func_801894B0 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_801894B0.c` | +| 501 | func_80184D98 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80184D98.c` | +| 502 | func_8018B1E0 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8018B1E0.c` | +| 503 | func_80184870 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_80184870.c` | +| 504 | func_8017E6B0 | None | | None | near | 3 | residual: 3 mismatch | `.run/backlog_drafts/func_8017E6B0.c` | +| 505 | func_80188484 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80188484.c` | +| 506 | func_8017F8E4 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8017F8E4.c` | +| 507 | func_80187074 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80187074.c` | +| 508 | func_8017FF90 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8017FF90.c` | +| 509 | func_8017FAE0 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8017FAE0.c` | +| 510 | func_8017E918 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8017E918.c` | +| 511 | func_80180ED4 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80180ED4.c` | +| 512 | func_80183444 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80183444.c` | +| 513 | func_80186700 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80186700.c` | +| 514 | func_80183710 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80183710.c` | +| 515 | func_80181CD8 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80181CD8.c` | +| 516 | func_80184880 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80184880.c` | +| 517 | func_8018CC04 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8018CC04.c` | +| 518 | func_8017DED8 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8017DED8.c` | +| 519 | func_80181ECC | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80181ECC.c` | +| 520 | func_80182E5C | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80182E5C.c` | +| 521 | func_8018B2F4 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8018B2F4.c` | +| 522 | func_80183638 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80183638.c` | +| 523 | func_8018455C | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8018455C.c` | +| 524 | func_80181B08 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80181B08.c` | +| 525 | func_801823F0 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_801823F0.c` | +| 526 | func_80188510 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80188510.c` | +| 527 | func_80181A44 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80181A44.c` | +| 528 | func_80182CD4 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_80182CD4.c` | +| 529 | func_8018119C | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8018119C.c` | +| 530 | func_8018C394 | None | | None | near | 4 | residual: 4 mismatch | `.run/backlog_drafts/func_8018C394.c` | +| 531 | func_80135260 | 1 | other | 136 | near | 5 | none — MATCH | `.run/backlog_drafts/func_80135260.c` | +| 532 | func_801803F0 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_801803F0.c` | +| 533 | func_8017F7D8 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017F7D8.c` | +| 534 | func_80181B8C | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80181B8C.c` | +| 535 | func_80180564 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80180564.c` | +| 536 | func_801809F4 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_801809F4.c` | +| 537 | func_8017F250 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017F250.c` | +| 538 | func_8017F66C | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017F66C.c` | +| 539 | func_80181E18 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80181E18.c` | +| 540 | func_801852C8 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_801852C8.c` | +| 541 | func_80180100 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80180100.c` | +| 542 | func_80181EF0 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80181EF0.c` | +| 543 | func_801821B8 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_801821B8.c` | +| 544 | func_8018312C | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8018312C.c` | +| 545 | func_8017F11C | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017F11C.c` | +| 546 | func_80182810 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80182810.c` | +| 547 | func_8017FDA8 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017FDA8.c` | +| 548 | func_80182938 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80182938.c` | +| 549 | func_8018517C | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8018517C.c` | +| 550 | func_80182B18 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80182B18.c` | +| 551 | func_8017DA90 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_8017DA90.c` | +| 552 | func_80181BB4 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80181BB4.c` | +| 553 | func_80185338 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80185338.c` | +| 554 | func_80185978 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80185978.c` | +| 555 | func_80185E54 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80185E54.c` | +| 556 | func_80187DAC | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80187DAC.c` | +| 557 | func_80183DB8 | None | | None | near | 5 | residual: 5 mismatch | `.run/backlog_drafts/func_80183DB8.c` | +| 558 | func_80180AE8 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80180AE8.c` | +| 559 | func_8017D398 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017D398.c` | +| 560 | func_80184A58 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80184A58.c` | +| 561 | func_80182280 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80182280.c` | +| 562 | func_80180744 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80180744.c` | +| 563 | func_8017F4CC | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017F4CC.c` | +| 564 | func_80181C78 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80181C78.c` | +| 565 | func_801855DC | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_801855DC.c` | +| 566 | func_8017FCD4 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017FCD4.c` | +| 567 | func_80183158 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80183158.c` | +| 568 | func_80182E2C | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80182E2C.c` | +| 569 | func_8017F704 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017F704.c` | +| 570 | func_8017E06C | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017E06C.c` | +| 571 | func_80187AD4 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80187AD4.c` | +| 572 | func_8018595C | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8018595C.c` | +| 573 | func_80185B20 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80185B20.c` | +| 574 | func_801802CC | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_801802CC.c` | +| 575 | func_8017E2C4 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017E2C4.c` | +| 576 | func_8017F0EC | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8017F0EC.c` | +| 577 | func_80180FFC | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80180FFC.c` | +| 578 | func_80188F80 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80188F80.c` | +| 579 | func_80181FF4 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80181FF4.c` | +| 580 | func_80189240 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80189240.c` | +| 581 | func_80184618 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80184618.c` | +| 582 | func_8018413C | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_8018413C.c` | +| 583 | func_801816E0 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_801816E0.c` | +| 584 | func_801819A0 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_801819A0.c` | +| 585 | func_801855F0 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_801855F0.c` | +| 586 | func_80182048 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80182048.c` | +| 587 | func_80181230 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80181230.c` | +| 588 | func_80186A28 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80186A28.c` | +| 589 | func_80186A88 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80186A88.c` | +| 590 | func_80180F4C | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80180F4C.c` | +| 591 | func_80186C88 | None | | None | near | 6 | residual: 6 mismatch | `.run/backlog_drafts/func_80186C88.c` | +| 592 | func_801815D8 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_801815D8.c` | +| 593 | func_80189898 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80189898.c` | +| 594 | func_8017CF40 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8017CF40.c` | +| 595 | func_8017FF6C | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8017FF6C.c` | +| 596 | func_8018B184 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8018B184.c` | +| 597 | func_80182198 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80182198.c` | +| 598 | func_8018B5C0 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8018B5C0.c` | +| 599 | func_80180458 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80180458.c` | +| 600 | func_8018D7CC | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8018D7CC.c` | +| 601 | func_80185C6C | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80185C6C.c` | +| 602 | func_8018B450 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8018B450.c` | +| 603 | func_8018146C | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8018146C.c` | +| 604 | func_8017C104 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8017C104.c` | +| 605 | func_80186D5C | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80186D5C.c` | +| 606 | func_80185AEC | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80185AEC.c` | +| 607 | func_80180410 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80180410.c` | +| 608 | func_80185DB8 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80185DB8.c` | +| 609 | func_80180754 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80180754.c` | +| 610 | func_80186720 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80186720.c` | +| 611 | func_8017EA60 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8017EA60.c` | +| 612 | func_8017F710 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_8017F710.c` | +| 613 | func_80184990 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80184990.c` | +| 614 | func_80185344 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80185344.c` | +| 615 | func_80182230 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80182230.c` | +| 616 | func_80183184 | None | | None | near | 7 | residual: 7 mismatch | `.run/backlog_drafts/func_80183184.c` | +| 617 | func_80185F24 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80185F24.c` | +| 618 | func_80189858 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80189858.c` | +| 619 | func_8017FFF0 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017FFF0.c` | +| 620 | func_8017E908 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017E908.c` | +| 621 | func_8017CF9C | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017CF9C.c` | +| 622 | func_8017D8AC | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017D8AC.c` | +| 623 | func_801832B0 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801832B0.c` | +| 624 | func_801813B8 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801813B8.c` | +| 625 | func_80184734 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80184734.c` | +| 626 | func_801825C8 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801825C8.c` | +| 627 | func_80182A5C | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80182A5C.c` | +| 628 | func_80182E30 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80182E30.c` | +| 629 | func_80183430 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80183430.c` | +| 630 | func_80186120 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80186120.c` | +| 631 | func_8018108C | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8018108C.c` | +| 632 | func_801848B0 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801848B0.c` | +| 633 | func_80181688 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80181688.c` | +| 634 | func_80181034 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80181034.c` | +| 635 | func_80188508 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80188508.c` | +| 636 | func_80187370 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80187370.c` | +| 637 | func_8018D330 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8018D330.c` | +| 638 | func_80186A70 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80186A70.c` | +| 639 | func_8017DBE4 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017DBE4.c` | +| 640 | func_8017F474 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017F474.c` | +| 641 | func_8017E804 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017E804.c` | +| 642 | func_80182D50 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80182D50.c` | +| 643 | func_801843B8 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801843B8.c` | +| 644 | func_80183D60 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80183D60.c` | +| 645 | func_80181C84 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80181C84.c` | +| 646 | func_801842D4 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801842D4.c` | +| 647 | func_80185EB4 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80185EB4.c` | +| 648 | func_80188690 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80188690.c` | +| 649 | func_80185F20 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80185F20.c` | +| 650 | func_80183FD8 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_80183FD8.c` | +| 651 | func_8018F658 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8018F658.c` | +| 652 | func_8017F228 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_8017F228.c` | +| 653 | func_801801F4 | None | | None | near | 8 | residual: 8 mismatch | `.run/backlog_drafts/func_801801F4.c` | +| 654 | func_8017F358 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017F358.c` | +| 655 | func_80180E9C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80180E9C.c` | +| 656 | func_8017BEBC | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017BEBC.c` | +| 657 | func_80180854 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80180854.c` | +| 658 | func_80180E54 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80180E54.c` | +| 659 | func_8017F7F4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017F7F4.c` | +| 660 | func_8017EF28 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017EF28.c` | +| 661 | func_801816E4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801816E4.c` | +| 662 | func_8017D400 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017D400.c` | +| 663 | func_8017D6E8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017D6E8.c` | +| 664 | func_8017E4F8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017E4F8.c` | +| 665 | func_801829F4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801829F4.c` | +| 666 | func_801822A8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801822A8.c` | +| 667 | func_8017E954 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017E954.c` | +| 668 | func_80181F84 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80181F84.c` | +| 669 | func_801827FC | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801827FC.c` | +| 670 | func_8017FE88 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017FE88.c` | +| 671 | func_801806B8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801806B8.c` | +| 672 | func_80180EC0 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80180EC0.c` | +| 673 | func_80181C4C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80181C4C.c` | +| 674 | func_801817A4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801817A4.c` | +| 675 | func_8017E52C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017E52C.c` | +| 676 | func_801805B0 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801805B0.c` | +| 677 | func_8018897C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018897C.c` | +| 678 | func_8018AA88 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018AA88.c` | +| 679 | func_8017FED4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017FED4.c` | +| 680 | func_801835F0 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801835F0.c` | +| 681 | func_8017CCD4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017CCD4.c` | +| 682 | func_801858C4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801858C4.c` | +| 683 | func_8018C310 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018C310.c` | +| 684 | func_80182AD4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80182AD4.c` | +| 685 | func_8018868C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018868C.c` | +| 686 | func_8017F624 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017F624.c` | +| 687 | func_8017FEB4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017FEB4.c` | +| 688 | func_80182298 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80182298.c` | +| 689 | func_80187114 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80187114.c` | +| 690 | func_80184590 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80184590.c` | +| 691 | func_80181B34 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80181B34.c` | +| 692 | func_801860F8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801860F8.c` | +| 693 | func_8017FFD8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017FFD8.c` | +| 694 | func_80188BF8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80188BF8.c` | +| 695 | func_80183BD0 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80183BD0.c` | +| 696 | func_801860F4 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801860F4.c` | +| 697 | func_80183628 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80183628.c` | +| 698 | func_8018964C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018964C.c` | +| 699 | func_801854C8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801854C8.c` | +| 700 | func_80184664 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80184664.c` | +| 701 | func_80185528 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80185528.c` | +| 702 | func_80187454 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80187454.c` | +| 703 | func_8017F7BC | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017F7BC.c` | +| 704 | func_801830C8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801830C8.c` | +| 705 | func_8017D4F0 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8017D4F0.c` | +| 706 | func_801825E8 | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_801825E8.c` | +| 707 | func_8018C3EC | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_8018C3EC.c` | +| 708 | func_80183C1C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80183C1C.c` | +| 709 | func_80180C3C | None | | None | near | 9 | residual: 9 mismatch | `.run/backlog_drafts/func_80180C3C.c` | +| 710 | func_80191C50 | None | schedule | None | near | 9 | close=9 — only the case-7 sp20[] setup window (0x80192380..0x801923A4): gcc's list scheduler picks the D_80126B62 lui 2nd (its extra `addiu -0x38` gives that chain +1 priority) where the target picks D_80126B66 2nd (LUID/program order); everything else (710/710 ins, frame 0x40, $s0/$s1, jtbl, 3 entity loops, 8 sync blocks, cross-jumped L4AC tail) is byte-identical. | `.run/backlog_drafts/func_80191C50.c` | +| 711 | func_80185A00 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80185A00.c` | +| 712 | func_8017FCC0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017FCC0.c` | +| 713 | func_8017F2D0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017F2D0.c` | +| 714 | func_801833C8 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801833C8.c` | +| 715 | func_8017FFD0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017FFD0.c` | +| 716 | func_80180E34 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80180E34.c` | +| 717 | func_801844C4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801844C4.c` | +| 718 | func_8018AB24 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018AB24.c` | +| 719 | func_80188C84 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80188C84.c` | +| 720 | func_8017E184 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017E184.c` | +| 721 | func_80181434 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80181434.c` | +| 722 | func_80181A70 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80181A70.c` | +| 723 | func_8017DF88 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017DF88.c` | +| 724 | func_801841D0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801841D0.c` | +| 725 | func_80184204 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80184204.c` | +| 726 | func_8018534C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018534C.c` | +| 727 | func_80184940 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80184940.c` | +| 728 | func_80180B60 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80180B60.c` | +| 729 | func_8017FB0C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017FB0C.c` | +| 730 | func_8017E72C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017E72C.c` | +| 731 | func_80189C4C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80189C4C.c` | +| 732 | func_8017E670 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017E670.c` | +| 733 | func_80180014 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80180014.c` | +| 734 | func_80180B90 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80180B90.c` | +| 735 | func_801848E8 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801848E8.c` | +| 736 | func_8017E094 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017E094.c` | +| 737 | func_8018082C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018082C.c` | +| 738 | func_8018373C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018373C.c` | +| 739 | func_8017DF48 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017DF48.c` | +| 740 | func_80182724 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80182724.c` | +| 741 | func_8018257C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018257C.c` | +| 742 | func_80182EC0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80182EC0.c` | +| 743 | func_80188E8C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80188E8C.c` | +| 744 | func_801806E0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801806E0.c` | +| 745 | func_8018A5A4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018A5A4.c` | +| 746 | func_80181AC0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80181AC0.c` | +| 747 | func_801841A0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801841A0.c` | +| 748 | func_80183744 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80183744.c` | +| 749 | func_8018924C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018924C.c` | +| 750 | func_80185778 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80185778.c` | +| 751 | func_801870B4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801870B4.c` | +| 752 | func_80185E3C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80185E3C.c` | +| 753 | func_8017F5E8 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017F5E8.c` | +| 754 | func_801823D4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801823D4.c` | +| 755 | func_80186EE4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80186EE4.c` | +| 756 | func_80180AF4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80180AF4.c` | +| 757 | func_801831FC | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801831FC.c` | +| 758 | func_801862D4 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801862D4.c` | +| 759 | func_80184578 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80184578.c` | +| 760 | func_8017F804 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017F804.c` | +| 761 | func_80183888 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80183888.c` | +| 762 | func_8017F2EC | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017F2EC.c` | +| 763 | func_80187224 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80187224.c` | +| 764 | func_801850F8 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801850F8.c` | +| 765 | func_80183F7C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80183F7C.c` | +| 766 | func_801800DC | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801800DC.c` | +| 767 | func_80182190 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80182190.c` | +| 768 | func_80185C90 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80185C90.c` | +| 769 | func_80182380 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80182380.c` | +| 770 | func_8018EDB8 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018EDB8.c` | +| 771 | func_80190298 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80190298.c` | +| 772 | func_8018311C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018311C.c` | +| 773 | func_8018A594 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018A594.c` | +| 774 | func_8017DED0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017DED0.c` | +| 775 | func_8018228C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018228C.c` | +| 776 | func_801889E0 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_801889E0.c` | +| 777 | func_8017DEEC | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017DEEC.c` | +| 778 | func_80183FAC | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80183FAC.c` | +| 779 | func_8017F300 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8017F300.c` | +| 780 | func_80184794 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80184794.c` | +| 781 | func_80185648 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80185648.c` | +| 782 | func_80186D64 | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_80186D64.c` | +| 783 | func_8018151C | None | | None | near | 10 | residual: 10 mismatch | `.run/backlog_drafts/func_8018151C.c` | +| 784 | func_8016E9EC | 1 | schedule | 53 | near | 11 | 11 left — all GNU scheduler/canon tie-breaks (regs all match via pins): (a) prologue hoists `addiu a1,0x1C` into the save block; (b) first lbu reads $a0 not $s1 (incoming-arg still live); (c) iCopy copy `addu s4,s0` lands early (scheduler) vs target's func_800D2CA8 delay-slot; (d) `addu a2,s2,s3` vs target `s3,s2` commutative-canon (unflippable w/o breaking load order). Permuter can't run (register __asm__ pins rejected, cookbook §5a). | `.run/backlog_drafts/func_8016E9EC.c` | +| 785 | func_8017F7E8 | 1 | WAVE | 177 | near | 11 | WAVE: 11 mismatch | `.run/backlog_drafts/func_8017F7E8.c` | +| 786 | func_801824D0 | 1 | WAVE | 181 | near | 11 | WAVE: 11 mismatch | `.run/backlog_drafts/func_801824D0.c` | +| 787 | func_80182F4C | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80182F4C.c` | +| 788 | func_801835C8 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_801835C8.c` | +| 789 | func_8017D6C4 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017D6C4.c` | +| 790 | func_80181960 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80181960.c` | +| 791 | func_8017D7C8 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017D7C8.c` | +| 792 | func_8017F67C | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017F67C.c` | +| 793 | func_80181724 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80181724.c` | +| 794 | func_8017F450 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017F450.c` | +| 795 | func_8017F128 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017F128.c` | +| 796 | func_80180154 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80180154.c` | +| 797 | func_80180240 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80180240.c` | +| 798 | func_80185274 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80185274.c` | +| 799 | func_801833D4 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_801833D4.c` | +| 800 | func_80184028 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80184028.c` | +| 801 | func_80180EA8 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80180EA8.c` | +| 802 | func_8018F91C | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8018F91C.c` | +| 803 | func_801835F4 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_801835F4.c` | +| 804 | func_80187404 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80187404.c` | +| 805 | func_801848B4 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_801848B4.c` | +| 806 | func_8017E5D4 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017E5D4.c` | +| 807 | func_80182118 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80182118.c` | +| 808 | func_8017E2C0 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017E2C0.c` | +| 809 | func_80181744 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80181744.c` | +| 810 | func_8017EECC | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017EECC.c` | +| 811 | func_80182F78 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80182F78.c` | +| 812 | func_8017F154 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017F154.c` | +| 813 | func_8017DC94 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_8017DC94.c` | +| 814 | func_80180CD0 | None | | None | near | 11 | residual: 11 mismatch | `.run/backlog_drafts/func_80180CD0.c` | +| 815 | func_8013C964 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8013C964.c` | +| 816 | func_8013B568 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8013B568.c` | +| 817 | func_8018150C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018150C.c` | +| 818 | func_801803A4 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801803A4.c` | +| 819 | func_8017D7F8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017D7F8.c` | +| 820 | func_8017FFFC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017FFFC.c` | +| 821 | func_8018766C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018766C.c` | +| 822 | func_8017DFF8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017DFF8.c` | +| 823 | func_8017D08C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017D08C.c` | +| 824 | func_8017DE40 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017DE40.c` | +| 825 | func_8017DBD8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017DBD8.c` | +| 826 | func_801833BC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801833BC.c` | +| 827 | func_8017F574 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017F574.c` | +| 828 | func_80187344 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80187344.c` | +| 829 | func_80183AC8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80183AC8.c` | +| 830 | func_80181C08 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80181C08.c` | +| 831 | func_801822C8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801822C8.c` | +| 832 | func_80181388 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80181388.c` | +| 833 | func_80185C2C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80185C2C.c` | +| 834 | func_80183BEC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80183BEC.c` | +| 835 | func_801846EC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801846EC.c` | +| 836 | func_80184DB4 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80184DB4.c` | +| 837 | func_8018AE08 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018AE08.c` | +| 838 | func_80184698 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80184698.c` | +| 839 | func_80184718 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80184718.c` | +| 840 | func_8018134C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018134C.c` | +| 841 | func_8017F4BC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017F4BC.c` | +| 842 | func_80181070 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80181070.c` | +| 843 | func_801810A4 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801810A4.c` | +| 844 | func_801810D8 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801810D8.c` | +| 845 | func_801819CC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801819CC.c` | +| 846 | func_80180554 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80180554.c` | +| 847 | func_80181E5C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80181E5C.c` | +| 848 | func_80189DDC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80189DDC.c` | +| 849 | func_8018ABE0 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018ABE0.c` | +| 850 | func_80189A60 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80189A60.c` | +| 851 | func_8018278C | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8018278C.c` | +| 852 | func_801827C0 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_801827C0.c` | +| 853 | func_80186A58 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_80186A58.c` | +| 854 | func_8017F2BC | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017F2BC.c` | +| 855 | func_8017DEA4 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017DEA4.c` | +| 856 | func_8017F184 | None | | None | near | 12 | residual: 12 mismatch | `.run/backlog_drafts/func_8017F184.c` | +| 857 | func_80185F58 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80185F58.c` | +| 858 | func_8018A3C8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8018A3C8.c` | +| 859 | func_8017EA20 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017EA20.c` | +| 860 | func_80180528 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80180528.c` | +| 861 | func_80180BCC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80180BCC.c` | +| 862 | func_801818EC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801818EC.c` | +| 863 | func_8017DA3C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017DA3C.c` | +| 864 | func_8017EDA8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017EDA8.c` | +| 865 | func_801816CC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801816CC.c` | +| 866 | func_8017D914 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D914.c` | +| 867 | func_801828A8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801828A8.c` | +| 868 | func_8017FD58 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017FD58.c` | +| 869 | func_8017F830 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017F830.c` | +| 870 | func_801807B8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801807B8.c` | +| 871 | func_8018276C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8018276C.c` | +| 872 | func_80183AF8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80183AF8.c` | +| 873 | func_801858D0 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801858D0.c` | +| 874 | func_80180C34 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80180C34.c` | +| 875 | func_80182D3C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80182D3C.c` | +| 876 | func_8018BDA4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8018BDA4.c` | +| 877 | func_8017C8E4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017C8E4.c` | +| 878 | func_80186D30 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80186D30.c` | +| 879 | func_80182D6C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80182D6C.c` | +| 880 | func_8017E84C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017E84C.c` | +| 881 | func_8017F094 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017F094.c` | +| 882 | func_8017F0D8 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017F0D8.c` | +| 883 | func_8017D670 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D670.c` | +| 884 | func_8017D3BC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D3BC.c` | +| 885 | func_8017E358 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017E358.c` | +| 886 | func_80180420 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80180420.c` | +| 887 | func_8017CFE4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017CFE4.c` | +| 888 | func_8017E35C | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017E35C.c` | +| 889 | func_801834E4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801834E4.c` | +| 890 | func_801811B4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801811B4.c` | +| 891 | func_8017D0D4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D0D4.c` | +| 892 | func_8017E060 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017E060.c` | +| 893 | func_8017D0F4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D0F4.c` | +| 894 | func_8017DEC4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017DEC4.c` | +| 895 | func_801811DC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_801811DC.c` | +| 896 | func_8017D6A4 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D6A4.c` | +| 897 | func_8017D348 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D348.c` | +| 898 | func_8017CDBC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017CDBC.c` | +| 899 | func_80187BAC | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_80187BAC.c` | +| 900 | func_8017D224 | None | | None | near | 13 | residual: 13 mismatch | `.run/backlog_drafts/func_8017D224.c` | +| 901 | func_80161CD0 | 1 | regalloc-order | 20 | near | 14 | param_2 must survive the call in $s0; try plain C first then pin to $16 | `.run/backlog_drafts/func_80161CD0.c` | +| 902 | func_80180D10 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80180D10.c` | +| 903 | func_8018316C | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8018316C.c` | +| 904 | func_8017E808 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017E808.c` | +| 905 | func_8017EDC4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017EDC4.c` | +| 906 | func_80180654 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80180654.c` | +| 907 | func_8017C6F4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017C6F4.c` | +| 908 | func_8017E4F0 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017E4F0.c` | +| 909 | func_8018B2DC | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8018B2DC.c` | +| 910 | func_80183398 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80183398.c` | +| 911 | func_801812F0 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801812F0.c` | +| 912 | func_80181468 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80181468.c` | +| 913 | func_80184384 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80184384.c` | +| 914 | func_8018A934 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8018A934.c` | +| 915 | func_8018B50C | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8018B50C.c` | +| 916 | func_80182844 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80182844.c` | +| 917 | func_801884AC | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801884AC.c` | +| 918 | func_80181B90 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80181B90.c` | +| 919 | func_80185F98 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80185F98.c` | +| 920 | func_80185EEC | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80185EEC.c` | +| 921 | func_80186DE8 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80186DE8.c` | +| 922 | func_801838EC | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801838EC.c` | +| 923 | func_80182348 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80182348.c` | +| 924 | func_80185CD4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80185CD4.c` | +| 925 | func_801892C0 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801892C0.c` | +| 926 | func_801859E4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801859E4.c` | +| 927 | func_80184B70 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80184B70.c` | +| 928 | func_801871C4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801871C4.c` | +| 929 | func_80189504 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80189504.c` | +| 930 | func_8017C918 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017C918.c` | +| 931 | func_80181DC4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80181DC4.c` | +| 932 | func_8017D63C | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017D63C.c` | +| 933 | func_801813F0 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_801813F0.c` | +| 934 | func_80181F6C | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80181F6C.c` | +| 935 | func_8017EA04 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017EA04.c` | +| 936 | func_8017EF68 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017EF68.c` | +| 937 | func_8017EBA8 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017EBA8.c` | +| 938 | func_80185404 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80185404.c` | +| 939 | func_8017D7C4 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017D7C4.c` | +| 940 | func_80181CBC | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80181CBC.c` | +| 941 | func_8017D974 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_8017D974.c` | +| 942 | func_80180950 | None | | None | near | 14 | residual: 14 mismatch | `.run/backlog_drafts/func_80180950.c` | +| 943 | func_80181784 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181784.c` | +| 944 | func_8017FFE8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017FFE8.c` | +| 945 | func_80183DC4 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80183DC4.c` | +| 946 | func_801820F0 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_801820F0.c` | +| 947 | func_8018B0EC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8018B0EC.c` | +| 948 | func_801803F4 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_801803F4.c` | +| 949 | func_8017E818 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E818.c` | +| 950 | func_80181B0C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181B0C.c` | +| 951 | func_80184010 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80184010.c` | +| 952 | func_8018648C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8018648C.c` | +| 953 | func_8017F138 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F138.c` | +| 954 | func_8017D9B8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D9B8.c` | +| 955 | func_8017F3C0 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F3C0.c` | +| 956 | func_80180DB0 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80180DB0.c` | +| 957 | func_8017E290 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E290.c` | +| 958 | func_8017EDC8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017EDC8.c` | +| 959 | func_80181A94 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181A94.c` | +| 960 | func_8017E318 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E318.c` | +| 961 | func_80181B44 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181B44.c` | +| 962 | func_8017D1B4 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D1B4.c` | +| 963 | func_8017E778 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E778.c` | +| 964 | func_80180D5C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80180D5C.c` | +| 965 | func_8017CDB8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CDB8.c` | +| 966 | func_8017CE20 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CE20.c` | +| 967 | func_8017CE40 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CE40.c` | +| 968 | func_8017D220 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D220.c` | +| 969 | func_8017E89C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E89C.c` | +| 970 | func_8017E8DC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E8DC.c` | +| 971 | func_80183718 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80183718.c` | +| 972 | func_8017EB1C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017EB1C.c` | +| 973 | func_80181028 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181028.c` | +| 974 | func_8017DACC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017DACC.c` | +| 975 | func_8018533C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8018533C.c` | +| 976 | func_8017D104 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D104.c` | +| 977 | func_8017F268 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F268.c` | +| 978 | func_8017F120 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F120.c` | +| 979 | func_80185A68 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80185A68.c` | +| 980 | func_8017CE48 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CE48.c` | +| 981 | func_8017CEB0 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CEB0.c` | +| 982 | func_80180E88 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80180E88.c` | +| 983 | func_801801C4 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_801801C4.c` | +| 984 | func_8017CEEC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CEEC.c` | +| 985 | func_8017CDDC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017CDDC.c` | +| 986 | func_8017DDD8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017DDD8.c` | +| 987 | func_8017DD9C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017DD9C.c` | +| 988 | func_8017DF80 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017DF80.c` | +| 989 | func_8017D49C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D49C.c` | +| 990 | func_8017F5E0 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F5E0.c` | +| 991 | func_8017DFCC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017DFCC.c` | +| 992 | func_80181C1C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_80181C1C.c` | +| 993 | func_8017D22C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D22C.c` | +| 994 | func_8018338C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8018338C.c` | +| 995 | func_8017EEB8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017EEB8.c` | +| 996 | func_8017E9F4 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E9F4.c` | +| 997 | func_8017E6CC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E6CC.c` | +| 998 | func_8017F3A8 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017F3A8.c` | +| 999 | func_8017D040 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D040.c` | +| 1000 | func_8017E7AC | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E7AC.c` | +| 1001 | func_8017E304 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E304.c` | +| 1002 | func_8017D084 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D084.c` | +| 1003 | func_8017D19C | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017D19C.c` | +| 1004 | func_8017E700 | None | | None | near | 15 | residual: 15 mismatch | `.run/backlog_drafts/func_8017E700.c` | +| 1005 | func_8013C938 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8013C938.c` | +| 1006 | func_8017E0F0 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017E0F0.c` | +| 1007 | func_8017E7D8 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017E7D8.c` | +| 1008 | func_80183988 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80183988.c` | +| 1009 | func_80184154 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80184154.c` | +| 1010 | func_80182D78 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80182D78.c` | +| 1011 | func_80183074 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80183074.c` | +| 1012 | func_80184EA4 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80184EA4.c` | +| 1013 | func_8017F920 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017F920.c` | +| 1014 | func_80180EDC | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80180EDC.c` | +| 1015 | func_80187A8C | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80187A8C.c` | +| 1016 | func_8017F1F8 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017F1F8.c` | +| 1017 | func_8017EC84 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017EC84.c` | +| 1018 | func_8017E9CC | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017E9CC.c` | +| 1019 | func_8017EAE0 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017EAE0.c` | +| 1020 | func_80186984 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80186984.c` | +| 1021 | func_8017F414 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017F414.c` | +| 1022 | func_8017E090 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017E090.c` | +| 1023 | func_801853F8 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_801853F8.c` | +| 1024 | func_8017F20C | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017F20C.c` | +| 1025 | func_80182654 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_80182654.c` | +| 1026 | func_8017CDE4 | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017CDE4.c` | +| 1027 | func_8017DFAC | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017DFAC.c` | +| 1028 | func_8017EF1C | None | | None | near | 16 | residual: 16 mismatch | `.run/backlog_drafts/func_8017EF1C.c` | +| 1029 | func_8017EEF4 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017EEF4.c` | +| 1030 | func_8017E814 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017E814.c` | +| 1031 | func_80184EE0 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80184EE0.c` | +| 1032 | func_8017FA44 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017FA44.c` | +| 1033 | func_80182D1C | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80182D1C.c` | +| 1034 | func_8018384C | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8018384C.c` | +| 1035 | func_8017E950 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017E950.c` | +| 1036 | func_8017CDD8 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017CDD8.c` | +| 1037 | func_80180890 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80180890.c` | +| 1038 | func_8017D5F8 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017D5F8.c` | +| 1039 | func_80180D74 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80180D74.c` | +| 1040 | func_8017F568 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_8017F568.c` | +| 1041 | func_80180D14 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80180D14.c` | +| 1042 | func_80183C58 | None | | None | near | 17 | residual: 17 mismatch | `.run/backlog_drafts/func_80183C58.c` | +| 1043 | func_8018208C | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8018208C.c` | +| 1044 | func_8017FD6C | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017FD6C.c` | +| 1045 | func_801877DC | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_801877DC.c` | +| 1046 | func_8017D010 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017D010.c` | +| 1047 | func_8017D84C | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017D84C.c` | +| 1048 | func_8017BF34 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017BF34.c` | +| 1049 | func_8017DA10 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017DA10.c` | +| 1050 | func_80189630 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80189630.c` | +| 1051 | func_80184630 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80184630.c` | +| 1052 | func_80185334 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80185334.c` | +| 1053 | func_8017DDB0 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017DDB0.c` | +| 1054 | func_8017E850 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017E850.c` | +| 1055 | func_8017DCF4 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017DCF4.c` | +| 1056 | func_8017D988 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017D988.c` | +| 1057 | func_80182E38 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80182E38.c` | +| 1058 | func_80183138 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80183138.c` | +| 1059 | func_80180B54 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_80180B54.c` | +| 1060 | func_8017DC2C | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017DC2C.c` | +| 1061 | func_8017D600 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017D600.c` | +| 1062 | func_8017F6C4 | None | | None | near | 18 | residual: 18 mismatch | `.run/backlog_drafts/func_8017F6C4.c` | +| 1063 | func_8017E9E4 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017E9E4.c` | +| 1064 | func_801827D4 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_801827D4.c` | +| 1065 | func_80185888 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80185888.c` | +| 1066 | func_80180574 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80180574.c` | +| 1067 | func_80183F1C | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80183F1C.c` | +| 1068 | func_8017FFCC | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017FFCC.c` | +| 1069 | func_80182344 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80182344.c` | +| 1070 | func_801811F4 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_801811F4.c` | +| 1071 | func_80180DB8 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80180DB8.c` | +| 1072 | func_8017D184 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017D184.c` | +| 1073 | func_8017F160 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017F160.c` | +| 1074 | func_8017F4D0 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017F4D0.c` | +| 1075 | func_8018033C | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8018033C.c` | +| 1076 | func_80181138 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80181138.c` | +| 1077 | func_8017E048 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017E048.c` | +| 1078 | func_8017F3BC | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017F3BC.c` | +| 1079 | func_80180DEC | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80180DEC.c` | +| 1080 | func_801845B4 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_801845B4.c` | +| 1081 | func_80181C74 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80181C74.c` | +| 1082 | func_80182234 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80182234.c` | +| 1083 | func_8017FF30 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_8017FF30.c` | +| 1084 | func_80185288 | None | | None | near | 19 | residual: 19 mismatch | `.run/backlog_drafts/func_80185288.c` | +| 1085 | func_8017E890 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017E890.c` | +| 1086 | func_8017D174 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017D174.c` | +| 1087 | func_8017CD9C | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017CD9C.c` | +| 1088 | func_8018555C | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8018555C.c` | +| 1089 | func_801826EC | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_801826EC.c` | +| 1090 | func_8017DB00 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017DB00.c` | +| 1091 | func_80181054 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_80181054.c` | +| 1092 | func_8017F87C | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017F87C.c` | +| 1093 | func_8017D704 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017D704.c` | +| 1094 | func_80180AD8 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_80180AD8.c` | +| 1095 | func_8018774C | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8018774C.c` | +| 1096 | func_8017DE7C | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017DE7C.c` | +| 1097 | func_8017FA00 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017FA00.c` | +| 1098 | func_8018B6F4 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8018B6F4.c` | +| 1099 | func_8017EEC8 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017EEC8.c` | +| 1100 | func_8017E134 | None | | None | near | 20 | residual: 20 mismatch | `.run/backlog_drafts/func_8017E134.c` | +| 1101 | func_8017C6B8 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017C6B8.c` | +| 1102 | func_801871E8 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_801871E8.c` | +| 1103 | func_80188668 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_80188668.c` | +| 1104 | func_8017DB44 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017DB44.c` | +| 1105 | func_80187050 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_80187050.c` | +| 1106 | func_8017DD18 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017DD18.c` | +| 1107 | func_8018288C | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8018288C.c` | +| 1108 | func_8017E1C8 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017E1C8.c` | +| 1109 | func_8017D308 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017D308.c` | +| 1110 | func_8017EAC8 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017EAC8.c` | +| 1111 | func_8017D8B0 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017D8B0.c` | +| 1112 | func_8017F080 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017F080.c` | +| 1113 | func_8017CD14 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017CD14.c` | +| 1114 | func_80180548 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_80180548.c` | +| 1115 | func_8017DE78 | None | | None | near | 21 | residual: 21 mismatch | `.run/backlog_drafts/func_8017DE78.c` | +| 1116 | func_80185A18 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_80185A18.c` | +| 1117 | func_8017D990 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017D990.c` | +| 1118 | func_8017FF2C | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017FF2C.c` | +| 1119 | func_801803E0 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_801803E0.c` | +| 1120 | func_8017D828 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017D828.c` | +| 1121 | func_80180E18 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_80180E18.c` | +| 1122 | func_8017DC08 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017DC08.c` | +| 1123 | func_80184388 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_80184388.c` | +| 1124 | func_80187C64 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_80187C64.c` | +| 1125 | func_8018A030 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8018A030.c` | +| 1126 | func_8017D688 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017D688.c` | +| 1127 | func_8017FA90 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017FA90.c` | +| 1128 | func_8017F320 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017F320.c` | +| 1129 | func_801813AC | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_801813AC.c` | +| 1130 | func_80181478 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_80181478.c` | +| 1131 | func_801868E0 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_801868E0.c` | +| 1132 | func_8018AB74 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8018AB74.c` | +| 1133 | func_8017DE70 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8017DE70.c` | +| 1134 | func_8013BC7C | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8013BC7C.c` | +| 1135 | func_8018A640 | None | | None | near | 22 | residual: 22 mismatch | `.run/backlog_drafts/func_8018A640.c` | +| 1136 | func_8012E364 | 1 | regalloc-order | 67 | near | 23 | 23/67 masked. Structure+idioms exact (barrier fixes the late D9498 load; k=0x1000 CSE'd into $a3 hoisted to the blez delay slot; 6 register pins land arg/$a2, k/$a3, D9498/$v1, temp_a1/$a1, var_v0(_2)/$v0). Residual is the discontinuous q<->temp_v0 reuse chain (q reuses $v0 but target puts it in $a0 reusing x's dead reg; every whole-function pin that forces q->$a0 chains hi>>5 or var_v0 wrong) + 2nd-half schedule (0x2C lhu interleaved before the +k addu; the abs copies temp_v1->$v0 via addu-move). Permuter-class (register renaming) but pins block pycparser -> hand/human finish. | `.run/backlog_drafts/func_8012E364.c` | +| 1137 | func_8017E5A0 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017E5A0.c` | +| 1138 | func_8017DC54 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017DC54.c` | +| 1139 | func_8017F480 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017F480.c` | +| 1140 | func_8017EF7C | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017EF7C.c` | +| 1141 | func_80182FF0 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_80182FF0.c` | +| 1142 | func_80182EE8 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_80182EE8.c` | +| 1143 | func_8017E240 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017E240.c` | +| 1144 | func_8017CE94 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017CE94.c` | +| 1145 | func_8017D2A4 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017D2A4.c` | +| 1146 | func_8017FAC8 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8017FAC8.c` | +| 1147 | func_80181E1C | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_80181E1C.c` | +| 1148 | func_80181F60 | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_80181F60.c` | +| 1149 | func_8018381C | None | | None | near | 23 | residual: 23 mismatch | `.run/backlog_drafts/func_8018381C.c` | +| 1150 | func_80182488 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80182488.c` | +| 1151 | func_8017F500 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017F500.c` | +| 1152 | func_8017D1E0 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017D1E0.c` | +| 1153 | func_8017DDBC | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017DDBC.c` | +| 1154 | func_8017F1BC | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017F1BC.c` | +| 1155 | func_8017D384 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017D384.c` | +| 1156 | func_8017EFB0 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017EFB0.c` | +| 1157 | func_80182708 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80182708.c` | +| 1158 | func_8017F8A8 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017F8A8.c` | +| 1159 | func_8017EBEC | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017EBEC.c` | +| 1160 | func_801850A0 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_801850A0.c` | +| 1161 | func_80184DE8 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80184DE8.c` | +| 1162 | func_801834B4 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_801834B4.c` | +| 1163 | func_8018333C | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8018333C.c` | +| 1164 | func_8018056C | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8018056C.c` | +| 1165 | func_80182154 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80182154.c` | +| 1166 | func_80182C68 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80182C68.c` | +| 1167 | func_8017EA18 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_8017EA18.c` | +| 1168 | func_80180EB8 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_80180EB8.c` | +| 1169 | func_801856F0 | None | | None | near | 24 | residual: 24 mismatch | `.run/backlog_drafts/func_801856F0.c` | +| 1170 | func_8018DFDC | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8018DFDC.c` | +| 1171 | func_801827A8 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_801827A8.c` | +| 1172 | func_8017CFC4 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017CFC4.c` | +| 1173 | func_8017D7A4 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017D7A4.c` | +| 1174 | func_8017D790 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017D790.c` | +| 1175 | func_80182514 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80182514.c` | +| 1176 | func_8018545C | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8018545C.c` | +| 1177 | func_8017D3B8 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017D3B8.c` | +| 1178 | func_80189FCC | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80189FCC.c` | +| 1179 | func_80181134 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80181134.c` | +| 1180 | func_8017FE10 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017FE10.c` | +| 1181 | func_8017DB64 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017DB64.c` | +| 1182 | func_80185AF8 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80185AF8.c` | +| 1183 | func_80182E34 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80182E34.c` | +| 1184 | func_8017D864 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017D864.c` | +| 1185 | func_8017DB70 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_8017DB70.c` | +| 1186 | func_80180FD0 | None | | None | near | 25 | residual: 25 mismatch | `.run/backlog_drafts/func_80180FD0.c` | +| 1187 | func_8017FB68 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8017FB68.c` | +| 1188 | func_8018ACB4 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8018ACB4.c` | +| 1189 | func_8017EBF4 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8017EBF4.c` | +| 1190 | func_80180A5C | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_80180A5C.c` | +| 1191 | func_801830EC | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_801830EC.c` | +| 1192 | func_801804F4 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_801804F4.c` | +| 1193 | func_8017E6C0 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8017E6C0.c` | +| 1194 | func_8017DD64 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8017DD64.c` | +| 1195 | func_8017F024 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_8017F024.c` | +| 1196 | func_80181254 | None | | None | near | 26 | residual: 26 mismatch | `.run/backlog_drafts/func_80181254.c` | +| 1197 | func_80181020 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_80181020.c` | +| 1198 | func_80184A1C | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_80184A1C.c` | +| 1199 | func_801825EC | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_801825EC.c` | +| 1200 | func_80184430 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_80184430.c` | +| 1201 | func_80185934 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_80185934.c` | +| 1202 | func_8017E4B0 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_8017E4B0.c` | +| 1203 | func_801841B0 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_801841B0.c` | +| 1204 | func_80180D28 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_80180D28.c` | +| 1205 | func_8017E1F4 | None | | None | near | 27 | residual: 27 mismatch | `.run/backlog_drafts/func_8017E1F4.c` | +| 1206 | func_80182C24 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80182C24.c` | +| 1207 | func_8017DAD0 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017DAD0.c` | +| 1208 | func_8017EE08 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017EE08.c` | +| 1209 | func_80183C4C | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80183C4C.c` | +| 1210 | func_80181300 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80181300.c` | +| 1211 | func_8017E218 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017E218.c` | +| 1212 | func_8017F8AC | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017F8AC.c` | +| 1213 | func_80180E98 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80180E98.c` | +| 1214 | func_8017D21C | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017D21C.c` | +| 1215 | func_80188650 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80188650.c` | +| 1216 | func_801810C0 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_801810C0.c` | +| 1217 | func_8017D004 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017D004.c` | +| 1218 | func_80183A18 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80183A18.c` | +| 1219 | func_80182324 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80182324.c` | +| 1220 | func_80183A24 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_80183A24.c` | +| 1221 | func_8017D404 | None | | None | near | 28 | residual: 28 mismatch | `.run/backlog_drafts/func_8017D404.c` | +| 1222 | func_80182544 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_80182544.c` | +| 1223 | func_80180CA0 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_80180CA0.c` | +| 1224 | func_8017ED0C | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_8017ED0C.c` | +| 1225 | func_8017FB4C | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_8017FB4C.c` | +| 1226 | func_801840C0 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_801840C0.c` | +| 1227 | func_8017F344 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_8017F344.c` | +| 1228 | func_80180214 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_80180214.c` | +| 1229 | func_801803DC | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_801803DC.c` | +| 1230 | func_80181304 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_80181304.c` | +| 1231 | func_8018B9DC | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_8018B9DC.c` | +| 1232 | func_80180840 | None | | None | near | 29 | residual: 29 mismatch | `.run/backlog_drafts/func_80180840.c` | +| 1233 | func_80182E08 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_80182E08.c` | +| 1234 | func_8018AF0C | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8018AF0C.c` | +| 1235 | func_8017F750 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8017F750.c` | +| 1236 | func_8018133C | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8018133C.c` | +| 1237 | func_80183C10 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_80183C10.c` | +| 1238 | func_80180B2C | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_80180B2C.c` | +| 1239 | func_8017D894 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8017D894.c` | +| 1240 | func_8017D1DC | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8017D1DC.c` | +| 1241 | func_8017D9A8 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_8017D9A8.c` | +| 1242 | func_801845E8 | None | | None | near | 30 | residual: 30 mismatch | `.run/backlog_drafts/func_801845E8.c` | +| 1243 | func_8017CE0C | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8017CE0C.c` | +| 1244 | func_80182268 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_80182268.c` | +| 1245 | func_8018337C | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8018337C.c` | +| 1246 | func_801800F4 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_801800F4.c` | +| 1247 | func_80181990 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_80181990.c` | +| 1248 | func_8017D8C8 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8017D8C8.c` | +| 1249 | func_80184AA8 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_80184AA8.c` | +| 1250 | func_8017E9EC | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8017E9EC.c` | +| 1251 | func_80182D18 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_80182D18.c` | +| 1252 | func_8017D524 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8017D524.c` | +| 1253 | func_8017D784 | None | | None | near | 31 | residual: 31 mismatch | `.run/backlog_drafts/func_8017D784.c` | +| 1254 | func_80139BE0 | 1 | loose-typing | 39 | near | 32 | target has redundant andi a1,v0,0xff (uchar zero-extend) gcc proves away; else identical | `.run/backlog_drafts/func_80139BE0.c` | +| 1255 | func_801856E4 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_801856E4.c` | +| 1256 | func_8017D1D0 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017D1D0.c` | +| 1257 | func_8017EEFC | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017EEFC.c` | +| 1258 | func_8017FC50 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017FC50.c` | +| 1259 | func_8017D554 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017D554.c` | +| 1260 | func_80183018 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_80183018.c` | +| 1261 | func_8017F370 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017F370.c` | +| 1262 | func_8018739C | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8018739C.c` | +| 1263 | func_8017DBC0 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017DBC0.c` | +| 1264 | func_80182000 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_80182000.c` | +| 1265 | func_8017E55C | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017E55C.c` | +| 1266 | func_80182600 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_80182600.c` | +| 1267 | func_8017FCE8 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017FCE8.c` | +| 1268 | func_8017FEC8 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017FEC8.c` | +| 1269 | func_8017D874 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017D874.c` | +| 1270 | func_8017FACC | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017FACC.c` | +| 1271 | func_8017F7F8 | None | | None | near | 32 | residual: 32 mismatch | `.run/backlog_drafts/func_8017F7F8.c` | +| 1272 | func_8017FB78 | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_8017FB78.c` | +| 1273 | func_80181A40 | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_80181A40.c` | +| 1274 | func_801800D4 | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_801800D4.c` | +| 1275 | func_80182E1C | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_80182E1C.c` | +| 1276 | func_80181F4C | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_80181F4C.c` | +| 1277 | func_8017EEB0 | None | | None | near | 33 | residual: 33 mismatch | `.run/backlog_drafts/func_8017EEB0.c` | +| 1278 | func_8017BF14 | None | | None | near | 34 | residual: 34 mismatch | `.run/backlog_drafts/func_8017BF14.c` | +| 1279 | func_801859A0 | None | | None | near | 34 | residual: 34 mismatch | `.run/backlog_drafts/func_801859A0.c` | +| 1280 | func_8017F8E0 | None | | None | near | 34 | residual: 34 mismatch | `.run/backlog_drafts/func_8017F8E0.c` | +| 1281 | func_8017E740 | None | | None | near | 34 | residual: 34 mismatch | `.run/backlog_drafts/func_8017E740.c` | +| 1282 | func_8017FB54 | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_8017FB54.c` | +| 1283 | func_8017D804 | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_8017D804.c` | +| 1284 | func_8017DA0C | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_8017DA0C.c` | +| 1285 | func_80180030 | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_80180030.c` | +| 1286 | func_8017E038 | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_8017E038.c` | +| 1287 | func_8017E32C | None | | None | near | 35 | residual: 35 mismatch | `.run/backlog_drafts/func_8017E32C.c` | +| 1288 | func_80181090 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_80181090.c` | +| 1289 | func_8017EC78 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_8017EC78.c` | +| 1290 | func_8017E79C | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_8017E79C.c` | +| 1291 | func_80182A08 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_80182A08.c` | +| 1292 | func_8017F0E8 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_8017F0E8.c` | +| 1293 | func_8017D294 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_8017D294.c` | +| 1294 | func_80189B38 | None | | None | near | 36 | residual: 36 mismatch | `.run/backlog_drafts/func_80189B38.c` | +| 1295 | func_80180F08 | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_80180F08.c` | +| 1296 | func_8017D024 | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017D024.c` | +| 1297 | func_8017EB5C | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017EB5C.c` | +| 1298 | func_8017EB4C | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017EB4C.c` | +| 1299 | func_8017EAD8 | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017EAD8.c` | +| 1300 | func_8017D29C | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017D29C.c` | +| 1301 | func_8017D450 | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017D450.c` | +| 1302 | func_8017E230 | None | | None | near | 37 | residual: 37 mismatch | `.run/backlog_drafts/func_8017E230.c` | +| 1303 | func_8017DA00 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017DA00.c` | +| 1304 | func_8017E6FC | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017E6FC.c` | +| 1305 | func_8017FE08 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017FE08.c` | +| 1306 | func_8017D80C | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017D80C.c` | +| 1307 | func_8018263C | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8018263C.c` | +| 1308 | func_80186FA8 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_80186FA8.c` | +| 1309 | func_80180A38 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_80180A38.c` | +| 1310 | func_8017D740 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017D740.c` | +| 1311 | func_8017DD44 | None | | None | near | 38 | residual: 38 mismatch | `.run/backlog_drafts/func_8017DD44.c` | +| 1312 | func_8017E840 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017E840.c` | +| 1313 | func_8017D1F0 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017D1F0.c` | +| 1314 | func_8017E014 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017E014.c` | +| 1315 | func_8017D09C | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017D09C.c` | +| 1316 | func_8017EC70 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017EC70.c` | +| 1317 | func_80180C2C | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_80180C2C.c` | +| 1318 | func_8017ECC0 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017ECC0.c` | +| 1319 | func_8017F724 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017F724.c` | +| 1320 | func_8017E36C | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8017E36C.c` | +| 1321 | func_8018ACD4 | None | | None | near | 39 | residual: 39 mismatch | `.run/backlog_drafts/func_8018ACD4.c` | +| 1322 | func_8017ED80 | None | | None | near | 40 | residual: 40 mismatch | `.run/backlog_drafts/func_8017ED80.c` | +| 1323 | func_8017E4C8 | None | | None | near | 40 | residual: 40 mismatch | `.run/backlog_drafts/func_8017E4C8.c` | +| 1324 | func_80180850 | None | | None | near | 40 | residual: 40 mismatch | `.run/backlog_drafts/func_80180850.c` | +| 1325 | func_80181438 | None | | None | near | 40 | residual: 40 mismatch | `.run/backlog_drafts/func_80181438.c` | +| 1326 | func_8017D0BC | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8017D0BC.c` | +| 1327 | func_8017E94C | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8017E94C.c` | +| 1328 | func_8017E170 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8017E170.c` | +| 1329 | func_8018043C | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8018043C.c` | +| 1330 | func_8018A3F0 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8018A3F0.c` | +| 1331 | func_80183364 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_80183364.c` | +| 1332 | func_801824F0 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_801824F0.c` | +| 1333 | func_8017F4A0 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_8017F4A0.c` | +| 1334 | func_801877E4 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_801877E4.c` | +| 1335 | func_80183F4C | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_80183F4C.c` | +| 1336 | func_80186044 | None | | None | near | 41 | residual: 41 mismatch | `.run/backlog_drafts/func_80186044.c` | +| 1337 | func_80166054 | None | regalloc-order | None | near | 41 | untested v2 — force eager shift+negate of call1 result BEFORE call2 (2 saved regs s3/s4) | `.run/backlog_drafts/func_80166054.c` | +| 1338 | func_80180010 | None | | None | near | 42 | residual: 42 mismatch | `.run/backlog_drafts/func_80180010.c` | +| 1339 | func_8017E824 | None | | None | near | 42 | residual: 42 mismatch | `.run/backlog_drafts/func_8017E824.c` | +| 1340 | func_80183598 | None | | None | near | 42 | residual: 42 mismatch | `.run/backlog_drafts/func_80183598.c` | +| 1341 | func_8017ECF4 | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8017ECF4.c` | +| 1342 | func_8018118C | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8018118C.c` | +| 1343 | func_8018FB8C | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8018FB8C.c` | +| 1344 | func_8017D6D0 | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8017D6D0.c` | +| 1345 | func_8017D96C | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8017D96C.c` | +| 1346 | func_8017DF44 | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_8017DF44.c` | +| 1347 | func_801812FC | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_801812FC.c` | +| 1348 | func_80186B08 | None | | None | near | 43 | residual: 43 mismatch | `.run/backlog_drafts/func_80186B08.c` | +| 1349 | func_8017E578 | None | | None | near | 44 | residual: 44 mismatch | `.run/backlog_drafts/func_8017E578.c` | +| 1350 | func_80185C70 | None | | None | near | 44 | residual: 44 mismatch | `.run/backlog_drafts/func_80185C70.c` | +| 1351 | func_8017F90C | None | | None | near | 44 | residual: 44 mismatch | `.run/backlog_drafts/func_8017F90C.c` | +| 1352 | func_8017D6FC | None | | None | near | 44 | residual: 44 mismatch | `.run/backlog_drafts/func_8017D6FC.c` | +| 1353 | func_8013C360 | None | schedule | None | near | 44 | none — MATCH (-O0 pointer-walk copy; for-update post-inc gives the addu-copy, no trailing return merges loop-exit into epilogue) | `.run/backlog_drafts/func_8013C360.c` | +| 1354 | func_8017E7D0 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_8017E7D0.c` | +| 1355 | func_80189304 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_80189304.c` | +| 1356 | func_8017D01C | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_8017D01C.c` | +| 1357 | func_8017E380 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_8017E380.c` | +| 1358 | func_80180A88 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_80180A88.c` | +| 1359 | func_8017E9D8 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_8017E9D8.c` | +| 1360 | func_80189DB4 | None | | None | near | 45 | residual: 45 mismatch | `.run/backlog_drafts/func_80189DB4.c` | +| 1361 | func_8018001C | None | | None | near | 46 | residual: 46 mismatch | `.run/backlog_drafts/func_8018001C.c` | +| 1362 | func_8017F2A0 | None | | None | near | 46 | residual: 46 mismatch | `.run/backlog_drafts/func_8017F2A0.c` | +| 1363 | func_8017EF24 | None | | None | near | 46 | residual: 46 mismatch | `.run/backlog_drafts/func_8017EF24.c` | +| 1364 | func_8018ADA4 | None | | None | near | 46 | residual: 46 mismatch | `.run/backlog_drafts/func_8018ADA4.c` | +| 1365 | func_80185EA8 | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_80185EA8.c` | +| 1366 | func_8018912C | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_8018912C.c` | +| 1367 | func_80188BEC | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_80188BEC.c` | +| 1368 | func_801804DC | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_801804DC.c` | +| 1369 | func_801808D8 | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_801808D8.c` | +| 1370 | func_8017E8D0 | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_8017E8D0.c` | +| 1371 | func_8017DF0C | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_8017DF0C.c` | +| 1372 | func_801846AC | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_801846AC.c` | +| 1373 | func_801805DC | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_801805DC.c` | +| 1374 | func_80184D0C | None | | None | near | 47 | residual: 47 mismatch | `.run/backlog_drafts/func_80184D0C.c` | +| 1375 | func_8017D900 | 1 | plumbing | 35 | near | 48 | none — expect MATCH (STUB: ordered global stores + single tail call, sibling of func_8017D840) | `.run/backlog_drafts/func_8017D900.c` | +| 1376 | func_8017F84C | None | | None | near | 48 | residual: 48 mismatch | `.run/backlog_drafts/func_8017F84C.c` | +| 1377 | func_8017EF54 | None | | None | near | 48 | residual: 48 mismatch | `.run/backlog_drafts/func_8017EF54.c` | +| 1378 | func_80181CE0 | None | | None | near | 48 | residual: 48 mismatch | `.run/backlog_drafts/func_80181CE0.c` | +| 1379 | func_8017FCF0 | None | | None | near | 48 | residual: 48 mismatch | `.run/backlog_drafts/func_8017FCF0.c` | +| 1380 | func_8017D6F0 | None | | None | near | 49 | residual: 49 mismatch | `.run/backlog_drafts/func_8017D6F0.c` | +| 1381 | func_8017DF40 | None | | None | near | 49 | residual: 49 mismatch | `.run/backlog_drafts/func_8017DF40.c` | +| 1382 | func_8017E968 | None | | None | near | 49 | residual: 49 mismatch | `.run/backlog_drafts/func_8017E968.c` | +| 1383 | func_801845EC | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_801845EC.c` | +| 1384 | func_8017F4C4 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_8017F4C4.c` | +| 1385 | func_80188BB0 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_80188BB0.c` | +| 1386 | func_80181B78 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_80181B78.c` | +| 1387 | func_8017DE74 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_8017DE74.c` | +| 1388 | func_80183D48 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_80183D48.c` | +| 1389 | func_8017EC08 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_8017EC08.c` | +| 1390 | func_80184130 | None | | None | near | 50 | residual: 50 mismatch | `.run/backlog_drafts/func_80184130.c` | +| 1391 | func_80181124 | None | | None | near | 52 | residual: 52 mismatch | `.run/backlog_drafts/func_80181124.c` | +| 1392 | func_8017FB48 | None | | None | near | 52 | residual: 52 mismatch | `.run/backlog_drafts/func_8017FB48.c` | +| 1393 | func_80186A0C | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_80186A0C.c` | +| 1394 | func_8017F050 | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8017F050.c` | +| 1395 | func_8018592C | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8018592C.c` | +| 1396 | func_8018CFF4 | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8018CFF4.c` | +| 1397 | func_8017D4B4 | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8017D4B4.c` | +| 1398 | func_8017DB6C | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8017DB6C.c` | +| 1399 | func_8018048C | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8018048C.c` | +| 1400 | func_8017D57C | None | | None | near | 53 | residual: 53 mismatch | `.run/backlog_drafts/func_8017D57C.c` | +| 1401 | func_80168BDC | None | regalloc-order | None | near | 53 | loop-increment materialization (target keeps i+1 in temp, dup in delay slot) | `.run/backlog_drafts/func_80168BDC.c` | +| 1402 | func_8018465C | None | | None | near | 54 | residual: 54 mismatch | `.run/backlog_drafts/func_8018465C.c` | +| 1403 | func_80183C54 | None | | None | near | 54 | residual: 54 mismatch | `.run/backlog_drafts/func_80183C54.c` | +| 1404 | func_80180D58 | None | | None | near | 54 | residual: 54 mismatch | `.run/backlog_drafts/func_80180D58.c` | +| 1405 | func_80180B7C | None | | None | near | 54 | residual: 54 mismatch | `.run/backlog_drafts/func_80180B7C.c` | +| 1406 | func_8017F7B8 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_8017F7B8.c` | +| 1407 | func_8017FE54 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_8017FE54.c` | +| 1408 | func_8017ED60 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_8017ED60.c` | +| 1409 | func_80183C9C | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_80183C9C.c` | +| 1410 | func_801802BC | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_801802BC.c` | +| 1411 | func_80182030 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_80182030.c` | +| 1412 | func_80180204 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_80180204.c` | +| 1413 | func_801824F8 | None | | None | near | 55 | residual: 55 mismatch | `.run/backlog_drafts/func_801824F8.c` | +| 1414 | func_8017EE2C | None | | None | near | 56 | residual: 56 mismatch | `.run/backlog_drafts/func_8017EE2C.c` | +| 1415 | func_80181DEC | None | | None | near | 57 | residual: 57 mismatch | `.run/backlog_drafts/func_80181DEC.c` | +| 1416 | func_8017E524 | None | | None | near | 57 | residual: 57 mismatch | `.run/backlog_drafts/func_8017E524.c` | +| 1417 | func_8017E8CC | None | | None | near | 57 | residual: 57 mismatch | `.run/backlog_drafts/func_8017E8CC.c` | +| 1418 | func_8018A538 | None | | None | near | 57 | residual: 57 mismatch | `.run/backlog_drafts/func_8018A538.c` | +| 1419 | func_80177DA8 | 1 | remat | 63 | near | 58 | gcc narrows `&0xfffffeff` on a 16-bit (lhu) value to `andi 0xfeff` (inline), but target hoisted -0x101 into $t4 (and-reg) in the loop preheader — a gcc-2.7.2 LICM-before-combine pass-ordering quirk unsteerable from C; that 1-ins gap cascades the constant-reg numbering + tail reassoc. Secondary: single-IV loop ptr anchors at +0xA (short, 2 accesses) not +0xC (byte) like target. | `.run/backlog_drafts/func_80177DA8.c` | +| 1420 | func_8017ECB0 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_8017ECB0.c` | +| 1421 | func_801898C8 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_801898C8.c` | +| 1422 | func_80184920 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_80184920.c` | +| 1423 | func_80182EA0 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_80182EA0.c` | +| 1424 | func_8017F1C4 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_8017F1C4.c` | +| 1425 | func_80181A5C | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_80181A5C.c` | +| 1426 | func_8017D544 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_8017D544.c` | +| 1427 | func_8017EA2C | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_8017EA2C.c` | +| 1428 | func_80182BF4 | None | | None | near | 58 | residual: 58 mismatch | `.run/backlog_drafts/func_80182BF4.c` | +| 1429 | func_80180D38 | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_80180D38.c` | +| 1430 | func_8017F24C | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_8017F24C.c` | +| 1431 | func_8017D4CC | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_8017D4CC.c` | +| 1432 | func_80183624 | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_80183624.c` | +| 1433 | func_8017FB10 | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_8017FB10.c` | +| 1434 | func_80180B50 | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_80180B50.c` | +| 1435 | func_8018567C | None | | None | near | 59 | residual: 59 mismatch | `.run/backlog_drafts/func_8018567C.c` | +| 1436 | func_8017E75C | None | | None | near | 61 | residual: 61 mismatch | `.run/backlog_drafts/func_8017E75C.c` | +| 1437 | func_80184778 | None | | None | near | 61 | residual: 61 mismatch | `.run/backlog_drafts/func_80184778.c` | +| 1438 | func_8017EEE0 | None | | None | near | 62 | residual: 62 mismatch | `.run/backlog_drafts/func_8017EEE0.c` | +| 1439 | func_80188204 | None | | None | near | 62 | residual: 62 mismatch | `.run/backlog_drafts/func_80188204.c` | +| 1440 | func_8017F25C | None | | None | near | 62 | residual: 62 mismatch | `.run/backlog_drafts/func_8017F25C.c` | +| 1441 | func_8017EB74 | None | | None | near | 63 | residual: 63 mismatch | `.run/backlog_drafts/func_8017EB74.c` | +| 1442 | func_8017E798 | None | | None | near | 64 | residual: 64 mismatch | `.run/backlog_drafts/func_8017E798.c` | +| 1443 | func_8017D610 | None | | None | near | 64 | residual: 64 mismatch | `.run/backlog_drafts/func_8017D610.c` | +| 1444 | func_8017CD10 | None | | None | near | 64 | residual: 64 mismatch | `.run/backlog_drafts/func_8017CD10.c` | +| 1445 | func_8017F1A0 | None | | None | near | 64 | residual: 64 mismatch | `.run/backlog_drafts/func_8017F1A0.c` | +| 1446 | func_8017D928 | None | | None | near | 64 | residual: 64 mismatch | `.run/backlog_drafts/func_8017D928.c` | +| 1447 | func_8018656C | None | | None | near | 65 | residual: 65 mismatch | `.run/backlog_drafts/func_8018656C.c` | +| 1448 | func_8013B598 | 1 | O0 | 66 | near | 66 | WAVE: 66 mismatch | `.run/backlog_drafts/func_8013B598.c` | +| 1449 | func_80184854 | None | | None | near | 66 | residual: 66 mismatch | `.run/backlog_drafts/func_80184854.c` | +| 1450 | func_80185B5C | None | | None | near | 67 | residual: 67 mismatch | `.run/backlog_drafts/func_80185B5C.c` | +| 1451 | func_8017E910 | None | | None | near | 68 | residual: 68 mismatch | `.run/backlog_drafts/func_8017E910.c` | +| 1452 | func_80182378 | None | | None | near | 69 | residual: 69 mismatch | `.run/backlog_drafts/func_80182378.c` | +| 1453 | func_80183544 | None | | None | near | 69 | residual: 69 mismatch | `.run/backlog_drafts/func_80183544.c` | +| 1454 | func_8018434C | None | | None | near | 69 | residual: 69 mismatch | `.run/backlog_drafts/func_8018434C.c` | +| 1455 | func_80180224 | None | | None | near | 71 | residual: 71 mismatch | `.run/backlog_drafts/func_80180224.c` | +| 1456 | func_80184238 | None | | None | near | 72 | residual: 72 mismatch | `.run/backlog_drafts/func_80184238.c` | +| 1457 | func_801866B0 | None | | None | near | 72 | residual: 72 mismatch | `.run/backlog_drafts/func_801866B0.c` | +| 1458 | func_8017D9E4 | None | | None | near | 73 | residual: 73 mismatch | `.run/backlog_drafts/func_8017D9E4.c` | +| 1459 | func_80181344 | None | | None | near | 73 | residual: 73 mismatch | `.run/backlog_drafts/func_80181344.c` | +| 1460 | func_80189B3C | None | | None | near | 74 | residual: 74 mismatch | `.run/backlog_drafts/func_80189B3C.c` | +| 1461 | func_80182B90 | None | | None | near | 74 | residual: 74 mismatch | `.run/backlog_drafts/func_80182B90.c` | +| 1462 | func_8018165C | None | | None | near | 74 | residual: 74 mismatch | `.run/backlog_drafts/func_8018165C.c` | +| 1463 | func_8017F468 | None | | None | near | 74 | residual: 74 mismatch | `.run/backlog_drafts/func_8017F468.c` | +| 1464 | func_8017DAB4 | None | | None | near | 75 | residual: 75 mismatch | `.run/backlog_drafts/func_8017DAB4.c` | +| 1465 | func_80181500 | None | | None | near | 75 | residual: 75 mismatch | `.run/backlog_drafts/func_80181500.c` | +| 1466 | func_801814A8 | None | | None | near | 76 | residual: 76 mismatch | `.run/backlog_drafts/func_801814A8.c` | +| 1467 | func_8017E81C | None | | None | near | 76 | residual: 76 mismatch | `.run/backlog_drafts/func_8017E81C.c` | +| 1468 | func_8018474C | None | | None | near | 76 | residual: 76 mismatch | `.run/backlog_drafts/func_8018474C.c` | +| 1469 | func_80184DDC | None | | None | near | 77 | residual: 77 mismatch | `.run/backlog_drafts/func_80184DDC.c` | +| 1470 | func_8017E2F4 | None | | None | near | 77 | residual: 77 mismatch | `.run/backlog_drafts/func_8017E2F4.c` | +| 1471 | func_8017EDBC | None | | None | near | 78 | residual: 78 mismatch | `.run/backlog_drafts/func_8017EDBC.c` | +| 1472 | func_8017E5F0 | None | | None | near | 79 | residual: 79 mismatch | `.run/backlog_drafts/func_8017E5F0.c` | +| 1473 | func_801815AC | None | | None | near | 79 | residual: 79 mismatch | `.run/backlog_drafts/func_801815AC.c` | +| 1474 | func_8017D54C | None | | None | near | 79 | residual: 79 mismatch | `.run/backlog_drafts/func_8017D54C.c` | +| 1475 | func_80181260 | None | | None | near | 79 | residual: 79 mismatch | `.run/backlog_drafts/func_80181260.c` | +| 1476 | func_801805D0 | None | | None | near | 79 | residual: 79 mismatch | `.run/backlog_drafts/func_801805D0.c` | +| 1477 | func_8017F290 | 1 | regalloc-order | 86 | near | 81 | none — MATCH. Two levers: (1) hold &D_801270CC in a `int *state` local so its | `.run/backlog_drafts/func_8017F290.c` | +| 1478 | func_80181068 | None | | None | near | 81 | residual: 81 mismatch | `.run/backlog_drafts/func_80181068.c` | +| 1479 | func_80184E00 | None | | None | near | 82 | residual: 82 mismatch | `.run/backlog_drafts/func_80184E00.c` | +| 1480 | func_8017EB88 | None | | None | near | 82 | residual: 82 mismatch | `.run/backlog_drafts/func_8017EB88.c` | +| 1481 | func_8017FB3C | None | | None | near | 82 | residual: 82 mismatch | `.run/backlog_drafts/func_8017FB3C.c` | +| 1482 | func_8017F840 | None | | None | near | 82 | residual: 82 mismatch | `.run/backlog_drafts/func_8017F840.c` | +| 1483 | func_8017DA9C | None | | None | near | 83 | residual: 83 mismatch | `.run/backlog_drafts/func_8017DA9C.c` | +| 1484 | func_801829F0 | None | | None | near | 83 | residual: 83 mismatch | `.run/backlog_drafts/func_801829F0.c` | +| 1485 | func_8017FBA4 | None | | None | near | 83 | residual: 83 mismatch | `.run/backlog_drafts/func_8017FBA4.c` | +| 1486 | func_801848AC | None | | None | near | 84 | residual: 84 mismatch | `.run/backlog_drafts/func_801848AC.c` | +| 1487 | func_8017DC9C | None | | None | near | 84 | residual: 84 mismatch | `.run/backlog_drafts/func_8017DC9C.c` | +| 1488 | func_801840FC | None | | None | near | 85 | residual: 85 mismatch | `.run/backlog_drafts/func_801840FC.c` | +| 1489 | func_80186094 | None | | None | near | 85 | residual: 85 mismatch | `.run/backlog_drafts/func_80186094.c` | +| 1490 | func_801847FC | None | | None | near | 86 | residual: 86 mismatch | `.run/backlog_drafts/func_801847FC.c` | +| 1491 | func_8018006C | None | | None | near | 86 | residual: 86 mismatch | `.run/backlog_drafts/func_8018006C.c` | +| 1492 | func_8017DFD8 | None | | None | near | 87 | residual: 87 mismatch | `.run/backlog_drafts/func_8017DFD8.c` | +| 1493 | func_8017D1F8 | None | | None | near | 87 | residual: 87 mismatch | `.run/backlog_drafts/func_8017D1F8.c` | +| 1494 | func_8017CE68 | None | | None | near | 87 | residual: 87 mismatch | `.run/backlog_drafts/func_8017CE68.c` | +| 1495 | func_8017D7D0 | None | | None | near | 88 | residual: 88 mismatch | `.run/backlog_drafts/func_8017D7D0.c` | +| 1496 | func_80181838 | None | | None | near | 88 | residual: 88 mismatch | `.run/backlog_drafts/func_80181838.c` | +| 1497 | func_801821D4 | None | | None | near | 90 | residual: 90 mismatch | `.run/backlog_drafts/func_801821D4.c` | +| 1498 | func_8017F0A8 | None | | None | near | 90 | residual: 90 mismatch | `.run/backlog_drafts/func_8017F0A8.c` | +| 1499 | func_8018AD3C | None | | None | near | 90 | residual: 90 mismatch | `.run/backlog_drafts/func_8018AD3C.c` | +| 1500 | func_8017DD5C | None | | None | near | 90 | residual: 90 mismatch | `.run/backlog_drafts/func_8017DD5C.c` | +| 1501 | func_8017EDC0 | None | | None | near | 91 | residual: 91 mismatch | `.run/backlog_drafts/func_8017EDC0.c` | +| 1502 | func_801807DC | None | | None | near | 92 | residual: 92 mismatch | `.run/backlog_drafts/func_801807DC.c` | +| 1503 | func_80180170 | None | | None | near | 92 | residual: 92 mismatch | `.run/backlog_drafts/func_80180170.c` | +| 1504 | func_8017D98C | 1 | plumbing | 31 | near | 93 | none — MATCH (expected): straight global stores + tail call; const 0x140 reused for two halves | `.run/backlog_drafts/func_8017D98C.c` | +| 1505 | func_8017EFFC | None | | None | near | 93 | residual: 93 mismatch | `.run/backlog_drafts/func_8017EFFC.c` | +| 1506 | func_8017D940 | None | | None | near | 94 | residual: 94 mismatch | `.run/backlog_drafts/func_8017D940.c` | +| 1507 | func_8017D934 | None | | None | near | 95 | residual: 95 mismatch | `.run/backlog_drafts/func_8017D934.c` | +| 1508 | func_8017DAB8 | None | | None | near | 97 | residual: 97 mismatch | `.run/backlog_drafts/func_8017DAB8.c` | +| 1509 | func_80180040 | None | | None | near | 97 | residual: 97 mismatch | `.run/backlog_drafts/func_80180040.c` | +| 1510 | func_8017FBE0 | None | | None | near | 97 | residual: 97 mismatch | `.run/backlog_drafts/func_8017FBE0.c` | +| 1511 | func_8017F240 | 1 | regalloc-order | 20 | near | 98 | none — MATCH (base &D_801270D0 pinned to $s0 holds across call; one lui/addiu reused for load+store) | `.run/backlog_drafts/func_8017F240.c` | +| 1512 | func_801863B0 | None | | None | near | 98 | residual: 98 mismatch | `.run/backlog_drafts/func_801863B0.c` | +| 1513 | func_80182728 | None | | None | near | 98 | residual: 98 mismatch | `.run/backlog_drafts/func_80182728.c` | +| 1514 | func_8018038C | None | | None | near | 100 | residual: 100 mismatch | `.run/backlog_drafts/func_8018038C.c` | +| 1515 | func_8017D808 | None | | None | near | 102 | residual: 102 mismatch | `.run/backlog_drafts/func_8017D808.c` | +| 1516 | func_80182D10 | None | | None | near | 102 | residual: 102 mismatch | `.run/backlog_drafts/func_80182D10.c` | +| 1517 | func_8017DC40 | None | | None | near | 104 | residual: 104 mismatch | `.run/backlog_drafts/func_8017DC40.c` | +| 1518 | func_80180F34 | None | | None | near | 105 | residual: 105 mismatch | `.run/backlog_drafts/func_80180F34.c` | +| 1519 | func_80181C44 | None | | None | near | 105 | residual: 105 mismatch | `.run/backlog_drafts/func_80181C44.c` | +| 1520 | func_8017F96C | None | | None | near | 106 | residual: 106 mismatch | `.run/backlog_drafts/func_8017F96C.c` | +| 1521 | func_8017EFEC | None | | None | near | 107 | residual: 107 mismatch | `.run/backlog_drafts/func_8017EFEC.c` | +| 1522 | func_80182BC8 | None | | None | near | 107 | residual: 107 mismatch | `.run/backlog_drafts/func_80182BC8.c` | +| 1523 | func_8017F69C | None | | None | near | 107 | residual: 107 mismatch | `.run/backlog_drafts/func_8017F69C.c` | +| 1524 | func_80184828 | None | | None | near | 109 | residual: 109 mismatch | `.run/backlog_drafts/func_80184828.c` | +| 1525 | func_8017F3E4 | None | | None | near | 110 | residual: 110 mismatch | `.run/backlog_drafts/func_8017F3E4.c` | +| 1526 | func_8017DAF4 | None | | None | near | 111 | residual: 111 mismatch | `.run/backlog_drafts/func_8017DAF4.c` | +| 1527 | func_8017FE9C | None | | None | near | 111 | residual: 111 mismatch | `.run/backlog_drafts/func_8017FE9C.c` | +| 1528 | func_8017F768 | None | | None | near | 112 | residual: 112 mismatch | `.run/backlog_drafts/func_8017F768.c` | +| 1529 | func_8017F3B8 | None | | None | near | 112 | residual: 112 mismatch | `.run/backlog_drafts/func_8017F3B8.c` | +| 1530 | func_8017D508 | None | | None | near | 113 | residual: 113 mismatch | `.run/backlog_drafts/func_8017D508.c` | +| 1531 | func_8018788C | None | | None | near | 113 | residual: 113 mismatch | `.run/backlog_drafts/func_8018788C.c` | +| 1532 | func_8017E978 | None | | None | near | 115 | residual: 115 mismatch | `.run/backlog_drafts/func_8017E978.c` | +| 1533 | func_80181858 | None | | None | near | 117 | residual: 117 mismatch | `.run/backlog_drafts/func_80181858.c` | +| 1534 | func_80184CD0 | None | | None | near | 118 | residual: 118 mismatch | `.run/backlog_drafts/func_80184CD0.c` | +| 1535 | func_8017E8F8 | None | | None | near | 120 | residual: 120 mismatch | `.run/backlog_drafts/func_8017E8F8.c` | +| 1536 | func_80184358 | None | | None | near | 121 | residual: 121 mismatch | `.run/backlog_drafts/func_80184358.c` | +| 1537 | func_8017F074 | None | | None | near | 121 | residual: 121 mismatch | `.run/backlog_drafts/func_8017F074.c` | +| 1538 | func_8017D890 | None | | None | near | 124 | residual: 124 mismatch | `.run/backlog_drafts/func_8017D890.c` | +| 1539 | func_8017DECC | None | | None | near | 125 | residual: 125 mismatch | `.run/backlog_drafts/func_8017DECC.c` | +| 1540 | func_80185020 | None | | None | near | 125 | residual: 125 mismatch | `.run/backlog_drafts/func_80185020.c` | +| 1541 | func_8017DD2C | None | | None | near | 125 | residual: 125 mismatch | `.run/backlog_drafts/func_8017DD2C.c` | +| 1542 | func_801884BC | None | | None | near | 125 | residual: 125 mismatch | `.run/backlog_drafts/func_801884BC.c` | +| 1543 | func_801892CC | None | | None | near | 127 | residual: 127 mismatch | `.run/backlog_drafts/func_801892CC.c` | +| 1544 | func_8017EB00 | None | | None | near | 127 | residual: 127 mismatch | `.run/backlog_drafts/func_8017EB00.c` | +| 1545 | func_8017E538 | None | | None | near | 128 | residual: 128 mismatch | `.run/backlog_drafts/func_8017E538.c` | +| 1546 | func_8017D50C | None | | None | near | 128 | residual: 128 mismatch | `.run/backlog_drafts/func_8017D50C.c` | +| 1547 | func_801803F8 | None | | None | near | 129 | residual: 129 mismatch | `.run/backlog_drafts/func_801803F8.c` | +| 1548 | func_80185E68 | 1 | STRUCT | 132 | near | 131 | STRUCT: 131 mismatch | `.run/backlog_drafts/func_80185E68.c` | +| 1549 | func_80188754 | None | | None | near | 131 | residual: 131 mismatch | `.run/backlog_drafts/func_80188754.c` | +| 1550 | func_8017E378 | None | | None | near | 134 | residual: 134 mismatch | `.run/backlog_drafts/func_8017E378.c` | +| 1551 | func_80185730 | None | | None | near | 136 | residual: 136 mismatch | `.run/backlog_drafts/func_80185730.c` | +| 1552 | func_8018523C | None | | None | near | 136 | residual: 136 mismatch | `.run/backlog_drafts/func_8018523C.c` | +| 1553 | func_80186530 | None | | None | near | 139 | residual: 139 mismatch | `.run/backlog_drafts/func_80186530.c` | +| 1554 | func_80184F08 | None | regalloc-order | None | near | 141 | none — MATCH (145/145 ins, match_one confirmed) | `.run/backlog_drafts/func_80184F08.c` | +| 1555 | func_80185668 | None | | None | near | 142 | residual: 142 mismatch | `.run/backlog_drafts/func_80185668.c` | +| 1556 | func_8017DB0C | None | | None | near | 142 | residual: 142 mismatch | `.run/backlog_drafts/func_8017DB0C.c` | +| 1557 | func_801814B0 | None | | None | near | 144 | residual: 144 mismatch | `.run/backlog_drafts/func_801814B0.c` | +| 1558 | func_801801A4 | None | | None | near | 148 | residual: 148 mismatch | `.run/backlog_drafts/func_801801A4.c` | +| 1559 | func_80180868 | None | | None | near | 148 | residual: 148 mismatch | `.run/backlog_drafts/func_80180868.c` | +| 1560 | func_801829BC | None | | None | near | 150 | residual: 150 mismatch | `.run/backlog_drafts/func_801829BC.c` | +| 1561 | func_8017FBE8 | None | | None | near | 151 | residual: 151 mismatch | `.run/backlog_drafts/func_8017FBE8.c` | +| 1562 | func_8018200C | None | | None | near | 152 | residual: 152 mismatch | `.run/backlog_drafts/func_8018200C.c` | +| 1563 | func_80181984 | None | | None | near | 153 | residual: 153 mismatch | `.run/backlog_drafts/func_80181984.c` | +| 1564 | func_80183280 | None | | None | near | 154 | residual: 154 mismatch | `.run/backlog_drafts/func_80183280.c` | +| 1565 | func_80184CA0 | None | | None | near | 162 | residual: 162 mismatch | `.run/backlog_drafts/func_80184CA0.c` | +| 1566 | func_8017FA54 | None | | None | near | 166 | residual: 166 mismatch | `.run/backlog_drafts/func_8017FA54.c` | +| 1567 | func_8017D708 | None | | None | near | 166 | residual: 166 mismatch | `.run/backlog_drafts/func_8017D708.c` | +| 1568 | func_8017E6EC | None | | None | near | 172 | residual: 172 mismatch | `.run/backlog_drafts/func_8017E6EC.c` | +| 1569 | func_8017D5DC | None | | None | near | 173 | residual: 173 mismatch | `.run/backlog_drafts/func_8017D5DC.c` | +| 1570 | func_8017D47C | None | | None | near | 173 | residual: 173 mismatch | `.run/backlog_drafts/func_8017D47C.c` | +| 1571 | func_8017F40C | None | | None | near | 174 | residual: 174 mismatch | `.run/backlog_drafts/func_8017F40C.c` | +| 1572 | func_80184210 | None | | None | near | 176 | residual: 176 mismatch | `.run/backlog_drafts/func_80184210.c` | +| 1573 | func_80185E34 | None | | None | near | 185 | residual: 185 mismatch | `.run/backlog_drafts/func_80185E34.c` | +| 1574 | func_80180568 | None | | None | near | 185 | residual: 185 mismatch | `.run/backlog_drafts/func_80180568.c` | +| 1575 | func_801809C4 | None | | None | near | 190 | residual: 190 mismatch | `.run/backlog_drafts/func_801809C4.c` | +| 1576 | func_8013BD74 | 1 | struct | 198 | near | 192 | none — MATCH | `.run/backlog_drafts/func_8013BD74.c` | +| 1577 | func_80183D84 | None | | None | near | 192 | residual: 192 mismatch | `.run/backlog_drafts/func_80183D84.c` | +| 1578 | func_80183FEC | None | | None | near | 198 | residual: 198 mismatch | `.run/backlog_drafts/func_80183FEC.c` | +| 1579 | func_801823B8 | None | | None | near | 204 | residual: 204 mismatch | `.run/backlog_drafts/func_801823B8.c` | +| 1580 | func_801826C4 | None | | None | near | 207 | residual: 207 mismatch | `.run/backlog_drafts/func_801826C4.c` | +| 1581 | func_8017E374 | None | | None | near | 234 | residual: 234 mismatch | `.run/backlog_drafts/func_8017E374.c` | +| 1582 | func_8018C3F8 | None | | None | near | 236 | residual: 236 mismatch | `.run/backlog_drafts/func_8018C3F8.c` | +| 1583 | func_80183438 | None | | None | near | 237 | residual: 237 mismatch | `.run/backlog_drafts/func_80183438.c` | +| 1584 | func_8017E7D4 | None | | None | near | 241 | residual: 241 mismatch | `.run/backlog_drafts/func_8017E7D4.c` | +| 1585 | func_80183BF8 | None | | None | near | 258 | residual: 258 mismatch | `.run/backlog_drafts/func_80183BF8.c` | +| 1586 | func_8017EB30 | None | | None | near | 278 | residual: 278 mismatch | `.run/backlog_drafts/func_8017EB30.c` | +| 1587 | func_801804A0 | None | | None | near | 280 | residual: 280 mismatch | `.run/backlog_drafts/func_801804A0.c` | +| 1588 | func_80187EDC | None | | None | near | 296 | residual: 296 mismatch | `.run/backlog_drafts/func_80187EDC.c` | +| 1589 | func_8017F554 | None | | None | near | 299 | residual: 299 mismatch | `.run/backlog_drafts/func_8017F554.c` | +| 1590 | func_8017FEF0 | None | | None | near | 304 | residual: 304 mismatch | `.run/backlog_drafts/func_8017FEF0.c` | +| 1591 | func_80181670 | None | | None | near | 311 | residual: 311 mismatch | `.run/backlog_drafts/func_80181670.c` | +| 1592 | func_801833F0 | None | | None | near | 328 | residual: 328 mismatch | `.run/backlog_drafts/func_801833F0.c` | +| 1593 | func_80181128 | None | | None | near | 385 | residual: 385 mismatch | `.run/backlog_drafts/func_80181128.c` | +| 1594 | func_8017EA84 | None | | None | near | 578 | residual: 578 mismatch | `.run/backlog_drafts/func_8017EA84.c` | +| 1595 | func_8018057C | None | | None | near | 897 | residual: 897 mismatch | `.run/backlog_drafts/func_8018057C.c` | +| 1596 | func_80184A68 | 1 | regalloc-order | 33 | failed | | none — MATCH | `.run/backlog_drafts/func_80184A68.c` | +| 1597 | func_80159A20 | 1 | struct | 58 | failed | | none — MATCH. Key lever: block tail-MERGE (gcc shared `bne ...,$L1` cross-jump) by making the two return-tests STRUCTURALLY DIFFERENT — positive `if(==){goto mask;} return;` per branch (not `if(!=) return;`), so neither tail can merge. Then fix block ORDER by inverting the outer test (`if(d!=1)` makes the ==4/return path the inline fall-through, the d==1/p[2] path the forward `beq`-target block — matching the target layout). | `.run/backlog_drafts/func_80159A20.c` | +| 1598 | func_80180B64 | 1 | struct | 75 | failed | | none — MATCH (75 ins, relocation-masked) | `.run/backlog_drafts/func_80180B64.c` | +| 1599 | func_80183DE0 | 1 | regalloc-order | 91 | failed | | testing if(!=1) layout + counter-before-pointer init order | `.run/backlog_drafts/func_80183DE0.c` | +| 1600 | func_80182C9C | 1 | schedule | 101 | failed | | none — MATCH (101 ins). Inner-switch break-to-shared-tail must be written as | `.run/backlog_drafts/func_80182C9C.c` | +| 1601 | func_80183FB8 | 1 | loose-typing | 101 | failed | | none — MATCH (relocation-masked match_one, 101/101 ins) | `.run/backlog_drafts/func_80183FB8.c` | +| 1602 | func_80185BA4 | 1 | WAVE | 177 | failed | | won't compile standalone (loose-typing / missing decl) | | +| 1603 | func_8017D8DC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017D8DC.c` | +| 1604 | func_80187750 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80187750.c` | +| 1605 | func_8017FFEC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017FFEC.c` | +| 1606 | func_80184018 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80184018.c` | +| 1607 | func_8017DC18 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017DC18.c` | +| 1608 | func_801853CC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801853CC.c` | +| 1609 | func_80181894 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181894.c` | +| 1610 | func_8018BFBC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018BFBC.c` | +| 1611 | func_801807F4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801807F4.c` | +| 1612 | func_8017FFC8 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017FFC8.c` | +| 1613 | func_8017E99C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017E99C.c` | +| 1614 | func_80180294 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80180294.c` | +| 1615 | func_80184504 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80184504.c` | +| 1616 | func_80180B1C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80180B1C.c` | +| 1617 | func_8017E76C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017E76C.c` | +| 1618 | func_8017F29C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017F29C.c` | +| 1619 | func_8018253C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018253C.c` | +| 1620 | func_8017F00C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017F00C.c` | +| 1621 | func_801802B0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801802B0.c` | +| 1622 | func_80181FDC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181FDC.c` | +| 1623 | func_8017DB3C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017DB3C.c` | +| 1624 | func_801854DC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801854DC.c` | +| 1625 | func_8017DA1C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017DA1C.c` | +| 1626 | func_80180D04 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80180D04.c` | +| 1627 | func_8017BF20 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017BF20.c` | +| 1628 | func_8017FFC4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017FFC4.c` | +| 1629 | func_8017C004 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017C004.c` | +| 1630 | func_8017E2F0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017E2F0.c` | +| 1631 | func_8017F4D4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017F4D4.c` | +| 1632 | func_8018358C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018358C.c` | +| 1633 | func_801841E4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801841E4.c` | +| 1634 | func_80181738 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181738.c` | +| 1635 | func_801873D8 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801873D8.c` | +| 1636 | func_80181E90 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181E90.c` | +| 1637 | func_80185628 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80185628.c` | +| 1638 | func_80182384 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80182384.c` | +| 1639 | func_80184268 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80184268.c` | +| 1640 | func_80184234 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80184234.c` | +| 1641 | func_801829D8 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801829D8.c` | +| 1642 | func_80181A78 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181A78.c` | +| 1643 | func_80186E58 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80186E58.c` | +| 1644 | func_80183BF0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80183BF0.c` | +| 1645 | func_80180EC4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80180EC4.c` | +| 1646 | func_801805D4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801805D4.c` | +| 1647 | func_8017EA1C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017EA1C.c` | +| 1648 | func_80181FA4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181FA4.c` | +| 1649 | func_80184558 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80184558.c` | +| 1650 | func_8017F098 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017F098.c` | +| 1651 | func_801822CC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801822CC.c` | +| 1652 | func_80185BA8 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80185BA8.c` | +| 1653 | func_8018E710 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018E710.c` | +| 1654 | func_80183F80 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80183F80.c` | +| 1655 | func_80182D9C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80182D9C.c` | +| 1656 | func_80183028 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80183028.c` | +| 1657 | func_80183104 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80183104.c` | +| 1658 | func_801831EC | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801831EC.c` | +| 1659 | func_8018326C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018326C.c` | +| 1660 | func_8018305C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8018305C.c` | +| 1661 | func_801852D0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_801852D0.c` | +| 1662 | func_8017E3F4 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8017E3F4.c` | +| 1663 | func_800D1658 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_800D1658.c` | +| 1664 | func_800D1984 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_800D1984.c` | +| 1665 | func_800D24A0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_800D24A0.c` | +| 1666 | func_8018457C | None | regalloc-order | None | failed | | none — MATCH (160 ins). case1-tail needed a $a0 pin on the state temp | `.run/backlog_drafts/func_8018457C.c` | +| 1667 | func_8018D870 | None | regalloc-order | None | failed | | none — MATCH (match_one 380/380, relocation-masked). Levers: &&-DeMorgan for the mult block layout; lhu-corrected reads; split temps (t=func_8012C658 ret->v1, d8p=d8 load-temp->a0, s60/amt pinned $v1/$a1 for the mult chain); accumulate-in-place for the 0xe add; unsigned-short store for ori 0x8800; d8-load-via-temp to force the addu s3,a0 copy (fixes -1 length drift). | `.run/backlog_drafts/func_8018D870.c` | +| 1668 | func_80142B2C | None | plumbing | None | failed | | none — MATCH | `.run/backlog_drafts/func_80142B2C.c` | +| 1669 | func_80144090 | None | regalloc-order | None | failed | | 154/154 ins structural match (callees/consts/ctrl-flow/stack/GPU-packet all byte-correct); residual 25 = caller-saved temp-reg coalescing in the final ring-vertex block (target reuses dead $s0=iVar3 for iVar3-(iVar4>>6) subu where gcc reuses iVar4>>6's reg; iVar4 mflo -> $a3 vs target $v0) + 2-ins schedule swap of giv-increment vs iVar2*4 -> permuter grinder territory (§27 step-5) | `.run/backlog_drafts/func_80144090.c` | +| 1670 | func_80133AB0 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80133AB0.c` | +| 1671 | func_80143D28 | None | regalloc-order | None | failed | | none — MATCH (80 ins, relocation-masked). iVar2/iVar3 pinned $s1/$s2; sVar4 is an | `.run/backlog_drafts/func_80143D28.c` | +| 1672 | func_80144B9C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80144B9C.c` | +| 1673 | func_80166994 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80166994.c` | +| 1674 | func_8013DD68 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8013DD68.c` | diff --git a/docs/progress.fleet.md b/docs/progress.fleet.md index 1e4948c7bd..a0b572beef 100644 --- a/docs/progress.fleet.md +++ b/docs/progress.fleet.md @@ -4,157 +4,157 @@ # cross-binary collapsible-byte leverage: docs/duplicates.cross.md. # THREE progress metrics (all matter — see the labels): -FLEET fn-count byte-ident: 318859 / 353720 = 90.14% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay) -FLEET instr-weighted : 11091367 / 13141652 = 84.4% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number) -FLEET distinct-code(uniq): 4191294 / 5634875 = 74.4% (66761/87459 unique fns; the DISTINCT-RE number) +FLEET fn-count byte-ident: 319412 / 353720 = 90.30% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay) +FLEET instr-weighted : 11128007 / 13141652 = 84.7% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number) +FLEET distinct-code(uniq): 4200272 / 5634875 = 74.5% (66895/87459 unique fns; the DISTINCT-RE number) MAIN game-code weighted : 436 / 60201 = 0.7% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-06-14; caveat is R34: no independent second oracle for a PS-X EXE, NOT drift) - (fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 11090931 / 13081451 = 84.8%) + (fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 11127571 / 13081451 = 85.1%) -FLEET REAL substantive : 317004 (of which dedup-shared 239530 via 1886 groups / 239604 instances) +FLEET REAL substantive : 317557 (of which dedup-shared 239530 via 1886 groups / 239604 instances) FLEET LINKED PsyQ objs : 959 FLEET NON_MATCHING : 7 (0 in any default build — G4) -FLEET INCLUDE_ASM stubs : 34854 +FLEET INCLUDE_ASM stubs : 34301 FLEET matchable : 353720 | binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % | |---|---:|---:|---:|---:|---:|---:| | main | 54 | 2 | 959 | 1055 | 2096 | 50.3% | | resident | 129 | 0 | 0 | 131 | 145 | 90.3% | -| ov_SC01_000 | 2271 | 1742 | 0 | 2271 | 2403 | 94.5% | -| ov_SC01_001 | 2276 | 1743 | 0 | 2278 | 2466 | 92.4% | -| ov_SC01_004 | 2266 | 1734 | 0 | 2267 | 2414 | 93.9% | -| ov_SC01_005 | 2296 | 1757 | 0 | 2296 | 2503 | 91.7% | -| ov_SC01_006 | 2296 | 1757 | 0 | 2296 | 2503 | 91.7% | -| ov_SC01_008 | 2266 | 1734 | 0 | 2268 | 2426 | 93.5% | -| ov_SC01_009 | 2292 | 1735 | 0 | 2293 | 2507 | 91.5% | -| ov_SC01_074 | 2270 | 1735 | 0 | 2272 | 2425 | 93.7% | -| ov_SC01_077 | 2449 | 1702 | 0 | 2451 | 2585 | 94.8% | -| ov_SC01_080 | 2308 | 1738 | 0 | 2308 | 2512 | 91.9% | -| ov_SC01_084 | 2315 | 1738 | 0 | 2320 | 2579 | 90.0% | -| ov_SC02_000 | 2368 | 1773 | 0 | 2368 | 2683 | 88.3% | -| ov_SC02_003 | 2368 | 1773 | 0 | 2368 | 2683 | 88.3% | -| ov_SC02_004 | 2274 | 1738 | 0 | 2274 | 2401 | 94.7% | -| ov_SC02_005 | 2382 | 1734 | 0 | 2392 | 2927 | 81.7% | -| ov_SC02_011 | 2395 | 1741 | 0 | 2406 | 2893 | 83.2% | -| ov_SC02_015 | 2276 | 1740 | 0 | 2276 | 2414 | 94.3% | -| ov_SC02_016 | 2310 | 1740 | 0 | 2313 | 2545 | 90.9% | -| ov_SC02_017 | 2354 | 1740 | 0 | 2362 | 2732 | 86.5% | -| ov_SC02_021 | 2282 | 1740 | 0 | 2282 | 2437 | 93.6% | -| ov_SC02_026 | 2297 | 1738 | 0 | 2303 | 2572 | 89.5% | -| ov_SC02_027 | 2320 | 1738 | 0 | 2329 | 2692 | 86.5% | -| ov_SC02_028 | 2322 | 1738 | 0 | 2332 | 2701 | 86.3% | -| ov_SC02_031 | 2308 | 1739 | 0 | 2313 | 2562 | 90.3% | -| ov_SC02_035 | 2283 | 1738 | 0 | 2286 | 2520 | 90.7% | -| ov_SC02_039 | 2267 | 1738 | 0 | 2267 | 2416 | 93.8% | -| ov_SC02_041 | 2305 | 1738 | 0 | 2308 | 2561 | 90.1% | -| ov_SC03_001 | 2402 | 1739 | 0 | 2419 | 2869 | 84.3% | -| ov_SC03_002 | 2328 | 1743 | 0 | 2343 | 2631 | 89.1% | -| ov_SC03_003 | 2277 | 1738 | 0 | 2278 | 2423 | 94.0% | -| ov_SC03_006 | 2345 | 1744 | 0 | 2354 | 2767 | 85.1% | -| ov_SC03_007 | 2322 | 1738 | 0 | 2326 | 2623 | 88.7% | -| ov_SC03_010 | 2285 | 1738 | 0 | 2285 | 2471 | 92.5% | -| ov_SC03_011 | 2291 | 1738 | 0 | 2297 | 2527 | 90.9% | -| ov_SC03_012 | 2269 | 1738 | 0 | 2270 | 2406 | 94.3% | -| ov_SC03_013 | 2290 | 1738 | 0 | 2290 | 2493 | 91.9% | -| ov_SC03_014 | 2348 | 1763 | 0 | 2348 | 2685 | 87.4% | -| ov_SC03_015 | 2348 | 1763 | 0 | 2348 | 2685 | 87.4% | -| ov_SC03_023 | 2276 | 1738 | 0 | 2277 | 2435 | 93.5% | -| ov_SC03_024 | 2336 | 1743 | 0 | 2343 | 2641 | 88.7% | -| ov_SC03_028 | 2316 | 1738 | 0 | 2320 | 2664 | 87.1% | -| ov_SC03_029 | 2318 | 1740 | 0 | 2328 | 2644 | 88.0% | -| ov_SC03_030 | 2291 | 1743 | 0 | 2293 | 2495 | 91.9% | -| ov_SC03_031 | 2287 | 1738 | 0 | 2290 | 2514 | 91.1% | -| ov_SC03_089 | 2304 | 1738 | 0 | 2311 | 2581 | 89.5% | -| ov_SC03_090 | 2305 | 1738 | 0 | 2313 | 2625 | 88.1% | -| ov_SC03_091 | 2308 | 1738 | 0 | 2316 | 2640 | 87.7% | -| ov_SC03_092 | 2318 | 1738 | 0 | 2330 | 2587 | 90.1% | -| ov_SC03_093 | 2294 | 1738 | 0 | 2298 | 2563 | 89.7% | -| ov_SC03_094 | 2289 | 1738 | 0 | 2295 | 2577 | 89.1% | -| ov_SC03_095 | 2279 | 1738 | 0 | 2282 | 2474 | 92.2% | -| ov_SC03_096 | 2279 | 1738 | 0 | 2282 | 2465 | 92.6% | -| ov_SC03_097 | 2309 | 1738 | 0 | 2316 | 2603 | 89.0% | -| ov_SC03_098 | 2287 | 1738 | 0 | 2290 | 2541 | 90.1% | -| ov_SC03_099 | 2280 | 1738 | 0 | 2283 | 2504 | 91.2% | -| ov_SC03_100 | 2290 | 1738 | 0 | 2294 | 2539 | 90.4% | -| ov_SC03_101 | 2290 | 1738 | 0 | 2294 | 2528 | 90.7% | -| ov_SC03_102 | 2283 | 1738 | 0 | 2286 | 2492 | 91.7% | -| ov_SC03_103 | 2286 | 1740 | 0 | 2289 | 2510 | 91.2% | -| ov_SC03_104 | 2312 | 1738 | 0 | 2319 | 2616 | 88.6% | -| ov_SC03_105 | 2303 | 1738 | 0 | 2310 | 2597 | 88.9% | -| ov_SC03_108 | 2270 | 1738 | 0 | 2270 | 2443 | 92.9% | -| ov_SC03_109 | 2274 | 1738 | 0 | 2276 | 2424 | 93.9% | -| ov_SC03_110 | 2278 | 1738 | 0 | 2278 | 2468 | 92.3% | -| ov_SC03_111 | 2289 | 1738 | 0 | 2292 | 2510 | 91.3% | -| ov_SC03_112 | 2285 | 1740 | 0 | 2287 | 2526 | 90.5% | -| ov_SC03_113 | 2278 | 1740 | 0 | 2281 | 2468 | 92.4% | -| ov_SC03_114 | 2267 | 1738 | 0 | 2269 | 2415 | 94.0% | -| ov_SC03_115 | 2284 | 1738 | 0 | 2286 | 2472 | 92.5% | -| ov_SC03_116 | 2275 | 1738 | 0 | 2278 | 2438 | 93.4% | -| ov_SC03_117 | 2302 | 1738 | 0 | 2308 | 2557 | 90.3% | -| ov_SC03_118 | 2348 | 1762 | 0 | 2349 | 2685 | 87.5% | -| ov_SC03_119 | 2347 | 1762 | 0 | 2348 | 2685 | 87.4% | -| ov_SC03_121 | 2282 | 1738 | 0 | 2285 | 2459 | 92.9% | -| ov_SC03_124 | 2360 | 1734 | 0 | 2380 | 2741 | 86.8% | -| ov_SC03_125 | 2316 | 1738 | 0 | 2328 | 2588 | 90.0% | -| ov_SC03_126 | 2279 | 1740 | 0 | 2279 | 2423 | 94.1% | -| ov_SC04_000 | 2295 | 1742 | 0 | 2304 | 2546 | 90.5% | -| ov_SC04_002 | 2314 | 1738 | 0 | 2318 | 2636 | 87.9% | -| ov_SC04_003 | 2290 | 1738 | 0 | 2294 | 2502 | 91.7% | -| ov_SC04_004 | 2299 | 1738 | 0 | 2301 | 2558 | 90.0% | -| ov_SC04_005 | 2309 | 1738 | 0 | 2315 | 2612 | 88.6% | -| ov_SC04_006 | 2279 | 1738 | 0 | 2281 | 2454 | 93.0% | -| ov_SC04_007 | 2303 | 1738 | 0 | 2307 | 2569 | 89.8% | -| ov_SC04_008 | 2271 | 1738 | 0 | 2271 | 2415 | 94.0% | -| ov_SC04_009 | 2286 | 1738 | 0 | 2289 | 2441 | 93.8% | -| ov_SC04_010 | 2276 | 1738 | 0 | 2277 | 2419 | 94.1% | -| ov_SC04_011 | 2334 | 1738 | 0 | 2340 | 2803 | 83.5% | -| ov_SC04_012 | 2273 | 1738 | 0 | 2274 | 2420 | 94.0% | -| ov_SC04_015 | 2338 | 1739 | 0 | 2349 | 2611 | 90.0% | -| ov_SC04_016 | 2276 | 1738 | 0 | 2278 | 2440 | 93.4% | -| ov_SC04_018 | 2386 | 1773 | 0 | 2386 | 2857 | 83.5% | -| ov_SC04_019 | 2392 | 1773 | 0 | 2392 | 2857 | 83.7% | -| ov_SC04_020 | 2303 | 1738 | 0 | 2315 | 2567 | 90.2% | -| ov_SC04_021 | 2280 | 1740 | 0 | 2280 | 2423 | 94.1% | -| ov_SC05_000 | 2277 | 1742 | 0 | 2280 | 2422 | 94.1% | -| ov_SC05_001 | 2299 | 1738 | 0 | 2304 | 2574 | 89.5% | -| ov_SC05_002 | 2282 | 1738 | 0 | 2285 | 2442 | 93.6% | -| ov_SC05_003 | 2279 | 1738 | 0 | 2280 | 2481 | 91.9% | -| ov_SC05_004 | 2275 | 1738 | 0 | 2277 | 2464 | 92.4% | -| ov_SC05_005 | 2280 | 1738 | 0 | 2281 | 2491 | 91.6% | -| ov_SC05_006 | 2273 | 1738 | 0 | 2273 | 2430 | 93.5% | -| ov_SC05_007 | 2283 | 1738 | 0 | 2288 | 2482 | 92.2% | -| ov_SC05_008 | 2300 | 1738 | 0 | 2302 | 2543 | 90.5% | -| ov_SC05_009 | 2279 | 1738 | 0 | 2283 | 2438 | 93.6% | -| ov_SC05_010 | 2306 | 1738 | 0 | 2310 | 2588 | 89.3% | -| ov_SC05_011 | 2275 | 1738 | 0 | 2276 | 2409 | 94.5% | -| ov_SC05_017 | 2382 | 1735 | 0 | 2393 | 2842 | 84.2% | -| ov_SC05_018 | 2329 | 1738 | 0 | 2342 | 2673 | 87.6% | -| ov_SC05_019 | 2280 | 1740 | 0 | 2280 | 2423 | 94.1% | -| ov_SC06_000 | 2344 | 1747 | 0 | 2347 | 2691 | 87.2% | -| ov_SC06_006 | 2296 | 1738 | 0 | 2297 | 2511 | 91.5% | -| ov_SC06_008 | 2316 | 1740 | 0 | 2322 | 2542 | 91.3% | -| ov_SC06_010 | 2296 | 1738 | 0 | 2301 | 2517 | 91.4% | -| ov_SC06_011 | 2284 | 1738 | 0 | 2288 | 2468 | 92.7% | -| ov_SC06_013 | 2278 | 1738 | 0 | 2279 | 2425 | 94.0% | -| ov_SC06_014 | 2284 | 1738 | 0 | 2286 | 2453 | 93.2% | -| ov_SC06_015 | 2281 | 1738 | 0 | 2281 | 2421 | 94.2% | -| ov_SC06_016 | 2299 | 1738 | 0 | 2301 | 2549 | 90.3% | -| ov_SC06_018 | 2310 | 1740 | 0 | 2317 | 2665 | 86.9% | -| ov_SC06_020 | 2288 | 1740 | 0 | 2289 | 2518 | 90.9% | -| ov_SC06_022 | 2307 | 1738 | 0 | 2315 | 2642 | 87.6% | -| ov_SC06_024 | 2317 | 1738 | 0 | 2323 | 2667 | 87.1% | -| ov_SC06_025 | 2301 | 1738 | 0 | 2306 | 2572 | 89.7% | -| ov_SC06_027 | 2266 | 1738 | 0 | 2267 | 2408 | 94.1% | -| ov_SC06_029 | 2327 | 1738 | 0 | 2339 | 2662 | 87.9% | -| ov_SC06_030 | 2280 | 1738 | 0 | 2280 | 2456 | 92.8% | -| ov_SC06_032 | 2302 | 1739 | 0 | 2309 | 2658 | 86.9% | -| ov_SC06_033 | 2304 | 1739 | 0 | 2311 | 2631 | 87.8% | -| ov_SC07_000 | 2295 | 1742 | 0 | 2297 | 2521 | 91.1% | -| ov_SC07_001 | 2279 | 1738 | 0 | 2281 | 2454 | 93.0% | -| ov_SC07_002 | 2307 | 1738 | 0 | 2311 | 2579 | 89.6% | -| ov_SC07_006 | 2077 | 1555 | 0 | 2157 | 2456 | 87.8% | -| ov_SC07_007 | 2072 | 1586 | 0 | 2156 | 2613 | 82.5% | -| ov_SC07_008 | 2264 | 1738 | 0 | 2264 | 2386 | 94.9% | -| ov_SC07_009 | 2273 | 1738 | 0 | 2275 | 2430 | 93.6% | -| ov_SC07_010 | 2104 | 1608 | 0 | 2187 | 2524 | 86.6% | -| ov_SC07_011 | 2072 | 1585 | 0 | 2152 | 2449 | 87.9% | +| ov_SC01_000 | 2275 | 1742 | 0 | 2275 | 2403 | 94.7% | +| ov_SC01_001 | 2280 | 1743 | 0 | 2282 | 2466 | 92.5% | +| ov_SC01_004 | 2270 | 1734 | 0 | 2271 | 2414 | 94.1% | +| ov_SC01_005 | 2300 | 1757 | 0 | 2300 | 2503 | 91.9% | +| ov_SC01_006 | 2300 | 1757 | 0 | 2300 | 2503 | 91.9% | +| ov_SC01_008 | 2270 | 1734 | 0 | 2272 | 2426 | 93.7% | +| ov_SC01_009 | 2296 | 1735 | 0 | 2297 | 2507 | 91.6% | +| ov_SC01_074 | 2274 | 1735 | 0 | 2276 | 2425 | 93.9% | +| ov_SC01_077 | 2454 | 1702 | 0 | 2456 | 2585 | 95.0% | +| ov_SC01_080 | 2312 | 1738 | 0 | 2312 | 2512 | 92.0% | +| ov_SC01_084 | 2319 | 1738 | 0 | 2324 | 2579 | 90.1% | +| ov_SC02_000 | 2372 | 1773 | 0 | 2372 | 2683 | 88.4% | +| ov_SC02_003 | 2372 | 1773 | 0 | 2372 | 2683 | 88.4% | +| ov_SC02_004 | 2278 | 1738 | 0 | 2278 | 2401 | 94.9% | +| ov_SC02_005 | 2386 | 1734 | 0 | 2396 | 2927 | 81.9% | +| ov_SC02_011 | 2399 | 1741 | 0 | 2410 | 2893 | 83.3% | +| ov_SC02_015 | 2280 | 1740 | 0 | 2280 | 2414 | 94.4% | +| ov_SC02_016 | 2314 | 1740 | 0 | 2317 | 2545 | 91.0% | +| ov_SC02_017 | 2358 | 1740 | 0 | 2366 | 2732 | 86.6% | +| ov_SC02_021 | 2286 | 1740 | 0 | 2286 | 2437 | 93.8% | +| ov_SC02_026 | 2301 | 1738 | 0 | 2307 | 2572 | 89.7% | +| ov_SC02_027 | 2324 | 1738 | 0 | 2333 | 2692 | 86.7% | +| ov_SC02_028 | 2326 | 1738 | 0 | 2336 | 2701 | 86.5% | +| ov_SC02_031 | 2312 | 1739 | 0 | 2317 | 2562 | 90.4% | +| ov_SC02_035 | 2287 | 1738 | 0 | 2290 | 2520 | 90.9% | +| ov_SC02_039 | 2271 | 1738 | 0 | 2271 | 2416 | 94.0% | +| ov_SC02_041 | 2309 | 1738 | 0 | 2312 | 2561 | 90.3% | +| ov_SC03_001 | 2406 | 1739 | 0 | 2423 | 2869 | 84.5% | +| ov_SC03_002 | 2332 | 1743 | 0 | 2347 | 2631 | 89.2% | +| ov_SC03_003 | 2281 | 1738 | 0 | 2282 | 2423 | 94.2% | +| ov_SC03_006 | 2349 | 1744 | 0 | 2358 | 2767 | 85.2% | +| ov_SC03_007 | 2326 | 1738 | 0 | 2330 | 2623 | 88.8% | +| ov_SC03_010 | 2289 | 1738 | 0 | 2289 | 2471 | 92.6% | +| ov_SC03_011 | 2295 | 1738 | 0 | 2301 | 2527 | 91.1% | +| ov_SC03_012 | 2273 | 1738 | 0 | 2274 | 2406 | 94.5% | +| ov_SC03_013 | 2294 | 1738 | 0 | 2294 | 2493 | 92.0% | +| ov_SC03_014 | 2352 | 1763 | 0 | 2352 | 2685 | 87.6% | +| ov_SC03_015 | 2352 | 1763 | 0 | 2352 | 2685 | 87.6% | +| ov_SC03_023 | 2280 | 1738 | 0 | 2281 | 2435 | 93.7% | +| ov_SC03_024 | 2340 | 1743 | 0 | 2347 | 2641 | 88.9% | +| ov_SC03_028 | 2320 | 1738 | 0 | 2324 | 2664 | 87.2% | +| ov_SC03_029 | 2322 | 1740 | 0 | 2332 | 2644 | 88.2% | +| ov_SC03_030 | 2295 | 1743 | 0 | 2297 | 2495 | 92.1% | +| ov_SC03_031 | 2291 | 1738 | 0 | 2294 | 2514 | 91.2% | +| ov_SC03_089 | 2308 | 1738 | 0 | 2315 | 2581 | 89.7% | +| ov_SC03_090 | 2309 | 1738 | 0 | 2317 | 2625 | 88.3% | +| ov_SC03_091 | 2312 | 1738 | 0 | 2320 | 2640 | 87.9% | +| ov_SC03_092 | 2322 | 1738 | 0 | 2334 | 2587 | 90.2% | +| ov_SC03_093 | 2298 | 1738 | 0 | 2302 | 2563 | 89.8% | +| ov_SC03_094 | 2293 | 1738 | 0 | 2299 | 2577 | 89.2% | +| ov_SC03_095 | 2283 | 1738 | 0 | 2286 | 2474 | 92.4% | +| ov_SC03_096 | 2283 | 1738 | 0 | 2286 | 2465 | 92.7% | +| ov_SC03_097 | 2313 | 1738 | 0 | 2320 | 2603 | 89.1% | +| ov_SC03_098 | 2291 | 1738 | 0 | 2294 | 2541 | 90.3% | +| ov_SC03_099 | 2284 | 1738 | 0 | 2287 | 2504 | 91.3% | +| ov_SC03_100 | 2294 | 1738 | 0 | 2298 | 2539 | 90.5% | +| ov_SC03_101 | 2294 | 1738 | 0 | 2298 | 2528 | 90.9% | +| ov_SC03_102 | 2287 | 1738 | 0 | 2290 | 2492 | 91.9% | +| ov_SC03_103 | 2290 | 1740 | 0 | 2293 | 2510 | 91.4% | +| ov_SC03_104 | 2316 | 1738 | 0 | 2323 | 2616 | 88.8% | +| ov_SC03_105 | 2307 | 1738 | 0 | 2314 | 2597 | 89.1% | +| ov_SC03_108 | 2274 | 1738 | 0 | 2274 | 2443 | 93.1% | +| ov_SC03_109 | 2278 | 1738 | 0 | 2280 | 2424 | 94.1% | +| ov_SC03_110 | 2282 | 1738 | 0 | 2282 | 2468 | 92.5% | +| ov_SC03_111 | 2293 | 1738 | 0 | 2296 | 2510 | 91.5% | +| ov_SC03_112 | 2289 | 1740 | 0 | 2291 | 2526 | 90.7% | +| ov_SC03_113 | 2282 | 1740 | 0 | 2285 | 2468 | 92.6% | +| ov_SC03_114 | 2271 | 1738 | 0 | 2273 | 2415 | 94.1% | +| ov_SC03_115 | 2288 | 1738 | 0 | 2290 | 2472 | 92.6% | +| ov_SC03_116 | 2279 | 1738 | 0 | 2282 | 2438 | 93.6% | +| ov_SC03_117 | 2306 | 1738 | 0 | 2312 | 2557 | 90.4% | +| ov_SC03_118 | 2352 | 1762 | 0 | 2353 | 2685 | 87.6% | +| ov_SC03_119 | 2351 | 1762 | 0 | 2352 | 2685 | 87.6% | +| ov_SC03_121 | 2286 | 1738 | 0 | 2289 | 2459 | 93.1% | +| ov_SC03_124 | 2364 | 1734 | 0 | 2384 | 2741 | 87.0% | +| ov_SC03_125 | 2320 | 1738 | 0 | 2332 | 2588 | 90.1% | +| ov_SC03_126 | 2283 | 1740 | 0 | 2283 | 2423 | 94.2% | +| ov_SC04_000 | 2299 | 1742 | 0 | 2308 | 2546 | 90.7% | +| ov_SC04_002 | 2318 | 1738 | 0 | 2322 | 2636 | 88.1% | +| ov_SC04_003 | 2294 | 1738 | 0 | 2298 | 2502 | 91.8% | +| ov_SC04_004 | 2303 | 1738 | 0 | 2305 | 2558 | 90.1% | +| ov_SC04_005 | 2313 | 1738 | 0 | 2319 | 2612 | 88.8% | +| ov_SC04_006 | 2283 | 1738 | 0 | 2285 | 2454 | 93.1% | +| ov_SC04_007 | 2307 | 1738 | 0 | 2311 | 2569 | 90.0% | +| ov_SC04_008 | 2275 | 1738 | 0 | 2275 | 2415 | 94.2% | +| ov_SC04_009 | 2290 | 1738 | 0 | 2293 | 2441 | 93.9% | +| ov_SC04_010 | 2280 | 1738 | 0 | 2281 | 2419 | 94.3% | +| ov_SC04_011 | 2338 | 1738 | 0 | 2344 | 2803 | 83.6% | +| ov_SC04_012 | 2277 | 1738 | 0 | 2278 | 2420 | 94.1% | +| ov_SC04_015 | 2342 | 1739 | 0 | 2353 | 2611 | 90.1% | +| ov_SC04_016 | 2280 | 1738 | 0 | 2282 | 2440 | 93.5% | +| ov_SC04_018 | 2390 | 1773 | 0 | 2390 | 2857 | 83.7% | +| ov_SC04_019 | 2396 | 1773 | 0 | 2396 | 2857 | 83.9% | +| ov_SC04_020 | 2307 | 1738 | 0 | 2319 | 2567 | 90.3% | +| ov_SC04_021 | 2284 | 1740 | 0 | 2284 | 2423 | 94.3% | +| ov_SC05_000 | 2281 | 1742 | 0 | 2284 | 2422 | 94.3% | +| ov_SC05_001 | 2303 | 1738 | 0 | 2308 | 2574 | 89.7% | +| ov_SC05_002 | 2286 | 1738 | 0 | 2289 | 2442 | 93.7% | +| ov_SC05_003 | 2283 | 1738 | 0 | 2284 | 2481 | 92.1% | +| ov_SC05_004 | 2279 | 1738 | 0 | 2281 | 2464 | 92.6% | +| ov_SC05_005 | 2284 | 1738 | 0 | 2285 | 2491 | 91.7% | +| ov_SC05_006 | 2277 | 1738 | 0 | 2277 | 2430 | 93.7% | +| ov_SC05_007 | 2287 | 1738 | 0 | 2292 | 2482 | 92.3% | +| ov_SC05_008 | 2304 | 1738 | 0 | 2306 | 2543 | 90.7% | +| ov_SC05_009 | 2283 | 1738 | 0 | 2287 | 2438 | 93.8% | +| ov_SC05_010 | 2310 | 1738 | 0 | 2314 | 2588 | 89.4% | +| ov_SC05_011 | 2279 | 1738 | 0 | 2280 | 2409 | 94.6% | +| ov_SC05_017 | 2386 | 1735 | 0 | 2397 | 2842 | 84.3% | +| ov_SC05_018 | 2333 | 1738 | 0 | 2346 | 2673 | 87.8% | +| ov_SC05_019 | 2284 | 1740 | 0 | 2284 | 2423 | 94.3% | +| ov_SC06_000 | 2348 | 1747 | 0 | 2351 | 2691 | 87.4% | +| ov_SC06_006 | 2300 | 1738 | 0 | 2301 | 2511 | 91.6% | +| ov_SC06_008 | 2320 | 1740 | 0 | 2326 | 2542 | 91.5% | +| ov_SC06_010 | 2300 | 1738 | 0 | 2305 | 2517 | 91.6% | +| ov_SC06_011 | 2288 | 1738 | 0 | 2292 | 2468 | 92.9% | +| ov_SC06_013 | 2282 | 1738 | 0 | 2283 | 2425 | 94.1% | +| ov_SC06_014 | 2288 | 1738 | 0 | 2290 | 2453 | 93.4% | +| ov_SC06_015 | 2285 | 1738 | 0 | 2285 | 2421 | 94.4% | +| ov_SC06_016 | 2303 | 1738 | 0 | 2305 | 2549 | 90.4% | +| ov_SC06_018 | 2314 | 1740 | 0 | 2321 | 2665 | 87.1% | +| ov_SC06_020 | 2292 | 1740 | 0 | 2293 | 2518 | 91.1% | +| ov_SC06_022 | 2311 | 1738 | 0 | 2319 | 2642 | 87.8% | +| ov_SC06_024 | 2321 | 1738 | 0 | 2327 | 2667 | 87.3% | +| ov_SC06_025 | 2305 | 1738 | 0 | 2310 | 2572 | 89.8% | +| ov_SC06_027 | 2270 | 1738 | 0 | 2271 | 2408 | 94.3% | +| ov_SC06_029 | 2331 | 1738 | 0 | 2343 | 2662 | 88.0% | +| ov_SC06_030 | 2284 | 1738 | 0 | 2284 | 2456 | 93.0% | +| ov_SC06_032 | 2306 | 1739 | 0 | 2313 | 2658 | 87.0% | +| ov_SC06_033 | 2308 | 1739 | 0 | 2315 | 2631 | 88.0% | +| ov_SC07_000 | 2299 | 1742 | 0 | 2301 | 2521 | 91.3% | +| ov_SC07_001 | 2283 | 1738 | 0 | 2285 | 2454 | 93.1% | +| ov_SC07_002 | 2311 | 1738 | 0 | 2315 | 2579 | 89.8% | +| ov_SC07_006 | 2081 | 1555 | 0 | 2161 | 2456 | 88.0% | +| ov_SC07_007 | 2076 | 1586 | 0 | 2160 | 2613 | 82.7% | +| ov_SC07_008 | 2268 | 1738 | 0 | 2268 | 2386 | 95.1% | +| ov_SC07_009 | 2277 | 1738 | 0 | 2279 | 2430 | 93.8% | +| ov_SC07_010 | 2108 | 1608 | 0 | 2191 | 2524 | 86.8% | +| ov_SC07_011 | 2076 | 1585 | 0 | 2156 | 2449 | 88.0% | diff --git a/src/ov_SC01_000/ov_SC01_000.c b/src/ov_SC01_000/ov_SC01_000.c index 9e8e9fe09d..b31146f456 100644 --- a/src/ov_SC01_000/ov_SC01_000.c +++ b/src/ov_SC01_000/ov_SC01_000.c @@ -669,7 +669,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC01_000/ov_SC01_000_after.c b/src/ov_SC01_000/ov_SC01_000_after.c index 1bb7d0ec21..33f348a564 100644 --- a/src/ov_SC01_000/ov_SC01_000_after.c +++ b/src/ov_SC01_000/ov_SC01_000_after.c @@ -755,7 +755,34 @@ final: } -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180780) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180780[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180780[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1052,7 +1079,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC01_000/ov_SC01_000_jr_8015C32C.c b/src/ov_SC01_000/ov_SC01_000_jr_8015C32C.c index 645c38ecd5..83a7acb245 100644 --- a/src/ov_SC01_000/ov_SC01_000_jr_8015C32C.c +++ b/src/ov_SC01_000/ov_SC01_000_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC01_001/ov_SC01_001.c b/src/ov_SC01_001/ov_SC01_001.c index b54018ce89..54a34a5842 100644 --- a/src/ov_SC01_001/ov_SC01_001.c +++ b/src/ov_SC01_001/ov_SC01_001.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC01_001/ov_SC01_001_after.c b/src/ov_SC01_001/ov_SC01_001_after.c index cec633ee3b..8ce1842ac0 100644 --- a/src/ov_SC01_001/ov_SC01_001_after.c +++ b/src/ov_SC01_001/ov_SC01_001_after.c @@ -755,7 +755,34 @@ final: } -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801853D0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801853D0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801853D0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1052,7 +1079,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8015C32C.c b/src/ov_SC01_001/ov_SC01_001_jr_8015C32C.c index ac84005a5a..700b0d3a24 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_8015C32C.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_8015C32C.c @@ -3834,7 +3834,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC01_004/ov_SC01_004.c b/src/ov_SC01_004/ov_SC01_004.c index be22a53d51..2d15bc9c72 100644 --- a/src/ov_SC01_004/ov_SC01_004.c +++ b/src/ov_SC01_004/ov_SC01_004.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC01_004/ov_SC01_004_after.c b/src/ov_SC01_004/ov_SC01_004_after.c index 7482376808..33166b10ed 100644 --- a/src/ov_SC01_004/ov_SC01_004_after.c +++ b/src/ov_SC01_004/ov_SC01_004_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180D94) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180D94[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180D94[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC01_004/ov_SC01_004_jr_8015C32C.c b/src/ov_SC01_004/ov_SC01_004_jr_8015C32C.c index bdee5ac762..26f2b18222 100644 --- a/src/ov_SC01_004/ov_SC01_004_jr_8015C32C.c +++ b/src/ov_SC01_004/ov_SC01_004_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC01_005/ov_SC01_005.c b/src/ov_SC01_005/ov_SC01_005.c index e535aec524..c4e0e79fc8 100644 --- a/src/ov_SC01_005/ov_SC01_005.c +++ b/src/ov_SC01_005/ov_SC01_005.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC01_005/ov_SC01_005_after.c b/src/ov_SC01_005/ov_SC01_005_after.c index 1bd33264e0..67408d93c6 100644 --- a/src/ov_SC01_005/ov_SC01_005_after.c +++ b/src/ov_SC01_005/ov_SC01_005_after.c @@ -758,7 +758,34 @@ final: } -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80183F28) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80183F28[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80183F28[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1055,7 +1082,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8015C32C.c b/src/ov_SC01_005/ov_SC01_005_jr_8015C32C.c index 67e8fa3154..26e9030d56 100644 --- a/src/ov_SC01_005/ov_SC01_005_jr_8015C32C.c +++ b/src/ov_SC01_005/ov_SC01_005_jr_8015C32C.c @@ -3837,7 +3837,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC01_006/ov_SC01_006.c b/src/ov_SC01_006/ov_SC01_006.c index 723d81b367..5c4dd61b9a 100644 --- a/src/ov_SC01_006/ov_SC01_006.c +++ b/src/ov_SC01_006/ov_SC01_006.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC01_006/ov_SC01_006_after.c b/src/ov_SC01_006/ov_SC01_006_after.c index 18884f85b4..c99fda4a43 100644 --- a/src/ov_SC01_006/ov_SC01_006_after.c +++ b/src/ov_SC01_006/ov_SC01_006_after.c @@ -758,7 +758,34 @@ final: } -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80183F28) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80183F28[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80183F28[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1055,7 +1082,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8015C32C.c b/src/ov_SC01_006/ov_SC01_006_jr_8015C32C.c index 169be183b8..6043b727aa 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_8015C32C.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_8015C32C.c @@ -3837,7 +3837,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC01_008/ov_SC01_008.c b/src/ov_SC01_008/ov_SC01_008.c index 8428ecc75b..45f720227f 100644 --- a/src/ov_SC01_008/ov_SC01_008.c +++ b/src/ov_SC01_008/ov_SC01_008.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC01_008/ov_SC01_008_after.c b/src/ov_SC01_008/ov_SC01_008_after.c index 9b1b682d82..f58ebdbc15 100644 --- a/src/ov_SC01_008/ov_SC01_008_after.c +++ b/src/ov_SC01_008/ov_SC01_008_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80181308) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80181308[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80181308[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC01_008/ov_SC01_008_jr_8015C32C.c b/src/ov_SC01_008/ov_SC01_008_jr_8015C32C.c index a685bffe96..34dc6216fe 100644 --- a/src/ov_SC01_008/ov_SC01_008_jr_8015C32C.c +++ b/src/ov_SC01_008/ov_SC01_008_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC01_009/ov_SC01_009.c b/src/ov_SC01_009/ov_SC01_009.c index 5cad004542..9868fd7043 100644 --- a/src/ov_SC01_009/ov_SC01_009.c +++ b/src/ov_SC01_009/ov_SC01_009.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC01_009/ov_SC01_009_after.c b/src/ov_SC01_009/ov_SC01_009_after.c index d58aae4619..f5cb9f2f47 100644 --- a/src/ov_SC01_009/ov_SC01_009_after.c +++ b/src/ov_SC01_009/ov_SC01_009_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801844F0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801844F0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801844F0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8015C32C.c b/src/ov_SC01_009/ov_SC01_009_jr_8015C32C.c index 91b0a02740..00ba0b5ff7 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_8015C32C.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC01_074/ov_SC01_074.c b/src/ov_SC01_074/ov_SC01_074.c index dc0ee45cef..5e8c68437f 100644 --- a/src/ov_SC01_074/ov_SC01_074.c +++ b/src/ov_SC01_074/ov_SC01_074.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC01_074/ov_SC01_074_after.c b/src/ov_SC01_074/ov_SC01_074_after.c index b2fae06f75..d40dc21995 100644 --- a/src/ov_SC01_074/ov_SC01_074_after.c +++ b/src/ov_SC01_074/ov_SC01_074_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180170) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180170[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180170[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC01_074/ov_SC01_074_jr_8015C32C.c b/src/ov_SC01_074/ov_SC01_074_jr_8015C32C.c index b68809bd8b..b7802a35b6 100644 --- a/src/ov_SC01_074/ov_SC01_074_jr_8015C32C.c +++ b/src/ov_SC01_074/ov_SC01_074_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC01_080/ov_SC01_080.c b/src/ov_SC01_080/ov_SC01_080.c index cf3655d69c..1d42452d80 100644 --- a/src/ov_SC01_080/ov_SC01_080.c +++ b/src/ov_SC01_080/ov_SC01_080.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC01_080/ov_SC01_080_after.c b/src/ov_SC01_080/ov_SC01_080_after.c index 507ee3dc10..0dff0c2e89 100644 --- a/src/ov_SC01_080/ov_SC01_080_after.c +++ b/src/ov_SC01_080/ov_SC01_080_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801850D0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801850D0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801850D0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8015C32C.c b/src/ov_SC01_080/ov_SC01_080_jr_8015C32C.c index 56059923f3..33df40bc09 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_8015C32C.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC01_084/ov_SC01_084.c b/src/ov_SC01_084/ov_SC01_084.c index 301c6b4e90..aa444e363c 100644 --- a/src/ov_SC01_084/ov_SC01_084.c +++ b/src/ov_SC01_084/ov_SC01_084.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC01_084/ov_SC01_084_after.c b/src/ov_SC01_084/ov_SC01_084_after.c index da4e5e48ab..ddb8be2a3d 100644 --- a/src/ov_SC01_084/ov_SC01_084_after.c +++ b/src/ov_SC01_084/ov_SC01_084_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801883C4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801883C4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801883C4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8015C32C.c b/src/ov_SC01_084/ov_SC01_084_jr_8015C32C.c index 497e536d56..6c6841e1f6 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8015C32C.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_000/ov_SC02_000.c b/src/ov_SC02_000/ov_SC02_000.c index ae9fa6ce2c..7a440a34aa 100644 --- a/src/ov_SC02_000/ov_SC02_000.c +++ b/src/ov_SC02_000/ov_SC02_000.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_000/ov_SC02_000_after.c b/src/ov_SC02_000/ov_SC02_000_after.c index d0d793e7ec..c60c25be9e 100644 --- a/src/ov_SC02_000/ov_SC02_000_after.c +++ b/src/ov_SC02_000/ov_SC02_000_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018C774) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018C774[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018C774[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8015C32C.c b/src/ov_SC02_000/ov_SC02_000_jr_8015C32C.c index ad32c9c033..9c3c8ac0c0 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_8015C32C.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_8015C32C.c @@ -3834,7 +3834,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_003/ov_SC02_003.c b/src/ov_SC02_003/ov_SC02_003.c index f5b076968c..1678a80845 100644 --- a/src/ov_SC02_003/ov_SC02_003.c +++ b/src/ov_SC02_003/ov_SC02_003.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_003/ov_SC02_003_after.c b/src/ov_SC02_003/ov_SC02_003_after.c index a8c1f3e764..d90ce5a838 100644 --- a/src/ov_SC02_003/ov_SC02_003_after.c +++ b/src/ov_SC02_003/ov_SC02_003_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018C774) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018C774[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018C774[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8015C32C.c b/src/ov_SC02_003/ov_SC02_003_jr_8015C32C.c index e9fc07a094..fd6f3b826f 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_8015C32C.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_8015C32C.c @@ -3834,7 +3834,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_004/ov_SC02_004.c b/src/ov_SC02_004/ov_SC02_004.c index 9c413d4e1b..fd5934ab85 100644 --- a/src/ov_SC02_004/ov_SC02_004.c +++ b/src/ov_SC02_004/ov_SC02_004.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_004/ov_SC02_004_after.c b/src/ov_SC02_004/ov_SC02_004_after.c index 45b7f063d8..12dd3db5a4 100644 --- a/src/ov_SC02_004/ov_SC02_004_after.c +++ b/src/ov_SC02_004/ov_SC02_004_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8017F854) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8017F854[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8017F854[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_004/ov_SC02_004_jr_8015C32C.c b/src/ov_SC02_004/ov_SC02_004_jr_8015C32C.c index 0555afd7a1..c629b1668a 100644 --- a/src/ov_SC02_004/ov_SC02_004_jr_8015C32C.c +++ b/src/ov_SC02_004/ov_SC02_004_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_005/ov_SC02_005.c b/src/ov_SC02_005/ov_SC02_005.c index b1ea4ef7bd..5039be82c9 100644 --- a/src/ov_SC02_005/ov_SC02_005.c +++ b/src/ov_SC02_005/ov_SC02_005.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_005/ov_SC02_005_after.c b/src/ov_SC02_005/ov_SC02_005_after.c index 0d5b529fff..ea9f93ef8a 100644 --- a/src/ov_SC02_005/ov_SC02_005_after.c +++ b/src/ov_SC02_005/ov_SC02_005_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80192458) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80192458[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80192458[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_005/ov_SC02_005_jr_8015C32C.c b/src/ov_SC02_005/ov_SC02_005_jr_8015C32C.c index 87bac1a86f..1b48024d8e 100644 --- a/src/ov_SC02_005/ov_SC02_005_jr_8015C32C.c +++ b/src/ov_SC02_005/ov_SC02_005_jr_8015C32C.c @@ -3834,7 +3834,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_011/ov_SC02_011.c b/src/ov_SC02_011/ov_SC02_011.c index d9138aadf6..e56a9646b4 100644 --- a/src/ov_SC02_011/ov_SC02_011.c +++ b/src/ov_SC02_011/ov_SC02_011.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_011/ov_SC02_011_after.c b/src/ov_SC02_011/ov_SC02_011_after.c index 8f13844435..badbd33662 100644 --- a/src/ov_SC02_011/ov_SC02_011_after.c +++ b/src/ov_SC02_011/ov_SC02_011_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801928A8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801928A8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801928A8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_011/ov_SC02_011_jr_8015C32C.c b/src/ov_SC02_011/ov_SC02_011_jr_8015C32C.c index 7a19308e62..8dc62460ca 100644 --- a/src/ov_SC02_011/ov_SC02_011_jr_8015C32C.c +++ b/src/ov_SC02_011/ov_SC02_011_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_015/ov_SC02_015.c b/src/ov_SC02_015/ov_SC02_015.c index ae70fb78ef..91bdf20915 100644 --- a/src/ov_SC02_015/ov_SC02_015.c +++ b/src/ov_SC02_015/ov_SC02_015.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_015/ov_SC02_015_after.c b/src/ov_SC02_015/ov_SC02_015_after.c index ea065c4686..f2371bc62a 100644 --- a/src/ov_SC02_015/ov_SC02_015_after.c +++ b/src/ov_SC02_015/ov_SC02_015_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8017FDBC) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8017FDBC[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8017FDBC[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_015/ov_SC02_015_jr_8015C32C.c b/src/ov_SC02_015/ov_SC02_015_jr_8015C32C.c index 5da38366d6..e40df8cc72 100644 --- a/src/ov_SC02_015/ov_SC02_015_jr_8015C32C.c +++ b/src/ov_SC02_015/ov_SC02_015_jr_8015C32C.c @@ -3834,7 +3834,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_016/ov_SC02_016.c b/src/ov_SC02_016/ov_SC02_016.c index 6488c66374..9d4e2f95ed 100644 --- a/src/ov_SC02_016/ov_SC02_016.c +++ b/src/ov_SC02_016/ov_SC02_016.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_016/ov_SC02_016_after.c b/src/ov_SC02_016/ov_SC02_016_after.c index 87abf92c34..03a68c636b 100644 --- a/src/ov_SC02_016/ov_SC02_016_after.c +++ b/src/ov_SC02_016/ov_SC02_016_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80185FF4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80185FF4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80185FF4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_016/ov_SC02_016_jr_8015C32C.c b/src/ov_SC02_016/ov_SC02_016_jr_8015C32C.c index 5c0baf0328..1ef0208753 100644 --- a/src/ov_SC02_016/ov_SC02_016_jr_8015C32C.c +++ b/src/ov_SC02_016/ov_SC02_016_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_017/ov_SC02_017.c b/src/ov_SC02_017/ov_SC02_017.c index 77642feb08..5ab26a10c5 100644 --- a/src/ov_SC02_017/ov_SC02_017.c +++ b/src/ov_SC02_017/ov_SC02_017.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_017/ov_SC02_017_after.c b/src/ov_SC02_017/ov_SC02_017_after.c index 2da66f8fbd..9477f5fe67 100644 --- a/src/ov_SC02_017/ov_SC02_017_after.c +++ b/src/ov_SC02_017/ov_SC02_017_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018C04C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018C04C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018C04C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_017/ov_SC02_017_jr_8015C32C.c b/src/ov_SC02_017/ov_SC02_017_jr_8015C32C.c index ae90b7f561..ed23d4616a 100644 --- a/src/ov_SC02_017/ov_SC02_017_jr_8015C32C.c +++ b/src/ov_SC02_017/ov_SC02_017_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_021/ov_SC02_021.c b/src/ov_SC02_021/ov_SC02_021.c index be57bd5e1c..9ef683284d 100644 --- a/src/ov_SC02_021/ov_SC02_021.c +++ b/src/ov_SC02_021/ov_SC02_021.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_021/ov_SC02_021_after.c b/src/ov_SC02_021/ov_SC02_021_after.c index 20d635c9ae..4583d9b8b2 100644 --- a/src/ov_SC02_021/ov_SC02_021_after.c +++ b/src/ov_SC02_021/ov_SC02_021_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80181640) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80181640[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80181640[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8015C32C.c b/src/ov_SC02_021/ov_SC02_021_jr_8015C32C.c index c0807d9fc9..0fc145aa17 100644 --- a/src/ov_SC02_021/ov_SC02_021_jr_8015C32C.c +++ b/src/ov_SC02_021/ov_SC02_021_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_026/ov_SC02_026.c b/src/ov_SC02_026/ov_SC02_026.c index c7ab668fd8..30c157fd70 100644 --- a/src/ov_SC02_026/ov_SC02_026.c +++ b/src/ov_SC02_026/ov_SC02_026.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_026/ov_SC02_026_after.c b/src/ov_SC02_026/ov_SC02_026_after.c index 7dcdd03be8..770bcec432 100644 --- a/src/ov_SC02_026/ov_SC02_026_after.c +++ b/src/ov_SC02_026/ov_SC02_026_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80187C94) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80187C94[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80187C94[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8015C32C.c b/src/ov_SC02_026/ov_SC02_026_jr_8015C32C.c index a0be359dd1..5fbd70b30e 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_8015C32C.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_027/ov_SC02_027.c b/src/ov_SC02_027/ov_SC02_027.c index 3020685a77..742825798f 100644 --- a/src/ov_SC02_027/ov_SC02_027.c +++ b/src/ov_SC02_027/ov_SC02_027.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_027/ov_SC02_027_after.c b/src/ov_SC02_027/ov_SC02_027_after.c index 7ae78a95a6..95e42dbdd7 100644 --- a/src/ov_SC02_027/ov_SC02_027_after.c +++ b/src/ov_SC02_027/ov_SC02_027_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018CDB8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018CDB8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018CDB8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8015C32C.c b/src/ov_SC02_027/ov_SC02_027_jr_8015C32C.c index 6f6b1bfb0b..de9ec3ee8b 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_8015C32C.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_028/ov_SC02_028.c b/src/ov_SC02_028/ov_SC02_028.c index 26f5711dae..39241160e3 100644 --- a/src/ov_SC02_028/ov_SC02_028.c +++ b/src/ov_SC02_028/ov_SC02_028.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_028/ov_SC02_028_after.c b/src/ov_SC02_028/ov_SC02_028_after.c index 19fe4324ec..fb19b8e790 100644 --- a/src/ov_SC02_028/ov_SC02_028_after.c +++ b/src/ov_SC02_028/ov_SC02_028_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018CFBC) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018CFBC[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018CFBC[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_028/ov_SC02_028_jr_8015C32C.c b/src/ov_SC02_028/ov_SC02_028_jr_8015C32C.c index 0647b707dc..b114360b07 100644 --- a/src/ov_SC02_028/ov_SC02_028_jr_8015C32C.c +++ b/src/ov_SC02_028/ov_SC02_028_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_031/ov_SC02_031.c b/src/ov_SC02_031/ov_SC02_031.c index b627ade04e..6728043365 100644 --- a/src/ov_SC02_031/ov_SC02_031.c +++ b/src/ov_SC02_031/ov_SC02_031.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_031/ov_SC02_031_after.c b/src/ov_SC02_031/ov_SC02_031_after.c index e9f352a250..633fc546cf 100644 --- a/src/ov_SC02_031/ov_SC02_031_after.c +++ b/src/ov_SC02_031/ov_SC02_031_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801867E8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801867E8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801867E8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8015C32C.c b/src/ov_SC02_031/ov_SC02_031_jr_8015C32C.c index 1b97abe330..db47fbff8e 100644 --- a/src/ov_SC02_031/ov_SC02_031_jr_8015C32C.c +++ b/src/ov_SC02_031/ov_SC02_031_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_035/ov_SC02_035.c b/src/ov_SC02_035/ov_SC02_035.c index 2956b35980..9374706517 100644 --- a/src/ov_SC02_035/ov_SC02_035.c +++ b/src/ov_SC02_035/ov_SC02_035.c @@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_035/ov_SC02_035_after.c b/src/ov_SC02_035/ov_SC02_035_after.c index b055544e1c..f4e504bcad 100644 --- a/src/ov_SC02_035/ov_SC02_035_after.c +++ b/src/ov_SC02_035/ov_SC02_035_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80186048) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80186048[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80186048[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8015C32C.c b/src/ov_SC02_035/ov_SC02_035_jr_8015C32C.c index ee4f5711bb..67aa235bf1 100644 --- a/src/ov_SC02_035/ov_SC02_035_jr_8015C32C.c +++ b/src/ov_SC02_035/ov_SC02_035_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_039/ov_SC02_039.c b/src/ov_SC02_039/ov_SC02_039.c index 9d97a44fff..9a535c88a8 100644 --- a/src/ov_SC02_039/ov_SC02_039.c +++ b/src/ov_SC02_039/ov_SC02_039.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_039/ov_SC02_039_after.c b/src/ov_SC02_039/ov_SC02_039_after.c index 17131a3f03..838df6932a 100644 --- a/src/ov_SC02_039/ov_SC02_039_after.c +++ b/src/ov_SC02_039/ov_SC02_039_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180C74) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180C74[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180C74[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_039/ov_SC02_039_jr_8015C32C.c b/src/ov_SC02_039/ov_SC02_039_jr_8015C32C.c index 3c6ac23221..e3934fcb01 100644 --- a/src/ov_SC02_039/ov_SC02_039_jr_8015C32C.c +++ b/src/ov_SC02_039/ov_SC02_039_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC02_041/ov_SC02_041.c b/src/ov_SC02_041/ov_SC02_041.c index a4018806eb..777042360a 100644 --- a/src/ov_SC02_041/ov_SC02_041.c +++ b/src/ov_SC02_041/ov_SC02_041.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC02_041/ov_SC02_041_after.c b/src/ov_SC02_041/ov_SC02_041_after.c index dd0406248a..9b7e98bf9d 100644 --- a/src/ov_SC02_041/ov_SC02_041_after.c +++ b/src/ov_SC02_041/ov_SC02_041_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80186944) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80186944[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80186944[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC02_041/ov_SC02_041_jr_8015C32C.c b/src/ov_SC02_041/ov_SC02_041_jr_8015C32C.c index 3ed2cf57d4..f74c861628 100644 --- a/src/ov_SC02_041/ov_SC02_041_jr_8015C32C.c +++ b/src/ov_SC02_041/ov_SC02_041_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_001/ov_SC03_001.c b/src/ov_SC03_001/ov_SC03_001.c index 61a79a5a4b..de31cc179a 100644 --- a/src/ov_SC03_001/ov_SC03_001.c +++ b/src/ov_SC03_001/ov_SC03_001.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_001/ov_SC03_001_after.c b/src/ov_SC03_001/ov_SC03_001_after.c index c196b348c5..09bdcc452d 100644 --- a/src/ov_SC03_001/ov_SC03_001_after.c +++ b/src/ov_SC03_001/ov_SC03_001_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018F084) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018F084[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018F084[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_001/ov_SC03_001_jr_8015C32C.c b/src/ov_SC03_001/ov_SC03_001_jr_8015C32C.c index 0eccebbf9f..e32a1352cc 100644 --- a/src/ov_SC03_001/ov_SC03_001_jr_8015C32C.c +++ b/src/ov_SC03_001/ov_SC03_001_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_002/ov_SC03_002.c b/src/ov_SC03_002/ov_SC03_002.c index 45adfd0406..f2e87c0d13 100644 --- a/src/ov_SC03_002/ov_SC03_002.c +++ b/src/ov_SC03_002/ov_SC03_002.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_002/ov_SC03_002_after.c b/src/ov_SC03_002/ov_SC03_002_after.c index 7df02786aa..f1dda3c0b1 100644 --- a/src/ov_SC03_002/ov_SC03_002_after.c +++ b/src/ov_SC03_002/ov_SC03_002_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80187074) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80187074[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80187074[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_002/ov_SC03_002_jr_8015C32C.c b/src/ov_SC03_002/ov_SC03_002_jr_8015C32C.c index bbf4eac994..b96cbe2139 100644 --- a/src/ov_SC03_002/ov_SC03_002_jr_8015C32C.c +++ b/src/ov_SC03_002/ov_SC03_002_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_003/ov_SC03_003.c b/src/ov_SC03_003/ov_SC03_003.c index 615f4ffa6f..b7726acaaf 100644 --- a/src/ov_SC03_003/ov_SC03_003.c +++ b/src/ov_SC03_003/ov_SC03_003.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_003/ov_SC03_003_after.c b/src/ov_SC03_003/ov_SC03_003_after.c index cf2f7233f5..29a8bce086 100644 --- a/src/ov_SC03_003/ov_SC03_003_after.c +++ b/src/ov_SC03_003/ov_SC03_003_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180E3C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180E3C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180E3C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_003/ov_SC03_003_jr_8015C32C.c b/src/ov_SC03_003/ov_SC03_003_jr_8015C32C.c index 913d339c90..eb0601cf03 100644 --- a/src/ov_SC03_003/ov_SC03_003_jr_8015C32C.c +++ b/src/ov_SC03_003/ov_SC03_003_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_006/ov_SC03_006.c b/src/ov_SC03_006/ov_SC03_006.c index e54b52c41f..402cc73c44 100644 --- a/src/ov_SC03_006/ov_SC03_006.c +++ b/src/ov_SC03_006/ov_SC03_006.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_006/ov_SC03_006_after.c b/src/ov_SC03_006/ov_SC03_006_after.c index 07962d9122..dc530991f2 100644 --- a/src/ov_SC03_006/ov_SC03_006_after.c +++ b/src/ov_SC03_006/ov_SC03_006_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018E158) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018E158[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018E158[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8015C32C.c b/src/ov_SC03_006/ov_SC03_006_jr_8015C32C.c index fdc35e83df..80d26b442d 100644 --- a/src/ov_SC03_006/ov_SC03_006_jr_8015C32C.c +++ b/src/ov_SC03_006/ov_SC03_006_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_007/ov_SC03_007.c b/src/ov_SC03_007/ov_SC03_007.c index 11d82bdda8..4dacc3ce30 100644 --- a/src/ov_SC03_007/ov_SC03_007.c +++ b/src/ov_SC03_007/ov_SC03_007.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_007/ov_SC03_007_after.c b/src/ov_SC03_007/ov_SC03_007_after.c index d14548e9ae..1b71c1d8ac 100644 --- a/src/ov_SC03_007/ov_SC03_007_after.c +++ b/src/ov_SC03_007/ov_SC03_007_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80188F50) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80188F50[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80188F50[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_007/ov_SC03_007_jr_8015C32C.c b/src/ov_SC03_007/ov_SC03_007_jr_8015C32C.c index 294ca67137..21882f765e 100644 --- a/src/ov_SC03_007/ov_SC03_007_jr_8015C32C.c +++ b/src/ov_SC03_007/ov_SC03_007_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_010/ov_SC03_010.c b/src/ov_SC03_010/ov_SC03_010.c index c75c4fbdf4..aa48ab42d1 100644 --- a/src/ov_SC03_010/ov_SC03_010.c +++ b/src/ov_SC03_010/ov_SC03_010.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_010/ov_SC03_010_after.c b/src/ov_SC03_010/ov_SC03_010_after.c index 1b266eb387..8437f3f9bb 100644 --- a/src/ov_SC03_010/ov_SC03_010_after.c +++ b/src/ov_SC03_010/ov_SC03_010_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80181A70) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80181A70[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80181A70[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_010/ov_SC03_010_jr_8015C32C.c b/src/ov_SC03_010/ov_SC03_010_jr_8015C32C.c index dd2fbc6d59..d8d3913784 100644 --- a/src/ov_SC03_010/ov_SC03_010_jr_8015C32C.c +++ b/src/ov_SC03_010/ov_SC03_010_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_011/ov_SC03_011.c b/src/ov_SC03_011/ov_SC03_011.c index ef48f0aee9..28390ba2a1 100644 --- a/src/ov_SC03_011/ov_SC03_011.c +++ b/src/ov_SC03_011/ov_SC03_011.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_011/ov_SC03_011_after.c b/src/ov_SC03_011/ov_SC03_011_after.c index 5971712160..25bb8b0133 100644 --- a/src/ov_SC03_011/ov_SC03_011_after.c +++ b/src/ov_SC03_011/ov_SC03_011_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80182DE0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80182DE0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80182DE0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_011/ov_SC03_011_jr_8015C32C.c b/src/ov_SC03_011/ov_SC03_011_jr_8015C32C.c index 2d307b8dd9..43005b82dd 100644 --- a/src/ov_SC03_011/ov_SC03_011_jr_8015C32C.c +++ b/src/ov_SC03_011/ov_SC03_011_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_012/ov_SC03_012.c b/src/ov_SC03_012/ov_SC03_012.c index 592ad4aff0..8508713246 100644 --- a/src/ov_SC03_012/ov_SC03_012.c +++ b/src/ov_SC03_012/ov_SC03_012.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_012/ov_SC03_012_after.c b/src/ov_SC03_012/ov_SC03_012_after.c index 3c89bee03a..357faa0316 100644 --- a/src/ov_SC03_012/ov_SC03_012_after.c +++ b/src/ov_SC03_012/ov_SC03_012_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8017FCC0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8017FCC0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8017FCC0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_012/ov_SC03_012_jr_8015C32C.c b/src/ov_SC03_012/ov_SC03_012_jr_8015C32C.c index 258667a2e6..f59deca84a 100644 --- a/src/ov_SC03_012/ov_SC03_012_jr_8015C32C.c +++ b/src/ov_SC03_012/ov_SC03_012_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_013/ov_SC03_013.c b/src/ov_SC03_013/ov_SC03_013.c index 41bde91c02..28b03e1aa6 100644 --- a/src/ov_SC03_013/ov_SC03_013.c +++ b/src/ov_SC03_013/ov_SC03_013.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_013/ov_SC03_013_after.c b/src/ov_SC03_013/ov_SC03_013_after.c index 49c839853a..44deb54fcf 100644 --- a/src/ov_SC03_013/ov_SC03_013_after.c +++ b/src/ov_SC03_013/ov_SC03_013_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80182AA8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80182AA8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80182AA8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_013/ov_SC03_013_jr_8015C32C.c b/src/ov_SC03_013/ov_SC03_013_jr_8015C32C.c index 0f0b4b4ac4..bceab46bb9 100644 --- a/src/ov_SC03_013/ov_SC03_013_jr_8015C32C.c +++ b/src/ov_SC03_013/ov_SC03_013_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_014/ov_SC03_014.c b/src/ov_SC03_014/ov_SC03_014.c index b141c30a6c..69ba349e53 100644 --- a/src/ov_SC03_014/ov_SC03_014.c +++ b/src/ov_SC03_014/ov_SC03_014.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_014/ov_SC03_014_after.c b/src/ov_SC03_014/ov_SC03_014_after.c index 4975355137..c2001dec20 100644 --- a/src/ov_SC03_014/ov_SC03_014_after.c +++ b/src/ov_SC03_014/ov_SC03_014_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018D0E4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018D0E4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018D0E4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.c b/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.c index f85a6e1d42..8d9a05e7e4 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_015/ov_SC03_015.c b/src/ov_SC03_015/ov_SC03_015.c index 83aae0d914..0c4adaced7 100644 --- a/src/ov_SC03_015/ov_SC03_015.c +++ b/src/ov_SC03_015/ov_SC03_015.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_015/ov_SC03_015_after.c b/src/ov_SC03_015/ov_SC03_015_after.c index f445ddd1e4..4d75342d65 100644 --- a/src/ov_SC03_015/ov_SC03_015_after.c +++ b/src/ov_SC03_015/ov_SC03_015_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018D0E4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018D0E4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018D0E4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.c b/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.c index 924d0ca4d0..91ba1b36e4 100644 --- a/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.c +++ b/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_023/ov_SC03_023.c b/src/ov_SC03_023/ov_SC03_023.c index c161ec0d1b..0e44053dc0 100644 --- a/src/ov_SC03_023/ov_SC03_023.c +++ b/src/ov_SC03_023/ov_SC03_023.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_023/ov_SC03_023_after.c b/src/ov_SC03_023/ov_SC03_023_after.c index 490bc4ca9f..7e011bcfc5 100644 --- a/src/ov_SC03_023/ov_SC03_023_after.c +++ b/src/ov_SC03_023/ov_SC03_023_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180A60) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180A60[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180A60[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_023/ov_SC03_023_jr_8015C32C.c b/src/ov_SC03_023/ov_SC03_023_jr_8015C32C.c index 884907fc6d..cd9f19016d 100644 --- a/src/ov_SC03_023/ov_SC03_023_jr_8015C32C.c +++ b/src/ov_SC03_023/ov_SC03_023_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_024/ov_SC03_024.c b/src/ov_SC03_024/ov_SC03_024.c index 60471e3851..8b2e363673 100644 --- a/src/ov_SC03_024/ov_SC03_024.c +++ b/src/ov_SC03_024/ov_SC03_024.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_024/ov_SC03_024_after.c b/src/ov_SC03_024/ov_SC03_024_after.c index 856569c866..31e8894e87 100644 --- a/src/ov_SC03_024/ov_SC03_024_after.c +++ b/src/ov_SC03_024/ov_SC03_024_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80188A84) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80188A84[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80188A84[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8015C32C.c b/src/ov_SC03_024/ov_SC03_024_jr_8015C32C.c index a8e1b29096..7fe9a56a1b 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_8015C32C.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_028/ov_SC03_028.c b/src/ov_SC03_028/ov_SC03_028.c index fc647c3f29..a2a85ed82f 100644 --- a/src/ov_SC03_028/ov_SC03_028.c +++ b/src/ov_SC03_028/ov_SC03_028.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_028/ov_SC03_028_after.c b/src/ov_SC03_028/ov_SC03_028_after.c index 3b8c2f37a4..f341401ba1 100644 --- a/src/ov_SC03_028/ov_SC03_028_after.c +++ b/src/ov_SC03_028/ov_SC03_028_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018D550) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018D550[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018D550[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_028/ov_SC03_028_jr_8015C32C.c b/src/ov_SC03_028/ov_SC03_028_jr_8015C32C.c index 93b078062c..17d099a8ef 100644 --- a/src/ov_SC03_028/ov_SC03_028_jr_8015C32C.c +++ b/src/ov_SC03_028/ov_SC03_028_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_029/ov_SC03_029.c b/src/ov_SC03_029/ov_SC03_029.c index 80e143bb85..6a3e20747b 100644 --- a/src/ov_SC03_029/ov_SC03_029.c +++ b/src/ov_SC03_029/ov_SC03_029.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_029/ov_SC03_029_after.c b/src/ov_SC03_029/ov_SC03_029_after.c index ef87e7e052..113cd60795 100644 --- a/src/ov_SC03_029/ov_SC03_029_after.c +++ b/src/ov_SC03_029/ov_SC03_029_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80189388) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80189388[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80189388[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8015C32C.c b/src/ov_SC03_029/ov_SC03_029_jr_8015C32C.c index 1e63b3c02e..88ef6f5ce2 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_8015C32C.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_030/ov_SC03_030.c b/src/ov_SC03_030/ov_SC03_030.c index 0ddc9c9d1f..8331c0d460 100644 --- a/src/ov_SC03_030/ov_SC03_030.c +++ b/src/ov_SC03_030/ov_SC03_030.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_030/ov_SC03_030_after.c b/src/ov_SC03_030/ov_SC03_030_after.c index 0e88191fd3..58ef22ceb2 100644 --- a/src/ov_SC03_030/ov_SC03_030_after.c +++ b/src/ov_SC03_030/ov_SC03_030_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801839C4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801839C4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801839C4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_030/ov_SC03_030_jr_8015C32C.c b/src/ov_SC03_030/ov_SC03_030_jr_8015C32C.c index c8f775a5fb..16a2371a55 100644 --- a/src/ov_SC03_030/ov_SC03_030_jr_8015C32C.c +++ b/src/ov_SC03_030/ov_SC03_030_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_031/ov_SC03_031.c b/src/ov_SC03_031/ov_SC03_031.c index d0c4c13a51..f6df5369b6 100644 --- a/src/ov_SC03_031/ov_SC03_031.c +++ b/src/ov_SC03_031/ov_SC03_031.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_031/ov_SC03_031_after.c b/src/ov_SC03_031/ov_SC03_031_after.c index c02cccb073..9c63087bf6 100644 --- a/src/ov_SC03_031/ov_SC03_031_after.c +++ b/src/ov_SC03_031/ov_SC03_031_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80183EE0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80183EE0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80183EE0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_031/ov_SC03_031_jr_8015C32C.c b/src/ov_SC03_031/ov_SC03_031_jr_8015C32C.c index f2fdf8fd90..d04b93ca51 100644 --- a/src/ov_SC03_031/ov_SC03_031_jr_8015C32C.c +++ b/src/ov_SC03_031/ov_SC03_031_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_089/ov_SC03_089.c b/src/ov_SC03_089/ov_SC03_089.c index 03e97c79f9..f87222740e 100644 --- a/src/ov_SC03_089/ov_SC03_089.c +++ b/src/ov_SC03_089/ov_SC03_089.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_089/ov_SC03_089_after.c b/src/ov_SC03_089/ov_SC03_089_after.c index 13b2111437..a669193a20 100644 --- a/src/ov_SC03_089/ov_SC03_089_after.c +++ b/src/ov_SC03_089/ov_SC03_089_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018B1DC) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018B1DC[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018B1DC[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8015C32C.c b/src/ov_SC03_089/ov_SC03_089_jr_8015C32C.c index b772d6092b..0b922b5dc3 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_8015C32C.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_090/ov_SC03_090.c b/src/ov_SC03_090/ov_SC03_090.c index a7c45a1118..89f745aa11 100644 --- a/src/ov_SC03_090/ov_SC03_090.c +++ b/src/ov_SC03_090/ov_SC03_090.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_090/ov_SC03_090_after.c b/src/ov_SC03_090/ov_SC03_090_after.c index 7c972d3c46..66baf54674 100644 --- a/src/ov_SC03_090/ov_SC03_090_after.c +++ b/src/ov_SC03_090/ov_SC03_090_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018D600) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018D600[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018D600[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8015C32C.c b/src/ov_SC03_090/ov_SC03_090_jr_8015C32C.c index ed1665c6f1..5b8eb33ec4 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_8015C32C.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_091/ov_SC03_091.c b/src/ov_SC03_091/ov_SC03_091.c index 87ea21be9f..49fb732feb 100644 --- a/src/ov_SC03_091/ov_SC03_091.c +++ b/src/ov_SC03_091/ov_SC03_091.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_091/ov_SC03_091_after.c b/src/ov_SC03_091/ov_SC03_091_after.c index 1e69054202..71dc33016c 100644 --- a/src/ov_SC03_091/ov_SC03_091_after.c +++ b/src/ov_SC03_091/ov_SC03_091_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018E4A8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018E4A8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018E4A8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8015C32C.c b/src/ov_SC03_091/ov_SC03_091_jr_8015C32C.c index af1cea7a59..ffce03d70b 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_8015C32C.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_092/ov_SC03_092.c b/src/ov_SC03_092/ov_SC03_092.c index 750ddb8274..272842984c 100644 --- a/src/ov_SC03_092/ov_SC03_092.c +++ b/src/ov_SC03_092/ov_SC03_092.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_092/ov_SC03_092_after.c b/src/ov_SC03_092/ov_SC03_092_after.c index b7a9044873..fffe407e8e 100644 --- a/src/ov_SC03_092/ov_SC03_092_after.c +++ b/src/ov_SC03_092/ov_SC03_092_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80186878) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80186878[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80186878[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_092/ov_SC03_092_jr_8015C32C.c b/src/ov_SC03_092/ov_SC03_092_jr_8015C32C.c index ed409682e2..7ef7b970a7 100644 --- a/src/ov_SC03_092/ov_SC03_092_jr_8015C32C.c +++ b/src/ov_SC03_092/ov_SC03_092_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_093/ov_SC03_093.c b/src/ov_SC03_093/ov_SC03_093.c index ae92da339d..614f1365fb 100644 --- a/src/ov_SC03_093/ov_SC03_093.c +++ b/src/ov_SC03_093/ov_SC03_093.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_093/ov_SC03_093_after.c b/src/ov_SC03_093/ov_SC03_093_after.c index bdbe9ff9a9..26e987948a 100644 --- a/src/ov_SC03_093/ov_SC03_093_after.c +++ b/src/ov_SC03_093/ov_SC03_093_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80187A50) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80187A50[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80187A50[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8015C32C.c b/src/ov_SC03_093/ov_SC03_093_jr_8015C32C.c index 994239833d..01e268efa7 100644 --- a/src/ov_SC03_093/ov_SC03_093_jr_8015C32C.c +++ b/src/ov_SC03_093/ov_SC03_093_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_094/ov_SC03_094.c b/src/ov_SC03_094/ov_SC03_094.c index 00384f441b..97236ecbb8 100644 --- a/src/ov_SC03_094/ov_SC03_094.c +++ b/src/ov_SC03_094/ov_SC03_094.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_094/ov_SC03_094_after.c b/src/ov_SC03_094/ov_SC03_094_after.c index 6d1460b656..1377b52b86 100644 --- a/src/ov_SC03_094/ov_SC03_094_after.c +++ b/src/ov_SC03_094/ov_SC03_094_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018944C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018944C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018944C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8015C32C.c b/src/ov_SC03_094/ov_SC03_094_jr_8015C32C.c index 5930d4bc7f..cbf7aa12af 100644 --- a/src/ov_SC03_094/ov_SC03_094_jr_8015C32C.c +++ b/src/ov_SC03_094/ov_SC03_094_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_095/ov_SC03_095.c b/src/ov_SC03_095/ov_SC03_095.c index 5c391a190e..93f252f845 100644 --- a/src/ov_SC03_095/ov_SC03_095.c +++ b/src/ov_SC03_095/ov_SC03_095.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_095/ov_SC03_095_after.c b/src/ov_SC03_095/ov_SC03_095_after.c index cb77bb84ce..f8f3230050 100644 --- a/src/ov_SC03_095/ov_SC03_095_after.c +++ b/src/ov_SC03_095/ov_SC03_095_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80182AAC) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80182AAC[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80182AAC[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8015C32C.c b/src/ov_SC03_095/ov_SC03_095_jr_8015C32C.c index 33232e746f..a3eb1b9d2e 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_8015C32C.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_096/ov_SC03_096.c b/src/ov_SC03_096/ov_SC03_096.c index 49d357160a..91594e8974 100644 --- a/src/ov_SC03_096/ov_SC03_096.c +++ b/src/ov_SC03_096/ov_SC03_096.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_096/ov_SC03_096_after.c b/src/ov_SC03_096/ov_SC03_096_after.c index d91d8de9fd..f1b504055b 100644 --- a/src/ov_SC03_096/ov_SC03_096_after.c +++ b/src/ov_SC03_096/ov_SC03_096_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018262C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018262C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018262C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8015C32C.c b/src/ov_SC03_096/ov_SC03_096_jr_8015C32C.c index ab3dc765c1..81ec859770 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_8015C32C.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_097/ov_SC03_097.c b/src/ov_SC03_097/ov_SC03_097.c index 51ce3b41bb..e9c141458a 100644 --- a/src/ov_SC03_097/ov_SC03_097.c +++ b/src/ov_SC03_097/ov_SC03_097.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_097/ov_SC03_097_after.c b/src/ov_SC03_097/ov_SC03_097_after.c index 983d2b16f1..e0ad9664dd 100644 --- a/src/ov_SC03_097/ov_SC03_097_after.c +++ b/src/ov_SC03_097/ov_SC03_097_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80187A0C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80187A0C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80187A0C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8015C32C.c b/src/ov_SC03_097/ov_SC03_097_jr_8015C32C.c index e25faaede9..7fe46617d2 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_8015C32C.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_098/ov_SC03_098.c b/src/ov_SC03_098/ov_SC03_098.c index 45d5e20225..fef7b47c35 100644 --- a/src/ov_SC03_098/ov_SC03_098.c +++ b/src/ov_SC03_098/ov_SC03_098.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_098/ov_SC03_098_after.c b/src/ov_SC03_098/ov_SC03_098_after.c index 886a23b51f..dd178ae7e3 100644 --- a/src/ov_SC03_098/ov_SC03_098_after.c +++ b/src/ov_SC03_098/ov_SC03_098_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80186E98) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80186E98[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80186E98[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8015C32C.c b/src/ov_SC03_098/ov_SC03_098_jr_8015C32C.c index e3e930357e..6c09ca771b 100644 --- a/src/ov_SC03_098/ov_SC03_098_jr_8015C32C.c +++ b/src/ov_SC03_098/ov_SC03_098_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_099/ov_SC03_099.c b/src/ov_SC03_099/ov_SC03_099.c index 5c31eac8da..c9e0120a4a 100644 --- a/src/ov_SC03_099/ov_SC03_099.c +++ b/src/ov_SC03_099/ov_SC03_099.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_099/ov_SC03_099_after.c b/src/ov_SC03_099/ov_SC03_099_after.c index ff55c95f31..95a5109de4 100644 --- a/src/ov_SC03_099/ov_SC03_099_after.c +++ b/src/ov_SC03_099/ov_SC03_099_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80184F98) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80184F98[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80184F98[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_099/ov_SC03_099_jr_8015C32C.c b/src/ov_SC03_099/ov_SC03_099_jr_8015C32C.c index 69b439740a..5adfadea0d 100644 --- a/src/ov_SC03_099/ov_SC03_099_jr_8015C32C.c +++ b/src/ov_SC03_099/ov_SC03_099_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_100/ov_SC03_100.c b/src/ov_SC03_100/ov_SC03_100.c index cdf914641c..8b91a80792 100644 --- a/src/ov_SC03_100/ov_SC03_100.c +++ b/src/ov_SC03_100/ov_SC03_100.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_100/ov_SC03_100_after.c b/src/ov_SC03_100/ov_SC03_100_after.c index ae1595650a..1ea4e5398b 100644 --- a/src/ov_SC03_100/ov_SC03_100_after.c +++ b/src/ov_SC03_100/ov_SC03_100_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80186464) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80186464[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80186464[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8015C32C.c b/src/ov_SC03_100/ov_SC03_100_jr_8015C32C.c index 1b3cdbe436..019deb4e85 100644 --- a/src/ov_SC03_100/ov_SC03_100_jr_8015C32C.c +++ b/src/ov_SC03_100/ov_SC03_100_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_101/ov_SC03_101.c b/src/ov_SC03_101/ov_SC03_101.c index 892c50ac7d..4bf8332fc9 100644 --- a/src/ov_SC03_101/ov_SC03_101.c +++ b/src/ov_SC03_101/ov_SC03_101.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_101/ov_SC03_101_after.c b/src/ov_SC03_101/ov_SC03_101_after.c index 98870934b2..c1b8df64cd 100644 --- a/src/ov_SC03_101/ov_SC03_101_after.c +++ b/src/ov_SC03_101/ov_SC03_101_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80185440) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80185440[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80185440[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8015C32C.c b/src/ov_SC03_101/ov_SC03_101_jr_8015C32C.c index a01567114a..56bdbe60aa 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_8015C32C.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_102/ov_SC03_102.c b/src/ov_SC03_102/ov_SC03_102.c index cf30a2a6ea..1e73a4c2e5 100644 --- a/src/ov_SC03_102/ov_SC03_102.c +++ b/src/ov_SC03_102/ov_SC03_102.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_102/ov_SC03_102_after.c b/src/ov_SC03_102/ov_SC03_102_after.c index 7e61361acd..88e8b90db6 100644 --- a/src/ov_SC03_102/ov_SC03_102_after.c +++ b/src/ov_SC03_102/ov_SC03_102_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80187CF8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80187CF8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80187CF8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_102/ov_SC03_102_jr_8015C32C.c b/src/ov_SC03_102/ov_SC03_102_jr_8015C32C.c index a1320ce154..adb582574c 100644 --- a/src/ov_SC03_102/ov_SC03_102_jr_8015C32C.c +++ b/src/ov_SC03_102/ov_SC03_102_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_103/ov_SC03_103.c b/src/ov_SC03_103/ov_SC03_103.c index 692e2f3651..fa64f5bb91 100644 --- a/src/ov_SC03_103/ov_SC03_103.c +++ b/src/ov_SC03_103/ov_SC03_103.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_103/ov_SC03_103_after.c b/src/ov_SC03_103/ov_SC03_103_after.c index 4897e0ca24..f3acf20ef9 100644 --- a/src/ov_SC03_103/ov_SC03_103_after.c +++ b/src/ov_SC03_103/ov_SC03_103_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80185CA8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80185CA8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80185CA8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_103/ov_SC03_103_jr_8015C32C.c b/src/ov_SC03_103/ov_SC03_103_jr_8015C32C.c index 39beefd1ab..73eeef20a2 100644 --- a/src/ov_SC03_103/ov_SC03_103_jr_8015C32C.c +++ b/src/ov_SC03_103/ov_SC03_103_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_104/ov_SC03_104.c b/src/ov_SC03_104/ov_SC03_104.c index 7592537777..fe8c9162c7 100644 --- a/src/ov_SC03_104/ov_SC03_104.c +++ b/src/ov_SC03_104/ov_SC03_104.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_104/ov_SC03_104_after.c b/src/ov_SC03_104/ov_SC03_104_after.c index 94de46f2e7..8fbe9eb4f6 100644 --- a/src/ov_SC03_104/ov_SC03_104_after.c +++ b/src/ov_SC03_104/ov_SC03_104_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018C838) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018C838[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018C838[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8015C32C.c b/src/ov_SC03_104/ov_SC03_104_jr_8015C32C.c index ae1b7c4bef..8d46268de7 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_8015C32C.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_105/ov_SC03_105.c b/src/ov_SC03_105/ov_SC03_105.c index 751cac2c74..63e5a819f0 100644 --- a/src/ov_SC03_105/ov_SC03_105.c +++ b/src/ov_SC03_105/ov_SC03_105.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_105/ov_SC03_105_after.c b/src/ov_SC03_105/ov_SC03_105_after.c index 90af5a7ba5..20c26b7aa1 100644 --- a/src/ov_SC03_105/ov_SC03_105_after.c +++ b/src/ov_SC03_105/ov_SC03_105_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018BEC0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018BEC0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018BEC0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_105/ov_SC03_105_jr_8015C32C.c b/src/ov_SC03_105/ov_SC03_105_jr_8015C32C.c index dad55eaf04..01396c4d33 100644 --- a/src/ov_SC03_105/ov_SC03_105_jr_8015C32C.c +++ b/src/ov_SC03_105/ov_SC03_105_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_108/ov_SC03_108.c b/src/ov_SC03_108/ov_SC03_108.c index 8c40892164..f2b2337070 100644 --- a/src/ov_SC03_108/ov_SC03_108.c +++ b/src/ov_SC03_108/ov_SC03_108.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_108/ov_SC03_108_after.c b/src/ov_SC03_108/ov_SC03_108_after.c index ac02cee9db..a1b810924b 100644 --- a/src/ov_SC03_108/ov_SC03_108_after.c +++ b/src/ov_SC03_108/ov_SC03_108_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80182818) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80182818[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80182818[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8015C32C.c b/src/ov_SC03_108/ov_SC03_108_jr_8015C32C.c index 31a27fa1e0..b0d89041fc 100644 --- a/src/ov_SC03_108/ov_SC03_108_jr_8015C32C.c +++ b/src/ov_SC03_108/ov_SC03_108_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_109/ov_SC03_109.c b/src/ov_SC03_109/ov_SC03_109.c index 1896357cf3..a8e3a63871 100644 --- a/src/ov_SC03_109/ov_SC03_109.c +++ b/src/ov_SC03_109/ov_SC03_109.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_109/ov_SC03_109_after.c b/src/ov_SC03_109/ov_SC03_109_after.c index 7c7113e888..8d15d0fb03 100644 --- a/src/ov_SC03_109/ov_SC03_109_after.c +++ b/src/ov_SC03_109/ov_SC03_109_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8017FEC4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8017FEC4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8017FEC4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_109/ov_SC03_109_jr_8015C32C.c b/src/ov_SC03_109/ov_SC03_109_jr_8015C32C.c index 25c5f4c4b6..f01090d480 100644 --- a/src/ov_SC03_109/ov_SC03_109_jr_8015C32C.c +++ b/src/ov_SC03_109/ov_SC03_109_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_110/ov_SC03_110.c b/src/ov_SC03_110/ov_SC03_110.c index 947a22cc5b..a38a1b1e1e 100644 --- a/src/ov_SC03_110/ov_SC03_110.c +++ b/src/ov_SC03_110/ov_SC03_110.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_110/ov_SC03_110_after.c b/src/ov_SC03_110/ov_SC03_110_after.c index 3354752a7a..7570636fbf 100644 --- a/src/ov_SC03_110/ov_SC03_110_after.c +++ b/src/ov_SC03_110/ov_SC03_110_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801838E4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801838E4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801838E4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8015C32C.c b/src/ov_SC03_110/ov_SC03_110_jr_8015C32C.c index 7549d8f043..6edcfe7ee2 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_8015C32C.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_111/ov_SC03_111.c b/src/ov_SC03_111/ov_SC03_111.c index 1fd63e284b..4dff6a1210 100644 --- a/src/ov_SC03_111/ov_SC03_111.c +++ b/src/ov_SC03_111/ov_SC03_111.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_111/ov_SC03_111_after.c b/src/ov_SC03_111/ov_SC03_111_after.c index 00798b7e79..ef38f75bf8 100644 --- a/src/ov_SC03_111/ov_SC03_111_after.c +++ b/src/ov_SC03_111/ov_SC03_111_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80186498) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80186498[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80186498[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_111/ov_SC03_111_jr_8015C32C.c b/src/ov_SC03_111/ov_SC03_111_jr_8015C32C.c index db3527b821..4306c908f4 100644 --- a/src/ov_SC03_111/ov_SC03_111_jr_8015C32C.c +++ b/src/ov_SC03_111/ov_SC03_111_jr_8015C32C.c @@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_112/ov_SC03_112.c b/src/ov_SC03_112/ov_SC03_112.c index b91af505d6..fc1f073b22 100644 --- a/src/ov_SC03_112/ov_SC03_112.c +++ b/src/ov_SC03_112/ov_SC03_112.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_112/ov_SC03_112_after.c b/src/ov_SC03_112/ov_SC03_112_after.c index 3c7166711e..381e0a71aa 100644 --- a/src/ov_SC03_112/ov_SC03_112_after.c +++ b/src/ov_SC03_112/ov_SC03_112_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801872A0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801872A0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801872A0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8015C32C.c b/src/ov_SC03_112/ov_SC03_112_jr_8015C32C.c index 3651936ae8..87a7625a04 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_8015C32C.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_113/ov_SC03_113.c b/src/ov_SC03_113/ov_SC03_113.c index bc2eec0eef..0bfab38fcd 100644 --- a/src/ov_SC03_113/ov_SC03_113.c +++ b/src/ov_SC03_113/ov_SC03_113.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_113/ov_SC03_113_after.c b/src/ov_SC03_113/ov_SC03_113_after.c index c791135bf9..47be7e6138 100644 --- a/src/ov_SC03_113/ov_SC03_113_after.c +++ b/src/ov_SC03_113/ov_SC03_113_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80184950) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80184950[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80184950[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8015C32C.c b/src/ov_SC03_113/ov_SC03_113_jr_8015C32C.c index 44df8b18f3..c3cc2a1fd5 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_8015C32C.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_114/ov_SC03_114.c b/src/ov_SC03_114/ov_SC03_114.c index 0ad187e0e0..3fbb4e89d1 100644 --- a/src/ov_SC03_114/ov_SC03_114.c +++ b/src/ov_SC03_114/ov_SC03_114.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_114/ov_SC03_114_after.c b/src/ov_SC03_114/ov_SC03_114_after.c index 237d1bc468..c4e94416f8 100644 --- a/src/ov_SC03_114/ov_SC03_114_after.c +++ b/src/ov_SC03_114/ov_SC03_114_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801805B8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801805B8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801805B8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_114/ov_SC03_114_jr_8015C32C.c b/src/ov_SC03_114/ov_SC03_114_jr_8015C32C.c index 0297306c8e..0da9ecb9dc 100644 --- a/src/ov_SC03_114/ov_SC03_114_jr_8015C32C.c +++ b/src/ov_SC03_114/ov_SC03_114_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_115/ov_SC03_115.c b/src/ov_SC03_115/ov_SC03_115.c index 1a3e7c70ab..badbdd8caa 100644 --- a/src/ov_SC03_115/ov_SC03_115.c +++ b/src/ov_SC03_115/ov_SC03_115.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_115/ov_SC03_115_after.c b/src/ov_SC03_115/ov_SC03_115_after.c index 589d50ff40..1a005b0225 100644 --- a/src/ov_SC03_115/ov_SC03_115_after.c +++ b/src/ov_SC03_115/ov_SC03_115_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80182024) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80182024[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80182024[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8015C32C.c b/src/ov_SC03_115/ov_SC03_115_jr_8015C32C.c index ba47381c99..7ce1b006b9 100644 --- a/src/ov_SC03_115/ov_SC03_115_jr_8015C32C.c +++ b/src/ov_SC03_115/ov_SC03_115_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_116/ov_SC03_116.c b/src/ov_SC03_116/ov_SC03_116.c index f10c574151..3826092c0a 100644 --- a/src/ov_SC03_116/ov_SC03_116.c +++ b/src/ov_SC03_116/ov_SC03_116.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_116/ov_SC03_116_after.c b/src/ov_SC03_116/ov_SC03_116_after.c index 4b465dfc5a..199efd926d 100644 --- a/src/ov_SC03_116/ov_SC03_116_after.c +++ b/src/ov_SC03_116/ov_SC03_116_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80184428) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80184428[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80184428[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_116/ov_SC03_116_jr_8015C32C.c b/src/ov_SC03_116/ov_SC03_116_jr_8015C32C.c index c5fc75ae31..7feabdf3ae 100644 --- a/src/ov_SC03_116/ov_SC03_116_jr_8015C32C.c +++ b/src/ov_SC03_116/ov_SC03_116_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_117/ov_SC03_117.c b/src/ov_SC03_117/ov_SC03_117.c index b3edb913f3..6dc1fedb4b 100644 --- a/src/ov_SC03_117/ov_SC03_117.c +++ b/src/ov_SC03_117/ov_SC03_117.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_117/ov_SC03_117_after.c b/src/ov_SC03_117/ov_SC03_117_after.c index 796bc53083..3a47d4327b 100644 --- a/src/ov_SC03_117/ov_SC03_117_after.c +++ b/src/ov_SC03_117/ov_SC03_117_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80186434) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80186434[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80186434[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8015C32C.c b/src/ov_SC03_117/ov_SC03_117_jr_8015C32C.c index 9ee66ec9cd..87020246a5 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_8015C32C.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_118/ov_SC03_118.c b/src/ov_SC03_118/ov_SC03_118.c index e1b7bf4e4e..53a72c7f86 100644 --- a/src/ov_SC03_118/ov_SC03_118.c +++ b/src/ov_SC03_118/ov_SC03_118.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_118/ov_SC03_118_after.c b/src/ov_SC03_118/ov_SC03_118_after.c index 7030578968..bf3a613aa1 100644 --- a/src/ov_SC03_118/ov_SC03_118_after.c +++ b/src/ov_SC03_118/ov_SC03_118_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018B4E0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018B4E0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018B4E0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_118/ov_SC03_118_jr_8015C32C.c b/src/ov_SC03_118/ov_SC03_118_jr_8015C32C.c index fa0c3d54f4..e7d546701d 100644 --- a/src/ov_SC03_118/ov_SC03_118_jr_8015C32C.c +++ b/src/ov_SC03_118/ov_SC03_118_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_119/ov_SC03_119.c b/src/ov_SC03_119/ov_SC03_119.c index b314d6cbaf..96eb9a2654 100644 --- a/src/ov_SC03_119/ov_SC03_119.c +++ b/src/ov_SC03_119/ov_SC03_119.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_119/ov_SC03_119_after.c b/src/ov_SC03_119/ov_SC03_119_after.c index e074a31c91..bba0f83ae1 100644 --- a/src/ov_SC03_119/ov_SC03_119_after.c +++ b/src/ov_SC03_119/ov_SC03_119_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018B4E0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018B4E0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018B4E0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8015C32C.c b/src/ov_SC03_119/ov_SC03_119_jr_8015C32C.c index 1c7b7c4dbc..0bb554faa2 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_8015C32C.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_121/ov_SC03_121.c b/src/ov_SC03_121/ov_SC03_121.c index 96ea06d456..1f4b01845b 100644 --- a/src/ov_SC03_121/ov_SC03_121.c +++ b/src/ov_SC03_121/ov_SC03_121.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_121/ov_SC03_121_after.c b/src/ov_SC03_121/ov_SC03_121_after.c index d2893491ac..1eda443881 100644 --- a/src/ov_SC03_121/ov_SC03_121_after.c +++ b/src/ov_SC03_121/ov_SC03_121_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80183CFC) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80183CFC[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80183CFC[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_121/ov_SC03_121_jr_8015C32C.c b/src/ov_SC03_121/ov_SC03_121_jr_8015C32C.c index 3c29ae98a5..2fed75c3fb 100644 --- a/src/ov_SC03_121/ov_SC03_121_jr_8015C32C.c +++ b/src/ov_SC03_121/ov_SC03_121_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_124/ov_SC03_124.c b/src/ov_SC03_124/ov_SC03_124.c index 766e75ca37..b2593082ac 100644 --- a/src/ov_SC03_124/ov_SC03_124.c +++ b/src/ov_SC03_124/ov_SC03_124.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_124/ov_SC03_124_after.c b/src/ov_SC03_124/ov_SC03_124_after.c index 1fedebed09..04726eab29 100644 --- a/src/ov_SC03_124/ov_SC03_124_after.c +++ b/src/ov_SC03_124/ov_SC03_124_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018C728) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018C728[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018C728[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_124/ov_SC03_124_jr_8015C32C.c b/src/ov_SC03_124/ov_SC03_124_jr_8015C32C.c index 9f0c0e8862..ceb1a38d16 100644 --- a/src/ov_SC03_124/ov_SC03_124_jr_8015C32C.c +++ b/src/ov_SC03_124/ov_SC03_124_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_125/ov_SC03_125.c b/src/ov_SC03_125/ov_SC03_125.c index 76197fad32..5512e1cfe8 100644 --- a/src/ov_SC03_125/ov_SC03_125.c +++ b/src/ov_SC03_125/ov_SC03_125.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_125/ov_SC03_125_after.c b/src/ov_SC03_125/ov_SC03_125_after.c index 3c4b6255d5..668db0348a 100644 --- a/src/ov_SC03_125/ov_SC03_125_after.c +++ b/src/ov_SC03_125/ov_SC03_125_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801858F8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801858F8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801858F8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_125/ov_SC03_125_jr_8015C32C.c b/src/ov_SC03_125/ov_SC03_125_jr_8015C32C.c index 44b665862e..6706cff0d2 100644 --- a/src/ov_SC03_125/ov_SC03_125_jr_8015C32C.c +++ b/src/ov_SC03_125/ov_SC03_125_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC03_126/ov_SC03_126.c b/src/ov_SC03_126/ov_SC03_126.c index 882af2c8f4..ae62e4f23f 100644 --- a/src/ov_SC03_126/ov_SC03_126.c +++ b/src/ov_SC03_126/ov_SC03_126.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC03_126/ov_SC03_126_after.c b/src/ov_SC03_126/ov_SC03_126_after.c index 969b103e48..b3e02ca8f8 100644 --- a/src/ov_SC03_126/ov_SC03_126_after.c +++ b/src/ov_SC03_126/ov_SC03_126_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180DF0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180DF0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180DF0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC03_126/ov_SC03_126_jr_8015C32C.c b/src/ov_SC03_126/ov_SC03_126_jr_8015C32C.c index c4d180f266..2813f7d682 100644 --- a/src/ov_SC03_126/ov_SC03_126_jr_8015C32C.c +++ b/src/ov_SC03_126/ov_SC03_126_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_000/ov_SC04_000.c b/src/ov_SC04_000/ov_SC04_000.c index 51c4ff0fa6..55aca50695 100644 --- a/src/ov_SC04_000/ov_SC04_000.c +++ b/src/ov_SC04_000/ov_SC04_000.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_000/ov_SC04_000_after.c b/src/ov_SC04_000/ov_SC04_000_after.c index 1d8f9424ab..8cf82175b7 100644 --- a/src/ov_SC04_000/ov_SC04_000_after.c +++ b/src/ov_SC04_000/ov_SC04_000_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80184DFC) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80184DFC[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80184DFC[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_000/ov_SC04_000_jr_8015C32C.c b/src/ov_SC04_000/ov_SC04_000_jr_8015C32C.c index c7d7001519..5b9dd28e57 100644 --- a/src/ov_SC04_000/ov_SC04_000_jr_8015C32C.c +++ b/src/ov_SC04_000/ov_SC04_000_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_002/ov_SC04_002.c b/src/ov_SC04_002/ov_SC04_002.c index cc17a62852..aeaac7ed78 100644 --- a/src/ov_SC04_002/ov_SC04_002.c +++ b/src/ov_SC04_002/ov_SC04_002.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_002/ov_SC04_002_after.c b/src/ov_SC04_002/ov_SC04_002_after.c index 08f32ea040..639c82a490 100644 --- a/src/ov_SC04_002/ov_SC04_002_after.c +++ b/src/ov_SC04_002/ov_SC04_002_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80189F68) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80189F68[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80189F68[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_002/ov_SC04_002_jr_8015C32C.c b/src/ov_SC04_002/ov_SC04_002_jr_8015C32C.c index 82ec2bee40..130854e38e 100644 --- a/src/ov_SC04_002/ov_SC04_002_jr_8015C32C.c +++ b/src/ov_SC04_002/ov_SC04_002_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_003/ov_SC04_003.c b/src/ov_SC04_003/ov_SC04_003.c index 6bef4e0d0e..4922fcbc37 100644 --- a/src/ov_SC04_003/ov_SC04_003.c +++ b/src/ov_SC04_003/ov_SC04_003.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_003/ov_SC04_003_after.c b/src/ov_SC04_003/ov_SC04_003_after.c index 73d6ef9ee5..246031b37d 100644 --- a/src/ov_SC04_003/ov_SC04_003_after.c +++ b/src/ov_SC04_003/ov_SC04_003_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80183D04) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80183D04[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80183D04[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_003/ov_SC04_003_jr_8015C32C.c b/src/ov_SC04_003/ov_SC04_003_jr_8015C32C.c index 2e5b975dea..9c8ba80bc4 100644 --- a/src/ov_SC04_003/ov_SC04_003_jr_8015C32C.c +++ b/src/ov_SC04_003/ov_SC04_003_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_004/ov_SC04_004.c b/src/ov_SC04_004/ov_SC04_004.c index e9e6adccf5..f520f889fd 100644 --- a/src/ov_SC04_004/ov_SC04_004.c +++ b/src/ov_SC04_004/ov_SC04_004.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_004/ov_SC04_004_after.c b/src/ov_SC04_004/ov_SC04_004_after.c index b18a1f38a9..5d83d56ec8 100644 --- a/src/ov_SC04_004/ov_SC04_004_after.c +++ b/src/ov_SC04_004/ov_SC04_004_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80186238) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80186238[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80186238[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_004/ov_SC04_004_jr_8015C32C.c b/src/ov_SC04_004/ov_SC04_004_jr_8015C32C.c index 02db313dcc..f691cb9c3a 100644 --- a/src/ov_SC04_004/ov_SC04_004_jr_8015C32C.c +++ b/src/ov_SC04_004/ov_SC04_004_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_005/ov_SC04_005.c b/src/ov_SC04_005/ov_SC04_005.c index 6312d17787..0815ca5e2e 100644 --- a/src/ov_SC04_005/ov_SC04_005.c +++ b/src/ov_SC04_005/ov_SC04_005.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_005/ov_SC04_005_after.c b/src/ov_SC04_005/ov_SC04_005_after.c index 1c7f4a7051..0f7a11dcd3 100644 --- a/src/ov_SC04_005/ov_SC04_005_after.c +++ b/src/ov_SC04_005/ov_SC04_005_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018966C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018966C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018966C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_005/ov_SC04_005_jr_8015C32C.c b/src/ov_SC04_005/ov_SC04_005_jr_8015C32C.c index a63e0367e4..364ff12766 100644 --- a/src/ov_SC04_005/ov_SC04_005_jr_8015C32C.c +++ b/src/ov_SC04_005/ov_SC04_005_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_006/ov_SC04_006.c b/src/ov_SC04_006/ov_SC04_006.c index c6875bb154..3db5d4f1e6 100644 --- a/src/ov_SC04_006/ov_SC04_006.c +++ b/src/ov_SC04_006/ov_SC04_006.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_006/ov_SC04_006_after.c b/src/ov_SC04_006/ov_SC04_006_after.c index fcbab7fbb4..7b571f0b26 100644 --- a/src/ov_SC04_006/ov_SC04_006_after.c +++ b/src/ov_SC04_006/ov_SC04_006_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018174C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018174C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018174C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_006/ov_SC04_006_jr_8015C32C.c b/src/ov_SC04_006/ov_SC04_006_jr_8015C32C.c index d9d002a8c2..be08ebc911 100644 --- a/src/ov_SC04_006/ov_SC04_006_jr_8015C32C.c +++ b/src/ov_SC04_006/ov_SC04_006_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_007/ov_SC04_007.c b/src/ov_SC04_007/ov_SC04_007.c index 5411d11a17..dd942f857e 100644 --- a/src/ov_SC04_007/ov_SC04_007.c +++ b/src/ov_SC04_007/ov_SC04_007.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_007/ov_SC04_007_after.c b/src/ov_SC04_007/ov_SC04_007_after.c index c16181a984..0db5c6cb62 100644 --- a/src/ov_SC04_007/ov_SC04_007_after.c +++ b/src/ov_SC04_007/ov_SC04_007_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80187704) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80187704[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80187704[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_007/ov_SC04_007_jr_8015C32C.c b/src/ov_SC04_007/ov_SC04_007_jr_8015C32C.c index f0faecf0cd..68c3bc1558 100644 --- a/src/ov_SC04_007/ov_SC04_007_jr_8015C32C.c +++ b/src/ov_SC04_007/ov_SC04_007_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_008/ov_SC04_008.c b/src/ov_SC04_008/ov_SC04_008.c index ba5941eeb4..c77159178a 100644 --- a/src/ov_SC04_008/ov_SC04_008.c +++ b/src/ov_SC04_008/ov_SC04_008.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_008/ov_SC04_008_after.c b/src/ov_SC04_008/ov_SC04_008_after.c index 9501174217..bb803e8dbe 100644 --- a/src/ov_SC04_008/ov_SC04_008_after.c +++ b/src/ov_SC04_008/ov_SC04_008_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018063C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018063C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018063C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_008/ov_SC04_008_jr_8015C32C.c b/src/ov_SC04_008/ov_SC04_008_jr_8015C32C.c index 7581595315..03e0f6e00f 100644 --- a/src/ov_SC04_008/ov_SC04_008_jr_8015C32C.c +++ b/src/ov_SC04_008/ov_SC04_008_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_009/ov_SC04_009.c b/src/ov_SC04_009/ov_SC04_009.c index 1371125739..ed8d03507a 100644 --- a/src/ov_SC04_009/ov_SC04_009.c +++ b/src/ov_SC04_009/ov_SC04_009.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_009/ov_SC04_009_after.c b/src/ov_SC04_009/ov_SC04_009_after.c index 006301e0fc..6bb1fdec88 100644 --- a/src/ov_SC04_009/ov_SC04_009_after.c +++ b/src/ov_SC04_009/ov_SC04_009_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180668) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180668[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180668[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_009/ov_SC04_009_jr_8015C32C.c b/src/ov_SC04_009/ov_SC04_009_jr_8015C32C.c index 99bd64319b..e587f55421 100644 --- a/src/ov_SC04_009/ov_SC04_009_jr_8015C32C.c +++ b/src/ov_SC04_009/ov_SC04_009_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_010/ov_SC04_010.c b/src/ov_SC04_010/ov_SC04_010.c index e2ebfe5f18..c0950fe036 100644 --- a/src/ov_SC04_010/ov_SC04_010.c +++ b/src/ov_SC04_010/ov_SC04_010.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_010/ov_SC04_010_after.c b/src/ov_SC04_010/ov_SC04_010_after.c index 37e36623f9..e08f292435 100644 --- a/src/ov_SC04_010/ov_SC04_010_after.c +++ b/src/ov_SC04_010/ov_SC04_010_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8017FD14) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8017FD14[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8017FD14[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_010/ov_SC04_010_jr_8015C32C.c b/src/ov_SC04_010/ov_SC04_010_jr_8015C32C.c index 57d09f9ef7..aa17954af9 100644 --- a/src/ov_SC04_010/ov_SC04_010_jr_8015C32C.c +++ b/src/ov_SC04_010/ov_SC04_010_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_011/ov_SC04_011.c b/src/ov_SC04_011/ov_SC04_011.c index 71c35b329b..2c6a958bde 100644 --- a/src/ov_SC04_011/ov_SC04_011.c +++ b/src/ov_SC04_011/ov_SC04_011.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_011/ov_SC04_011_after.c b/src/ov_SC04_011/ov_SC04_011_after.c index 0726402df7..531c29dc9c 100644 --- a/src/ov_SC04_011/ov_SC04_011_after.c +++ b/src/ov_SC04_011/ov_SC04_011_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80191FA4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80191FA4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80191FA4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c b/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c index 588bb16ff4..83984fdc10 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_012/ov_SC04_012.c b/src/ov_SC04_012/ov_SC04_012.c index ebc240e2c5..4492fba704 100644 --- a/src/ov_SC04_012/ov_SC04_012.c +++ b/src/ov_SC04_012/ov_SC04_012.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_012/ov_SC04_012_after.c b/src/ov_SC04_012/ov_SC04_012_after.c index e7552fdc06..76cadaa38d 100644 --- a/src/ov_SC04_012/ov_SC04_012_after.c +++ b/src/ov_SC04_012/ov_SC04_012_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180178) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180178[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180178[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_012/ov_SC04_012_jr_8015C32C.c b/src/ov_SC04_012/ov_SC04_012_jr_8015C32C.c index 5ca30b44f8..42f2cd564e 100644 --- a/src/ov_SC04_012/ov_SC04_012_jr_8015C32C.c +++ b/src/ov_SC04_012/ov_SC04_012_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_015/ov_SC04_015.c b/src/ov_SC04_015/ov_SC04_015.c index 76d4d78bfd..b34f4788e6 100644 --- a/src/ov_SC04_015/ov_SC04_015.c +++ b/src/ov_SC04_015/ov_SC04_015.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_015/ov_SC04_015_after.c b/src/ov_SC04_015/ov_SC04_015_after.c index 1ec522bf43..e2440502c4 100644 --- a/src/ov_SC04_015/ov_SC04_015_after.c +++ b/src/ov_SC04_015/ov_SC04_015_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801860B0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801860B0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801860B0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_015/ov_SC04_015_jr_8015C32C.c b/src/ov_SC04_015/ov_SC04_015_jr_8015C32C.c index ee2a88c9b3..0e3410be70 100644 --- a/src/ov_SC04_015/ov_SC04_015_jr_8015C32C.c +++ b/src/ov_SC04_015/ov_SC04_015_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_016/ov_SC04_016.c b/src/ov_SC04_016/ov_SC04_016.c index 55c111a3e4..2f23bc2e8f 100644 --- a/src/ov_SC04_016/ov_SC04_016.c +++ b/src/ov_SC04_016/ov_SC04_016.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_016/ov_SC04_016_after.c b/src/ov_SC04_016/ov_SC04_016_after.c index d55977ed43..dfc677a851 100644 --- a/src/ov_SC04_016/ov_SC04_016_after.c +++ b/src/ov_SC04_016/ov_SC04_016_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80181B74) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80181B74[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80181B74[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_016/ov_SC04_016_jr_8015C32C.c b/src/ov_SC04_016/ov_SC04_016_jr_8015C32C.c index 47a9190ffd..cdab08d889 100644 --- a/src/ov_SC04_016/ov_SC04_016_jr_8015C32C.c +++ b/src/ov_SC04_016/ov_SC04_016_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_018/ov_SC04_018.c b/src/ov_SC04_018/ov_SC04_018.c index b7dcc9f015..037bd16687 100644 --- a/src/ov_SC04_018/ov_SC04_018.c +++ b/src/ov_SC04_018/ov_SC04_018.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_018/ov_SC04_018_after.c b/src/ov_SC04_018/ov_SC04_018_after.c index 90e7a5906d..dae15f015e 100644 --- a/src/ov_SC04_018/ov_SC04_018_after.c +++ b/src/ov_SC04_018/ov_SC04_018_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018ED8C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018ED8C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018ED8C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_018/ov_SC04_018_jr_8015C32C.c b/src/ov_SC04_018/ov_SC04_018_jr_8015C32C.c index fe948c3125..752286b66b 100644 --- a/src/ov_SC04_018/ov_SC04_018_jr_8015C32C.c +++ b/src/ov_SC04_018/ov_SC04_018_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_019/ov_SC04_019.c b/src/ov_SC04_019/ov_SC04_019.c index dba063e73d..c25b8f4448 100644 --- a/src/ov_SC04_019/ov_SC04_019.c +++ b/src/ov_SC04_019/ov_SC04_019.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_019/ov_SC04_019_after.c b/src/ov_SC04_019/ov_SC04_019_after.c index 52736905f9..7581c754a1 100644 --- a/src/ov_SC04_019/ov_SC04_019_after.c +++ b/src/ov_SC04_019/ov_SC04_019_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018ED8C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018ED8C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018ED8C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_019/ov_SC04_019_jr_8015C32C.c b/src/ov_SC04_019/ov_SC04_019_jr_8015C32C.c index 4b897e4bcb..883d68478a 100644 --- a/src/ov_SC04_019/ov_SC04_019_jr_8015C32C.c +++ b/src/ov_SC04_019/ov_SC04_019_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_020/ov_SC04_020.c b/src/ov_SC04_020/ov_SC04_020.c index 37ffe006b5..a302b66a14 100644 --- a/src/ov_SC04_020/ov_SC04_020.c +++ b/src/ov_SC04_020/ov_SC04_020.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_020/ov_SC04_020_after.c b/src/ov_SC04_020/ov_SC04_020_after.c index 7564695d8e..6cde80e206 100644 --- a/src/ov_SC04_020/ov_SC04_020_after.c +++ b/src/ov_SC04_020/ov_SC04_020_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80184EC4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80184EC4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80184EC4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_020/ov_SC04_020_jr_8015C32C.c b/src/ov_SC04_020/ov_SC04_020_jr_8015C32C.c index ee37a1cfb8..d99f704439 100644 --- a/src/ov_SC04_020/ov_SC04_020_jr_8015C32C.c +++ b/src/ov_SC04_020/ov_SC04_020_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC04_021/ov_SC04_021.c b/src/ov_SC04_021/ov_SC04_021.c index db579f9160..4f886de9c9 100644 --- a/src/ov_SC04_021/ov_SC04_021.c +++ b/src/ov_SC04_021/ov_SC04_021.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC04_021/ov_SC04_021_after.c b/src/ov_SC04_021/ov_SC04_021_after.c index e332f49954..4e831f6786 100644 --- a/src/ov_SC04_021/ov_SC04_021_after.c +++ b/src/ov_SC04_021/ov_SC04_021_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180DF0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180DF0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180DF0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC04_021/ov_SC04_021_jr_8015C32C.c b/src/ov_SC04_021/ov_SC04_021_jr_8015C32C.c index 30271c7d3d..5e60f12a39 100644 --- a/src/ov_SC04_021/ov_SC04_021_jr_8015C32C.c +++ b/src/ov_SC04_021/ov_SC04_021_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_000/ov_SC05_000.c b/src/ov_SC05_000/ov_SC05_000.c index 6fe9181ad7..f24b74e9ea 100644 --- a/src/ov_SC05_000/ov_SC05_000.c +++ b/src/ov_SC05_000/ov_SC05_000.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_000/ov_SC05_000_after.c b/src/ov_SC05_000/ov_SC05_000_after.c index bae13e0e49..6dbb1997c4 100644 --- a/src/ov_SC05_000/ov_SC05_000_after.c +++ b/src/ov_SC05_000/ov_SC05_000_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8017FE04) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8017FE04[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8017FE04[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_000/ov_SC05_000_jr_8015C32C.c b/src/ov_SC05_000/ov_SC05_000_jr_8015C32C.c index 605c42298f..97e5e73fec 100644 --- a/src/ov_SC05_000/ov_SC05_000_jr_8015C32C.c +++ b/src/ov_SC05_000/ov_SC05_000_jr_8015C32C.c @@ -3833,7 +3833,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_001/ov_SC05_001.c b/src/ov_SC05_001/ov_SC05_001.c index 46537f35f1..c7d82261ff 100644 --- a/src/ov_SC05_001/ov_SC05_001.c +++ b/src/ov_SC05_001/ov_SC05_001.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_001/ov_SC05_001_after.c b/src/ov_SC05_001/ov_SC05_001_after.c index 7b6ce2767f..8939429e5c 100644 --- a/src/ov_SC05_001/ov_SC05_001_after.c +++ b/src/ov_SC05_001/ov_SC05_001_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801875E0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801875E0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801875E0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8015C32C.c b/src/ov_SC05_001/ov_SC05_001_jr_8015C32C.c index aae40c94be..c515836657 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_8015C32C.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_002/ov_SC05_002.c b/src/ov_SC05_002/ov_SC05_002.c index 6f659baa2b..7e24f3d808 100644 --- a/src/ov_SC05_002/ov_SC05_002.c +++ b/src/ov_SC05_002/ov_SC05_002.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_002/ov_SC05_002_after.c b/src/ov_SC05_002/ov_SC05_002_after.c index a750104767..fbba6f9758 100644 --- a/src/ov_SC05_002/ov_SC05_002_after.c +++ b/src/ov_SC05_002/ov_SC05_002_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80181DA0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80181DA0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80181DA0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_002/ov_SC05_002_jr_8015C32C.c b/src/ov_SC05_002/ov_SC05_002_jr_8015C32C.c index 369883359b..ce679ae293 100644 --- a/src/ov_SC05_002/ov_SC05_002_jr_8015C32C.c +++ b/src/ov_SC05_002/ov_SC05_002_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_003/ov_SC05_003.c b/src/ov_SC05_003/ov_SC05_003.c index f389ce3e15..c73d7a826d 100644 --- a/src/ov_SC05_003/ov_SC05_003.c +++ b/src/ov_SC05_003/ov_SC05_003.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_003/ov_SC05_003_after.c b/src/ov_SC05_003/ov_SC05_003_after.c index fdd107fb2c..433b79c111 100644 --- a/src/ov_SC05_003/ov_SC05_003_after.c +++ b/src/ov_SC05_003/ov_SC05_003_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801840D8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801840D8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801840D8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_003/ov_SC05_003_jr_8015C32C.c b/src/ov_SC05_003/ov_SC05_003_jr_8015C32C.c index 3039df1d18..5f8c5dd48b 100644 --- a/src/ov_SC05_003/ov_SC05_003_jr_8015C32C.c +++ b/src/ov_SC05_003/ov_SC05_003_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_004/ov_SC05_004.c b/src/ov_SC05_004/ov_SC05_004.c index 3bd5c201ef..4a50afa275 100644 --- a/src/ov_SC05_004/ov_SC05_004.c +++ b/src/ov_SC05_004/ov_SC05_004.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_004/ov_SC05_004_after.c b/src/ov_SC05_004/ov_SC05_004_after.c index 7adffed9a0..e2a1996f02 100644 --- a/src/ov_SC05_004/ov_SC05_004_after.c +++ b/src/ov_SC05_004/ov_SC05_004_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801831E4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801831E4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801831E4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_004/ov_SC05_004_jr_8015C32C.c b/src/ov_SC05_004/ov_SC05_004_jr_8015C32C.c index 3da50788d4..b353ad015e 100644 --- a/src/ov_SC05_004/ov_SC05_004_jr_8015C32C.c +++ b/src/ov_SC05_004/ov_SC05_004_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_005/ov_SC05_005.c b/src/ov_SC05_005/ov_SC05_005.c index d613973d60..fcb23c9028 100644 --- a/src/ov_SC05_005/ov_SC05_005.c +++ b/src/ov_SC05_005/ov_SC05_005.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_005/ov_SC05_005_after.c b/src/ov_SC05_005/ov_SC05_005_after.c index 72835733a7..12f14a5e2d 100644 --- a/src/ov_SC05_005/ov_SC05_005_after.c +++ b/src/ov_SC05_005/ov_SC05_005_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80183FB8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80183FB8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80183FB8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_005/ov_SC05_005_jr_8015C32C.c b/src/ov_SC05_005/ov_SC05_005_jr_8015C32C.c index b670d87269..7c7429e086 100644 --- a/src/ov_SC05_005/ov_SC05_005_jr_8015C32C.c +++ b/src/ov_SC05_005/ov_SC05_005_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_006/ov_SC05_006.c b/src/ov_SC05_006/ov_SC05_006.c index da92f759b7..2ff06e221a 100644 --- a/src/ov_SC05_006/ov_SC05_006.c +++ b/src/ov_SC05_006/ov_SC05_006.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_006/ov_SC05_006_after.c b/src/ov_SC05_006/ov_SC05_006_after.c index 7ce13972bb..0e8d4ef827 100644 --- a/src/ov_SC05_006/ov_SC05_006_after.c +++ b/src/ov_SC05_006/ov_SC05_006_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180FD8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180FD8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180FD8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_006/ov_SC05_006_jr_8015C32C.c b/src/ov_SC05_006/ov_SC05_006_jr_8015C32C.c index 15d573a5f1..293c960b33 100644 --- a/src/ov_SC05_006/ov_SC05_006_jr_8015C32C.c +++ b/src/ov_SC05_006/ov_SC05_006_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_007/ov_SC05_007.c b/src/ov_SC05_007/ov_SC05_007.c index 7a32bbdd25..5783e9ca16 100644 --- a/src/ov_SC05_007/ov_SC05_007.c +++ b/src/ov_SC05_007/ov_SC05_007.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_007/ov_SC05_007_after.c b/src/ov_SC05_007/ov_SC05_007_after.c index a7e4bca19e..3a10b31b8c 100644 --- a/src/ov_SC05_007/ov_SC05_007_after.c +++ b/src/ov_SC05_007/ov_SC05_007_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801825D4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801825D4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801825D4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8015C32C.c b/src/ov_SC05_007/ov_SC05_007_jr_8015C32C.c index e73d41dda9..fb7b9223c4 100644 --- a/src/ov_SC05_007/ov_SC05_007_jr_8015C32C.c +++ b/src/ov_SC05_007/ov_SC05_007_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_008/ov_SC05_008.c b/src/ov_SC05_008/ov_SC05_008.c index 6a025573ac..da9e907502 100644 --- a/src/ov_SC05_008/ov_SC05_008.c +++ b/src/ov_SC05_008/ov_SC05_008.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_008/ov_SC05_008_after.c b/src/ov_SC05_008/ov_SC05_008_after.c index 41c82571a4..9f3c17e3ed 100644 --- a/src/ov_SC05_008/ov_SC05_008_after.c +++ b/src/ov_SC05_008/ov_SC05_008_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018452C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018452C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018452C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8015C32C.c b/src/ov_SC05_008/ov_SC05_008_jr_8015C32C.c index b1628b0000..5c9e2fbe5e 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_8015C32C.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_009/ov_SC05_009.c b/src/ov_SC05_009/ov_SC05_009.c index 28b81bce2b..7770f2242b 100644 --- a/src/ov_SC05_009/ov_SC05_009.c +++ b/src/ov_SC05_009/ov_SC05_009.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_009/ov_SC05_009_after.c b/src/ov_SC05_009/ov_SC05_009_after.c index 5a6f34b01c..3c0c4faca1 100644 --- a/src/ov_SC05_009/ov_SC05_009_after.c +++ b/src/ov_SC05_009/ov_SC05_009_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018063C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018063C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018063C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_009/ov_SC05_009_jr_8015C32C.c b/src/ov_SC05_009/ov_SC05_009_jr_8015C32C.c index 6b3e40471c..2c865e31fc 100644 --- a/src/ov_SC05_009/ov_SC05_009_jr_8015C32C.c +++ b/src/ov_SC05_009/ov_SC05_009_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_010/ov_SC05_010.c b/src/ov_SC05_010/ov_SC05_010.c index 246ffcfecd..c09533806b 100644 --- a/src/ov_SC05_010/ov_SC05_010.c +++ b/src/ov_SC05_010/ov_SC05_010.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_010/ov_SC05_010_after.c b/src/ov_SC05_010/ov_SC05_010_after.c index caee22c7d0..c7e331f095 100644 --- a/src/ov_SC05_010/ov_SC05_010_after.c +++ b/src/ov_SC05_010/ov_SC05_010_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018A518) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018A518[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018A518[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8015C32C.c b/src/ov_SC05_010/ov_SC05_010_jr_8015C32C.c index 93dbb9574a..c4ea5a817d 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_8015C32C.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_011/ov_SC05_011.c b/src/ov_SC05_011/ov_SC05_011.c index 4bef75eb28..4f28b67b6b 100644 --- a/src/ov_SC05_011/ov_SC05_011.c +++ b/src/ov_SC05_011/ov_SC05_011.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_011/ov_SC05_011_after.c b/src/ov_SC05_011/ov_SC05_011_after.c index 934e6af51b..2aaae8ff09 100644 --- a/src/ov_SC05_011/ov_SC05_011_after.c +++ b/src/ov_SC05_011/ov_SC05_011_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8017F890) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8017F890[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8017F890[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_011/ov_SC05_011_jr_8015C32C.c b/src/ov_SC05_011/ov_SC05_011_jr_8015C32C.c index 3b8aef73bf..15f1a20364 100644 --- a/src/ov_SC05_011/ov_SC05_011_jr_8015C32C.c +++ b/src/ov_SC05_011/ov_SC05_011_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_017/ov_SC05_017.c b/src/ov_SC05_017/ov_SC05_017.c index c3ed911d79..9b5ed52c84 100644 --- a/src/ov_SC05_017/ov_SC05_017.c +++ b/src/ov_SC05_017/ov_SC05_017.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_017/ov_SC05_017_after.c b/src/ov_SC05_017/ov_SC05_017_after.c index c891aac98b..59cb69b8b8 100644 --- a/src/ov_SC05_017/ov_SC05_017_after.c +++ b/src/ov_SC05_017/ov_SC05_017_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018ED50) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018ED50[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018ED50[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_017/ov_SC05_017_jr_8015C32C.c b/src/ov_SC05_017/ov_SC05_017_jr_8015C32C.c index b930a35c31..e0696de502 100644 --- a/src/ov_SC05_017/ov_SC05_017_jr_8015C32C.c +++ b/src/ov_SC05_017/ov_SC05_017_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_018/ov_SC05_018.c b/src/ov_SC05_018/ov_SC05_018.c index 6e7b739c75..98bb74272c 100644 --- a/src/ov_SC05_018/ov_SC05_018.c +++ b/src/ov_SC05_018/ov_SC05_018.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_018/ov_SC05_018_after.c b/src/ov_SC05_018/ov_SC05_018_after.c index 059e3b9fa3..e837b55d05 100644 --- a/src/ov_SC05_018/ov_SC05_018_after.c +++ b/src/ov_SC05_018/ov_SC05_018_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801884AC) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801884AC[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801884AC[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_018/ov_SC05_018_jr_8015C32C.c b/src/ov_SC05_018/ov_SC05_018_jr_8015C32C.c index dc478e1b5c..ed3d670be6 100644 --- a/src/ov_SC05_018/ov_SC05_018_jr_8015C32C.c +++ b/src/ov_SC05_018/ov_SC05_018_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC05_019/ov_SC05_019.c b/src/ov_SC05_019/ov_SC05_019.c index 55e8f35e84..10086b8436 100644 --- a/src/ov_SC05_019/ov_SC05_019.c +++ b/src/ov_SC05_019/ov_SC05_019.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC05_019/ov_SC05_019_after.c b/src/ov_SC05_019/ov_SC05_019_after.c index 9aa6a1f2b0..fdde4f1c22 100644 --- a/src/ov_SC05_019/ov_SC05_019_after.c +++ b/src/ov_SC05_019/ov_SC05_019_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180DF0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180DF0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180DF0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC05_019/ov_SC05_019_jr_8015C32C.c b/src/ov_SC05_019/ov_SC05_019_jr_8015C32C.c index 81fad1bba2..d591093a05 100644 --- a/src/ov_SC05_019/ov_SC05_019_jr_8015C32C.c +++ b/src/ov_SC05_019/ov_SC05_019_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_000/ov_SC06_000.c b/src/ov_SC06_000/ov_SC06_000.c index fc413b3dfe..a2876bf028 100644 --- a/src/ov_SC06_000/ov_SC06_000.c +++ b/src/ov_SC06_000/ov_SC06_000.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_000/ov_SC06_000_after.c b/src/ov_SC06_000/ov_SC06_000_after.c index 529f0c6cd9..1958d89bed 100644 --- a/src/ov_SC06_000/ov_SC06_000_after.c +++ b/src/ov_SC06_000/ov_SC06_000_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80189E00) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80189E00[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80189E00[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_000/ov_SC06_000_jr_8015C32C.c b/src/ov_SC06_000/ov_SC06_000_jr_8015C32C.c index 338386aa49..0a23f7cfe1 100644 --- a/src/ov_SC06_000/ov_SC06_000_jr_8015C32C.c +++ b/src/ov_SC06_000/ov_SC06_000_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_006/ov_SC06_006.c b/src/ov_SC06_006/ov_SC06_006.c index 72956c144e..2a0f956ebc 100644 --- a/src/ov_SC06_006/ov_SC06_006.c +++ b/src/ov_SC06_006/ov_SC06_006.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_006/ov_SC06_006_after.c b/src/ov_SC06_006/ov_SC06_006_after.c index b79bd799d6..73417c34d6 100644 --- a/src/ov_SC06_006/ov_SC06_006_after.c +++ b/src/ov_SC06_006/ov_SC06_006_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80183924) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80183924[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80183924[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_006/ov_SC06_006_jr_8015C32C.c b/src/ov_SC06_006/ov_SC06_006_jr_8015C32C.c index 8496435ef6..4e61e2d860 100644 --- a/src/ov_SC06_006/ov_SC06_006_jr_8015C32C.c +++ b/src/ov_SC06_006/ov_SC06_006_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_008/ov_SC06_008.c b/src/ov_SC06_008/ov_SC06_008.c index 51d1d1d4c6..77d6c9979e 100644 --- a/src/ov_SC06_008/ov_SC06_008.c +++ b/src/ov_SC06_008/ov_SC06_008.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_008/ov_SC06_008_after.c b/src/ov_SC06_008/ov_SC06_008_after.c index 6e8bbe96b6..093e44d415 100644 --- a/src/ov_SC06_008/ov_SC06_008_after.c +++ b/src/ov_SC06_008/ov_SC06_008_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018738C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018738C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018738C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_008/ov_SC06_008_jr_8015C32C.c b/src/ov_SC06_008/ov_SC06_008_jr_8015C32C.c index bf1d9ca61e..49482fba65 100644 --- a/src/ov_SC06_008/ov_SC06_008_jr_8015C32C.c +++ b/src/ov_SC06_008/ov_SC06_008_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_010/ov_SC06_010.c b/src/ov_SC06_010/ov_SC06_010.c index 3b5d076667..4d042b752b 100644 --- a/src/ov_SC06_010/ov_SC06_010.c +++ b/src/ov_SC06_010/ov_SC06_010.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_010/ov_SC06_010_after.c b/src/ov_SC06_010/ov_SC06_010_after.c index 18ee4a22c6..da55a9f477 100644 --- a/src/ov_SC06_010/ov_SC06_010_after.c +++ b/src/ov_SC06_010/ov_SC06_010_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80188568) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80188568[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80188568[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_010/ov_SC06_010_jr_8015C32C.c b/src/ov_SC06_010/ov_SC06_010_jr_8015C32C.c index 9c56a0b2c8..08c9df83f4 100644 --- a/src/ov_SC06_010/ov_SC06_010_jr_8015C32C.c +++ b/src/ov_SC06_010/ov_SC06_010_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_011/ov_SC06_011.c b/src/ov_SC06_011/ov_SC06_011.c index 50eccf1c16..7884ece0ad 100644 --- a/src/ov_SC06_011/ov_SC06_011.c +++ b/src/ov_SC06_011/ov_SC06_011.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_011/ov_SC06_011_after.c b/src/ov_SC06_011/ov_SC06_011_after.c index 4966460ad7..5246f42930 100644 --- a/src/ov_SC06_011/ov_SC06_011_after.c +++ b/src/ov_SC06_011/ov_SC06_011_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80181FC8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80181FC8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80181FC8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_011/ov_SC06_011_jr_8015C32C.c b/src/ov_SC06_011/ov_SC06_011_jr_8015C32C.c index 98f3203048..2705da8a34 100644 --- a/src/ov_SC06_011/ov_SC06_011_jr_8015C32C.c +++ b/src/ov_SC06_011/ov_SC06_011_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_013/ov_SC06_013.c b/src/ov_SC06_013/ov_SC06_013.c index 0b9044372d..ae91604942 100644 --- a/src/ov_SC06_013/ov_SC06_013.c +++ b/src/ov_SC06_013/ov_SC06_013.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_013/ov_SC06_013_after.c b/src/ov_SC06_013/ov_SC06_013_after.c index 5b75082ce6..3dde829e49 100644 --- a/src/ov_SC06_013/ov_SC06_013_after.c +++ b/src/ov_SC06_013/ov_SC06_013_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180744) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180744[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180744[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_013/ov_SC06_013_jr_8015C32C.c b/src/ov_SC06_013/ov_SC06_013_jr_8015C32C.c index 3a137df6db..f88e3b18a9 100644 --- a/src/ov_SC06_013/ov_SC06_013_jr_8015C32C.c +++ b/src/ov_SC06_013/ov_SC06_013_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_014/ov_SC06_014.c b/src/ov_SC06_014/ov_SC06_014.c index 89841cee14..e8f8c5e7d2 100644 --- a/src/ov_SC06_014/ov_SC06_014.c +++ b/src/ov_SC06_014/ov_SC06_014.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_014/ov_SC06_014_after.c b/src/ov_SC06_014/ov_SC06_014_after.c index b0aa89d854..2bbff3de9e 100644 --- a/src/ov_SC06_014/ov_SC06_014_after.c +++ b/src/ov_SC06_014/ov_SC06_014_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80181AA8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80181AA8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80181AA8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_014/ov_SC06_014_jr_8015C32C.c b/src/ov_SC06_014/ov_SC06_014_jr_8015C32C.c index 293ff05dcf..33441825b8 100644 --- a/src/ov_SC06_014/ov_SC06_014_jr_8015C32C.c +++ b/src/ov_SC06_014/ov_SC06_014_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_015/ov_SC06_015.c b/src/ov_SC06_015/ov_SC06_015.c index 8be8169beb..aa04100ea3 100644 --- a/src/ov_SC06_015/ov_SC06_015.c +++ b/src/ov_SC06_015/ov_SC06_015.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_015/ov_SC06_015_after.c b/src/ov_SC06_015/ov_SC06_015_after.c index 8c9beab843..7abb2840db 100644 --- a/src/ov_SC06_015/ov_SC06_015_after.c +++ b/src/ov_SC06_015/ov_SC06_015_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80180600) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80180600[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80180600[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_015/ov_SC06_015_jr_8015C32C.c b/src/ov_SC06_015/ov_SC06_015_jr_8015C32C.c index 6fc69a2c51..6ddd723c79 100644 --- a/src/ov_SC06_015/ov_SC06_015_jr_8015C32C.c +++ b/src/ov_SC06_015/ov_SC06_015_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_016/ov_SC06_016.c b/src/ov_SC06_016/ov_SC06_016.c index eadb58362b..813e8378f0 100644 --- a/src/ov_SC06_016/ov_SC06_016.c +++ b/src/ov_SC06_016/ov_SC06_016.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_016/ov_SC06_016_after.c b/src/ov_SC06_016/ov_SC06_016_after.c index 903601b7f8..b411a8abbb 100644 --- a/src/ov_SC06_016/ov_SC06_016_after.c +++ b/src/ov_SC06_016/ov_SC06_016_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80186A10) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80186A10[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80186A10[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_016/ov_SC06_016_jr_8015C32C.c b/src/ov_SC06_016/ov_SC06_016_jr_8015C32C.c index bf6a2b637e..207ded33e1 100644 --- a/src/ov_SC06_016/ov_SC06_016_jr_8015C32C.c +++ b/src/ov_SC06_016/ov_SC06_016_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_018/ov_SC06_018.c b/src/ov_SC06_018/ov_SC06_018.c index f79f1db865..d7a096dc31 100644 --- a/src/ov_SC06_018/ov_SC06_018.c +++ b/src/ov_SC06_018/ov_SC06_018.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_018/ov_SC06_018_after.c b/src/ov_SC06_018/ov_SC06_018_after.c index 8bb2028e00..fc77b586dd 100644 --- a/src/ov_SC06_018/ov_SC06_018_after.c +++ b/src/ov_SC06_018/ov_SC06_018_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8019514C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8019514C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8019514C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_018/ov_SC06_018_jr_8015C32C.c b/src/ov_SC06_018/ov_SC06_018_jr_8015C32C.c index 394a2b56d2..d2a7172ce7 100644 --- a/src/ov_SC06_018/ov_SC06_018_jr_8015C32C.c +++ b/src/ov_SC06_018/ov_SC06_018_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_020/ov_SC06_020.c b/src/ov_SC06_020/ov_SC06_020.c index 1d22cf68db..ee181ce6ef 100644 --- a/src/ov_SC06_020/ov_SC06_020.c +++ b/src/ov_SC06_020/ov_SC06_020.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_020/ov_SC06_020_after.c b/src/ov_SC06_020/ov_SC06_020_after.c index 377f78a79c..d8ea8dd544 100644 --- a/src/ov_SC06_020/ov_SC06_020_after.c +++ b/src/ov_SC06_020/ov_SC06_020_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80186BD4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80186BD4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80186BD4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_020/ov_SC06_020_jr_8015C32C.c b/src/ov_SC06_020/ov_SC06_020_jr_8015C32C.c index 732859b3a2..a39f700b0e 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_8015C32C.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_022/ov_SC06_022.c b/src/ov_SC06_022/ov_SC06_022.c index 963748d0d4..253f1f1377 100644 --- a/src/ov_SC06_022/ov_SC06_022.c +++ b/src/ov_SC06_022/ov_SC06_022.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_022/ov_SC06_022_after.c b/src/ov_SC06_022/ov_SC06_022_after.c index 512ee49293..4336f39e32 100644 --- a/src/ov_SC06_022/ov_SC06_022_after.c +++ b/src/ov_SC06_022/ov_SC06_022_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018EE90) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018EE90[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018EE90[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8015C32C.c b/src/ov_SC06_022/ov_SC06_022_jr_8015C32C.c index ab72a07e1d..0dc165965d 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_8015C32C.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_024/ov_SC06_024.c b/src/ov_SC06_024/ov_SC06_024.c index 71d3156c7b..571e594545 100644 --- a/src/ov_SC06_024/ov_SC06_024.c +++ b/src/ov_SC06_024/ov_SC06_024.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_024/ov_SC06_024_after.c b/src/ov_SC06_024/ov_SC06_024_after.c index 055ed1902f..2c45c279b2 100644 --- a/src/ov_SC06_024/ov_SC06_024_after.c +++ b/src/ov_SC06_024/ov_SC06_024_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80191368) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80191368[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80191368[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_024/ov_SC06_024_jr_8015C32C.c b/src/ov_SC06_024/ov_SC06_024_jr_8015C32C.c index 9275b81118..829e15d42e 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_8015C32C.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_025/ov_SC06_025.c b/src/ov_SC06_025/ov_SC06_025.c index 398dfea690..5d2a81655c 100644 --- a/src/ov_SC06_025/ov_SC06_025.c +++ b/src/ov_SC06_025/ov_SC06_025.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_025/ov_SC06_025_after.c b/src/ov_SC06_025/ov_SC06_025_after.c index 09d430b603..3ce4a70883 100644 --- a/src/ov_SC06_025/ov_SC06_025_after.c +++ b/src/ov_SC06_025/ov_SC06_025_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018680C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018680C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018680C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8015C32C.c b/src/ov_SC06_025/ov_SC06_025_jr_8015C32C.c index a3604ff333..a61085c212 100644 --- a/src/ov_SC06_025/ov_SC06_025_jr_8015C32C.c +++ b/src/ov_SC06_025/ov_SC06_025_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_027/ov_SC06_027.c b/src/ov_SC06_027/ov_SC06_027.c index 152eb5783c..d0abd3046e 100644 --- a/src/ov_SC06_027/ov_SC06_027.c +++ b/src/ov_SC06_027/ov_SC06_027.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_027/ov_SC06_027_after.c b/src/ov_SC06_027/ov_SC06_027_after.c index f54a9876f0..c761648051 100644 --- a/src/ov_SC06_027/ov_SC06_027_after.c +++ b/src/ov_SC06_027/ov_SC06_027_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8017FB4C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8017FB4C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8017FB4C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_027/ov_SC06_027_jr_8015C32C.c b/src/ov_SC06_027/ov_SC06_027_jr_8015C32C.c index 514c624587..c2ba39b1fe 100644 --- a/src/ov_SC06_027/ov_SC06_027_jr_8015C32C.c +++ b/src/ov_SC06_027/ov_SC06_027_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_029/ov_SC06_029.c b/src/ov_SC06_029/ov_SC06_029.c index 161d35ed63..9da754744f 100644 --- a/src/ov_SC06_029/ov_SC06_029.c +++ b/src/ov_SC06_029/ov_SC06_029.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_029/ov_SC06_029_after.c b/src/ov_SC06_029/ov_SC06_029_after.c index f464410538..2b1488c0be 100644 --- a/src/ov_SC06_029/ov_SC06_029_after.c +++ b/src/ov_SC06_029/ov_SC06_029_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018E0E0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8018E0E0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018E0E0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8015C32C.c b/src/ov_SC06_029/ov_SC06_029_jr_8015C32C.c index acae0b88d4..1ee989e681 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_8015C32C.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_030/ov_SC06_030.c b/src/ov_SC06_030/ov_SC06_030.c index 902ec2a39c..cd8313831b 100644 --- a/src/ov_SC06_030/ov_SC06_030.c +++ b/src/ov_SC06_030/ov_SC06_030.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_030/ov_SC06_030_after.c b/src/ov_SC06_030/ov_SC06_030_after.c index 1ad5ef6ade..3bf9816faf 100644 --- a/src/ov_SC06_030/ov_SC06_030_after.c +++ b/src/ov_SC06_030/ov_SC06_030_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801839D0) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801839D0[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801839D0[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8015C32C.c b/src/ov_SC06_030/ov_SC06_030_jr_8015C32C.c index 7fecaea7fc..e8d266a980 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_8015C32C.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_032/ov_SC06_032.c b/src/ov_SC06_032/ov_SC06_032.c index 9b7d44e349..b83f20e3eb 100644 --- a/src/ov_SC06_032/ov_SC06_032.c +++ b/src/ov_SC06_032/ov_SC06_032.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_032/ov_SC06_032_after.c b/src/ov_SC06_032/ov_SC06_032_after.c index 4c5f715f25..7119ed4f40 100644 --- a/src/ov_SC06_032/ov_SC06_032_after.c +++ b/src/ov_SC06_032/ov_SC06_032_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80194E9C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80194E9C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80194E9C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_032/ov_SC06_032_jr_8015C32C.c b/src/ov_SC06_032/ov_SC06_032_jr_8015C32C.c index 507d2e737b..3ef9f5c0a8 100644 --- a/src/ov_SC06_032/ov_SC06_032_jr_8015C32C.c +++ b/src/ov_SC06_032/ov_SC06_032_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC06_033/ov_SC06_033.c b/src/ov_SC06_033/ov_SC06_033.c index 2a59aa1a85..56f5a225cf 100644 --- a/src/ov_SC06_033/ov_SC06_033.c +++ b/src/ov_SC06_033/ov_SC06_033.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC06_033/ov_SC06_033_after.c b/src/ov_SC06_033/ov_SC06_033_after.c index fa6c4bb2c9..4face309d7 100644 --- a/src/ov_SC06_033/ov_SC06_033_after.c +++ b/src/ov_SC06_033/ov_SC06_033_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801933AC) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801933AC[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801933AC[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC06_033/ov_SC06_033_jr_8015C32C.c b/src/ov_SC06_033/ov_SC06_033_jr_8015C32C.c index 0ac1ee5746..a6dd850571 100644 --- a/src/ov_SC06_033/ov_SC06_033_jr_8015C32C.c +++ b/src/ov_SC06_033/ov_SC06_033_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC07_000/ov_SC07_000.c b/src/ov_SC07_000/ov_SC07_000.c index 82a1283259..2a732624a9 100644 --- a/src/ov_SC07_000/ov_SC07_000.c +++ b/src/ov_SC07_000/ov_SC07_000.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC07_000/ov_SC07_000_after.c b/src/ov_SC07_000/ov_SC07_000_after.c index d8206579ef..677869eec4 100644 --- a/src/ov_SC07_000/ov_SC07_000_after.c +++ b/src/ov_SC07_000/ov_SC07_000_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801841F4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801841F4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801841F4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC07_000/ov_SC07_000_jr_8015C32C.c b/src/ov_SC07_000/ov_SC07_000_jr_8015C32C.c index de9af44cd9..a7ab7109e0 100644 --- a/src/ov_SC07_000/ov_SC07_000_jr_8015C32C.c +++ b/src/ov_SC07_000/ov_SC07_000_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC07_001/ov_SC07_001.c b/src/ov_SC07_001/ov_SC07_001.c index 286407ee17..144d83b2bb 100644 --- a/src/ov_SC07_001/ov_SC07_001.c +++ b/src/ov_SC07_001/ov_SC07_001.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC07_001/ov_SC07_001_after.c b/src/ov_SC07_001/ov_SC07_001_after.c index da3546060d..58f9ad9f4a 100644 --- a/src/ov_SC07_001/ov_SC07_001_after.c +++ b/src/ov_SC07_001/ov_SC07_001_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801830A4) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_801830A4[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801830A4[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC07_001/ov_SC07_001_jr_8015C32C.c b/src/ov_SC07_001/ov_SC07_001_jr_8015C32C.c index 1411d72181..7cc1c7f73f 100644 --- a/src/ov_SC07_001/ov_SC07_001_jr_8015C32C.c +++ b/src/ov_SC07_001/ov_SC07_001_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC07_002/ov_SC07_002.c b/src/ov_SC07_002/ov_SC07_002.c index 814c03e61b..5a573eb7e0 100644 --- a/src/ov_SC07_002/ov_SC07_002.c +++ b/src/ov_SC07_002/ov_SC07_002.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC07_002/ov_SC07_002_after.c b/src/ov_SC07_002/ov_SC07_002_after.c index 647a18f547..a6b760e8a0 100644 --- a/src/ov_SC07_002/ov_SC07_002_after.c +++ b/src/ov_SC07_002/ov_SC07_002_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80188360) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80188360[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80188360[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8015C32C.c b/src/ov_SC07_002/ov_SC07_002_jr_8015C32C.c index b9856a5959..03ca5595b9 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_8015C32C.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC07_006/ov_SC07_006.c b/src/ov_SC07_006/ov_SC07_006.c index 66a3146f53..c893c22073 100644 --- a/src/ov_SC07_006/ov_SC07_006.c +++ b/src/ov_SC07_006/ov_SC07_006.c @@ -706,7 +706,53 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012a2f4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012a304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s32 D_80126B58; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC07_006/ov_SC07_006_jr_80140608.c b/src/ov_SC07_006/ov_SC07_006_jr_80140608.c index 7bcf8bfccd..7bdc61d080 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_80140608.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_80140608.c @@ -3059,7 +3059,33 @@ final: } -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8018BF84) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s16 (*D_8018BF84[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8018BF84[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ @@ -3441,7 +3467,72 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ diff --git a/src/ov_SC07_006/ov_SC07_006_jr_8015C32C.c b/src/ov_SC07_006/ov_SC07_006_jr_8015C32C.c index 05d5979789..0a03cd98be 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_8015C32C.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_8015C32C.c @@ -4955,7 +4955,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC07_007/ov_SC07_007.c b/src/ov_SC07_007/ov_SC07_007.c index 6481fd7229..bc97c53ad0 100644 --- a/src/ov_SC07_007/ov_SC07_007.c +++ b/src/ov_SC07_007/ov_SC07_007.c @@ -669,7 +669,53 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012a2f4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012a304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s32 D_80126B58; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC07_007/ov_SC07_007_jr_80140608.c b/src/ov_SC07_007/ov_SC07_007_jr_80140608.c index efc173bbc9..3f3aa5603d 100644 --- a/src/ov_SC07_007/ov_SC07_007_jr_80140608.c +++ b/src/ov_SC07_007/ov_SC07_007_jr_80140608.c @@ -2915,7 +2915,33 @@ final: } -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80184AA8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s16 (*D_80184AA8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80184AA8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ @@ -3214,7 +3240,72 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80140608", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ diff --git a/src/ov_SC07_007/ov_SC07_007_jr_8015C32C.c b/src/ov_SC07_007/ov_SC07_007_jr_8015C32C.c index e788c0bfdb..3c3bc5afb3 100644 --- a/src/ov_SC07_007/ov_SC07_007_jr_8015C32C.c +++ b/src/ov_SC07_007/ov_SC07_007_jr_8015C32C.c @@ -4761,7 +4761,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC07_008/ov_SC07_008.c b/src/ov_SC07_008/ov_SC07_008.c index a535754b06..b931572fc0 100644 --- a/src/ov_SC07_008/ov_SC07_008.c +++ b/src/ov_SC07_008/ov_SC07_008.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC07_008/ov_SC07_008_after.c b/src/ov_SC07_008/ov_SC07_008_after.c index 73b7dd7003..d0109cd074 100644 --- a/src/ov_SC07_008/ov_SC07_008_after.c +++ b/src/ov_SC07_008/ov_SC07_008_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8017EE78) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8017EE78[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8017EE78[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC07_008/ov_SC07_008_jr_8015C32C.c b/src/ov_SC07_008/ov_SC07_008_jr_8015C32C.c index 9a33ba2d21..4762301aa6 100644 --- a/src/ov_SC07_008/ov_SC07_008_jr_8015C32C.c +++ b/src/ov_SC07_008/ov_SC07_008_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC07_009/ov_SC07_009.c b/src/ov_SC07_009/ov_SC07_009.c index 1af6bb3ec4..b0a2eb2d0e 100644 --- a/src/ov_SC07_009/ov_SC07_009.c +++ b/src/ov_SC07_009/ov_SC07_009.c @@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC07_009/ov_SC07_009_after.c b/src/ov_SC07_009/ov_SC07_009_after.c index db2ee54da0..d75084c8e9 100644 --- a/src/ov_SC07_009/ov_SC07_009_after.c +++ b/src/ov_SC07_009/ov_SC07_009_after.c @@ -757,7 +757,34 @@ final: } -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_8017F91C) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_8017F91C[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_8017F91C[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */ @@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + + extern u8 D_801202A0[]; + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */ diff --git a/src/ov_SC07_009/ov_SC07_009_jr_8015C32C.c b/src/ov_SC07_009/ov_SC07_009_jr_8015C32C.c index 8a5aae8b23..f958831d8e 100644 --- a/src/ov_SC07_009/ov_SC07_009_jr_8015C32C.c +++ b/src/ov_SC07_009/ov_SC07_009_jr_8015C32C.c @@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC07_010/ov_SC07_010.c b/src/ov_SC07_010/ov_SC07_010.c index 4453542338..f73fc178ef 100644 --- a/src/ov_SC07_010/ov_SC07_010.c +++ b/src/ov_SC07_010/ov_SC07_010.c @@ -669,7 +669,53 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012a2f4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012a304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s32 D_80126B58; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC07_010/ov_SC07_010_jr_80140608.c b/src/ov_SC07_010/ov_SC07_010_jr_80140608.c index ea7aebe780..ee0a6a8e4c 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_80140608.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_80140608.c @@ -2403,7 +2403,34 @@ final: } -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80183B38) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80183B38[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80183B38[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ @@ -2719,7 +2746,72 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_80140608", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ diff --git a/src/ov_SC07_010/ov_SC07_010_jr_8015C32C.c b/src/ov_SC07_010/ov_SC07_010_jr_8015C32C.c index 42fe373537..7a5736d95e 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_8015C32C.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_8015C32C.c @@ -4181,7 +4181,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */ diff --git a/src/ov_SC07_011/ov_SC07_011.c b/src/ov_SC07_011/ov_SC07_011.c index eb94137817..f56f35f97f 100644 --- a/src/ov_SC07_011/ov_SC07_011.c +++ b/src/ov_SC07_011/ov_SC07_011.c @@ -669,7 +669,53 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012a2f4 (src/shared) */ DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012a304 (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011", func_8012A328); + + + + + + + + +extern s32 func_80012F74(s32, s32, s32, s32); + +void func_8012A328(void) +{ + + extern s8 D_801152C0; + extern s16 D_801152C2; + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + extern s32 D_80126B58; + extern s16 D_80127080; + extern s16 D_80126CAE; + typedef struct { + u8 pad[0x154]; + u16 f154; + s16 f156; + u16 f158; + } Obj_80126B58; + Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58; + s16 *q; + s32 a, b; + if (*(u8 *)&D_801152C0 != 0) { + a = D_80127080; b = D_80126CAE; + if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) { + q = &D_80126942; + *q = func_80012F74(*q, p->f156, 4, 1); + } else { + q = &D_80126942; + *q = func_80012F74(*q, D_80127080, 4, 1); + } + } else { + s16 *r = &D_80126942; + *r = func_80012F74(*r, D_80126CAE, 4, 1); + } + D_80126940 = p->f154; + D_80126944 = p->f158; +} + DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */ diff --git a/src/ov_SC07_011/ov_SC07_011_jr_80140608.c b/src/ov_SC07_011/ov_SC07_011_jr_80140608.c index 5781671869..b25a31f666 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_80140608.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_80140608.c @@ -2917,7 +2917,33 @@ final: } -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_80148E54); + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_801801F8) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s16 (*D_801801F8[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_801801F8[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ @@ -3216,7 +3242,72 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80140608", func_8014A738); + + + + + + + + +extern s32 func_80029178(s32); + +s32 func_8014A738(void *arg0) { + typedef struct { + s16 vx; + s16 vy; + s16 vz; + s16 pad; + } Vec_8014A738; + typedef struct { + u8 pad0[6]; + u16 x; + u8 pad8[6]; + u16 z; + u8 pad10[0xB1]; + u8 state; + u8 padC2[0x4A]; + } Ent_801202A0; + Vec_8014A738 d; + u32 i; + Ent_801202A0 *base; + + if ((func_80029178(0x83) & 0xFF) == 0) { + return 0; + } + base = (Ent_801202A0 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (base[i].state == 7) { + d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x; + d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z; + if (d.vx >= 0) { + if (d.vx < 0x40) { + goto zcheck; + } + } else { + if (-d.vx < 0x40) { + goto zcheck; + } + } + continue; + zcheck: + if (d.vz >= 0) { + if (d.vz < 0x40) { + goto found; + } + } else { + if (-d.vz < 0x40) { + goto found; + } + } + continue; + found: + return 1; + } + } + return 0; +} + DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ diff --git a/src/ov_SC07_011/ov_SC07_011_jr_8015C32C.c b/src/ov_SC07_011/ov_SC07_011_jr_8015C32C.c index b682a69879..a43d1b130e 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_8015C32C.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_8015C32C.c @@ -4756,7 +4756,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param } -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8015C32C", func_80163534); +extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32); + +void func_80163534(a0, a1, a2, a3, a4, a5) + s32 a0; + u16 a1; + u16 a2; + s32 a3; + u16 a4; + u16 *a5; +{ + + extern s32 D_80115100; + extern s32 D_80115200; + extern s32 D_80115204; + extern s32 D_80115208; + extern u16 D_80126B18[]; + extern u16 D_801270B0[]; + extern u16 D_801270B2; + extern u16 D_801270B4; + extern u16 D_80126B1A[]; + extern u16 D_80126B1C; + extern s32 D_80114EB0; + extern s32 D_80114EC8; + extern s32 D_8011DAF0; + extern s32 D_80115298; + extern s32 D_80126734; + s32 *p = &D_80115200; + + *p = 0; + D_80115204 = 0; + D_80115208 = 0; + + D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0]; + D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1]; + D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2]; + + D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0]; + D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1]; + D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2]; + + *p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18, + (s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100, + (s32)&D_8011DAF0, a3, a4, (s32)&D_80115298, + (s32)&D_80126734); +} + DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */