From af6e70afe892f8ee1c58225aef02bde29ac4cbb1 Mon Sep 17 00:00:00 2001
From: Drew T <50529377+Druthulu@users.noreply.github.com>
Date: Sun, 19 Jul 2026 00:05:52 -0600
Subject: [PATCH] feat(phase-29 crack-wave): func_8016D1D8 + func_8016D688
family sweep +274 (137/137 each)
These reference a per-overlay tail work-buffer whose base address DIFFERS per
overlay (h_seq relocated data). remap_hseq keyed the byte-OFFSET addresses
(D_801D9C21..) not the base symbol D_801D9C20/D_801D9C60 the exemplar C uses, so
it left them unresolved -> 0/137. Per overlay: base = symbol_map[D_801D9C21]-1;
declare dlabel D_ in config/symbols..txt (byte-neutral, re-extract emits
the linker def), remap D_801D9C20->D_ / D_801D9C60->D_. 3 SC07 stragglers
needed the carried ApplyMatrixSV/RotMatrixYXZ externs dropped (TU already declares
them with a different sig -> conflicting types). Each gated whole-overlay byte-identical.
---
config/symbols.ov_SC01_000.txt | 2 +
config/symbols.ov_SC01_001.txt | 2 +
config/symbols.ov_SC01_004.txt | 2 +
config/symbols.ov_SC01_005.txt | 2 +
config/symbols.ov_SC01_006.txt | 2 +
config/symbols.ov_SC01_008.txt | 2 +
config/symbols.ov_SC01_009.txt | 2 +
config/symbols.ov_SC01_074.txt | 2 +
config/symbols.ov_SC01_080.txt | 2 +
config/symbols.ov_SC01_084.txt | 2 +
config/symbols.ov_SC02_000.txt | 2 +
config/symbols.ov_SC02_003.txt | 2 +
config/symbols.ov_SC02_004.txt | 2 +
config/symbols.ov_SC02_005.txt | 2 +
config/symbols.ov_SC02_011.txt | 2 +
config/symbols.ov_SC02_015.txt | 2 +
config/symbols.ov_SC02_016.txt | 2 +
config/symbols.ov_SC02_017.txt | 2 +
config/symbols.ov_SC02_021.txt | 2 +
config/symbols.ov_SC02_026.txt | 2 +
config/symbols.ov_SC02_027.txt | 2 +
config/symbols.ov_SC02_028.txt | 2 +
config/symbols.ov_SC02_031.txt | 2 +
config/symbols.ov_SC02_035.txt | 2 +
config/symbols.ov_SC02_039.txt | 2 +
config/symbols.ov_SC02_041.txt | 2 +
config/symbols.ov_SC03_001.txt | 2 +
config/symbols.ov_SC03_002.txt | 2 +
config/symbols.ov_SC03_003.txt | 2 +
config/symbols.ov_SC03_006.txt | 2 +
config/symbols.ov_SC03_007.txt | 2 +
config/symbols.ov_SC03_010.txt | 2 +
config/symbols.ov_SC03_011.txt | 2 +
config/symbols.ov_SC03_012.txt | 2 +
config/symbols.ov_SC03_013.txt | 2 +
config/symbols.ov_SC03_014.txt | 2 +
config/symbols.ov_SC03_015.txt | 2 +
config/symbols.ov_SC03_023.txt | 2 +
config/symbols.ov_SC03_024.txt | 2 +
config/symbols.ov_SC03_028.txt | 2 +
config/symbols.ov_SC03_029.txt | 2 +
config/symbols.ov_SC03_030.txt | 2 +
config/symbols.ov_SC03_031.txt | 2 +
config/symbols.ov_SC03_089.txt | 2 +
config/symbols.ov_SC03_090.txt | 2 +
config/symbols.ov_SC03_091.txt | 2 +
config/symbols.ov_SC03_092.txt | 2 +
config/symbols.ov_SC03_093.txt | 2 +
config/symbols.ov_SC03_094.txt | 2 +
config/symbols.ov_SC03_095.txt | 2 +
config/symbols.ov_SC03_096.txt | 2 +
config/symbols.ov_SC03_097.txt | 2 +
config/symbols.ov_SC03_098.txt | 2 +
config/symbols.ov_SC03_099.txt | 2 +
config/symbols.ov_SC03_100.txt | 2 +
config/symbols.ov_SC03_101.txt | 2 +
config/symbols.ov_SC03_102.txt | 2 +
config/symbols.ov_SC03_103.txt | 2 +
config/symbols.ov_SC03_104.txt | 2 +
config/symbols.ov_SC03_105.txt | 2 +
config/symbols.ov_SC03_108.txt | 2 +
config/symbols.ov_SC03_109.txt | 2 +
config/symbols.ov_SC03_110.txt | 2 +
config/symbols.ov_SC03_111.txt | 2 +
config/symbols.ov_SC03_112.txt | 2 +
config/symbols.ov_SC03_113.txt | 2 +
config/symbols.ov_SC03_114.txt | 2 +
config/symbols.ov_SC03_115.txt | 2 +
config/symbols.ov_SC03_116.txt | 2 +
config/symbols.ov_SC03_117.txt | 2 +
config/symbols.ov_SC03_118.txt | 2 +
config/symbols.ov_SC03_119.txt | 2 +
config/symbols.ov_SC03_121.txt | 2 +
config/symbols.ov_SC03_124.txt | 2 +
config/symbols.ov_SC03_125.txt | 2 +
config/symbols.ov_SC03_126.txt | 2 +
config/symbols.ov_SC04_000.txt | 2 +
config/symbols.ov_SC04_002.txt | 2 +
config/symbols.ov_SC04_003.txt | 2 +
config/symbols.ov_SC04_004.txt | 2 +
config/symbols.ov_SC04_005.txt | 2 +
config/symbols.ov_SC04_006.txt | 2 +
config/symbols.ov_SC04_007.txt | 2 +
config/symbols.ov_SC04_008.txt | 2 +
config/symbols.ov_SC04_009.txt | 2 +
config/symbols.ov_SC04_010.txt | 2 +
config/symbols.ov_SC04_011.txt | 2 +
config/symbols.ov_SC04_012.txt | 2 +
config/symbols.ov_SC04_015.txt | 2 +
config/symbols.ov_SC04_016.txt | 2 +
config/symbols.ov_SC04_018.txt | 2 +
config/symbols.ov_SC04_019.txt | 2 +
config/symbols.ov_SC04_020.txt | 2 +
config/symbols.ov_SC04_021.txt | 2 +
config/symbols.ov_SC05_000.txt | 2 +
config/symbols.ov_SC05_001.txt | 2 +
config/symbols.ov_SC05_002.txt | 2 +
config/symbols.ov_SC05_003.txt | 2 +
config/symbols.ov_SC05_004.txt | 2 +
config/symbols.ov_SC05_005.txt | 2 +
config/symbols.ov_SC05_006.txt | 2 +
config/symbols.ov_SC05_007.txt | 2 +
config/symbols.ov_SC05_008.txt | 2 +
config/symbols.ov_SC05_009.txt | 2 +
config/symbols.ov_SC05_010.txt | 2 +
config/symbols.ov_SC05_011.txt | 2 +
config/symbols.ov_SC05_017.txt | 2 +
config/symbols.ov_SC05_018.txt | 2 +
config/symbols.ov_SC05_019.txt | 2 +
config/symbols.ov_SC06_000.txt | 2 +
config/symbols.ov_SC06_006.txt | 2 +
config/symbols.ov_SC06_008.txt | 2 +
config/symbols.ov_SC06_010.txt | 2 +
config/symbols.ov_SC06_011.txt | 2 +
config/symbols.ov_SC06_013.txt | 2 +
config/symbols.ov_SC06_014.txt | 2 +
config/symbols.ov_SC06_015.txt | 2 +
config/symbols.ov_SC06_016.txt | 2 +
config/symbols.ov_SC06_018.txt | 2 +
config/symbols.ov_SC06_020.txt | 2 +
config/symbols.ov_SC06_022.txt | 2 +
config/symbols.ov_SC06_024.txt | 2 +
config/symbols.ov_SC06_025.txt | 2 +
config/symbols.ov_SC06_027.txt | 2 +
config/symbols.ov_SC06_029.txt | 2 +
config/symbols.ov_SC06_030.txt | 2 +
config/symbols.ov_SC06_032.txt | 2 +
config/symbols.ov_SC06_033.txt | 2 +
config/symbols.ov_SC07_000.txt | 2 +
config/symbols.ov_SC07_001.txt | 2 +
config/symbols.ov_SC07_002.txt | 2 +
config/symbols.ov_SC07_006.txt | 2 +
config/symbols.ov_SC07_007.txt | 2 +
config/symbols.ov_SC07_008.txt | 2 +
config/symbols.ov_SC07_009.txt | 2 +
config/symbols.ov_SC07_010.txt | 2 +
config/symbols.ov_SC07_011.txt | 2 +
src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC07_006/ov_SC07_006_jr_8013F350.c | 127 ++++++++++++++++++++-
src/ov_SC07_007/ov_SC07_007_jr_8013F350.c | 127 ++++++++++++++++++++-
src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c | 129 +++++++++++++++++++++-
src/ov_SC07_010/ov_SC07_010_o2b.c | 129 +++++++++++++++++++++-
src/ov_SC07_011/ov_SC07_011_jr_8013F350.c | 127 ++++++++++++++++++++-
274 files changed, 17667 insertions(+), 274 deletions(-)
diff --git a/config/symbols.ov_SC01_000.txt b/config/symbols.ov_SC01_000.txt
index bec5c9959..5515cb06a 100644
--- a/config/symbols.ov_SC01_000.txt
+++ b/config/symbols.ov_SC01_000.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC01_000.txt — overlay SC01/FILE_000 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A58E7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A4B78 = 0x801A4B78; // type:u8
+D_801A4BB8 = 0x801A4BB8; // type:u8
diff --git a/config/symbols.ov_SC01_001.txt b/config/symbols.ov_SC01_001.txt
index 6d8f5a974..15f8ae99a 100644
--- a/config/symbols.ov_SC01_001.txt
+++ b/config/symbols.ov_SC01_001.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC01_001.txt — overlay SC01/FILE_001 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801F31C7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801ECE08 = 0x801ECE08; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801ECE48 = 0x801ECE48; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC01_004.txt b/config/symbols.ov_SC01_004.txt
index e57a3cf28..d5a27dd45 100644
--- a/config/symbols.ov_SC01_004.txt
+++ b/config/symbols.ov_SC01_004.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC01_004.txt — overlay SC01/FILE_004 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801903CF); NEVER merged into config/symbols.us.txt.
// count=0
+D_8018F570 = 0x8018F570; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8018F5B0 = 0x8018F5B0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC01_005.txt b/config/symbols.ov_SC01_005.txt
index 115f588d6..52a93da76 100644
--- a/config/symbols.ov_SC01_005.txt
+++ b/config/symbols.ov_SC01_005.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC01_005.txt — overlay SC01/FILE_005 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801CE061); NEVER merged into config/symbols.us.txt.
// count=0
+D_801CCCD0 = 0x801CCCD0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801CCD10 = 0x801CCD10; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC01_006.txt b/config/symbols.ov_SC01_006.txt
index f1a860a9e..3dd876863 100644
--- a/config/symbols.ov_SC01_006.txt
+++ b/config/symbols.ov_SC01_006.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC01_006.txt — overlay SC01/FILE_006 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801CE061); NEVER merged into config/symbols.us.txt.
// count=0
+D_801CCCD0 = 0x801CCCD0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801CCD10 = 0x801CCD10; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC01_008.txt b/config/symbols.ov_SC01_008.txt
index 3cfe62b99..9010c153f 100644
--- a/config/symbols.ov_SC01_008.txt
+++ b/config/symbols.ov_SC01_008.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC01_008.txt — overlay SC01/FILE_008 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A35DF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A2780 = 0x801A2780; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A27C0 = 0x801A27C0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC01_009.txt b/config/symbols.ov_SC01_009.txt
index 43c03b387..7ac261abf 100644
--- a/config/symbols.ov_SC01_009.txt
+++ b/config/symbols.ov_SC01_009.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC01_009.txt — overlay SC01/FILE_009 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801F345F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801F25E0 = 0x801F25E0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801F2620 = 0x801F2620; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC01_074.txt b/config/symbols.ov_SC01_074.txt
index 0f27977d6..b33b91c59 100644
--- a/config/symbols.ov_SC01_074.txt
+++ b/config/symbols.ov_SC01_074.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC01_074.txt — overlay SC01/FILE_074 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019BD6F); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019B060 = 0x8019B060; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019B0A0 = 0x8019B0A0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC01_080.txt b/config/symbols.ov_SC01_080.txt
index c2304a2dd..4b03742d0 100644
--- a/config/symbols.ov_SC01_080.txt
+++ b/config/symbols.ov_SC01_080.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC01_080.txt — overlay SC01/FILE_080 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C7F4F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C4E90 = 0x801C4E90; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C4ED0 = 0x801C4ED0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC01_084.txt b/config/symbols.ov_SC01_084.txt
index 0796546ac..f944d7625 100644
--- a/config/symbols.ov_SC01_084.txt
+++ b/config/symbols.ov_SC01_084.txt
@@ -11,3 +11,5 @@
// different thing in every binary — which is exactly why it belongs HERE and not in a shared
// symbol file (R13/R15). Verified against tools/sig_image.py, the independent oracle.
func_80180000 = 0x80180000;
+D_801C6938 = 0x801C6938; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C6978 = 0x801C6978; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_000.txt b/config/symbols.ov_SC02_000.txt
index 8c64b9fa6..d88dc4c96 100644
--- a/config/symbols.ov_SC02_000.txt
+++ b/config/symbols.ov_SC02_000.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_000.txt — overlay SC02/FILE_000 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801E8867); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E7468 = 0x801E7468; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E74A8 = 0x801E74A8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_003.txt b/config/symbols.ov_SC02_003.txt
index 06efdbbeb..a69c406c7 100644
--- a/config/symbols.ov_SC02_003.txt
+++ b/config/symbols.ov_SC02_003.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_003.txt — overlay SC02/FILE_003 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801E8867); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E7468 = 0x801E7468; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E74A8 = 0x801E74A8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_004.txt b/config/symbols.ov_SC02_004.txt
index ad05b4525..f55635b6b 100644
--- a/config/symbols.ov_SC02_004.txt
+++ b/config/symbols.ov_SC02_004.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_004.txt — overlay SC02/FILE_004 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801963C7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801956B8 = 0x801956B8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801956F8 = 0x801956F8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_005.txt b/config/symbols.ov_SC02_005.txt
index e18cfe759..6817e2c8c 100644
--- a/config/symbols.ov_SC02_005.txt
+++ b/config/symbols.ov_SC02_005.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_005.txt — overlay SC02/FILE_005 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801E4C59); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E3730 = 0x801E3730; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E3770 = 0x801E3770; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_011.txt b/config/symbols.ov_SC02_011.txt
index 24fb99966..995a098b6 100644
--- a/config/symbols.ov_SC02_011.txt
+++ b/config/symbols.ov_SC02_011.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_011.txt — overlay SC02/FILE_011 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801EBA7F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801EA610 = 0x801EA610; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801EA650 = 0x801EA650; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_015.txt b/config/symbols.ov_SC02_015.txt
index fa0e88be8..aee9e1ec8 100644
--- a/config/symbols.ov_SC02_015.txt
+++ b/config/symbols.ov_SC02_015.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_015.txt — overlay SC02/FILE_015 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019069F); NEVER merged into config/symbols.us.txt.
// count=0
+D_8018F790 = 0x8018F790; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8018F7D0 = 0x8018F7D0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_016.txt b/config/symbols.ov_SC02_016.txt
index c0a06b719..0de0c80c0 100644
--- a/config/symbols.ov_SC02_016.txt
+++ b/config/symbols.ov_SC02_016.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_016.txt — overlay SC02/FILE_016 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B4AD7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B33A8 = 0x801B33A8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B33E8 = 0x801B33E8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_017.txt b/config/symbols.ov_SC02_017.txt
index 00f0182b2..788175a44 100644
--- a/config/symbols.ov_SC02_017.txt
+++ b/config/symbols.ov_SC02_017.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_017.txt — overlay SC02/FILE_017 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801EFD37); NEVER merged into config/symbols.us.txt.
// count=0
+D_801EEBD0 = 0x801EEBD0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801EEC10 = 0x801EEC10; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_021.txt b/config/symbols.ov_SC02_021.txt
index c02e1b5f4..83a105b5b 100644
--- a/config/symbols.ov_SC02_021.txt
+++ b/config/symbols.ov_SC02_021.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_021.txt — overlay SC02/FILE_021 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019389F); NEVER merged into config/symbols.us.txt.
// count=0
+D_80192140 = 0x80192140; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80192180 = 0x80192180; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_026.txt b/config/symbols.ov_SC02_026.txt
index a1d39c4a6..b2d2b7710 100644
--- a/config/symbols.ov_SC02_026.txt
+++ b/config/symbols.ov_SC02_026.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_026.txt — overlay SC02/FILE_026 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801D02BF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801CF580 = 0x801CF580; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801CF5C0 = 0x801CF5C0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_027.txt b/config/symbols.ov_SC02_027.txt
index 65f0357bb..3867b4621 100644
--- a/config/symbols.ov_SC02_027.txt
+++ b/config/symbols.ov_SC02_027.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_027.txt — overlay SC02/FILE_027 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801DAA3F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801D92F0 = 0x801D92F0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801D9330 = 0x801D9330; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_028.txt b/config/symbols.ov_SC02_028.txt
index b2bd740ed..a872ef251 100644
--- a/config/symbols.ov_SC02_028.txt
+++ b/config/symbols.ov_SC02_028.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_028.txt — overlay SC02/FILE_028 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801D363F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801D2290 = 0x801D2290; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801D22D0 = 0x801D22D0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_031.txt b/config/symbols.ov_SC02_031.txt
index add58145f..2739d2ac3 100644
--- a/config/symbols.ov_SC02_031.txt
+++ b/config/symbols.ov_SC02_031.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_031.txt — overlay SC02/FILE_031 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B7B0F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B6A08 = 0x801B6A08; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B6A48 = 0x801B6A48; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_035.txt b/config/symbols.ov_SC02_035.txt
index bdfa393cc..fd534453f 100644
--- a/config/symbols.ov_SC02_035.txt
+++ b/config/symbols.ov_SC02_035.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_035.txt — overlay SC02/FILE_035 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801BEA47); NEVER merged into config/symbols.us.txt.
// count=0
+D_801BDD38 = 0x801BDD38; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801BDD78 = 0x801BDD78; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_039.txt b/config/symbols.ov_SC02_039.txt
index 11f303063..d6436ea31 100644
--- a/config/symbols.ov_SC02_039.txt
+++ b/config/symbols.ov_SC02_039.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC02_039.txt — overlay SC02/FILE_039 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A0DFF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A00E8 = 0x801A00E8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A0128 = 0x801A0128; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC02_041.txt b/config/symbols.ov_SC02_041.txt
index a600807fe..a6f6ad3fb 100644
--- a/config/symbols.ov_SC02_041.txt
+++ b/config/symbols.ov_SC02_041.txt
@@ -11,3 +11,5 @@
// different thing in every binary — which is exactly why it belongs HERE and not in a shared
// symbol file (R13/R15). Verified against tools/sig_image.py, the independent oracle.
func_80180000 = 0x80180000;
+D_801B8460 = 0x801B8460; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B84A0 = 0x801B84A0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_001.txt b/config/symbols.ov_SC03_001.txt
index 78aafb052..b8b88d19f 100644
--- a/config/symbols.ov_SC03_001.txt
+++ b/config/symbols.ov_SC03_001.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_001.txt — overlay SC03/FILE_001 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801EF467); NEVER merged into config/symbols.us.txt.
// count=0
+D_801EDAE0 = 0x801EDAE0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801EDB20 = 0x801EDB20; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_002.txt b/config/symbols.ov_SC03_002.txt
index 52815496f..73937013e 100644
--- a/config/symbols.ov_SC03_002.txt
+++ b/config/symbols.ov_SC03_002.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_002.txt — overlay SC03/FILE_002 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801CBB4F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801CAB60 = 0x801CAB60; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801CABA0 = 0x801CABA0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_003.txt b/config/symbols.ov_SC03_003.txt
index 617aa834f..58427ab11 100644
--- a/config/symbols.ov_SC03_003.txt
+++ b/config/symbols.ov_SC03_003.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_003.txt — overlay SC03/FILE_003 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8018FB7D); NEVER merged into config/symbols.us.txt.
// count=0
+D_8018EE68 = 0x8018EE68; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8018EEA8 = 0x8018EEA8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_006.txt b/config/symbols.ov_SC03_006.txt
index a2b72e6f0..f5f91fdad 100644
--- a/config/symbols.ov_SC03_006.txt
+++ b/config/symbols.ov_SC03_006.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_006.txt — overlay SC03/FILE_006 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801F78B7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801F67E0 = 0x801F67E0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801F6820 = 0x801F6820; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_007.txt b/config/symbols.ov_SC03_007.txt
index d60b5c20a..dff8483d3 100644
--- a/config/symbols.ov_SC03_007.txt
+++ b/config/symbols.ov_SC03_007.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_007.txt — overlay SC03/FILE_007 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801EB2C7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E9138 = 0x801E9138; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E9178 = 0x801E9178; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_010.txt b/config/symbols.ov_SC03_010.txt
index 5792b5d09..f1dd61aaf 100644
--- a/config/symbols.ov_SC03_010.txt
+++ b/config/symbols.ov_SC03_010.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_010.txt — overlay SC03/FILE_010 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A01CF); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019F398 = 0x8019F398; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019F3D8 = 0x8019F3D8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_011.txt b/config/symbols.ov_SC03_011.txt
index 895a105f4..d3ba97930 100644
--- a/config/symbols.ov_SC03_011.txt
+++ b/config/symbols.ov_SC03_011.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_011.txt — overlay SC03/FILE_011 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A2403); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A1630 = 0x801A1630; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A1670 = 0x801A1670; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_012.txt b/config/symbols.ov_SC03_012.txt
index 5e124346c..77044a193 100644
--- a/config/symbols.ov_SC03_012.txt
+++ b/config/symbols.ov_SC03_012.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_012.txt — overlay SC03/FILE_012 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019515F); NEVER merged into config/symbols.us.txt.
// count=0
+D_80194450 = 0x80194450; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80194490 = 0x80194490; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_013.txt b/config/symbols.ov_SC03_013.txt
index 226fa4a1b..fba626dbe 100644
--- a/config/symbols.ov_SC03_013.txt
+++ b/config/symbols.ov_SC03_013.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_013.txt — overlay SC03/FILE_013 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801AD557); NEVER merged into config/symbols.us.txt.
// count=0
+D_801AC720 = 0x801AC720; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801AC760 = 0x801AC760; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_014.txt b/config/symbols.ov_SC03_014.txt
index 8e984923a..625f2938b 100644
--- a/config/symbols.ov_SC03_014.txt
+++ b/config/symbols.ov_SC03_014.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_014.txt — overlay SC03/FILE_014 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801EB03F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E9CA0 = 0x801E9CA0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E9CE0 = 0x801E9CE0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_015.txt b/config/symbols.ov_SC03_015.txt
index 2e954285d..a55724dfd 100644
--- a/config/symbols.ov_SC03_015.txt
+++ b/config/symbols.ov_SC03_015.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_015.txt — overlay SC03/FILE_015 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801EB03F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E9CA0 = 0x801E9CA0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E9CE0 = 0x801E9CE0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_023.txt b/config/symbols.ov_SC03_023.txt
index 1d67640e3..c3802d315 100644
--- a/config/symbols.ov_SC03_023.txt
+++ b/config/symbols.ov_SC03_023.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_023.txt — overlay SC03/FILE_023 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x80198D87); NEVER merged into config/symbols.us.txt.
// count=0
+D_80198078 = 0x80198078; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801980B8 = 0x801980B8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_024.txt b/config/symbols.ov_SC03_024.txt
index 008171e7b..844f5f501 100644
--- a/config/symbols.ov_SC03_024.txt
+++ b/config/symbols.ov_SC03_024.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_024.txt — overlay SC03/FILE_024 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C184F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C0610 = 0x801C0610; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C0650 = 0x801C0650; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_028.txt b/config/symbols.ov_SC03_028.txt
index 1bf0c65ff..dd2d48aa4 100644
--- a/config/symbols.ov_SC03_028.txt
+++ b/config/symbols.ov_SC03_028.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_028.txt — overlay SC03/FILE_028 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801EC607); NEVER merged into config/symbols.us.txt.
// count=0
+D_801EA948 = 0x801EA948; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801EA988 = 0x801EA988; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_029.txt b/config/symbols.ov_SC03_029.txt
index 4fa7863d4..c3ca09c85 100644
--- a/config/symbols.ov_SC03_029.txt
+++ b/config/symbols.ov_SC03_029.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_029.txt — overlay SC03/FILE_029 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801D9A47); NEVER merged into config/symbols.us.txt.
// count=0
+D_801D8920 = 0x801D8920; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801D8960 = 0x801D8960; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_030.txt b/config/symbols.ov_SC03_030.txt
index 327c948de..d394eca96 100644
--- a/config/symbols.ov_SC03_030.txt
+++ b/config/symbols.ov_SC03_030.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_030.txt — overlay SC03/FILE_030 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801E1C48); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E0F18 = 0x801E0F18; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E0F58 = 0x801E0F58; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_031.txt b/config/symbols.ov_SC03_031.txt
index d00100c6a..ce7322782 100644
--- a/config/symbols.ov_SC03_031.txt
+++ b/config/symbols.ov_SC03_031.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_031.txt — overlay SC03/FILE_031 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C62A7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C5318 = 0x801C5318; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C5358 = 0x801C5358; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_089.txt b/config/symbols.ov_SC03_089.txt
index 3cef11001..dccef6813 100644
--- a/config/symbols.ov_SC03_089.txt
+++ b/config/symbols.ov_SC03_089.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_089.txt — overlay SC03/FILE_089 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C691F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C5BD0 = 0x801C5BD0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C5C10 = 0x801C5C10; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_090.txt b/config/symbols.ov_SC03_090.txt
index c97257ce6..03da618b6 100644
--- a/config/symbols.ov_SC03_090.txt
+++ b/config/symbols.ov_SC03_090.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_090.txt — overlay SC03/FILE_090 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801CBD8F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801CB038 = 0x801CB038; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801CB078 = 0x801CB078; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_091.txt b/config/symbols.ov_SC03_091.txt
index 142ed570f..53280c428 100644
--- a/config/symbols.ov_SC03_091.txt
+++ b/config/symbols.ov_SC03_091.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_091.txt — overlay SC03/FILE_091 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801D26DF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801D1708 = 0x801D1708; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801D1748 = 0x801D1748; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_092.txt b/config/symbols.ov_SC03_092.txt
index 3dc24f8cd..4bf26afd0 100644
--- a/config/symbols.ov_SC03_092.txt
+++ b/config/symbols.ov_SC03_092.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_092.txt — overlay SC03/FILE_092 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B3087); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B22D0 = 0x801B22D0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B2310 = 0x801B2310; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_093.txt b/config/symbols.ov_SC03_093.txt
index 1882ae798..7be891687 100644
--- a/config/symbols.ov_SC03_093.txt
+++ b/config/symbols.ov_SC03_093.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_093.txt — overlay SC03/FILE_093 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801CC6DF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801CB740 = 0x801CB740; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801CB780 = 0x801CB780; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_094.txt b/config/symbols.ov_SC03_094.txt
index 919d034ca..2b5f71b65 100644
--- a/config/symbols.ov_SC03_094.txt
+++ b/config/symbols.ov_SC03_094.txt
@@ -11,3 +11,5 @@
// different thing in every binary — which is exactly why it belongs HERE and not in a shared
// symbol file (R13/R15). Verified against tools/sig_image.py, the independent oracle.
func_80180000 = 0x80180000;
+D_801D2580 = 0x801D2580; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801D25C0 = 0x801D25C0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_095.txt b/config/symbols.ov_SC03_095.txt
index 28dbcbb70..bf3bf7216 100644
--- a/config/symbols.ov_SC03_095.txt
+++ b/config/symbols.ov_SC03_095.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_095.txt — overlay SC03/FILE_095 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019BE97); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019B178 = 0x8019B178; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019B1B8 = 0x8019B1B8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_096.txt b/config/symbols.ov_SC03_096.txt
index 8a8c46b54..baffb07f9 100644
--- a/config/symbols.ov_SC03_096.txt
+++ b/config/symbols.ov_SC03_096.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_096.txt — overlay SC03/FILE_096 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019A94F); NEVER merged into config/symbols.us.txt.
// count=0
+D_80199C30 = 0x80199C30; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80199C70 = 0x80199C70; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_097.txt b/config/symbols.ov_SC03_097.txt
index 90f9bdbc7..a93439daf 100644
--- a/config/symbols.ov_SC03_097.txt
+++ b/config/symbols.ov_SC03_097.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_097.txt — overlay SC03/FILE_097 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801AAECF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A9CB8 = 0x801A9CB8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A9CF8 = 0x801A9CF8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_098.txt b/config/symbols.ov_SC03_098.txt
index f9f9389cb..70ebc3c7d 100644
--- a/config/symbols.ov_SC03_098.txt
+++ b/config/symbols.ov_SC03_098.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_098.txt — overlay SC03/FILE_098 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C58B7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C4928 = 0x801C4928; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C4968 = 0x801C4968; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_099.txt b/config/symbols.ov_SC03_099.txt
index 57ec991fc..cd8848601 100644
--- a/config/symbols.ov_SC03_099.txt
+++ b/config/symbols.ov_SC03_099.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_099.txt — overlay SC03/FILE_099 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801BF45F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801BE5F8 = 0x801BE5F8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801BE638 = 0x801BE638; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_100.txt b/config/symbols.ov_SC03_100.txt
index 399c9a3e1..45dfeec7a 100644
--- a/config/symbols.ov_SC03_100.txt
+++ b/config/symbols.ov_SC03_100.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_100.txt — overlay SC03/FILE_100 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C8967); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C7880 = 0x801C7880; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C78C0 = 0x801C78C0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_101.txt b/config/symbols.ov_SC03_101.txt
index efd3293ec..cca80b946 100644
--- a/config/symbols.ov_SC03_101.txt
+++ b/config/symbols.ov_SC03_101.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_101.txt — overlay SC03/FILE_101 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019E227); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019D148 = 0x8019D148; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019D188 = 0x8019D188; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_102.txt b/config/symbols.ov_SC03_102.txt
index f3fe27615..df20145db 100644
--- a/config/symbols.ov_SC03_102.txt
+++ b/config/symbols.ov_SC03_102.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_102.txt — overlay SC03/FILE_102 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B9C27); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B8DC0 = 0x801B8DC0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B8E00 = 0x801B8E00; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_103.txt b/config/symbols.ov_SC03_103.txt
index 5e996e91d..d900c7609 100644
--- a/config/symbols.ov_SC03_103.txt
+++ b/config/symbols.ov_SC03_103.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_103.txt — overlay SC03/FILE_103 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C4DD7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C3F78 = 0x801C3F78; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C3FB8 = 0x801C3FB8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_104.txt b/config/symbols.ov_SC03_104.txt
index eddf626a5..1e33ae6d6 100644
--- a/config/symbols.ov_SC03_104.txt
+++ b/config/symbols.ov_SC03_104.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_104.txt — overlay SC03/FILE_104 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C0497); NEVER merged into config/symbols.us.txt.
// count=0
+D_801BF510 = 0x801BF510; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801BF550 = 0x801BF550; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_105.txt b/config/symbols.ov_SC03_105.txt
index 3e18b4e63..db3608315 100644
--- a/config/symbols.ov_SC03_105.txt
+++ b/config/symbols.ov_SC03_105.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_105.txt — overlay SC03/FILE_105 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801BCD1F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B8AA0 = 0x801B8AA0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B8AE0 = 0x801B8AE0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_108.txt b/config/symbols.ov_SC03_108.txt
index 5c35efd75..115b05b31 100644
--- a/config/symbols.ov_SC03_108.txt
+++ b/config/symbols.ov_SC03_108.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_108.txt — overlay SC03/FILE_108 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A1AA7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A0D90 = 0x801A0D90; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A0DD0 = 0x801A0DD0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_109.txt b/config/symbols.ov_SC03_109.txt
index 65d84937d..5ac648ca5 100644
--- a/config/symbols.ov_SC03_109.txt
+++ b/config/symbols.ov_SC03_109.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_109.txt — overlay SC03/FILE_109 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019A4AF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801997A0 = 0x801997A0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801997E0 = 0x801997E0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_110.txt b/config/symbols.ov_SC03_110.txt
index a1f09ca9a..73480fa3f 100644
--- a/config/symbols.ov_SC03_110.txt
+++ b/config/symbols.ov_SC03_110.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_110.txt — overlay SC03/FILE_110 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A24DF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A1548 = 0x801A1548; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A1588 = 0x801A1588; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_111.txt b/config/symbols.ov_SC03_111.txt
index 0ceb50db6..b43073d71 100644
--- a/config/symbols.ov_SC03_111.txt
+++ b/config/symbols.ov_SC03_111.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_111.txt — overlay SC03/FILE_111 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B9B87); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B8A50 = 0x801B8A50; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B8A90 = 0x801B8A90; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_112.txt b/config/symbols.ov_SC03_112.txt
index fb29592a7..af6b363bd 100644
--- a/config/symbols.ov_SC03_112.txt
+++ b/config/symbols.ov_SC03_112.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_112.txt — overlay SC03/FILE_112 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801AD14F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801AC2B0 = 0x801AC2B0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801AC2F0 = 0x801AC2F0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_113.txt b/config/symbols.ov_SC03_113.txt
index 2474b9be5..522c28764 100644
--- a/config/symbols.ov_SC03_113.txt
+++ b/config/symbols.ov_SC03_113.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_113.txt — overlay SC03/FILE_113 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A5CEF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A4E40 = 0x801A4E40; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A4E80 = 0x801A4E80; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_114.txt b/config/symbols.ov_SC03_114.txt
index 175c86708..b015161ea 100644
--- a/config/symbols.ov_SC03_114.txt
+++ b/config/symbols.ov_SC03_114.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_114.txt — overlay SC03/FILE_114 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A9867); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A8AD8 = 0x801A8AD8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A8B18 = 0x801A8B18; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_115.txt b/config/symbols.ov_SC03_115.txt
index dd48de9df..75a50f9fe 100644
--- a/config/symbols.ov_SC03_115.txt
+++ b/config/symbols.ov_SC03_115.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_115.txt — overlay SC03/FILE_115 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019513F); NEVER merged into config/symbols.us.txt.
// count=0
+D_80194430 = 0x80194430; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80194470 = 0x80194470; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_116.txt b/config/symbols.ov_SC03_116.txt
index 74325ef85..fd67198ce 100644
--- a/config/symbols.ov_SC03_116.txt
+++ b/config/symbols.ov_SC03_116.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_116.txt — overlay SC03/FILE_116 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x80197D4F); NEVER merged into config/symbols.us.txt.
// count=0
+D_80196FC0 = 0x80196FC0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80197000 = 0x80197000; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_117.txt b/config/symbols.ov_SC03_117.txt
index 37cbdb0d9..87721817e 100644
--- a/config/symbols.ov_SC03_117.txt
+++ b/config/symbols.ov_SC03_117.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_117.txt — overlay SC03/FILE_117 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801CE947); NEVER merged into config/symbols.us.txt.
// count=0
+D_801CD738 = 0x801CD738; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801CD778 = 0x801CD778; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_118.txt b/config/symbols.ov_SC03_118.txt
index ef601a3d6..406707f34 100644
--- a/config/symbols.ov_SC03_118.txt
+++ b/config/symbols.ov_SC03_118.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_118.txt — overlay SC03/FILE_118 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801D484F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801D3688 = 0x801D3688; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801D36C8 = 0x801D36C8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_119.txt b/config/symbols.ov_SC03_119.txt
index 45782cf53..72397f122 100644
--- a/config/symbols.ov_SC03_119.txt
+++ b/config/symbols.ov_SC03_119.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_119.txt — overlay SC03/FILE_119 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801D484F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801D3688 = 0x801D3688; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801D36C8 = 0x801D36C8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_121.txt b/config/symbols.ov_SC03_121.txt
index cbf114461..7e52395e8 100644
--- a/config/symbols.ov_SC03_121.txt
+++ b/config/symbols.ov_SC03_121.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_121.txt — overlay SC03/FILE_121 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801AEFAF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801AE130 = 0x801AE130; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801AE170 = 0x801AE170; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_124.txt b/config/symbols.ov_SC03_124.txt
index 494f27443..fd69b38d9 100644
--- a/config/symbols.ov_SC03_124.txt
+++ b/config/symbols.ov_SC03_124.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_124.txt — overlay SC03/FILE_124 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801E25E7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E0C58 = 0x801E0C58; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E0C98 = 0x801E0C98; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_125.txt b/config/symbols.ov_SC03_125.txt
index 397294f31..bed72e00b 100644
--- a/config/symbols.ov_SC03_125.txt
+++ b/config/symbols.ov_SC03_125.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_125.txt — overlay SC03/FILE_125 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C453F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C3550 = 0x801C3550; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C3590 = 0x801C3590; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC03_126.txt b/config/symbols.ov_SC03_126.txt
index 2bff9127e..63d97561a 100644
--- a/config/symbols.ov_SC03_126.txt
+++ b/config/symbols.ov_SC03_126.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC03_126.txt — overlay SC03/FILE_126 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8018FB2D); NEVER merged into config/symbols.us.txt.
// count=0
+D_8018EE18 = 0x8018EE18; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8018EE58 = 0x8018EE58; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_000.txt b/config/symbols.ov_SC04_000.txt
index 14b9f0a13..b9ecf2fed 100644
--- a/config/symbols.ov_SC04_000.txt
+++ b/config/symbols.ov_SC04_000.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_000.txt — overlay SC04/FILE_000 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801AB057); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A8EC8 = 0x801A8EC8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A8F08 = 0x801A8F08; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_002.txt b/config/symbols.ov_SC04_002.txt
index e1fcae722..930f1fc88 100644
--- a/config/symbols.ov_SC04_002.txt
+++ b/config/symbols.ov_SC04_002.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_002.txt — overlay SC04/FILE_002 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C1737); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C01D8 = 0x801C01D8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C0218 = 0x801C0218; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_003.txt b/config/symbols.ov_SC04_003.txt
index 14dbcc54d..93fca9d6a 100644
--- a/config/symbols.ov_SC04_003.txt
+++ b/config/symbols.ov_SC04_003.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_003.txt — overlay SC04/FILE_003 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019BBEF); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019AE40 = 0x8019AE40; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019AE80 = 0x8019AE80; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_004.txt b/config/symbols.ov_SC04_004.txt
index 1620522e0..8d615275c 100644
--- a/config/symbols.ov_SC04_004.txt
+++ b/config/symbols.ov_SC04_004.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_004.txt — overlay SC04/FILE_004 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B3C57); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B2C40 = 0x801B2C40; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B2C80 = 0x801B2C80; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_005.txt b/config/symbols.ov_SC04_005.txt
index 30506b000..c795f644e 100644
--- a/config/symbols.ov_SC04_005.txt
+++ b/config/symbols.ov_SC04_005.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_005.txt — overlay SC04/FILE_005 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C232F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C0E18 = 0x801C0E18; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C0E58 = 0x801C0E58; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_006.txt b/config/symbols.ov_SC04_006.txt
index f3299c03d..ce0682f2c 100644
--- a/config/symbols.ov_SC04_006.txt
+++ b/config/symbols.ov_SC04_006.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_006.txt — overlay SC04/FILE_006 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019DDCF); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019D0C0 = 0x8019D0C0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019D100 = 0x8019D100; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_007.txt b/config/symbols.ov_SC04_007.txt
index 2fa412588..2d0dc979f 100644
--- a/config/symbols.ov_SC04_007.txt
+++ b/config/symbols.ov_SC04_007.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_007.txt — overlay SC04/FILE_007 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B5B8F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B4678 = 0x801B4678; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B46B8 = 0x801B46B8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_008.txt b/config/symbols.ov_SC04_008.txt
index 7c0288d11..8547e9136 100644
--- a/config/symbols.ov_SC04_008.txt
+++ b/config/symbols.ov_SC04_008.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_008.txt — overlay SC04/FILE_008 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801934BF); NEVER merged into config/symbols.us.txt.
// count=0
+D_80191350 = 0x80191350; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80191390 = 0x80191390; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_009.txt b/config/symbols.ov_SC04_009.txt
index 43fcea880..30eee3dd1 100644
--- a/config/symbols.ov_SC04_009.txt
+++ b/config/symbols.ov_SC04_009.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_009.txt — overlay SC04/FILE_009 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019826F); NEVER merged into config/symbols.us.txt.
// count=0
+D_80197560 = 0x80197560; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801975A0 = 0x801975A0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_010.txt b/config/symbols.ov_SC04_010.txt
index b960ea072..9823bb3df 100644
--- a/config/symbols.ov_SC04_010.txt
+++ b/config/symbols.ov_SC04_010.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_010.txt — overlay SC04/FILE_010 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8018F747); NEVER merged into config/symbols.us.txt.
// count=0
+D_8018E9F8 = 0x8018E9F8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8018EA38 = 0x8018EA38; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_011.txt b/config/symbols.ov_SC04_011.txt
index 6916b262c..8947117b1 100644
--- a/config/symbols.ov_SC04_011.txt
+++ b/config/symbols.ov_SC04_011.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_011.txt — overlay SC04/FILE_011 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801F16AF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801EE160 = 0x801EE160; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801EE1A0 = 0x801EE1A0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_012.txt b/config/symbols.ov_SC04_012.txt
index faa2a4491..e18cf4307 100644
--- a/config/symbols.ov_SC04_012.txt
+++ b/config/symbols.ov_SC04_012.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_012.txt — overlay SC04/FILE_012 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019323F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801910D0 = 0x801910D0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80191110 = 0x80191110; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_015.txt b/config/symbols.ov_SC04_015.txt
index 3a0beaea1..f80905150 100644
--- a/config/symbols.ov_SC04_015.txt
+++ b/config/symbols.ov_SC04_015.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_015.txt — overlay SC04/FILE_015 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C93DF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C7DB8 = 0x801C7DB8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C7DF8 = 0x801C7DF8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_016.txt b/config/symbols.ov_SC04_016.txt
index cf2bddbdc..58d7e37fc 100644
--- a/config/symbols.ov_SC04_016.txt
+++ b/config/symbols.ov_SC04_016.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_016.txt — overlay SC04/FILE_016 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801AC2DF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A5F60 = 0x801A5F60; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A5FA0 = 0x801A5FA0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_018.txt b/config/symbols.ov_SC04_018.txt
index 8faf5c6e2..08fff0cfc 100644
--- a/config/symbols.ov_SC04_018.txt
+++ b/config/symbols.ov_SC04_018.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_018.txt — overlay SC04/FILE_018 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801E7B27); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E61B0 = 0x801E61B0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E61F0 = 0x801E61F0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_019.txt b/config/symbols.ov_SC04_019.txt
index a0325fe3f..bcbc91ba3 100644
--- a/config/symbols.ov_SC04_019.txt
+++ b/config/symbols.ov_SC04_019.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_019.txt — overlay SC04/FILE_019 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801E7B27); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E61B0 = 0x801E61B0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E61F0 = 0x801E61F0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_020.txt b/config/symbols.ov_SC04_020.txt
index d35022c84..f72ec9757 100644
--- a/config/symbols.ov_SC04_020.txt
+++ b/config/symbols.ov_SC04_020.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_020.txt — overlay SC04/FILE_020 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801BC7AF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801BB7C0 = 0x801BB7C0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801BB800 = 0x801BB800; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC04_021.txt b/config/symbols.ov_SC04_021.txt
index c13d4d501..57c79b296 100644
--- a/config/symbols.ov_SC04_021.txt
+++ b/config/symbols.ov_SC04_021.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC04_021.txt — overlay SC04/FILE_021 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8018FB2D); NEVER merged into config/symbols.us.txt.
// count=0
+D_8018EE18 = 0x8018EE18; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8018EE58 = 0x8018EE58; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_000.txt b/config/symbols.ov_SC05_000.txt
index 1b35f6f46..fdac3e637 100644
--- a/config/symbols.ov_SC05_000.txt
+++ b/config/symbols.ov_SC05_000.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_000.txt — overlay SC05/FILE_000 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019AC57); NEVER merged into config/symbols.us.txt.
// count=0
+D_80199F48 = 0x80199F48; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80199F88 = 0x80199F88; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_001.txt b/config/symbols.ov_SC05_001.txt
index 4333f8108..8512935fc 100644
--- a/config/symbols.ov_SC05_001.txt
+++ b/config/symbols.ov_SC05_001.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_001.txt — overlay SC05/FILE_001 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B6007); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B5008 = 0x801B5008; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B5048 = 0x801B5048; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_002.txt b/config/symbols.ov_SC05_002.txt
index 4720bc8cc..995b42972 100644
--- a/config/symbols.ov_SC05_002.txt
+++ b/config/symbols.ov_SC05_002.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_002.txt — overlay SC05/FILE_002 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019FFBF); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019F2A8 = 0x8019F2A8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019F2E8 = 0x8019F2E8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_003.txt b/config/symbols.ov_SC05_003.txt
index 6d8da2295..c8cf524b8 100644
--- a/config/symbols.ov_SC05_003.txt
+++ b/config/symbols.ov_SC05_003.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_003.txt — overlay SC05/FILE_003 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801ACACF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801ABDB8 = 0x801ABDB8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801ABDF8 = 0x801ABDF8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_004.txt b/config/symbols.ov_SC05_004.txt
index df8f4712d..8e41392f0 100644
--- a/config/symbols.ov_SC05_004.txt
+++ b/config/symbols.ov_SC05_004.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_004.txt — overlay SC05/FILE_004 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019F327); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019E430 = 0x8019E430; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019E470 = 0x8019E470; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_005.txt b/config/symbols.ov_SC05_005.txt
index d87464a32..6fdab6f8f 100644
--- a/config/symbols.ov_SC05_005.txt
+++ b/config/symbols.ov_SC05_005.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_005.txt — overlay SC05/FILE_005 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B202F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B1098 = 0x801B1098; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B10D8 = 0x801B10D8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_006.txt b/config/symbols.ov_SC05_006.txt
index 7c0a3b74b..e505bc9f6 100644
--- a/config/symbols.ov_SC05_006.txt
+++ b/config/symbols.ov_SC05_006.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_006.txt — overlay SC05/FILE_006 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019015F); NEVER merged into config/symbols.us.txt.
// count=0
+D_8018F1D0 = 0x8018F1D0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8018F210 = 0x8018F210; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_007.txt b/config/symbols.ov_SC05_007.txt
index 24c853a1d..a531485a1 100644
--- a/config/symbols.ov_SC05_007.txt
+++ b/config/symbols.ov_SC05_007.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_007.txt — overlay SC05/FILE_007 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019CEFF); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019C1B0 = 0x8019C1B0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019C1F0 = 0x8019C1F0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_008.txt b/config/symbols.ov_SC05_008.txt
index b7a3cc076..e7ede6e6b 100644
--- a/config/symbols.ov_SC05_008.txt
+++ b/config/symbols.ov_SC05_008.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_008.txt — overlay SC05/FILE_008 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A12EB); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A04E0 = 0x801A04E0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A0520 = 0x801A0520; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_009.txt b/config/symbols.ov_SC05_009.txt
index 172f19b39..9d421bbd9 100644
--- a/config/symbols.ov_SC05_009.txt
+++ b/config/symbols.ov_SC05_009.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_009.txt — overlay SC05/FILE_009 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x80196C47); NEVER merged into config/symbols.us.txt.
// count=0
+D_80195EF0 = 0x80195EF0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80195F30 = 0x80195F30; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_010.txt b/config/symbols.ov_SC05_010.txt
index bbcdcce57..f64e320f2 100644
--- a/config/symbols.ov_SC05_010.txt
+++ b/config/symbols.ov_SC05_010.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_010.txt — overlay SC05/FILE_010 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C802F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C6340 = 0x801C6340; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C6380 = 0x801C6380; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_011.txt b/config/symbols.ov_SC05_011.txt
index dc6df7b82..1a5e1feda 100644
--- a/config/symbols.ov_SC05_011.txt
+++ b/config/symbols.ov_SC05_011.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_011.txt — overlay SC05/FILE_011 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019D1DF); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019C4C8 = 0x8019C4C8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019C508 = 0x8019C508; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_017.txt b/config/symbols.ov_SC05_017.txt
index 8cae13e12..aab8427b1 100644
--- a/config/symbols.ov_SC05_017.txt
+++ b/config/symbols.ov_SC05_017.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_017.txt — overlay SC05/FILE_017 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801ED987); NEVER merged into config/symbols.us.txt.
// count=0
+D_801EC008 = 0x801EC008; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801EC048 = 0x801EC048; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_018.txt b/config/symbols.ov_SC05_018.txt
index 8b3ec2376..78c3cf1e9 100644
--- a/config/symbols.ov_SC05_018.txt
+++ b/config/symbols.ov_SC05_018.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_018.txt — overlay SC05/FILE_018 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801E688F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E5748 = 0x801E5748; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E5788 = 0x801E5788; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC05_019.txt b/config/symbols.ov_SC05_019.txt
index b7fe52398..76177ab0e 100644
--- a/config/symbols.ov_SC05_019.txt
+++ b/config/symbols.ov_SC05_019.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC05_019.txt — overlay SC05/FILE_019 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8018FB2D); NEVER merged into config/symbols.us.txt.
// count=0
+D_8018EE18 = 0x8018EE18; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8018EE58 = 0x8018EE58; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_000.txt b/config/symbols.ov_SC06_000.txt
index 7c33bdf14..fee09c4c3 100644
--- a/config/symbols.ov_SC06_000.txt
+++ b/config/symbols.ov_SC06_000.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_000.txt — overlay SC06/FILE_000 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B2187); NEVER merged into config/symbols.us.txt.
// count=0
+D_801ADA88 = 0x801ADA88; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801ADAC8 = 0x801ADAC8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_006.txt b/config/symbols.ov_SC06_006.txt
index 1026b50ae..de20d4e9c 100644
--- a/config/symbols.ov_SC06_006.txt
+++ b/config/symbols.ov_SC06_006.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_006.txt — overlay SC06/FILE_006 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801F8B67); NEVER merged into config/symbols.us.txt.
// count=0
+D_801F74D0 = 0x801F74D0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801F7510 = 0x801F7510; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_008.txt b/config/symbols.ov_SC06_008.txt
index 35d2eda3a..5f8374984 100644
--- a/config/symbols.ov_SC06_008.txt
+++ b/config/symbols.ov_SC06_008.txt
@@ -11,3 +11,5 @@
// different thing in every binary — which is exactly why it belongs HERE and not in a shared
// symbol file (R13/R15). Verified against tools/sig_image.py, the independent oracle.
func_80180000 = 0x80180000;
+D_801A9450 = 0x801A9450; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A9490 = 0x801A9490; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_010.txt b/config/symbols.ov_SC06_010.txt
index 03439a51b..e88beb005 100644
--- a/config/symbols.ov_SC06_010.txt
+++ b/config/symbols.ov_SC06_010.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_010.txt — overlay SC06/FILE_010 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B2C7F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B1488 = 0x801B1488; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B14C8 = 0x801B14C8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_011.txt b/config/symbols.ov_SC06_011.txt
index f3913ec54..189c7b1f1 100644
--- a/config/symbols.ov_SC06_011.txt
+++ b/config/symbols.ov_SC06_011.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_011.txt — overlay SC06/FILE_011 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801ABD57); NEVER merged into config/symbols.us.txt.
// count=0
+D_801AB038 = 0x801AB038; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801AB078 = 0x801AB078; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_013.txt b/config/symbols.ov_SC06_013.txt
index 7801f8ca4..ecb5b6832 100644
--- a/config/symbols.ov_SC06_013.txt
+++ b/config/symbols.ov_SC06_013.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_013.txt — overlay SC06/FILE_013 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019AC07); NEVER merged into config/symbols.us.txt.
// count=0
+D_80199EF0 = 0x80199EF0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80199F30 = 0x80199F30; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_014.txt b/config/symbols.ov_SC06_014.txt
index 9f634f8a0..0b67d2e6b 100644
--- a/config/symbols.ov_SC06_014.txt
+++ b/config/symbols.ov_SC06_014.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_014.txt — overlay SC06/FILE_014 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A161F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A08E0 = 0x801A08E0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A0920 = 0x801A0920; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_015.txt b/config/symbols.ov_SC06_015.txt
index e6f31825b..32d359fa9 100644
--- a/config/symbols.ov_SC06_015.txt
+++ b/config/symbols.ov_SC06_015.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_015.txt — overlay SC06/FILE_015 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801949FF); NEVER merged into config/symbols.us.txt.
// count=0
+D_80193CC0 = 0x80193CC0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80193D00 = 0x80193D00; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_016.txt b/config/symbols.ov_SC06_016.txt
index f00d58366..57fb9d003 100644
--- a/config/symbols.ov_SC06_016.txt
+++ b/config/symbols.ov_SC06_016.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_016.txt — overlay SC06/FILE_016 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A026F); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019EA90 = 0x8019EA90; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019EAD0 = 0x8019EAD0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_018.txt b/config/symbols.ov_SC06_018.txt
index add2d468d..4029b6369 100644
--- a/config/symbols.ov_SC06_018.txt
+++ b/config/symbols.ov_SC06_018.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_018.txt — overlay SC06/FILE_018 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801D5B9F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801D4378 = 0x801D4378; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801D43B8 = 0x801D43B8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_020.txt b/config/symbols.ov_SC06_020.txt
index 2975dc07f..c5a211b0e 100644
--- a/config/symbols.ov_SC06_020.txt
+++ b/config/symbols.ov_SC06_020.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_020.txt — overlay SC06/FILE_020 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801BA9EF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B9B90 = 0x801B9B90; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B9BD0 = 0x801B9BD0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_022.txt b/config/symbols.ov_SC06_022.txt
index 0eb9b2582..ea0b707d7 100644
--- a/config/symbols.ov_SC06_022.txt
+++ b/config/symbols.ov_SC06_022.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_022.txt — overlay SC06/FILE_022 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801E226F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E13F8 = 0x801E13F8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E1438 = 0x801E1438; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_024.txt b/config/symbols.ov_SC06_024.txt
index 3751c6caa..e29550473 100644
--- a/config/symbols.ov_SC06_024.txt
+++ b/config/symbols.ov_SC06_024.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_024.txt — overlay SC06/FILE_024 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801E1967); NEVER merged into config/symbols.us.txt.
// count=0
+D_801E0578 = 0x801E0578; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801E05B8 = 0x801E05B8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_025.txt b/config/symbols.ov_SC06_025.txt
index 1951884cf..d69d09912 100644
--- a/config/symbols.ov_SC06_025.txt
+++ b/config/symbols.ov_SC06_025.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_025.txt — overlay SC06/FILE_025 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801B2287); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B0740 = 0x801B0740; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B0780 = 0x801B0780; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_027.txt b/config/symbols.ov_SC06_027.txt
index 9fc3d258b..858a99f17 100644
--- a/config/symbols.ov_SC06_027.txt
+++ b/config/symbols.ov_SC06_027.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_027.txt — overlay SC06/FILE_027 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x8019D42F); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019C718 = 0x8019C718; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019C758 = 0x8019C758; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_029.txt b/config/symbols.ov_SC06_029.txt
index 15741d13d..049786b9d 100644
--- a/config/symbols.ov_SC06_029.txt
+++ b/config/symbols.ov_SC06_029.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_029.txt — overlay SC06/FILE_029 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801E218F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801DC038 = 0x801DC038; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801DC078 = 0x801DC078; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_030.txt b/config/symbols.ov_SC06_030.txt
index 5e418b372..2d2ae7ef4 100644
--- a/config/symbols.ov_SC06_030.txt
+++ b/config/symbols.ov_SC06_030.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_030.txt — overlay SC06/FILE_030 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801BA087); NEVER merged into config/symbols.us.txt.
// count=0
+D_801B9298 = 0x801B9298; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801B92D8 = 0x801B92D8; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_032.txt b/config/symbols.ov_SC06_032.txt
index be2f08699..ad9d29f4c 100644
--- a/config/symbols.ov_SC06_032.txt
+++ b/config/symbols.ov_SC06_032.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_032.txt — overlay SC06/FILE_032 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801D116F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801CF948 = 0x801CF948; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801CF988 = 0x801CF988; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC06_033.txt b/config/symbols.ov_SC06_033.txt
index 3b62c67d4..41d27e9b5 100644
--- a/config/symbols.ov_SC06_033.txt
+++ b/config/symbols.ov_SC06_033.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC06_033.txt — overlay SC06/FILE_033 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801D0FEF); NEVER merged into config/symbols.us.txt.
// count=0
+D_801CFA08 = 0x801CFA08; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801CFA48 = 0x801CFA48; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC07_000.txt b/config/symbols.ov_SC07_000.txt
index f3e891b95..678f5646c 100644
--- a/config/symbols.ov_SC07_000.txt
+++ b/config/symbols.ov_SC07_000.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC07_000.txt — overlay SC07/FILE_000 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801D0CE7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801CEF50 = 0x801CEF50; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801CEF90 = 0x801CEF90; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC07_001.txt b/config/symbols.ov_SC07_001.txt
index 1d10637ab..7bb3bf98b 100644
--- a/config/symbols.ov_SC07_001.txt
+++ b/config/symbols.ov_SC07_001.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC07_001.txt — overlay SC07/FILE_001 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801AAF0F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801AA000 = 0x801AA000; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801AA040 = 0x801AA040; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC07_002.txt b/config/symbols.ov_SC07_002.txt
index 8f990c223..776a125b2 100644
--- a/config/symbols.ov_SC07_002.txt
+++ b/config/symbols.ov_SC07_002.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC07_002.txt — overlay SC07/FILE_002 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A00D7); NEVER merged into config/symbols.us.txt.
// count=0
+D_8019AB50 = 0x8019AB50; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8019AB90 = 0x8019AB90; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC07_006.txt b/config/symbols.ov_SC07_006.txt
index b2ee42ba2..9b36e9560 100644
--- a/config/symbols.ov_SC07_006.txt
+++ b/config/symbols.ov_SC07_006.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC07_006.txt — overlay SC07/FILE_006 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801F636F); NEVER merged into config/symbols.us.txt.
// count=0
+D_801F54F8 = 0x801F54F8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801F5538 = 0x801F5538; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC07_007.txt b/config/symbols.ov_SC07_007.txt
index d142d9af0..0ddb84d1b 100644
--- a/config/symbols.ov_SC07_007.txt
+++ b/config/symbols.ov_SC07_007.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC07_007.txt — overlay SC07/FILE_007 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801C7B37); NEVER merged into config/symbols.us.txt.
// count=0
+D_801C6C60 = 0x801C6C60; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801C6CA0 = 0x801C6CA0; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC07_008.txt b/config/symbols.ov_SC07_008.txt
index 6bfd996be..cf21b472c 100644
--- a/config/symbols.ov_SC07_008.txt
+++ b/config/symbols.ov_SC07_008.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC07_008.txt — overlay SC07/FILE_008 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x80196747); NEVER merged into config/symbols.us.txt.
// count=0
+D_80195A38 = 0x80195A38; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_80195A78 = 0x80195A78; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC07_009.txt b/config/symbols.ov_SC07_009.txt
index 2f0d872f4..1825dd453 100644
--- a/config/symbols.ov_SC07_009.txt
+++ b/config/symbols.ov_SC07_009.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC07_009.txt — overlay SC07/FILE_009 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A3DD7); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A30C8 = 0x801A30C8; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A3108 = 0x801A3108; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC07_010.txt b/config/symbols.ov_SC07_010.txt
index 077a53267..e3e334c8f 100644
--- a/config/symbols.ov_SC07_010.txt
+++ b/config/symbols.ov_SC07_010.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC07_010.txt — overlay SC07/FILE_010 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801A9547); NEVER merged into config/symbols.us.txt.
// count=0
+D_801A7158 = 0x801A7158; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_801A7198 = 0x801A7198; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/config/symbols.ov_SC07_011.txt b/config/symbols.ov_SC07_011.txt
index c733be930..9bf26c081 100644
--- a/config/symbols.ov_SC07_011.txt
+++ b/config/symbols.ov_SC07_011.txt
@@ -1,3 +1,5 @@
// config/symbols.ov_SC07_011.txt — overlay SC07/FILE_011 local symbols (Phase 13+)
// R13/R15: overlay-REGION ONLY (vram 0x80128158..0x801904FF); NEVER merged into config/symbols.us.txt.
// count=0
+D_8018F7F0 = 0x8018F7F0; // type:u8 (Phase-29 func_8016D1D8/688 buf1 base)
+D_8018F830 = 0x8018F830; // type:u8 (Phase-29 func_8016D1D8 buf2 base)
diff --git a/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c b/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c
index 49f88ca65..26413b853 100644
--- a/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c
+++ b/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c
@@ -3026,7 +3026,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A4B78[];
+ extern u8 D_801A4BB8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A4B78[1] = 0xE0;
+ D_801A4B78[2] = 0xE0;
+ D_801A4B78[0] = 0xE0;
+ D_801A4B78[6] = 0;
+ D_801A4B78[5] = 0;
+ D_801A4B78[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A4B78, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A4B78);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A4BB8[1] = 0xE0;
+ D_801A4BB8[2] = 0x20;
+ D_801A4BB8[0] = 0x20;
+ D_801A4BB8[5] = 0;
+ D_801A4BB8[6] = 0;
+ D_801A4BB8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A4BB8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A4BB8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181E9C[])(void);
@@ -3044,7 +3135,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A4B78[];
+ int iVar2;
+ int iVar3;
+
+ D_801A4B78[1] = 0xe0;
+ D_801A4B78[2] = 0xe0;
+ D_801A4B78[0] = 0xe0;
+ D_801A4B78[6] = 0;
+ D_801A4B78[5] = 0;
+ D_801A4B78[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A4B78, 0x28);
+ func_8001CD9C(iVar2, D_801A4B78);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c b/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c
index fe5bb8c0d..a97256c3c 100644
--- a/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c
+++ b/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801ECE08[];
+ extern u8 D_801ECE48[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801ECE08[1] = 0xE0;
+ D_801ECE08[2] = 0xE0;
+ D_801ECE08[0] = 0xE0;
+ D_801ECE08[6] = 0;
+ D_801ECE08[5] = 0;
+ D_801ECE08[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801ECE08, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801ECE08);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801ECE48[1] = 0xE0;
+ D_801ECE48[2] = 0x20;
+ D_801ECE48[0] = 0x20;
+ D_801ECE48[5] = 0;
+ D_801ECE48[6] = 0;
+ D_801ECE48[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801ECE48, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801ECE48);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80186AEC[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801ECE08[];
+ int iVar2;
+ int iVar3;
+
+ D_801ECE08[1] = 0xe0;
+ D_801ECE08[2] = 0xe0;
+ D_801ECE08[0] = 0xe0;
+ D_801ECE08[6] = 0;
+ D_801ECE08[5] = 0;
+ D_801ECE08[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801ECE08, 0x28);
+ func_8001CD9C(iVar2, D_801ECE08);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c b/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c
index 67aa3a570..2c74079f9 100644
--- a/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c
+++ b/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8018F570[];
+ extern u8 D_8018F5B0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8018F570[1] = 0xE0;
+ D_8018F570[2] = 0xE0;
+ D_8018F570[0] = 0xE0;
+ D_8018F570[6] = 0;
+ D_8018F570[5] = 0;
+ D_8018F570[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8018F570, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8018F570);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8018F5B0[1] = 0xE0;
+ D_8018F5B0[2] = 0x20;
+ D_8018F5B0[0] = 0x20;
+ D_8018F5B0[5] = 0;
+ D_8018F5B0[6] = 0;
+ D_8018F5B0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018F5B0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8018F5B0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801824B0[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8018F570[];
+ int iVar2;
+ int iVar3;
+
+ D_8018F570[1] = 0xe0;
+ D_8018F570[2] = 0xe0;
+ D_8018F570[0] = 0xe0;
+ D_8018F570[6] = 0;
+ D_8018F570[5] = 0;
+ D_8018F570[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018F570, 0x28);
+ func_8001CD9C(iVar2, D_8018F570);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c b/src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c
index bfedb1ed8..e1c052797 100644
--- a/src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c
+++ b/src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c
@@ -3025,7 +3025,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801CCCD0[];
+ extern u8 D_801CCD10[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801CCCD0[1] = 0xE0;
+ D_801CCCD0[2] = 0xE0;
+ D_801CCCD0[0] = 0xE0;
+ D_801CCCD0[6] = 0;
+ D_801CCCD0[5] = 0;
+ D_801CCCD0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801CCCD0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801CCCD0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801CCD10[1] = 0xE0;
+ D_801CCD10[2] = 0x20;
+ D_801CCD10[0] = 0x20;
+ D_801CCD10[5] = 0;
+ D_801CCD10[6] = 0;
+ D_801CCD10[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CCD10, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801CCD10);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80185644[])(void);
@@ -3043,7 +3134,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801CCCD0[];
+ int iVar2;
+ int iVar3;
+
+ D_801CCCD0[1] = 0xe0;
+ D_801CCCD0[2] = 0xe0;
+ D_801CCCD0[0] = 0xe0;
+ D_801CCCD0[6] = 0;
+ D_801CCCD0[5] = 0;
+ D_801CCCD0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CCCD0, 0x28);
+ func_8001CD9C(iVar2, D_801CCCD0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c b/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c
index bfa2ca175..21088a156 100644
--- a/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c
+++ b/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c
@@ -3025,7 +3025,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801CCCD0[];
+ extern u8 D_801CCD10[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801CCCD0[1] = 0xE0;
+ D_801CCCD0[2] = 0xE0;
+ D_801CCCD0[0] = 0xE0;
+ D_801CCCD0[6] = 0;
+ D_801CCCD0[5] = 0;
+ D_801CCCD0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801CCCD0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801CCCD0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801CCD10[1] = 0xE0;
+ D_801CCD10[2] = 0x20;
+ D_801CCD10[0] = 0x20;
+ D_801CCD10[5] = 0;
+ D_801CCD10[6] = 0;
+ D_801CCD10[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CCD10, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801CCD10);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80185644[])(void);
@@ -3043,7 +3134,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801CCCD0[];
+ int iVar2;
+ int iVar3;
+
+ D_801CCCD0[1] = 0xe0;
+ D_801CCCD0[2] = 0xe0;
+ D_801CCCD0[0] = 0xe0;
+ D_801CCCD0[6] = 0;
+ D_801CCCD0[5] = 0;
+ D_801CCCD0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CCCD0, 0x28);
+ func_8001CD9C(iVar2, D_801CCCD0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c b/src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c
index cba6f911e..614172b04 100644
--- a/src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c
+++ b/src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A2780[];
+ extern u8 D_801A27C0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A2780[1] = 0xE0;
+ D_801A2780[2] = 0xE0;
+ D_801A2780[0] = 0xE0;
+ D_801A2780[6] = 0;
+ D_801A2780[5] = 0;
+ D_801A2780[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A2780, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A2780);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A27C0[1] = 0xE0;
+ D_801A27C0[2] = 0x20;
+ D_801A27C0[0] = 0x20;
+ D_801A27C0[5] = 0;
+ D_801A27C0[6] = 0;
+ D_801A27C0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A27C0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A27C0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80182A24[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A2780[];
+ int iVar2;
+ int iVar3;
+
+ D_801A2780[1] = 0xe0;
+ D_801A2780[2] = 0xe0;
+ D_801A2780[0] = 0xe0;
+ D_801A2780[6] = 0;
+ D_801A2780[5] = 0;
+ D_801A2780[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A2780, 0x28);
+ func_8001CD9C(iVar2, D_801A2780);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c b/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c
index caf4cd141..35231d7aa 100644
--- a/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c
+++ b/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801F25E0[];
+ extern u8 D_801F2620[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801F25E0[1] = 0xE0;
+ D_801F25E0[2] = 0xE0;
+ D_801F25E0[0] = 0xE0;
+ D_801F25E0[6] = 0;
+ D_801F25E0[5] = 0;
+ D_801F25E0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801F25E0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801F25E0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801F2620[1] = 0xE0;
+ D_801F2620[2] = 0x20;
+ D_801F2620[0] = 0x20;
+ D_801F2620[5] = 0;
+ D_801F2620[6] = 0;
+ D_801F2620[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801F2620, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801F2620);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80185C0C[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801F25E0[];
+ int iVar2;
+ int iVar3;
+
+ D_801F25E0[1] = 0xe0;
+ D_801F25E0[2] = 0xe0;
+ D_801F25E0[0] = 0xe0;
+ D_801F25E0[6] = 0;
+ D_801F25E0[5] = 0;
+ D_801F25E0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801F25E0, 0x28);
+ func_8001CD9C(iVar2, D_801F25E0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c b/src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c
index f77ffb108..3614bb04d 100644
--- a/src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c
+++ b/src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019B060[];
+ extern u8 D_8019B0A0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019B060[1] = 0xE0;
+ D_8019B060[2] = 0xE0;
+ D_8019B060[0] = 0xE0;
+ D_8019B060[6] = 0;
+ D_8019B060[5] = 0;
+ D_8019B060[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019B060, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019B060);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019B0A0[1] = 0xE0;
+ D_8019B0A0[2] = 0x20;
+ D_8019B0A0[0] = 0x20;
+ D_8019B0A0[5] = 0;
+ D_8019B0A0[6] = 0;
+ D_8019B0A0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019B0A0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019B0A0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018188C[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019B060[];
+ int iVar2;
+ int iVar3;
+
+ D_8019B060[1] = 0xe0;
+ D_8019B060[2] = 0xe0;
+ D_8019B060[0] = 0xe0;
+ D_8019B060[6] = 0;
+ D_8019B060[5] = 0;
+ D_8019B060[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019B060, 0x28);
+ func_8001CD9C(iVar2, D_8019B060);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c b/src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c
index 98094a04e..d14b6e2de 100644
--- a/src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c
+++ b/src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C4E90[];
+ extern u8 D_801C4ED0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C4E90[1] = 0xE0;
+ D_801C4E90[2] = 0xE0;
+ D_801C4E90[0] = 0xE0;
+ D_801C4E90[6] = 0;
+ D_801C4E90[5] = 0;
+ D_801C4E90[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C4E90, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C4E90);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C4ED0[1] = 0xE0;
+ D_801C4ED0[2] = 0x20;
+ D_801C4ED0[0] = 0x20;
+ D_801C4ED0[5] = 0;
+ D_801C4ED0[6] = 0;
+ D_801C4ED0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C4ED0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C4ED0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801867EC[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C4E90[];
+ int iVar2;
+ int iVar3;
+
+ D_801C4E90[1] = 0xe0;
+ D_801C4E90[2] = 0xe0;
+ D_801C4E90[0] = 0xe0;
+ D_801C4E90[6] = 0;
+ D_801C4E90[5] = 0;
+ D_801C4E90[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C4E90, 0x28);
+ func_8001CD9C(iVar2, D_801C4E90);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c b/src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c
index 760690824..fb4d4aff1 100644
--- a/src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c
+++ b/src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c
@@ -3025,7 +3025,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C6938[];
+ extern u8 D_801C6978[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C6938[1] = 0xE0;
+ D_801C6938[2] = 0xE0;
+ D_801C6938[0] = 0xE0;
+ D_801C6938[6] = 0;
+ D_801C6938[5] = 0;
+ D_801C6938[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C6938, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C6938);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C6978[1] = 0xE0;
+ D_801C6978[2] = 0x20;
+ D_801C6978[0] = 0x20;
+ D_801C6978[5] = 0;
+ D_801C6978[6] = 0;
+ D_801C6978[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C6978, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C6978);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80189AE0[])(void);
@@ -3043,7 +3134,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C6938[];
+ int iVar2;
+ int iVar3;
+
+ D_801C6938[1] = 0xe0;
+ D_801C6938[2] = 0xe0;
+ D_801C6938[0] = 0xe0;
+ D_801C6938[6] = 0;
+ D_801C6938[5] = 0;
+ D_801C6938[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C6938, 0x28);
+ func_8001CD9C(iVar2, D_801C6938);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c b/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c
index f740d375e..63bfe17a3 100644
--- a/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c
+++ b/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c
@@ -3022,7 +3022,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E7468[];
+ extern u8 D_801E74A8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E7468[1] = 0xE0;
+ D_801E7468[2] = 0xE0;
+ D_801E7468[0] = 0xE0;
+ D_801E7468[6] = 0;
+ D_801E7468[5] = 0;
+ D_801E7468[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E7468, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E7468);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E74A8[1] = 0xE0;
+ D_801E74A8[2] = 0x20;
+ D_801E74A8[0] = 0x20;
+ D_801E74A8[5] = 0;
+ D_801E74A8[6] = 0;
+ D_801E74A8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E74A8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E74A8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018DE90[])(void);
@@ -3040,7 +3131,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E7468[];
+ int iVar2;
+ int iVar3;
+
+ D_801E7468[1] = 0xe0;
+ D_801E7468[2] = 0xe0;
+ D_801E7468[0] = 0xe0;
+ D_801E7468[6] = 0;
+ D_801E7468[5] = 0;
+ D_801E7468[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E7468, 0x28);
+ func_8001CD9C(iVar2, D_801E7468);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c b/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c
index 107b01cdb..814f85eae 100644
--- a/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c
+++ b/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c
@@ -3022,7 +3022,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E7468[];
+ extern u8 D_801E74A8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E7468[1] = 0xE0;
+ D_801E7468[2] = 0xE0;
+ D_801E7468[0] = 0xE0;
+ D_801E7468[6] = 0;
+ D_801E7468[5] = 0;
+ D_801E7468[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E7468, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E7468);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E74A8[1] = 0xE0;
+ D_801E74A8[2] = 0x20;
+ D_801E74A8[0] = 0x20;
+ D_801E74A8[5] = 0;
+ D_801E74A8[6] = 0;
+ D_801E74A8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E74A8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E74A8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018DE90[])(void);
@@ -3040,7 +3131,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E7468[];
+ int iVar2;
+ int iVar3;
+
+ D_801E7468[1] = 0xe0;
+ D_801E7468[2] = 0xe0;
+ D_801E7468[0] = 0xe0;
+ D_801E7468[6] = 0;
+ D_801E7468[5] = 0;
+ D_801E7468[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E7468, 0x28);
+ func_8001CD9C(iVar2, D_801E7468);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c b/src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c
index b528304aa..9026c4846 100644
--- a/src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c
+++ b/src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801956B8[];
+ extern u8 D_801956F8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801956B8[1] = 0xE0;
+ D_801956B8[2] = 0xE0;
+ D_801956B8[0] = 0xE0;
+ D_801956B8[6] = 0;
+ D_801956B8[5] = 0;
+ D_801956B8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801956B8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801956B8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801956F8[1] = 0xE0;
+ D_801956F8[2] = 0x20;
+ D_801956F8[0] = 0x20;
+ D_801956F8[5] = 0;
+ D_801956F8[6] = 0;
+ D_801956F8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801956F8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801956F8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80180F70[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801956B8[];
+ int iVar2;
+ int iVar3;
+
+ D_801956B8[1] = 0xe0;
+ D_801956B8[2] = 0xe0;
+ D_801956B8[0] = 0xe0;
+ D_801956B8[6] = 0;
+ D_801956B8[5] = 0;
+ D_801956B8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801956B8, 0x28);
+ func_8001CD9C(iVar2, D_801956B8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c b/src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c
index 4af376eab..396d0d1b2 100644
--- a/src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c
+++ b/src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c
@@ -3026,7 +3026,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E3730[];
+ extern u8 D_801E3770[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E3730[1] = 0xE0;
+ D_801E3730[2] = 0xE0;
+ D_801E3730[0] = 0xE0;
+ D_801E3730[6] = 0;
+ D_801E3730[5] = 0;
+ D_801E3730[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E3730, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E3730);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E3770[1] = 0xE0;
+ D_801E3770[2] = 0x20;
+ D_801E3770[0] = 0x20;
+ D_801E3770[5] = 0;
+ D_801E3770[6] = 0;
+ D_801E3770[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E3770, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E3770);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80193B74[])(void);
@@ -3044,7 +3135,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E3730[];
+ int iVar2;
+ int iVar3;
+
+ D_801E3730[1] = 0xe0;
+ D_801E3730[2] = 0xe0;
+ D_801E3730[0] = 0xe0;
+ D_801E3730[6] = 0;
+ D_801E3730[5] = 0;
+ D_801E3730[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E3730, 0x28);
+ func_8001CD9C(iVar2, D_801E3730);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c b/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c
index 0112622d4..6a29cd797 100644
--- a/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c
+++ b/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801EA610[];
+ extern u8 D_801EA650[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801EA610[1] = 0xE0;
+ D_801EA610[2] = 0xE0;
+ D_801EA610[0] = 0xE0;
+ D_801EA610[6] = 0;
+ D_801EA610[5] = 0;
+ D_801EA610[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801EA610, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801EA610);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801EA650[1] = 0xE0;
+ D_801EA650[2] = 0x20;
+ D_801EA650[0] = 0x20;
+ D_801EA650[5] = 0;
+ D_801EA650[6] = 0;
+ D_801EA650[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EA650, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801EA650);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80193FC4[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801EA610[];
+ int iVar2;
+ int iVar3;
+
+ D_801EA610[1] = 0xe0;
+ D_801EA610[2] = 0xe0;
+ D_801EA610[0] = 0xe0;
+ D_801EA610[6] = 0;
+ D_801EA610[5] = 0;
+ D_801EA610[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EA610, 0x28);
+ func_8001CD9C(iVar2, D_801EA610);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c b/src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c
index b67109c71..8a651b748 100644
--- a/src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c
+++ b/src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c
@@ -3022,7 +3022,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8018F790[];
+ extern u8 D_8018F7D0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8018F790[1] = 0xE0;
+ D_8018F790[2] = 0xE0;
+ D_8018F790[0] = 0xE0;
+ D_8018F790[6] = 0;
+ D_8018F790[5] = 0;
+ D_8018F790[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8018F790, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8018F790);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8018F7D0[1] = 0xE0;
+ D_8018F7D0[2] = 0x20;
+ D_8018F7D0[0] = 0x20;
+ D_8018F7D0[5] = 0;
+ D_8018F7D0[6] = 0;
+ D_8018F7D0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018F7D0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8018F7D0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801814D8[])(void);
@@ -3040,7 +3131,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8018F790[];
+ int iVar2;
+ int iVar3;
+
+ D_8018F790[1] = 0xe0;
+ D_8018F790[2] = 0xe0;
+ D_8018F790[0] = 0xe0;
+ D_8018F790[6] = 0;
+ D_8018F790[5] = 0;
+ D_8018F790[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018F790, 0x28);
+ func_8001CD9C(iVar2, D_8018F790);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c b/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c
index eab7f1353..f4f0692ac 100644
--- a/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c
+++ b/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B33A8[];
+ extern u8 D_801B33E8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B33A8[1] = 0xE0;
+ D_801B33A8[2] = 0xE0;
+ D_801B33A8[0] = 0xE0;
+ D_801B33A8[6] = 0;
+ D_801B33A8[5] = 0;
+ D_801B33A8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B33A8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B33A8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B33E8[1] = 0xE0;
+ D_801B33E8[2] = 0x20;
+ D_801B33E8[0] = 0x20;
+ D_801B33E8[5] = 0;
+ D_801B33E8[6] = 0;
+ D_801B33E8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B33E8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B33E8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80187710[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B33A8[];
+ int iVar2;
+ int iVar3;
+
+ D_801B33A8[1] = 0xe0;
+ D_801B33A8[2] = 0xe0;
+ D_801B33A8[0] = 0xe0;
+ D_801B33A8[6] = 0;
+ D_801B33A8[5] = 0;
+ D_801B33A8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B33A8, 0x28);
+ func_8001CD9C(iVar2, D_801B33A8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c b/src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c
index 3efc7eba8..c262d3260 100644
--- a/src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c
+++ b/src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801EEBD0[];
+ extern u8 D_801EEC10[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801EEBD0[1] = 0xE0;
+ D_801EEBD0[2] = 0xE0;
+ D_801EEBD0[0] = 0xE0;
+ D_801EEBD0[6] = 0;
+ D_801EEBD0[5] = 0;
+ D_801EEBD0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801EEBD0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801EEBD0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801EEC10[1] = 0xE0;
+ D_801EEC10[2] = 0x20;
+ D_801EEC10[0] = 0x20;
+ D_801EEC10[5] = 0;
+ D_801EEC10[6] = 0;
+ D_801EEC10[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EEC10, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801EEC10);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018D768[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801EEBD0[];
+ int iVar2;
+ int iVar3;
+
+ D_801EEBD0[1] = 0xe0;
+ D_801EEBD0[2] = 0xe0;
+ D_801EEBD0[0] = 0xe0;
+ D_801EEBD0[6] = 0;
+ D_801EEBD0[5] = 0;
+ D_801EEBD0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EEBD0, 0x28);
+ func_8001CD9C(iVar2, D_801EEBD0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c b/src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c
index 0c9d4c674..01515bacf 100644
--- a/src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c
+++ b/src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80192140[];
+ extern u8 D_80192180[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80192140[1] = 0xE0;
+ D_80192140[2] = 0xE0;
+ D_80192140[0] = 0xE0;
+ D_80192140[6] = 0;
+ D_80192140[5] = 0;
+ D_80192140[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80192140, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80192140);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80192180[1] = 0xE0;
+ D_80192180[2] = 0x20;
+ D_80192180[0] = 0x20;
+ D_80192180[5] = 0;
+ D_80192180[6] = 0;
+ D_80192180[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80192180, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80192180);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80182D5C[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80192140[];
+ int iVar2;
+ int iVar3;
+
+ D_80192140[1] = 0xe0;
+ D_80192140[2] = 0xe0;
+ D_80192140[0] = 0xe0;
+ D_80192140[6] = 0;
+ D_80192140[5] = 0;
+ D_80192140[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80192140, 0x28);
+ func_8001CD9C(iVar2, D_80192140);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c b/src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c
index 02fba0255..13b91f6f3 100644
--- a/src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c
+++ b/src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801CF580[];
+ extern u8 D_801CF5C0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801CF580[1] = 0xE0;
+ D_801CF580[2] = 0xE0;
+ D_801CF580[0] = 0xE0;
+ D_801CF580[6] = 0;
+ D_801CF580[5] = 0;
+ D_801CF580[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801CF580, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801CF580);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801CF5C0[1] = 0xE0;
+ D_801CF5C0[2] = 0x20;
+ D_801CF5C0[0] = 0x20;
+ D_801CF5C0[5] = 0;
+ D_801CF5C0[6] = 0;
+ D_801CF5C0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CF5C0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801CF5C0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801893B0[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801CF580[];
+ int iVar2;
+ int iVar3;
+
+ D_801CF580[1] = 0xe0;
+ D_801CF580[2] = 0xe0;
+ D_801CF580[0] = 0xe0;
+ D_801CF580[6] = 0;
+ D_801CF580[5] = 0;
+ D_801CF580[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CF580, 0x28);
+ func_8001CD9C(iVar2, D_801CF580);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c b/src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c
index e513fc488..e034bf877 100644
--- a/src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c
+++ b/src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801D92F0[];
+ extern u8 D_801D9330[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801D92F0[1] = 0xE0;
+ D_801D92F0[2] = 0xE0;
+ D_801D92F0[0] = 0xE0;
+ D_801D92F0[6] = 0;
+ D_801D92F0[5] = 0;
+ D_801D92F0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801D92F0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801D92F0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801D9330[1] = 0xE0;
+ D_801D9330[2] = 0x20;
+ D_801D9330[0] = 0x20;
+ D_801D9330[5] = 0;
+ D_801D9330[6] = 0;
+ D_801D9330[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D9330, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801D9330);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018E4D4[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801D92F0[];
+ int iVar2;
+ int iVar3;
+
+ D_801D92F0[1] = 0xe0;
+ D_801D92F0[2] = 0xe0;
+ D_801D92F0[0] = 0xe0;
+ D_801D92F0[6] = 0;
+ D_801D92F0[5] = 0;
+ D_801D92F0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D92F0, 0x28);
+ func_8001CD9C(iVar2, D_801D92F0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c b/src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c
index 305ff3710..c56200e03 100644
--- a/src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c
+++ b/src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801D2290[];
+ extern u8 D_801D22D0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801D2290[1] = 0xE0;
+ D_801D2290[2] = 0xE0;
+ D_801D2290[0] = 0xE0;
+ D_801D2290[6] = 0;
+ D_801D2290[5] = 0;
+ D_801D2290[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801D2290, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801D2290);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801D22D0[1] = 0xE0;
+ D_801D22D0[2] = 0x20;
+ D_801D22D0[0] = 0x20;
+ D_801D22D0[5] = 0;
+ D_801D22D0[6] = 0;
+ D_801D22D0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D22D0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801D22D0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018E6D8[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801D2290[];
+ int iVar2;
+ int iVar3;
+
+ D_801D2290[1] = 0xe0;
+ D_801D2290[2] = 0xe0;
+ D_801D2290[0] = 0xe0;
+ D_801D2290[6] = 0;
+ D_801D2290[5] = 0;
+ D_801D2290[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D2290, 0x28);
+ func_8001CD9C(iVar2, D_801D2290);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c b/src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c
index 6a3e028ba..837f270d7 100644
--- a/src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c
+++ b/src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B6A08[];
+ extern u8 D_801B6A48[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B6A08[1] = 0xE0;
+ D_801B6A08[2] = 0xE0;
+ D_801B6A08[0] = 0xE0;
+ D_801B6A08[6] = 0;
+ D_801B6A08[5] = 0;
+ D_801B6A08[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B6A08, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B6A08);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B6A48[1] = 0xE0;
+ D_801B6A48[2] = 0x20;
+ D_801B6A48[0] = 0x20;
+ D_801B6A48[5] = 0;
+ D_801B6A48[6] = 0;
+ D_801B6A48[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B6A48, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B6A48);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80187F04[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B6A08[];
+ int iVar2;
+ int iVar3;
+
+ D_801B6A08[1] = 0xe0;
+ D_801B6A08[2] = 0xe0;
+ D_801B6A08[0] = 0xe0;
+ D_801B6A08[6] = 0;
+ D_801B6A08[5] = 0;
+ D_801B6A08[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B6A08, 0x28);
+ func_8001CD9C(iVar2, D_801B6A08);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c b/src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c
index 55f3122ba..2095ad047 100644
--- a/src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c
+++ b/src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801BDD38[];
+ extern u8 D_801BDD78[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801BDD38[1] = 0xE0;
+ D_801BDD38[2] = 0xE0;
+ D_801BDD38[0] = 0xE0;
+ D_801BDD38[6] = 0;
+ D_801BDD38[5] = 0;
+ D_801BDD38[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801BDD38, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801BDD38);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801BDD78[1] = 0xE0;
+ D_801BDD78[2] = 0x20;
+ D_801BDD78[0] = 0x20;
+ D_801BDD78[5] = 0;
+ D_801BDD78[6] = 0;
+ D_801BDD78[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801BDD78, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801BDD78);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80187764[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801BDD38[];
+ int iVar2;
+ int iVar3;
+
+ D_801BDD38[1] = 0xe0;
+ D_801BDD38[2] = 0xe0;
+ D_801BDD38[0] = 0xe0;
+ D_801BDD38[6] = 0;
+ D_801BDD38[5] = 0;
+ D_801BDD38[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801BDD38, 0x28);
+ func_8001CD9C(iVar2, D_801BDD38);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c b/src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c
index ec2fd35c3..b5171a6ee 100644
--- a/src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c
+++ b/src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A00E8[];
+ extern u8 D_801A0128[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A00E8[1] = 0xE0;
+ D_801A00E8[2] = 0xE0;
+ D_801A00E8[0] = 0xE0;
+ D_801A00E8[6] = 0;
+ D_801A00E8[5] = 0;
+ D_801A00E8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A00E8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A00E8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A0128[1] = 0xE0;
+ D_801A0128[2] = 0x20;
+ D_801A0128[0] = 0x20;
+ D_801A0128[5] = 0;
+ D_801A0128[6] = 0;
+ D_801A0128[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A0128, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A0128);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80182390[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A00E8[];
+ int iVar2;
+ int iVar3;
+
+ D_801A00E8[1] = 0xe0;
+ D_801A00E8[2] = 0xe0;
+ D_801A00E8[0] = 0xe0;
+ D_801A00E8[6] = 0;
+ D_801A00E8[5] = 0;
+ D_801A00E8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A00E8, 0x28);
+ func_8001CD9C(iVar2, D_801A00E8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c b/src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c
index 22b506799..894b1012c 100644
--- a/src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c
+++ b/src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B8460[];
+ extern u8 D_801B84A0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B8460[1] = 0xE0;
+ D_801B8460[2] = 0xE0;
+ D_801B8460[0] = 0xE0;
+ D_801B8460[6] = 0;
+ D_801B8460[5] = 0;
+ D_801B8460[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B8460, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B8460);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B84A0[1] = 0xE0;
+ D_801B84A0[2] = 0x20;
+ D_801B84A0[0] = 0x20;
+ D_801B84A0[5] = 0;
+ D_801B84A0[6] = 0;
+ D_801B84A0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B84A0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B84A0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80188060[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B8460[];
+ int iVar2;
+ int iVar3;
+
+ D_801B8460[1] = 0xe0;
+ D_801B8460[2] = 0xe0;
+ D_801B8460[0] = 0xe0;
+ D_801B8460[6] = 0;
+ D_801B8460[5] = 0;
+ D_801B8460[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B8460, 0x28);
+ func_8001CD9C(iVar2, D_801B8460);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c b/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c
index b0a10055d..4cb792757 100644
--- a/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c
+++ b/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801EDAE0[];
+ extern u8 D_801EDB20[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801EDAE0[1] = 0xE0;
+ D_801EDAE0[2] = 0xE0;
+ D_801EDAE0[0] = 0xE0;
+ D_801EDAE0[6] = 0;
+ D_801EDAE0[5] = 0;
+ D_801EDAE0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801EDAE0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801EDAE0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801EDB20[1] = 0xE0;
+ D_801EDB20[2] = 0x20;
+ D_801EDB20[0] = 0x20;
+ D_801EDB20[5] = 0;
+ D_801EDB20[6] = 0;
+ D_801EDB20[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EDB20, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801EDB20);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801907A0[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801EDAE0[];
+ int iVar2;
+ int iVar3;
+
+ D_801EDAE0[1] = 0xe0;
+ D_801EDAE0[2] = 0xe0;
+ D_801EDAE0[0] = 0xe0;
+ D_801EDAE0[6] = 0;
+ D_801EDAE0[5] = 0;
+ D_801EDAE0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EDAE0, 0x28);
+ func_8001CD9C(iVar2, D_801EDAE0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c b/src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c
index e9f45fd2c..f2fbe4580 100644
--- a/src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c
+++ b/src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801CAB60[];
+ extern u8 D_801CABA0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801CAB60[1] = 0xE0;
+ D_801CAB60[2] = 0xE0;
+ D_801CAB60[0] = 0xE0;
+ D_801CAB60[6] = 0;
+ D_801CAB60[5] = 0;
+ D_801CAB60[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801CAB60, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801CAB60);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801CABA0[1] = 0xE0;
+ D_801CABA0[2] = 0x20;
+ D_801CABA0[0] = 0x20;
+ D_801CABA0[5] = 0;
+ D_801CABA0[6] = 0;
+ D_801CABA0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CABA0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801CABA0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80188790[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801CAB60[];
+ int iVar2;
+ int iVar3;
+
+ D_801CAB60[1] = 0xe0;
+ D_801CAB60[2] = 0xe0;
+ D_801CAB60[0] = 0xe0;
+ D_801CAB60[6] = 0;
+ D_801CAB60[5] = 0;
+ D_801CAB60[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CAB60, 0x28);
+ func_8001CD9C(iVar2, D_801CAB60);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c b/src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c
index 58a9ba7ad..8c37b0380 100644
--- a/src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c
+++ b/src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8018EE68[];
+ extern u8 D_8018EEA8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8018EE68[1] = 0xE0;
+ D_8018EE68[2] = 0xE0;
+ D_8018EE68[0] = 0xE0;
+ D_8018EE68[6] = 0;
+ D_8018EE68[5] = 0;
+ D_8018EE68[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8018EE68, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8018EE68);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8018EEA8[1] = 0xE0;
+ D_8018EEA8[2] = 0x20;
+ D_8018EEA8[0] = 0x20;
+ D_8018EEA8[5] = 0;
+ D_8018EEA8[6] = 0;
+ D_8018EEA8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018EEA8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8018EEA8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80182558[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8018EE68[];
+ int iVar2;
+ int iVar3;
+
+ D_8018EE68[1] = 0xe0;
+ D_8018EE68[2] = 0xe0;
+ D_8018EE68[0] = 0xe0;
+ D_8018EE68[6] = 0;
+ D_8018EE68[5] = 0;
+ D_8018EE68[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018EE68, 0x28);
+ func_8001CD9C(iVar2, D_8018EE68);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c b/src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c
index 305f43727..3841a2f8b 100644
--- a/src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c
+++ b/src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801F67E0[];
+ extern u8 D_801F6820[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801F67E0[1] = 0xE0;
+ D_801F67E0[2] = 0xE0;
+ D_801F67E0[0] = 0xE0;
+ D_801F67E0[6] = 0;
+ D_801F67E0[5] = 0;
+ D_801F67E0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801F67E0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801F67E0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801F6820[1] = 0xE0;
+ D_801F6820[2] = 0x20;
+ D_801F6820[0] = 0x20;
+ D_801F6820[5] = 0;
+ D_801F6820[6] = 0;
+ D_801F6820[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801F6820, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801F6820);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018F874[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801F67E0[];
+ int iVar2;
+ int iVar3;
+
+ D_801F67E0[1] = 0xe0;
+ D_801F67E0[2] = 0xe0;
+ D_801F67E0[0] = 0xe0;
+ D_801F67E0[6] = 0;
+ D_801F67E0[5] = 0;
+ D_801F67E0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801F67E0, 0x28);
+ func_8001CD9C(iVar2, D_801F67E0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c b/src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c
index 66bcee71f..80886db9c 100644
--- a/src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c
+++ b/src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E9138[];
+ extern u8 D_801E9178[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E9138[1] = 0xE0;
+ D_801E9138[2] = 0xE0;
+ D_801E9138[0] = 0xE0;
+ D_801E9138[6] = 0;
+ D_801E9138[5] = 0;
+ D_801E9138[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E9138, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E9138);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E9178[1] = 0xE0;
+ D_801E9178[2] = 0x20;
+ D_801E9178[0] = 0x20;
+ D_801E9178[5] = 0;
+ D_801E9178[6] = 0;
+ D_801E9178[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E9178, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E9178);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018A66C[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E9138[];
+ int iVar2;
+ int iVar3;
+
+ D_801E9138[1] = 0xe0;
+ D_801E9138[2] = 0xe0;
+ D_801E9138[0] = 0xe0;
+ D_801E9138[6] = 0;
+ D_801E9138[5] = 0;
+ D_801E9138[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E9138, 0x28);
+ func_8001CD9C(iVar2, D_801E9138);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c b/src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c
index baa748cc7..adfa12f4d 100644
--- a/src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c
+++ b/src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019F398[];
+ extern u8 D_8019F3D8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019F398[1] = 0xE0;
+ D_8019F398[2] = 0xE0;
+ D_8019F398[0] = 0xE0;
+ D_8019F398[6] = 0;
+ D_8019F398[5] = 0;
+ D_8019F398[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019F398, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019F398);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019F3D8[1] = 0xE0;
+ D_8019F3D8[2] = 0x20;
+ D_8019F3D8[0] = 0x20;
+ D_8019F3D8[5] = 0;
+ D_8019F3D8[6] = 0;
+ D_8019F3D8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019F3D8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019F3D8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018318C[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019F398[];
+ int iVar2;
+ int iVar3;
+
+ D_8019F398[1] = 0xe0;
+ D_8019F398[2] = 0xe0;
+ D_8019F398[0] = 0xe0;
+ D_8019F398[6] = 0;
+ D_8019F398[5] = 0;
+ D_8019F398[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019F398, 0x28);
+ func_8001CD9C(iVar2, D_8019F398);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c b/src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c
index cc2060027..6cbae7270 100644
--- a/src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c
+++ b/src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A1630[];
+ extern u8 D_801A1670[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A1630[1] = 0xE0;
+ D_801A1630[2] = 0xE0;
+ D_801A1630[0] = 0xE0;
+ D_801A1630[6] = 0;
+ D_801A1630[5] = 0;
+ D_801A1630[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A1630, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A1630);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A1670[1] = 0xE0;
+ D_801A1670[2] = 0x20;
+ D_801A1670[0] = 0x20;
+ D_801A1670[5] = 0;
+ D_801A1670[6] = 0;
+ D_801A1670[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A1670, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A1670);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801844FC[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A1630[];
+ int iVar2;
+ int iVar3;
+
+ D_801A1630[1] = 0xe0;
+ D_801A1630[2] = 0xe0;
+ D_801A1630[0] = 0xe0;
+ D_801A1630[6] = 0;
+ D_801A1630[5] = 0;
+ D_801A1630[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A1630, 0x28);
+ func_8001CD9C(iVar2, D_801A1630);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c b/src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c
index 98695d441..64e6013ab 100644
--- a/src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c
+++ b/src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80194450[];
+ extern u8 D_80194490[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80194450[1] = 0xE0;
+ D_80194450[2] = 0xE0;
+ D_80194450[0] = 0xE0;
+ D_80194450[6] = 0;
+ D_80194450[5] = 0;
+ D_80194450[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80194450, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80194450);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80194490[1] = 0xE0;
+ D_80194490[2] = 0x20;
+ D_80194490[0] = 0x20;
+ D_80194490[5] = 0;
+ D_80194490[6] = 0;
+ D_80194490[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80194490, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80194490);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801813DC[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80194450[];
+ int iVar2;
+ int iVar3;
+
+ D_80194450[1] = 0xe0;
+ D_80194450[2] = 0xe0;
+ D_80194450[0] = 0xe0;
+ D_80194450[6] = 0;
+ D_80194450[5] = 0;
+ D_80194450[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80194450, 0x28);
+ func_8001CD9C(iVar2, D_80194450);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c b/src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c
index e18986745..191056798 100644
--- a/src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c
+++ b/src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801AC720[];
+ extern u8 D_801AC760[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801AC720[1] = 0xE0;
+ D_801AC720[2] = 0xE0;
+ D_801AC720[0] = 0xE0;
+ D_801AC720[6] = 0;
+ D_801AC720[5] = 0;
+ D_801AC720[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801AC720, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801AC720);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801AC760[1] = 0xE0;
+ D_801AC760[2] = 0x20;
+ D_801AC760[0] = 0x20;
+ D_801AC760[5] = 0;
+ D_801AC760[6] = 0;
+ D_801AC760[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801AC760, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801AC760);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801841C4[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801AC720[];
+ int iVar2;
+ int iVar3;
+
+ D_801AC720[1] = 0xe0;
+ D_801AC720[2] = 0xe0;
+ D_801AC720[0] = 0xe0;
+ D_801AC720[6] = 0;
+ D_801AC720[5] = 0;
+ D_801AC720[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801AC720, 0x28);
+ func_8001CD9C(iVar2, D_801AC720);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c b/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c
index fa41492bd..1199851d3 100644
--- a/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c
+++ b/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E9CA0[];
+ extern u8 D_801E9CE0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E9CA0[1] = 0xE0;
+ D_801E9CA0[2] = 0xE0;
+ D_801E9CA0[0] = 0xE0;
+ D_801E9CA0[6] = 0;
+ D_801E9CA0[5] = 0;
+ D_801E9CA0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E9CA0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E9CA0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E9CE0[1] = 0xE0;
+ D_801E9CE0[2] = 0x20;
+ D_801E9CE0[0] = 0x20;
+ D_801E9CE0[5] = 0;
+ D_801E9CE0[6] = 0;
+ D_801E9CE0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E9CE0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E9CE0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018E800[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E9CA0[];
+ int iVar2;
+ int iVar3;
+
+ D_801E9CA0[1] = 0xe0;
+ D_801E9CA0[2] = 0xe0;
+ D_801E9CA0[0] = 0xe0;
+ D_801E9CA0[6] = 0;
+ D_801E9CA0[5] = 0;
+ D_801E9CA0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E9CA0, 0x28);
+ func_8001CD9C(iVar2, D_801E9CA0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c b/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c
index 61f141f48..6b7217a3b 100644
--- a/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c
+++ b/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E9CA0[];
+ extern u8 D_801E9CE0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E9CA0[1] = 0xE0;
+ D_801E9CA0[2] = 0xE0;
+ D_801E9CA0[0] = 0xE0;
+ D_801E9CA0[6] = 0;
+ D_801E9CA0[5] = 0;
+ D_801E9CA0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E9CA0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E9CA0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E9CE0[1] = 0xE0;
+ D_801E9CE0[2] = 0x20;
+ D_801E9CE0[0] = 0x20;
+ D_801E9CE0[5] = 0;
+ D_801E9CE0[6] = 0;
+ D_801E9CE0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E9CE0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E9CE0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018E800[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E9CA0[];
+ int iVar2;
+ int iVar3;
+
+ D_801E9CA0[1] = 0xe0;
+ D_801E9CA0[2] = 0xe0;
+ D_801E9CA0[0] = 0xe0;
+ D_801E9CA0[6] = 0;
+ D_801E9CA0[5] = 0;
+ D_801E9CA0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E9CA0, 0x28);
+ func_8001CD9C(iVar2, D_801E9CA0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c b/src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c
index 7a02d6186..dde0f5cd3 100644
--- a/src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c
+++ b/src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80198078[];
+ extern u8 D_801980B8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80198078[1] = 0xE0;
+ D_80198078[2] = 0xE0;
+ D_80198078[0] = 0xE0;
+ D_80198078[6] = 0;
+ D_80198078[5] = 0;
+ D_80198078[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80198078, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80198078);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801980B8[1] = 0xE0;
+ D_801980B8[2] = 0x20;
+ D_801980B8[0] = 0x20;
+ D_801980B8[5] = 0;
+ D_801980B8[6] = 0;
+ D_801980B8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801980B8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801980B8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018217C[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80198078[];
+ int iVar2;
+ int iVar3;
+
+ D_80198078[1] = 0xe0;
+ D_80198078[2] = 0xe0;
+ D_80198078[0] = 0xe0;
+ D_80198078[6] = 0;
+ D_80198078[5] = 0;
+ D_80198078[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80198078, 0x28);
+ func_8001CD9C(iVar2, D_80198078);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c b/src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c
index cf07d7532..b4bc07029 100644
--- a/src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c
+++ b/src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C0610[];
+ extern u8 D_801C0650[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C0610[1] = 0xE0;
+ D_801C0610[2] = 0xE0;
+ D_801C0610[0] = 0xE0;
+ D_801C0610[6] = 0;
+ D_801C0610[5] = 0;
+ D_801C0610[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C0610, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C0610);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C0650[1] = 0xE0;
+ D_801C0650[2] = 0x20;
+ D_801C0650[0] = 0x20;
+ D_801C0650[5] = 0;
+ D_801C0650[6] = 0;
+ D_801C0650[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C0650, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C0650);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018A1A0[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C0610[];
+ int iVar2;
+ int iVar3;
+
+ D_801C0610[1] = 0xe0;
+ D_801C0610[2] = 0xe0;
+ D_801C0610[0] = 0xe0;
+ D_801C0610[6] = 0;
+ D_801C0610[5] = 0;
+ D_801C0610[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C0610, 0x28);
+ func_8001CD9C(iVar2, D_801C0610);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c b/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c
index 8e51a23a0..0a7b39a03 100644
--- a/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c
+++ b/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801EA948[];
+ extern u8 D_801EA988[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801EA948[1] = 0xE0;
+ D_801EA948[2] = 0xE0;
+ D_801EA948[0] = 0xE0;
+ D_801EA948[6] = 0;
+ D_801EA948[5] = 0;
+ D_801EA948[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801EA948, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801EA948);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801EA988[1] = 0xE0;
+ D_801EA988[2] = 0x20;
+ D_801EA988[0] = 0x20;
+ D_801EA988[5] = 0;
+ D_801EA988[6] = 0;
+ D_801EA988[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EA988, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801EA988);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018EC6C[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801EA948[];
+ int iVar2;
+ int iVar3;
+
+ D_801EA948[1] = 0xe0;
+ D_801EA948[2] = 0xe0;
+ D_801EA948[0] = 0xe0;
+ D_801EA948[6] = 0;
+ D_801EA948[5] = 0;
+ D_801EA948[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EA948, 0x28);
+ func_8001CD9C(iVar2, D_801EA948);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c b/src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c
index 7e8ef6956..769efaba6 100644
--- a/src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c
+++ b/src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801D8920[];
+ extern u8 D_801D8960[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801D8920[1] = 0xE0;
+ D_801D8920[2] = 0xE0;
+ D_801D8920[0] = 0xE0;
+ D_801D8920[6] = 0;
+ D_801D8920[5] = 0;
+ D_801D8920[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801D8920, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801D8920);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801D8960[1] = 0xE0;
+ D_801D8960[2] = 0x20;
+ D_801D8960[0] = 0x20;
+ D_801D8960[5] = 0;
+ D_801D8960[6] = 0;
+ D_801D8960[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D8960, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801D8960);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018AAA4[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801D8920[];
+ int iVar2;
+ int iVar3;
+
+ D_801D8920[1] = 0xe0;
+ D_801D8920[2] = 0xe0;
+ D_801D8920[0] = 0xe0;
+ D_801D8920[6] = 0;
+ D_801D8920[5] = 0;
+ D_801D8920[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D8920, 0x28);
+ func_8001CD9C(iVar2, D_801D8920);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c b/src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c
index a1ea18d87..b83c3b6e9 100644
--- a/src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c
+++ b/src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E0F18[];
+ extern u8 D_801E0F58[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E0F18[1] = 0xE0;
+ D_801E0F18[2] = 0xE0;
+ D_801E0F18[0] = 0xE0;
+ D_801E0F18[6] = 0;
+ D_801E0F18[5] = 0;
+ D_801E0F18[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E0F18, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E0F18);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E0F58[1] = 0xE0;
+ D_801E0F58[2] = 0x20;
+ D_801E0F58[0] = 0x20;
+ D_801E0F58[5] = 0;
+ D_801E0F58[6] = 0;
+ D_801E0F58[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E0F58, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E0F58);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801850E0[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E0F18[];
+ int iVar2;
+ int iVar3;
+
+ D_801E0F18[1] = 0xe0;
+ D_801E0F18[2] = 0xe0;
+ D_801E0F18[0] = 0xe0;
+ D_801E0F18[6] = 0;
+ D_801E0F18[5] = 0;
+ D_801E0F18[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E0F18, 0x28);
+ func_8001CD9C(iVar2, D_801E0F18);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c b/src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c
index f0f2e4d27..04afbb8ac 100644
--- a/src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c
+++ b/src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C5318[];
+ extern u8 D_801C5358[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C5318[1] = 0xE0;
+ D_801C5318[2] = 0xE0;
+ D_801C5318[0] = 0xE0;
+ D_801C5318[6] = 0;
+ D_801C5318[5] = 0;
+ D_801C5318[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C5318, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C5318);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C5358[1] = 0xE0;
+ D_801C5358[2] = 0x20;
+ D_801C5358[0] = 0x20;
+ D_801C5358[5] = 0;
+ D_801C5358[6] = 0;
+ D_801C5358[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C5358, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C5358);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801855FC[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C5318[];
+ int iVar2;
+ int iVar3;
+
+ D_801C5318[1] = 0xe0;
+ D_801C5318[2] = 0xe0;
+ D_801C5318[0] = 0xe0;
+ D_801C5318[6] = 0;
+ D_801C5318[5] = 0;
+ D_801C5318[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C5318, 0x28);
+ func_8001CD9C(iVar2, D_801C5318);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c b/src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c
index bb94fdb25..c1abb6190 100644
--- a/src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c
+++ b/src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C5BD0[];
+ extern u8 D_801C5C10[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C5BD0[1] = 0xE0;
+ D_801C5BD0[2] = 0xE0;
+ D_801C5BD0[0] = 0xE0;
+ D_801C5BD0[6] = 0;
+ D_801C5BD0[5] = 0;
+ D_801C5BD0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C5BD0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C5BD0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C5C10[1] = 0xE0;
+ D_801C5C10[2] = 0x20;
+ D_801C5C10[0] = 0x20;
+ D_801C5C10[5] = 0;
+ D_801C5C10[6] = 0;
+ D_801C5C10[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C5C10, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C5C10);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018C8F8[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C5BD0[];
+ int iVar2;
+ int iVar3;
+
+ D_801C5BD0[1] = 0xe0;
+ D_801C5BD0[2] = 0xe0;
+ D_801C5BD0[0] = 0xe0;
+ D_801C5BD0[6] = 0;
+ D_801C5BD0[5] = 0;
+ D_801C5BD0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C5BD0, 0x28);
+ func_8001CD9C(iVar2, D_801C5BD0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c b/src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c
index 33c3fb0bf..3e29c7686 100644
--- a/src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c
+++ b/src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801CB038[];
+ extern u8 D_801CB078[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801CB038[1] = 0xE0;
+ D_801CB038[2] = 0xE0;
+ D_801CB038[0] = 0xE0;
+ D_801CB038[6] = 0;
+ D_801CB038[5] = 0;
+ D_801CB038[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801CB038, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801CB038);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801CB078[1] = 0xE0;
+ D_801CB078[2] = 0x20;
+ D_801CB078[0] = 0x20;
+ D_801CB078[5] = 0;
+ D_801CB078[6] = 0;
+ D_801CB078[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CB078, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801CB078);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018ED1C[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801CB038[];
+ int iVar2;
+ int iVar3;
+
+ D_801CB038[1] = 0xe0;
+ D_801CB038[2] = 0xe0;
+ D_801CB038[0] = 0xe0;
+ D_801CB038[6] = 0;
+ D_801CB038[5] = 0;
+ D_801CB038[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CB038, 0x28);
+ func_8001CD9C(iVar2, D_801CB038);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c b/src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c
index 44e1ca095..b67f97e71 100644
--- a/src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c
+++ b/src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801D1708[];
+ extern u8 D_801D1748[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801D1708[1] = 0xE0;
+ D_801D1708[2] = 0xE0;
+ D_801D1708[0] = 0xE0;
+ D_801D1708[6] = 0;
+ D_801D1708[5] = 0;
+ D_801D1708[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801D1708, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801D1708);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801D1748[1] = 0xE0;
+ D_801D1748[2] = 0x20;
+ D_801D1748[0] = 0x20;
+ D_801D1748[5] = 0;
+ D_801D1748[6] = 0;
+ D_801D1748[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D1748, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801D1748);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018FBC4[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801D1708[];
+ int iVar2;
+ int iVar3;
+
+ D_801D1708[1] = 0xe0;
+ D_801D1708[2] = 0xe0;
+ D_801D1708[0] = 0xe0;
+ D_801D1708[6] = 0;
+ D_801D1708[5] = 0;
+ D_801D1708[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D1708, 0x28);
+ func_8001CD9C(iVar2, D_801D1708);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c b/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c
index 97b391c7f..42ac6d80b 100644
--- a/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c
+++ b/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B22D0[];
+ extern u8 D_801B2310[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B22D0[1] = 0xE0;
+ D_801B22D0[2] = 0xE0;
+ D_801B22D0[0] = 0xE0;
+ D_801B22D0[6] = 0;
+ D_801B22D0[5] = 0;
+ D_801B22D0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B22D0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B22D0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B2310[1] = 0xE0;
+ D_801B2310[2] = 0x20;
+ D_801B2310[0] = 0x20;
+ D_801B2310[5] = 0;
+ D_801B2310[6] = 0;
+ D_801B2310[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B2310, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B2310);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80187F94[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B22D0[];
+ int iVar2;
+ int iVar3;
+
+ D_801B22D0[1] = 0xe0;
+ D_801B22D0[2] = 0xe0;
+ D_801B22D0[0] = 0xe0;
+ D_801B22D0[6] = 0;
+ D_801B22D0[5] = 0;
+ D_801B22D0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B22D0, 0x28);
+ func_8001CD9C(iVar2, D_801B22D0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c b/src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c
index db6eb9eaa..96d696f54 100644
--- a/src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c
+++ b/src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801CB740[];
+ extern u8 D_801CB780[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801CB740[1] = 0xE0;
+ D_801CB740[2] = 0xE0;
+ D_801CB740[0] = 0xE0;
+ D_801CB740[6] = 0;
+ D_801CB740[5] = 0;
+ D_801CB740[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801CB740, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801CB740);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801CB780[1] = 0xE0;
+ D_801CB780[2] = 0x20;
+ D_801CB780[0] = 0x20;
+ D_801CB780[5] = 0;
+ D_801CB780[6] = 0;
+ D_801CB780[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CB780, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801CB780);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018916C[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801CB740[];
+ int iVar2;
+ int iVar3;
+
+ D_801CB740[1] = 0xe0;
+ D_801CB740[2] = 0xe0;
+ D_801CB740[0] = 0xe0;
+ D_801CB740[6] = 0;
+ D_801CB740[5] = 0;
+ D_801CB740[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CB740, 0x28);
+ func_8001CD9C(iVar2, D_801CB740);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c b/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c
index 92b08d9ae..a6a271366 100644
--- a/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c
+++ b/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801D2580[];
+ extern u8 D_801D25C0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801D2580[1] = 0xE0;
+ D_801D2580[2] = 0xE0;
+ D_801D2580[0] = 0xE0;
+ D_801D2580[6] = 0;
+ D_801D2580[5] = 0;
+ D_801D2580[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801D2580, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801D2580);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801D25C0[1] = 0xE0;
+ D_801D25C0[2] = 0x20;
+ D_801D25C0[0] = 0x20;
+ D_801D25C0[5] = 0;
+ D_801D25C0[6] = 0;
+ D_801D25C0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D25C0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801D25C0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018AB68[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801D2580[];
+ int iVar2;
+ int iVar3;
+
+ D_801D2580[1] = 0xe0;
+ D_801D2580[2] = 0xe0;
+ D_801D2580[0] = 0xe0;
+ D_801D2580[6] = 0;
+ D_801D2580[5] = 0;
+ D_801D2580[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D2580, 0x28);
+ func_8001CD9C(iVar2, D_801D2580);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c b/src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c
index 20dd4e5cf..d066bdc59 100644
--- a/src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c
+++ b/src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019B178[];
+ extern u8 D_8019B1B8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019B178[1] = 0xE0;
+ D_8019B178[2] = 0xE0;
+ D_8019B178[0] = 0xE0;
+ D_8019B178[6] = 0;
+ D_8019B178[5] = 0;
+ D_8019B178[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019B178, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019B178);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019B1B8[1] = 0xE0;
+ D_8019B1B8[2] = 0x20;
+ D_8019B1B8[0] = 0x20;
+ D_8019B1B8[5] = 0;
+ D_8019B1B8[6] = 0;
+ D_8019B1B8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019B1B8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019B1B8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801841C8[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019B178[];
+ int iVar2;
+ int iVar3;
+
+ D_8019B178[1] = 0xe0;
+ D_8019B178[2] = 0xe0;
+ D_8019B178[0] = 0xe0;
+ D_8019B178[6] = 0;
+ D_8019B178[5] = 0;
+ D_8019B178[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019B178, 0x28);
+ func_8001CD9C(iVar2, D_8019B178);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c b/src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c
index 572c20185..7a8c79602 100644
--- a/src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c
+++ b/src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80199C30[];
+ extern u8 D_80199C70[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80199C30[1] = 0xE0;
+ D_80199C30[2] = 0xE0;
+ D_80199C30[0] = 0xE0;
+ D_80199C30[6] = 0;
+ D_80199C30[5] = 0;
+ D_80199C30[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80199C30, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80199C30);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80199C70[1] = 0xE0;
+ D_80199C70[2] = 0x20;
+ D_80199C70[0] = 0x20;
+ D_80199C70[5] = 0;
+ D_80199C70[6] = 0;
+ D_80199C70[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80199C70, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80199C70);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80183D48[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80199C30[];
+ int iVar2;
+ int iVar3;
+
+ D_80199C30[1] = 0xe0;
+ D_80199C30[2] = 0xe0;
+ D_80199C30[0] = 0xe0;
+ D_80199C30[6] = 0;
+ D_80199C30[5] = 0;
+ D_80199C30[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80199C30, 0x28);
+ func_8001CD9C(iVar2, D_80199C30);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c b/src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c
index 84b80e703..bf8ac2280 100644
--- a/src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c
+++ b/src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A9CB8[];
+ extern u8 D_801A9CF8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A9CB8[1] = 0xE0;
+ D_801A9CB8[2] = 0xE0;
+ D_801A9CB8[0] = 0xE0;
+ D_801A9CB8[6] = 0;
+ D_801A9CB8[5] = 0;
+ D_801A9CB8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A9CB8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A9CB8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A9CF8[1] = 0xE0;
+ D_801A9CF8[2] = 0x20;
+ D_801A9CF8[0] = 0x20;
+ D_801A9CF8[5] = 0;
+ D_801A9CF8[6] = 0;
+ D_801A9CF8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A9CF8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A9CF8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80189128[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A9CB8[];
+ int iVar2;
+ int iVar3;
+
+ D_801A9CB8[1] = 0xe0;
+ D_801A9CB8[2] = 0xe0;
+ D_801A9CB8[0] = 0xe0;
+ D_801A9CB8[6] = 0;
+ D_801A9CB8[5] = 0;
+ D_801A9CB8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A9CB8, 0x28);
+ func_8001CD9C(iVar2, D_801A9CB8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c b/src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c
index b0fdc90fb..15b9dd172 100644
--- a/src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c
+++ b/src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C4928[];
+ extern u8 D_801C4968[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C4928[1] = 0xE0;
+ D_801C4928[2] = 0xE0;
+ D_801C4928[0] = 0xE0;
+ D_801C4928[6] = 0;
+ D_801C4928[5] = 0;
+ D_801C4928[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C4928, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C4928);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C4968[1] = 0xE0;
+ D_801C4968[2] = 0x20;
+ D_801C4968[0] = 0x20;
+ D_801C4968[5] = 0;
+ D_801C4968[6] = 0;
+ D_801C4968[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C4968, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C4968);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801885B4[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C4928[];
+ int iVar2;
+ int iVar3;
+
+ D_801C4928[1] = 0xe0;
+ D_801C4928[2] = 0xe0;
+ D_801C4928[0] = 0xe0;
+ D_801C4928[6] = 0;
+ D_801C4928[5] = 0;
+ D_801C4928[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C4928, 0x28);
+ func_8001CD9C(iVar2, D_801C4928);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c b/src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c
index 541d7a1ee..df5dba6a4 100644
--- a/src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c
+++ b/src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801BE5F8[];
+ extern u8 D_801BE638[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801BE5F8[1] = 0xE0;
+ D_801BE5F8[2] = 0xE0;
+ D_801BE5F8[0] = 0xE0;
+ D_801BE5F8[6] = 0;
+ D_801BE5F8[5] = 0;
+ D_801BE5F8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801BE5F8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801BE5F8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801BE638[1] = 0xE0;
+ D_801BE638[2] = 0x20;
+ D_801BE638[0] = 0x20;
+ D_801BE638[5] = 0;
+ D_801BE638[6] = 0;
+ D_801BE638[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801BE638, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801BE638);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801866B4[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801BE5F8[];
+ int iVar2;
+ int iVar3;
+
+ D_801BE5F8[1] = 0xe0;
+ D_801BE5F8[2] = 0xe0;
+ D_801BE5F8[0] = 0xe0;
+ D_801BE5F8[6] = 0;
+ D_801BE5F8[5] = 0;
+ D_801BE5F8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801BE5F8, 0x28);
+ func_8001CD9C(iVar2, D_801BE5F8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c b/src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c
index cf54144d2..b1023fb3e 100644
--- a/src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c
+++ b/src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C7880[];
+ extern u8 D_801C78C0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C7880[1] = 0xE0;
+ D_801C7880[2] = 0xE0;
+ D_801C7880[0] = 0xE0;
+ D_801C7880[6] = 0;
+ D_801C7880[5] = 0;
+ D_801C7880[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C7880, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C7880);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C78C0[1] = 0xE0;
+ D_801C78C0[2] = 0x20;
+ D_801C78C0[0] = 0x20;
+ D_801C78C0[5] = 0;
+ D_801C78C0[6] = 0;
+ D_801C78C0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C78C0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C78C0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80187B80[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C7880[];
+ int iVar2;
+ int iVar3;
+
+ D_801C7880[1] = 0xe0;
+ D_801C7880[2] = 0xe0;
+ D_801C7880[0] = 0xe0;
+ D_801C7880[6] = 0;
+ D_801C7880[5] = 0;
+ D_801C7880[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C7880, 0x28);
+ func_8001CD9C(iVar2, D_801C7880);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c b/src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c
index d0fad0a55..f0ba60537 100644
--- a/src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c
+++ b/src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019D148[];
+ extern u8 D_8019D188[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019D148[1] = 0xE0;
+ D_8019D148[2] = 0xE0;
+ D_8019D148[0] = 0xE0;
+ D_8019D148[6] = 0;
+ D_8019D148[5] = 0;
+ D_8019D148[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019D148, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019D148);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019D188[1] = 0xE0;
+ D_8019D188[2] = 0x20;
+ D_8019D188[0] = 0x20;
+ D_8019D188[5] = 0;
+ D_8019D188[6] = 0;
+ D_8019D188[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019D188, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019D188);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80186B5C[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019D148[];
+ int iVar2;
+ int iVar3;
+
+ D_8019D148[1] = 0xe0;
+ D_8019D148[2] = 0xe0;
+ D_8019D148[0] = 0xe0;
+ D_8019D148[6] = 0;
+ D_8019D148[5] = 0;
+ D_8019D148[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019D148, 0x28);
+ func_8001CD9C(iVar2, D_8019D148);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c b/src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c
index 4198d0e6a..124b51e13 100644
--- a/src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c
+++ b/src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B8DC0[];
+ extern u8 D_801B8E00[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B8DC0[1] = 0xE0;
+ D_801B8DC0[2] = 0xE0;
+ D_801B8DC0[0] = 0xE0;
+ D_801B8DC0[6] = 0;
+ D_801B8DC0[5] = 0;
+ D_801B8DC0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B8DC0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B8DC0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B8E00[1] = 0xE0;
+ D_801B8E00[2] = 0x20;
+ D_801B8E00[0] = 0x20;
+ D_801B8E00[5] = 0;
+ D_801B8E00[6] = 0;
+ D_801B8E00[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B8E00, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B8E00);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80189414[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B8DC0[];
+ int iVar2;
+ int iVar3;
+
+ D_801B8DC0[1] = 0xe0;
+ D_801B8DC0[2] = 0xe0;
+ D_801B8DC0[0] = 0xe0;
+ D_801B8DC0[6] = 0;
+ D_801B8DC0[5] = 0;
+ D_801B8DC0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B8DC0, 0x28);
+ func_8001CD9C(iVar2, D_801B8DC0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c b/src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c
index 78d8bedd3..916c04188 100644
--- a/src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c
+++ b/src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C3F78[];
+ extern u8 D_801C3FB8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C3F78[1] = 0xE0;
+ D_801C3F78[2] = 0xE0;
+ D_801C3F78[0] = 0xE0;
+ D_801C3F78[6] = 0;
+ D_801C3F78[5] = 0;
+ D_801C3F78[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C3F78, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C3F78);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C3FB8[1] = 0xE0;
+ D_801C3FB8[2] = 0x20;
+ D_801C3FB8[0] = 0x20;
+ D_801C3FB8[5] = 0;
+ D_801C3FB8[6] = 0;
+ D_801C3FB8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C3FB8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C3FB8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801873C4[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C3F78[];
+ int iVar2;
+ int iVar3;
+
+ D_801C3F78[1] = 0xe0;
+ D_801C3F78[2] = 0xe0;
+ D_801C3F78[0] = 0xe0;
+ D_801C3F78[6] = 0;
+ D_801C3F78[5] = 0;
+ D_801C3F78[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C3F78, 0x28);
+ func_8001CD9C(iVar2, D_801C3F78);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c b/src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c
index abcdbbe53..51460d322 100644
--- a/src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c
+++ b/src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801BF510[];
+ extern u8 D_801BF550[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801BF510[1] = 0xE0;
+ D_801BF510[2] = 0xE0;
+ D_801BF510[0] = 0xE0;
+ D_801BF510[6] = 0;
+ D_801BF510[5] = 0;
+ D_801BF510[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801BF510, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801BF510);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801BF550[1] = 0xE0;
+ D_801BF550[2] = 0x20;
+ D_801BF550[0] = 0x20;
+ D_801BF550[5] = 0;
+ D_801BF550[6] = 0;
+ D_801BF550[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801BF550, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801BF550);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018DF54[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801BF510[];
+ int iVar2;
+ int iVar3;
+
+ D_801BF510[1] = 0xe0;
+ D_801BF510[2] = 0xe0;
+ D_801BF510[0] = 0xe0;
+ D_801BF510[6] = 0;
+ D_801BF510[5] = 0;
+ D_801BF510[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801BF510, 0x28);
+ func_8001CD9C(iVar2, D_801BF510);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c b/src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c
index 3f8b433d8..277ee4e3b 100644
--- a/src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c
+++ b/src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B8AA0[];
+ extern u8 D_801B8AE0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B8AA0[1] = 0xE0;
+ D_801B8AA0[2] = 0xE0;
+ D_801B8AA0[0] = 0xE0;
+ D_801B8AA0[6] = 0;
+ D_801B8AA0[5] = 0;
+ D_801B8AA0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B8AA0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B8AA0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B8AE0[1] = 0xE0;
+ D_801B8AE0[2] = 0x20;
+ D_801B8AE0[0] = 0x20;
+ D_801B8AE0[5] = 0;
+ D_801B8AE0[6] = 0;
+ D_801B8AE0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B8AE0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B8AE0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018D5DC[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B8AA0[];
+ int iVar2;
+ int iVar3;
+
+ D_801B8AA0[1] = 0xe0;
+ D_801B8AA0[2] = 0xe0;
+ D_801B8AA0[0] = 0xe0;
+ D_801B8AA0[6] = 0;
+ D_801B8AA0[5] = 0;
+ D_801B8AA0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B8AA0, 0x28);
+ func_8001CD9C(iVar2, D_801B8AA0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c b/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c
index fd14d847d..703597ae2 100644
--- a/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c
+++ b/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A0D90[];
+ extern u8 D_801A0DD0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A0D90[1] = 0xE0;
+ D_801A0D90[2] = 0xE0;
+ D_801A0D90[0] = 0xE0;
+ D_801A0D90[6] = 0;
+ D_801A0D90[5] = 0;
+ D_801A0D90[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A0D90, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A0D90);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A0DD0[1] = 0xE0;
+ D_801A0DD0[2] = 0x20;
+ D_801A0DD0[0] = 0x20;
+ D_801A0DD0[5] = 0;
+ D_801A0DD0[6] = 0;
+ D_801A0DD0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A0DD0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A0DD0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80183F34[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A0D90[];
+ int iVar2;
+ int iVar3;
+
+ D_801A0D90[1] = 0xe0;
+ D_801A0D90[2] = 0xe0;
+ D_801A0D90[0] = 0xe0;
+ D_801A0D90[6] = 0;
+ D_801A0D90[5] = 0;
+ D_801A0D90[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A0D90, 0x28);
+ func_8001CD9C(iVar2, D_801A0D90);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c b/src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c
index 1db0f904d..ba98123e3 100644
--- a/src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c
+++ b/src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801997A0[];
+ extern u8 D_801997E0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801997A0[1] = 0xE0;
+ D_801997A0[2] = 0xE0;
+ D_801997A0[0] = 0xE0;
+ D_801997A0[6] = 0;
+ D_801997A0[5] = 0;
+ D_801997A0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801997A0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801997A0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801997E0[1] = 0xE0;
+ D_801997E0[2] = 0x20;
+ D_801997E0[0] = 0x20;
+ D_801997E0[5] = 0;
+ D_801997E0[6] = 0;
+ D_801997E0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801997E0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801997E0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801815E0[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801997A0[];
+ int iVar2;
+ int iVar3;
+
+ D_801997A0[1] = 0xe0;
+ D_801997A0[2] = 0xe0;
+ D_801997A0[0] = 0xe0;
+ D_801997A0[6] = 0;
+ D_801997A0[5] = 0;
+ D_801997A0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801997A0, 0x28);
+ func_8001CD9C(iVar2, D_801997A0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c b/src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c
index 8183bc76a..2e722270e 100644
--- a/src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c
+++ b/src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A1548[];
+ extern u8 D_801A1588[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A1548[1] = 0xE0;
+ D_801A1548[2] = 0xE0;
+ D_801A1548[0] = 0xE0;
+ D_801A1548[6] = 0;
+ D_801A1548[5] = 0;
+ D_801A1548[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A1548, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A1548);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A1588[1] = 0xE0;
+ D_801A1588[2] = 0x20;
+ D_801A1588[0] = 0x20;
+ D_801A1588[5] = 0;
+ D_801A1588[6] = 0;
+ D_801A1588[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A1588, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A1588);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80185000[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A1548[];
+ int iVar2;
+ int iVar3;
+
+ D_801A1548[1] = 0xe0;
+ D_801A1548[2] = 0xe0;
+ D_801A1548[0] = 0xe0;
+ D_801A1548[6] = 0;
+ D_801A1548[5] = 0;
+ D_801A1548[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A1548, 0x28);
+ func_8001CD9C(iVar2, D_801A1548);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c b/src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c
index 1a928c79c..7b6752af3 100644
--- a/src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c
+++ b/src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c
@@ -3024,7 +3024,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B8A50[];
+ extern u8 D_801B8A90[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B8A50[1] = 0xE0;
+ D_801B8A50[2] = 0xE0;
+ D_801B8A50[0] = 0xE0;
+ D_801B8A50[6] = 0;
+ D_801B8A50[5] = 0;
+ D_801B8A50[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B8A50, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B8A50);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B8A90[1] = 0xE0;
+ D_801B8A90[2] = 0x20;
+ D_801B8A90[0] = 0x20;
+ D_801B8A90[5] = 0;
+ D_801B8A90[6] = 0;
+ D_801B8A90[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B8A90, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B8A90);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80187BB4[])(void);
@@ -3042,7 +3133,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B8A50[];
+ int iVar2;
+ int iVar3;
+
+ D_801B8A50[1] = 0xe0;
+ D_801B8A50[2] = 0xe0;
+ D_801B8A50[0] = 0xe0;
+ D_801B8A50[6] = 0;
+ D_801B8A50[5] = 0;
+ D_801B8A50[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B8A50, 0x28);
+ func_8001CD9C(iVar2, D_801B8A50);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c b/src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c
index 203b8bb0e..8febc99a6 100644
--- a/src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c
+++ b/src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801AC2B0[];
+ extern u8 D_801AC2F0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801AC2B0[1] = 0xE0;
+ D_801AC2B0[2] = 0xE0;
+ D_801AC2B0[0] = 0xE0;
+ D_801AC2B0[6] = 0;
+ D_801AC2B0[5] = 0;
+ D_801AC2B0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801AC2B0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801AC2B0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801AC2F0[1] = 0xE0;
+ D_801AC2F0[2] = 0x20;
+ D_801AC2F0[0] = 0x20;
+ D_801AC2F0[5] = 0;
+ D_801AC2F0[6] = 0;
+ D_801AC2F0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801AC2F0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801AC2F0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801889BC[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801AC2B0[];
+ int iVar2;
+ int iVar3;
+
+ D_801AC2B0[1] = 0xe0;
+ D_801AC2B0[2] = 0xe0;
+ D_801AC2B0[0] = 0xe0;
+ D_801AC2B0[6] = 0;
+ D_801AC2B0[5] = 0;
+ D_801AC2B0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801AC2B0, 0x28);
+ func_8001CD9C(iVar2, D_801AC2B0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c b/src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c
index cd6b91ad7..202885668 100644
--- a/src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c
+++ b/src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A4E40[];
+ extern u8 D_801A4E80[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A4E40[1] = 0xE0;
+ D_801A4E40[2] = 0xE0;
+ D_801A4E40[0] = 0xE0;
+ D_801A4E40[6] = 0;
+ D_801A4E40[5] = 0;
+ D_801A4E40[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A4E40, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A4E40);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A4E80[1] = 0xE0;
+ D_801A4E80[2] = 0x20;
+ D_801A4E80[0] = 0x20;
+ D_801A4E80[5] = 0;
+ D_801A4E80[6] = 0;
+ D_801A4E80[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A4E80, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A4E80);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018606C[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A4E40[];
+ int iVar2;
+ int iVar3;
+
+ D_801A4E40[1] = 0xe0;
+ D_801A4E40[2] = 0xe0;
+ D_801A4E40[0] = 0xe0;
+ D_801A4E40[6] = 0;
+ D_801A4E40[5] = 0;
+ D_801A4E40[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A4E40, 0x28);
+ func_8001CD9C(iVar2, D_801A4E40);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c b/src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c
index e34c7ec94..ba4c87168 100644
--- a/src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c
+++ b/src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A8AD8[];
+ extern u8 D_801A8B18[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A8AD8[1] = 0xE0;
+ D_801A8AD8[2] = 0xE0;
+ D_801A8AD8[0] = 0xE0;
+ D_801A8AD8[6] = 0;
+ D_801A8AD8[5] = 0;
+ D_801A8AD8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A8AD8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A8AD8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A8B18[1] = 0xE0;
+ D_801A8B18[2] = 0x20;
+ D_801A8B18[0] = 0x20;
+ D_801A8B18[5] = 0;
+ D_801A8B18[6] = 0;
+ D_801A8B18[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A8B18, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A8B18);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181CD4[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A8AD8[];
+ int iVar2;
+ int iVar3;
+
+ D_801A8AD8[1] = 0xe0;
+ D_801A8AD8[2] = 0xe0;
+ D_801A8AD8[0] = 0xe0;
+ D_801A8AD8[6] = 0;
+ D_801A8AD8[5] = 0;
+ D_801A8AD8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A8AD8, 0x28);
+ func_8001CD9C(iVar2, D_801A8AD8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c b/src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c
index 9d49cc6f6..dd880ab65 100644
--- a/src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c
+++ b/src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80194430[];
+ extern u8 D_80194470[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80194430[1] = 0xE0;
+ D_80194430[2] = 0xE0;
+ D_80194430[0] = 0xE0;
+ D_80194430[6] = 0;
+ D_80194430[5] = 0;
+ D_80194430[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80194430, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80194430);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80194470[1] = 0xE0;
+ D_80194470[2] = 0x20;
+ D_80194470[0] = 0x20;
+ D_80194470[5] = 0;
+ D_80194470[6] = 0;
+ D_80194470[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80194470, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80194470);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80183740[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80194430[];
+ int iVar2;
+ int iVar3;
+
+ D_80194430[1] = 0xe0;
+ D_80194430[2] = 0xe0;
+ D_80194430[0] = 0xe0;
+ D_80194430[6] = 0;
+ D_80194430[5] = 0;
+ D_80194430[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80194430, 0x28);
+ func_8001CD9C(iVar2, D_80194430);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c b/src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c
index 5491de552..868e8db54 100644
--- a/src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c
+++ b/src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80196FC0[];
+ extern u8 D_80197000[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80196FC0[1] = 0xE0;
+ D_80196FC0[2] = 0xE0;
+ D_80196FC0[0] = 0xE0;
+ D_80196FC0[6] = 0;
+ D_80196FC0[5] = 0;
+ D_80196FC0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80196FC0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80196FC0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80197000[1] = 0xE0;
+ D_80197000[2] = 0x20;
+ D_80197000[0] = 0x20;
+ D_80197000[5] = 0;
+ D_80197000[6] = 0;
+ D_80197000[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80197000, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80197000);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80185B44[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80196FC0[];
+ int iVar2;
+ int iVar3;
+
+ D_80196FC0[1] = 0xe0;
+ D_80196FC0[2] = 0xe0;
+ D_80196FC0[0] = 0xe0;
+ D_80196FC0[6] = 0;
+ D_80196FC0[5] = 0;
+ D_80196FC0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80196FC0, 0x28);
+ func_8001CD9C(iVar2, D_80196FC0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c b/src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c
index 47e82b48e..11b4e18fc 100644
--- a/src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c
+++ b/src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801CD738[];
+ extern u8 D_801CD778[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801CD738[1] = 0xE0;
+ D_801CD738[2] = 0xE0;
+ D_801CD738[0] = 0xE0;
+ D_801CD738[6] = 0;
+ D_801CD738[5] = 0;
+ D_801CD738[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801CD738, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801CD738);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801CD778[1] = 0xE0;
+ D_801CD778[2] = 0x20;
+ D_801CD778[0] = 0x20;
+ D_801CD778[5] = 0;
+ D_801CD778[6] = 0;
+ D_801CD778[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CD778, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801CD778);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80187B50[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801CD738[];
+ int iVar2;
+ int iVar3;
+
+ D_801CD738[1] = 0xe0;
+ D_801CD738[2] = 0xe0;
+ D_801CD738[0] = 0xe0;
+ D_801CD738[6] = 0;
+ D_801CD738[5] = 0;
+ D_801CD738[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CD738, 0x28);
+ func_8001CD9C(iVar2, D_801CD738);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c b/src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c
index c7b3a3477..b97aff8a6 100644
--- a/src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c
+++ b/src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801D3688[];
+ extern u8 D_801D36C8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801D3688[1] = 0xE0;
+ D_801D3688[2] = 0xE0;
+ D_801D3688[0] = 0xE0;
+ D_801D3688[6] = 0;
+ D_801D3688[5] = 0;
+ D_801D3688[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801D3688, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801D3688);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801D36C8[1] = 0xE0;
+ D_801D36C8[2] = 0x20;
+ D_801D36C8[0] = 0x20;
+ D_801D36C8[5] = 0;
+ D_801D36C8[6] = 0;
+ D_801D36C8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D36C8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801D36C8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018CBFC[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801D3688[];
+ int iVar2;
+ int iVar3;
+
+ D_801D3688[1] = 0xe0;
+ D_801D3688[2] = 0xe0;
+ D_801D3688[0] = 0xe0;
+ D_801D3688[6] = 0;
+ D_801D3688[5] = 0;
+ D_801D3688[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D3688, 0x28);
+ func_8001CD9C(iVar2, D_801D3688);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c b/src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c
index 39f7a995b..086417b49 100644
--- a/src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c
+++ b/src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801D3688[];
+ extern u8 D_801D36C8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801D3688[1] = 0xE0;
+ D_801D3688[2] = 0xE0;
+ D_801D3688[0] = 0xE0;
+ D_801D3688[6] = 0;
+ D_801D3688[5] = 0;
+ D_801D3688[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801D3688, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801D3688);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801D36C8[1] = 0xE0;
+ D_801D36C8[2] = 0x20;
+ D_801D36C8[0] = 0x20;
+ D_801D36C8[5] = 0;
+ D_801D36C8[6] = 0;
+ D_801D36C8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D36C8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801D36C8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018CBFC[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801D3688[];
+ int iVar2;
+ int iVar3;
+
+ D_801D3688[1] = 0xe0;
+ D_801D3688[2] = 0xe0;
+ D_801D3688[0] = 0xe0;
+ D_801D3688[6] = 0;
+ D_801D3688[5] = 0;
+ D_801D3688[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D3688, 0x28);
+ func_8001CD9C(iVar2, D_801D3688);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c b/src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c
index 807909b7f..aa545e4ca 100644
--- a/src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c
+++ b/src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801AE130[];
+ extern u8 D_801AE170[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801AE130[1] = 0xE0;
+ D_801AE130[2] = 0xE0;
+ D_801AE130[0] = 0xE0;
+ D_801AE130[6] = 0;
+ D_801AE130[5] = 0;
+ D_801AE130[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801AE130, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801AE130);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801AE170[1] = 0xE0;
+ D_801AE170[2] = 0x20;
+ D_801AE170[0] = 0x20;
+ D_801AE170[5] = 0;
+ D_801AE170[6] = 0;
+ D_801AE170[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801AE170, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801AE170);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80185418[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801AE130[];
+ int iVar2;
+ int iVar3;
+
+ D_801AE130[1] = 0xe0;
+ D_801AE130[2] = 0xe0;
+ D_801AE130[0] = 0xe0;
+ D_801AE130[6] = 0;
+ D_801AE130[5] = 0;
+ D_801AE130[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801AE130, 0x28);
+ func_8001CD9C(iVar2, D_801AE130);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c b/src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c
index 2674d96e2..3a4736dc4 100644
--- a/src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c
+++ b/src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E0C58[];
+ extern u8 D_801E0C98[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E0C58[1] = 0xE0;
+ D_801E0C58[2] = 0xE0;
+ D_801E0C58[0] = 0xE0;
+ D_801E0C58[6] = 0;
+ D_801E0C58[5] = 0;
+ D_801E0C58[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E0C58, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E0C58);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E0C98[1] = 0xE0;
+ D_801E0C98[2] = 0x20;
+ D_801E0C98[0] = 0x20;
+ D_801E0C98[5] = 0;
+ D_801E0C98[6] = 0;
+ D_801E0C98[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E0C98, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E0C98);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018DE44[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E0C58[];
+ int iVar2;
+ int iVar3;
+
+ D_801E0C58[1] = 0xe0;
+ D_801E0C58[2] = 0xe0;
+ D_801E0C58[0] = 0xe0;
+ D_801E0C58[6] = 0;
+ D_801E0C58[5] = 0;
+ D_801E0C58[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E0C58, 0x28);
+ func_8001CD9C(iVar2, D_801E0C58);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c b/src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c
index 515b62ce6..afc8d245d 100644
--- a/src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c
+++ b/src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C3550[];
+ extern u8 D_801C3590[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C3550[1] = 0xE0;
+ D_801C3550[2] = 0xE0;
+ D_801C3550[0] = 0xE0;
+ D_801C3550[6] = 0;
+ D_801C3550[5] = 0;
+ D_801C3550[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C3550, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C3550);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C3590[1] = 0xE0;
+ D_801C3590[2] = 0x20;
+ D_801C3590[0] = 0x20;
+ D_801C3590[5] = 0;
+ D_801C3590[6] = 0;
+ D_801C3590[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C3590, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C3590);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80187014[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C3550[];
+ int iVar2;
+ int iVar3;
+
+ D_801C3550[1] = 0xe0;
+ D_801C3550[2] = 0xe0;
+ D_801C3550[0] = 0xe0;
+ D_801C3550[6] = 0;
+ D_801C3550[5] = 0;
+ D_801C3550[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C3550, 0x28);
+ func_8001CD9C(iVar2, D_801C3550);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c b/src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c
index 277eb026b..356fa1a14 100644
--- a/src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c
+++ b/src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8018EE18[];
+ extern u8 D_8018EE58[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8018EE18[1] = 0xE0;
+ D_8018EE18[2] = 0xE0;
+ D_8018EE18[0] = 0xE0;
+ D_8018EE18[6] = 0;
+ D_8018EE18[5] = 0;
+ D_8018EE18[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8018EE18, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8018EE18);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8018EE58[1] = 0xE0;
+ D_8018EE58[2] = 0x20;
+ D_8018EE58[0] = 0x20;
+ D_8018EE58[5] = 0;
+ D_8018EE58[6] = 0;
+ D_8018EE58[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018EE58, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8018EE58);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018250C[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8018EE18[];
+ int iVar2;
+ int iVar3;
+
+ D_8018EE18[1] = 0xe0;
+ D_8018EE18[2] = 0xe0;
+ D_8018EE18[0] = 0xe0;
+ D_8018EE18[6] = 0;
+ D_8018EE18[5] = 0;
+ D_8018EE18[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018EE18, 0x28);
+ func_8001CD9C(iVar2, D_8018EE18);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c b/src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c
index e28ae5292..55f7514c3 100644
--- a/src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c
+++ b/src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A8EC8[];
+ extern u8 D_801A8F08[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A8EC8[1] = 0xE0;
+ D_801A8EC8[2] = 0xE0;
+ D_801A8EC8[0] = 0xE0;
+ D_801A8EC8[6] = 0;
+ D_801A8EC8[5] = 0;
+ D_801A8EC8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A8EC8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A8EC8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A8F08[1] = 0xE0;
+ D_801A8F08[2] = 0x20;
+ D_801A8F08[0] = 0x20;
+ D_801A8F08[5] = 0;
+ D_801A8F08[6] = 0;
+ D_801A8F08[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A8F08, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A8F08);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80186518[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A8EC8[];
+ int iVar2;
+ int iVar3;
+
+ D_801A8EC8[1] = 0xe0;
+ D_801A8EC8[2] = 0xe0;
+ D_801A8EC8[0] = 0xe0;
+ D_801A8EC8[6] = 0;
+ D_801A8EC8[5] = 0;
+ D_801A8EC8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A8EC8, 0x28);
+ func_8001CD9C(iVar2, D_801A8EC8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c b/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c
index 7979f3a88..3691b22b2 100644
--- a/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c
+++ b/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C01D8[];
+ extern u8 D_801C0218[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C01D8[1] = 0xE0;
+ D_801C01D8[2] = 0xE0;
+ D_801C01D8[0] = 0xE0;
+ D_801C01D8[6] = 0;
+ D_801C01D8[5] = 0;
+ D_801C01D8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C01D8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C01D8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C0218[1] = 0xE0;
+ D_801C0218[2] = 0x20;
+ D_801C0218[0] = 0x20;
+ D_801C0218[5] = 0;
+ D_801C0218[6] = 0;
+ D_801C0218[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C0218, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C0218);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018B684[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C01D8[];
+ int iVar2;
+ int iVar3;
+
+ D_801C01D8[1] = 0xe0;
+ D_801C01D8[2] = 0xe0;
+ D_801C01D8[0] = 0xe0;
+ D_801C01D8[6] = 0;
+ D_801C01D8[5] = 0;
+ D_801C01D8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C01D8, 0x28);
+ func_8001CD9C(iVar2, D_801C01D8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c b/src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c
index 326185ffa..e738894e7 100644
--- a/src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c
+++ b/src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019AE40[];
+ extern u8 D_8019AE80[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019AE40[1] = 0xE0;
+ D_8019AE40[2] = 0xE0;
+ D_8019AE40[0] = 0xE0;
+ D_8019AE40[6] = 0;
+ D_8019AE40[5] = 0;
+ D_8019AE40[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019AE40, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019AE40);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019AE80[1] = 0xE0;
+ D_8019AE80[2] = 0x20;
+ D_8019AE80[0] = 0x20;
+ D_8019AE80[5] = 0;
+ D_8019AE80[6] = 0;
+ D_8019AE80[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019AE80, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019AE80);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80185420[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019AE40[];
+ int iVar2;
+ int iVar3;
+
+ D_8019AE40[1] = 0xe0;
+ D_8019AE40[2] = 0xe0;
+ D_8019AE40[0] = 0xe0;
+ D_8019AE40[6] = 0;
+ D_8019AE40[5] = 0;
+ D_8019AE40[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019AE40, 0x28);
+ func_8001CD9C(iVar2, D_8019AE40);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c b/src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c
index 3ef97da7b..e79db8999 100644
--- a/src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c
+++ b/src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B2C40[];
+ extern u8 D_801B2C80[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B2C40[1] = 0xE0;
+ D_801B2C40[2] = 0xE0;
+ D_801B2C40[0] = 0xE0;
+ D_801B2C40[6] = 0;
+ D_801B2C40[5] = 0;
+ D_801B2C40[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B2C40, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B2C40);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B2C80[1] = 0xE0;
+ D_801B2C80[2] = 0x20;
+ D_801B2C80[0] = 0x20;
+ D_801B2C80[5] = 0;
+ D_801B2C80[6] = 0;
+ D_801B2C80[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B2C80, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B2C80);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80187954[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B2C40[];
+ int iVar2;
+ int iVar3;
+
+ D_801B2C40[1] = 0xe0;
+ D_801B2C40[2] = 0xe0;
+ D_801B2C40[0] = 0xe0;
+ D_801B2C40[6] = 0;
+ D_801B2C40[5] = 0;
+ D_801B2C40[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B2C40, 0x28);
+ func_8001CD9C(iVar2, D_801B2C40);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c b/src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c
index 292049f69..25f59c3bd 100644
--- a/src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c
+++ b/src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C0E18[];
+ extern u8 D_801C0E58[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C0E18[1] = 0xE0;
+ D_801C0E18[2] = 0xE0;
+ D_801C0E18[0] = 0xE0;
+ D_801C0E18[6] = 0;
+ D_801C0E18[5] = 0;
+ D_801C0E18[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C0E18, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C0E18);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C0E58[1] = 0xE0;
+ D_801C0E58[2] = 0x20;
+ D_801C0E58[0] = 0x20;
+ D_801C0E58[5] = 0;
+ D_801C0E58[6] = 0;
+ D_801C0E58[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C0E58, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C0E58);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018AD88[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C0E18[];
+ int iVar2;
+ int iVar3;
+
+ D_801C0E18[1] = 0xe0;
+ D_801C0E18[2] = 0xe0;
+ D_801C0E18[0] = 0xe0;
+ D_801C0E18[6] = 0;
+ D_801C0E18[5] = 0;
+ D_801C0E18[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C0E18, 0x28);
+ func_8001CD9C(iVar2, D_801C0E18);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c b/src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c
index 731957053..7b357c90d 100644
--- a/src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c
+++ b/src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019D0C0[];
+ extern u8 D_8019D100[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019D0C0[1] = 0xE0;
+ D_8019D0C0[2] = 0xE0;
+ D_8019D0C0[0] = 0xE0;
+ D_8019D0C0[6] = 0;
+ D_8019D0C0[5] = 0;
+ D_8019D0C0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019D0C0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019D0C0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019D100[1] = 0xE0;
+ D_8019D100[2] = 0x20;
+ D_8019D100[0] = 0x20;
+ D_8019D100[5] = 0;
+ D_8019D100[6] = 0;
+ D_8019D100[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019D100, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019D100);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80182E68[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019D0C0[];
+ int iVar2;
+ int iVar3;
+
+ D_8019D0C0[1] = 0xe0;
+ D_8019D0C0[2] = 0xe0;
+ D_8019D0C0[0] = 0xe0;
+ D_8019D0C0[6] = 0;
+ D_8019D0C0[5] = 0;
+ D_8019D0C0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019D0C0, 0x28);
+ func_8001CD9C(iVar2, D_8019D0C0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c b/src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c
index f39084778..71166b6a5 100644
--- a/src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c
+++ b/src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B4678[];
+ extern u8 D_801B46B8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B4678[1] = 0xE0;
+ D_801B4678[2] = 0xE0;
+ D_801B4678[0] = 0xE0;
+ D_801B4678[6] = 0;
+ D_801B4678[5] = 0;
+ D_801B4678[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B4678, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B4678);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B46B8[1] = 0xE0;
+ D_801B46B8[2] = 0x20;
+ D_801B46B8[0] = 0x20;
+ D_801B46B8[5] = 0;
+ D_801B46B8[6] = 0;
+ D_801B46B8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B46B8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B46B8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80188E20[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B4678[];
+ int iVar2;
+ int iVar3;
+
+ D_801B4678[1] = 0xe0;
+ D_801B4678[2] = 0xe0;
+ D_801B4678[0] = 0xe0;
+ D_801B4678[6] = 0;
+ D_801B4678[5] = 0;
+ D_801B4678[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B4678, 0x28);
+ func_8001CD9C(iVar2, D_801B4678);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c b/src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c
index 05432d057..a20975edf 100644
--- a/src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c
+++ b/src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80191350[];
+ extern u8 D_80191390[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80191350[1] = 0xE0;
+ D_80191350[2] = 0xE0;
+ D_80191350[0] = 0xE0;
+ D_80191350[6] = 0;
+ D_80191350[5] = 0;
+ D_80191350[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80191350, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80191350);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80191390[1] = 0xE0;
+ D_80191390[2] = 0x20;
+ D_80191390[0] = 0x20;
+ D_80191390[5] = 0;
+ D_80191390[6] = 0;
+ D_80191390[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80191390, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80191390);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181D58[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80191350[];
+ int iVar2;
+ int iVar3;
+
+ D_80191350[1] = 0xe0;
+ D_80191350[2] = 0xe0;
+ D_80191350[0] = 0xe0;
+ D_80191350[6] = 0;
+ D_80191350[5] = 0;
+ D_80191350[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80191350, 0x28);
+ func_8001CD9C(iVar2, D_80191350);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c b/src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c
index f78fc7e69..d50648ff2 100644
--- a/src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c
+++ b/src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80197560[];
+ extern u8 D_801975A0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80197560[1] = 0xE0;
+ D_80197560[2] = 0xE0;
+ D_80197560[0] = 0xE0;
+ D_80197560[6] = 0;
+ D_80197560[5] = 0;
+ D_80197560[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80197560, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80197560);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801975A0[1] = 0xE0;
+ D_801975A0[2] = 0x20;
+ D_801975A0[0] = 0x20;
+ D_801975A0[5] = 0;
+ D_801975A0[6] = 0;
+ D_801975A0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801975A0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801975A0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181D84[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80197560[];
+ int iVar2;
+ int iVar3;
+
+ D_80197560[1] = 0xe0;
+ D_80197560[2] = 0xe0;
+ D_80197560[0] = 0xe0;
+ D_80197560[6] = 0;
+ D_80197560[5] = 0;
+ D_80197560[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80197560, 0x28);
+ func_8001CD9C(iVar2, D_80197560);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c b/src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c
index f614b2c04..763bedd5d 100644
--- a/src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c
+++ b/src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8018E9F8[];
+ extern u8 D_8018EA38[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8018E9F8[1] = 0xE0;
+ D_8018E9F8[2] = 0xE0;
+ D_8018E9F8[0] = 0xE0;
+ D_8018E9F8[6] = 0;
+ D_8018E9F8[5] = 0;
+ D_8018E9F8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8018E9F8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8018E9F8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8018EA38[1] = 0xE0;
+ D_8018EA38[2] = 0x20;
+ D_8018EA38[0] = 0x20;
+ D_8018EA38[5] = 0;
+ D_8018EA38[6] = 0;
+ D_8018EA38[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018EA38, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8018EA38);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181430[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8018E9F8[];
+ int iVar2;
+ int iVar3;
+
+ D_8018E9F8[1] = 0xe0;
+ D_8018E9F8[2] = 0xe0;
+ D_8018E9F8[0] = 0xe0;
+ D_8018E9F8[6] = 0;
+ D_8018E9F8[5] = 0;
+ D_8018E9F8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018E9F8, 0x28);
+ func_8001CD9C(iVar2, D_8018E9F8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c b/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c
index 075cf70e5..6a280d057 100644
--- a/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c
+++ b/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801EE160[];
+ extern u8 D_801EE1A0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801EE160[1] = 0xE0;
+ D_801EE160[2] = 0xE0;
+ D_801EE160[0] = 0xE0;
+ D_801EE160[6] = 0;
+ D_801EE160[5] = 0;
+ D_801EE160[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801EE160, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801EE160);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801EE1A0[1] = 0xE0;
+ D_801EE1A0[2] = 0x20;
+ D_801EE1A0[0] = 0x20;
+ D_801EE1A0[5] = 0;
+ D_801EE1A0[6] = 0;
+ D_801EE1A0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EE1A0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801EE1A0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801936C0[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801EE160[];
+ int iVar2;
+ int iVar3;
+
+ D_801EE160[1] = 0xe0;
+ D_801EE160[2] = 0xe0;
+ D_801EE160[0] = 0xe0;
+ D_801EE160[6] = 0;
+ D_801EE160[5] = 0;
+ D_801EE160[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EE160, 0x28);
+ func_8001CD9C(iVar2, D_801EE160);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c b/src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c
index 2b9ec4280..dcff1397a 100644
--- a/src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c
+++ b/src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801910D0[];
+ extern u8 D_80191110[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801910D0[1] = 0xE0;
+ D_801910D0[2] = 0xE0;
+ D_801910D0[0] = 0xE0;
+ D_801910D0[6] = 0;
+ D_801910D0[5] = 0;
+ D_801910D0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801910D0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801910D0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80191110[1] = 0xE0;
+ D_80191110[2] = 0x20;
+ D_80191110[0] = 0x20;
+ D_80191110[5] = 0;
+ D_80191110[6] = 0;
+ D_80191110[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80191110, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80191110);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181894[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801910D0[];
+ int iVar2;
+ int iVar3;
+
+ D_801910D0[1] = 0xe0;
+ D_801910D0[2] = 0xe0;
+ D_801910D0[0] = 0xe0;
+ D_801910D0[6] = 0;
+ D_801910D0[5] = 0;
+ D_801910D0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801910D0, 0x28);
+ func_8001CD9C(iVar2, D_801910D0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c b/src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c
index ef04379f7..e554f159d 100644
--- a/src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c
+++ b/src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C7DB8[];
+ extern u8 D_801C7DF8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C7DB8[1] = 0xE0;
+ D_801C7DB8[2] = 0xE0;
+ D_801C7DB8[0] = 0xE0;
+ D_801C7DB8[6] = 0;
+ D_801C7DB8[5] = 0;
+ D_801C7DB8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C7DB8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C7DB8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C7DF8[1] = 0xE0;
+ D_801C7DF8[2] = 0x20;
+ D_801C7DF8[0] = 0x20;
+ D_801C7DF8[5] = 0;
+ D_801C7DF8[6] = 0;
+ D_801C7DF8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C7DF8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C7DF8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801877CC[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C7DB8[];
+ int iVar2;
+ int iVar3;
+
+ D_801C7DB8[1] = 0xe0;
+ D_801C7DB8[2] = 0xe0;
+ D_801C7DB8[0] = 0xe0;
+ D_801C7DB8[6] = 0;
+ D_801C7DB8[5] = 0;
+ D_801C7DB8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C7DB8, 0x28);
+ func_8001CD9C(iVar2, D_801C7DB8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c b/src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c
index fcbfd392e..e5edc64a3 100644
--- a/src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c
+++ b/src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A5F60[];
+ extern u8 D_801A5FA0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A5F60[1] = 0xE0;
+ D_801A5F60[2] = 0xE0;
+ D_801A5F60[0] = 0xE0;
+ D_801A5F60[6] = 0;
+ D_801A5F60[5] = 0;
+ D_801A5F60[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A5F60, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A5F60);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A5FA0[1] = 0xE0;
+ D_801A5FA0[2] = 0x20;
+ D_801A5FA0[0] = 0x20;
+ D_801A5FA0[5] = 0;
+ D_801A5FA0[6] = 0;
+ D_801A5FA0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A5FA0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A5FA0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80183290[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A5F60[];
+ int iVar2;
+ int iVar3;
+
+ D_801A5F60[1] = 0xe0;
+ D_801A5F60[2] = 0xe0;
+ D_801A5F60[0] = 0xe0;
+ D_801A5F60[6] = 0;
+ D_801A5F60[5] = 0;
+ D_801A5F60[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A5F60, 0x28);
+ func_8001CD9C(iVar2, D_801A5F60);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c b/src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c
index 9b82cb962..73573fc08 100644
--- a/src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c
+++ b/src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E61B0[];
+ extern u8 D_801E61F0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E61B0[1] = 0xE0;
+ D_801E61B0[2] = 0xE0;
+ D_801E61B0[0] = 0xE0;
+ D_801E61B0[6] = 0;
+ D_801E61B0[5] = 0;
+ D_801E61B0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E61B0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E61B0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E61F0[1] = 0xE0;
+ D_801E61F0[2] = 0x20;
+ D_801E61F0[0] = 0x20;
+ D_801E61F0[5] = 0;
+ D_801E61F0[6] = 0;
+ D_801E61F0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E61F0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E61F0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801904A8[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E61B0[];
+ int iVar2;
+ int iVar3;
+
+ D_801E61B0[1] = 0xe0;
+ D_801E61B0[2] = 0xe0;
+ D_801E61B0[0] = 0xe0;
+ D_801E61B0[6] = 0;
+ D_801E61B0[5] = 0;
+ D_801E61B0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E61B0, 0x28);
+ func_8001CD9C(iVar2, D_801E61B0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c b/src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c
index c36e6ab8d..908d6afe0 100644
--- a/src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c
+++ b/src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E61B0[];
+ extern u8 D_801E61F0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E61B0[1] = 0xE0;
+ D_801E61B0[2] = 0xE0;
+ D_801E61B0[0] = 0xE0;
+ D_801E61B0[6] = 0;
+ D_801E61B0[5] = 0;
+ D_801E61B0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E61B0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E61B0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E61F0[1] = 0xE0;
+ D_801E61F0[2] = 0x20;
+ D_801E61F0[0] = 0x20;
+ D_801E61F0[5] = 0;
+ D_801E61F0[6] = 0;
+ D_801E61F0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E61F0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E61F0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801904A8[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E61B0[];
+ int iVar2;
+ int iVar3;
+
+ D_801E61B0[1] = 0xe0;
+ D_801E61B0[2] = 0xe0;
+ D_801E61B0[0] = 0xe0;
+ D_801E61B0[6] = 0;
+ D_801E61B0[5] = 0;
+ D_801E61B0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E61B0, 0x28);
+ func_8001CD9C(iVar2, D_801E61B0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c b/src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c
index d3c0b9e0e..ff4a0ab5e 100644
--- a/src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c
+++ b/src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801BB7C0[];
+ extern u8 D_801BB800[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801BB7C0[1] = 0xE0;
+ D_801BB7C0[2] = 0xE0;
+ D_801BB7C0[0] = 0xE0;
+ D_801BB7C0[6] = 0;
+ D_801BB7C0[5] = 0;
+ D_801BB7C0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801BB7C0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801BB7C0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801BB800[1] = 0xE0;
+ D_801BB800[2] = 0x20;
+ D_801BB800[0] = 0x20;
+ D_801BB800[5] = 0;
+ D_801BB800[6] = 0;
+ D_801BB800[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801BB800, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801BB800);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801865E0[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801BB7C0[];
+ int iVar2;
+ int iVar3;
+
+ D_801BB7C0[1] = 0xe0;
+ D_801BB7C0[2] = 0xe0;
+ D_801BB7C0[0] = 0xe0;
+ D_801BB7C0[6] = 0;
+ D_801BB7C0[5] = 0;
+ D_801BB7C0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801BB7C0, 0x28);
+ func_8001CD9C(iVar2, D_801BB7C0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c b/src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c
index a549eb526..302132415 100644
--- a/src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c
+++ b/src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8018EE18[];
+ extern u8 D_8018EE58[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8018EE18[1] = 0xE0;
+ D_8018EE18[2] = 0xE0;
+ D_8018EE18[0] = 0xE0;
+ D_8018EE18[6] = 0;
+ D_8018EE18[5] = 0;
+ D_8018EE18[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8018EE18, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8018EE18);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8018EE58[1] = 0xE0;
+ D_8018EE58[2] = 0x20;
+ D_8018EE58[0] = 0x20;
+ D_8018EE58[5] = 0;
+ D_8018EE58[6] = 0;
+ D_8018EE58[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018EE58, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8018EE58);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018250C[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8018EE18[];
+ int iVar2;
+ int iVar3;
+
+ D_8018EE18[1] = 0xe0;
+ D_8018EE18[2] = 0xe0;
+ D_8018EE18[0] = 0xe0;
+ D_8018EE18[6] = 0;
+ D_8018EE18[5] = 0;
+ D_8018EE18[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018EE18, 0x28);
+ func_8001CD9C(iVar2, D_8018EE18);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c b/src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c
index 590d7077f..0a1cecdfc 100644
--- a/src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c
+++ b/src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c
@@ -3001,7 +3001,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80199F48[];
+ extern u8 D_80199F88[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80199F48[1] = 0xE0;
+ D_80199F48[2] = 0xE0;
+ D_80199F48[0] = 0xE0;
+ D_80199F48[6] = 0;
+ D_80199F48[5] = 0;
+ D_80199F48[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80199F48, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80199F48);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80199F88[1] = 0xE0;
+ D_80199F88[2] = 0x20;
+ D_80199F88[0] = 0x20;
+ D_80199F88[5] = 0;
+ D_80199F88[6] = 0;
+ D_80199F88[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80199F88, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80199F88);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181520[])(void);
@@ -3019,7 +3110,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80199F48[];
+ int iVar2;
+ int iVar3;
+
+ D_80199F48[1] = 0xe0;
+ D_80199F48[2] = 0xe0;
+ D_80199F48[0] = 0xe0;
+ D_80199F48[6] = 0;
+ D_80199F48[5] = 0;
+ D_80199F48[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80199F48, 0x28);
+ func_8001CD9C(iVar2, D_80199F48);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c b/src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c
index c8cdce97c..c8a555406 100644
--- a/src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c
+++ b/src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B5008[];
+ extern u8 D_801B5048[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B5008[1] = 0xE0;
+ D_801B5008[2] = 0xE0;
+ D_801B5008[0] = 0xE0;
+ D_801B5008[6] = 0;
+ D_801B5008[5] = 0;
+ D_801B5008[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B5008, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B5008);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B5048[1] = 0xE0;
+ D_801B5048[2] = 0x20;
+ D_801B5048[0] = 0x20;
+ D_801B5048[5] = 0;
+ D_801B5048[6] = 0;
+ D_801B5048[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B5048, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B5048);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80188CFC[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B5008[];
+ int iVar2;
+ int iVar3;
+
+ D_801B5008[1] = 0xe0;
+ D_801B5008[2] = 0xe0;
+ D_801B5008[0] = 0xe0;
+ D_801B5008[6] = 0;
+ D_801B5008[5] = 0;
+ D_801B5008[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B5008, 0x28);
+ func_8001CD9C(iVar2, D_801B5008);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c b/src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c
index 7dea4fc18..74e73b07a 100644
--- a/src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c
+++ b/src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019F2A8[];
+ extern u8 D_8019F2E8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019F2A8[1] = 0xE0;
+ D_8019F2A8[2] = 0xE0;
+ D_8019F2A8[0] = 0xE0;
+ D_8019F2A8[6] = 0;
+ D_8019F2A8[5] = 0;
+ D_8019F2A8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019F2A8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019F2A8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019F2E8[1] = 0xE0;
+ D_8019F2E8[2] = 0x20;
+ D_8019F2E8[0] = 0x20;
+ D_8019F2E8[5] = 0;
+ D_8019F2E8[6] = 0;
+ D_8019F2E8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019F2E8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019F2E8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801834BC[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019F2A8[];
+ int iVar2;
+ int iVar3;
+
+ D_8019F2A8[1] = 0xe0;
+ D_8019F2A8[2] = 0xe0;
+ D_8019F2A8[0] = 0xe0;
+ D_8019F2A8[6] = 0;
+ D_8019F2A8[5] = 0;
+ D_8019F2A8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019F2A8, 0x28);
+ func_8001CD9C(iVar2, D_8019F2A8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c b/src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c
index becbb5818..58a178b3b 100644
--- a/src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c
+++ b/src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801ABDB8[];
+ extern u8 D_801ABDF8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801ABDB8[1] = 0xE0;
+ D_801ABDB8[2] = 0xE0;
+ D_801ABDB8[0] = 0xE0;
+ D_801ABDB8[6] = 0;
+ D_801ABDB8[5] = 0;
+ D_801ABDB8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801ABDB8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801ABDB8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801ABDF8[1] = 0xE0;
+ D_801ABDF8[2] = 0x20;
+ D_801ABDF8[0] = 0x20;
+ D_801ABDF8[5] = 0;
+ D_801ABDF8[6] = 0;
+ D_801ABDF8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801ABDF8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801ABDF8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801857F4[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801ABDB8[];
+ int iVar2;
+ int iVar3;
+
+ D_801ABDB8[1] = 0xe0;
+ D_801ABDB8[2] = 0xe0;
+ D_801ABDB8[0] = 0xe0;
+ D_801ABDB8[6] = 0;
+ D_801ABDB8[5] = 0;
+ D_801ABDB8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801ABDB8, 0x28);
+ func_8001CD9C(iVar2, D_801ABDB8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c b/src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c
index c22dcb29c..bc55644dd 100644
--- a/src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c
+++ b/src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019E430[];
+ extern u8 D_8019E470[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019E430[1] = 0xE0;
+ D_8019E430[2] = 0xE0;
+ D_8019E430[0] = 0xE0;
+ D_8019E430[6] = 0;
+ D_8019E430[5] = 0;
+ D_8019E430[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019E430, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019E430);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019E470[1] = 0xE0;
+ D_8019E470[2] = 0x20;
+ D_8019E470[0] = 0x20;
+ D_8019E470[5] = 0;
+ D_8019E470[6] = 0;
+ D_8019E470[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019E470, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019E470);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80184900[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019E430[];
+ int iVar2;
+ int iVar3;
+
+ D_8019E430[1] = 0xe0;
+ D_8019E430[2] = 0xe0;
+ D_8019E430[0] = 0xe0;
+ D_8019E430[6] = 0;
+ D_8019E430[5] = 0;
+ D_8019E430[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019E430, 0x28);
+ func_8001CD9C(iVar2, D_8019E430);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c b/src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c
index 9ecad2ddd..2d959c61e 100644
--- a/src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c
+++ b/src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B1098[];
+ extern u8 D_801B10D8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B1098[1] = 0xE0;
+ D_801B1098[2] = 0xE0;
+ D_801B1098[0] = 0xE0;
+ D_801B1098[6] = 0;
+ D_801B1098[5] = 0;
+ D_801B1098[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B1098, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B1098);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B10D8[1] = 0xE0;
+ D_801B10D8[2] = 0x20;
+ D_801B10D8[0] = 0x20;
+ D_801B10D8[5] = 0;
+ D_801B10D8[6] = 0;
+ D_801B10D8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B10D8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B10D8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801856D4[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B1098[];
+ int iVar2;
+ int iVar3;
+
+ D_801B1098[1] = 0xe0;
+ D_801B1098[2] = 0xe0;
+ D_801B1098[0] = 0xe0;
+ D_801B1098[6] = 0;
+ D_801B1098[5] = 0;
+ D_801B1098[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B1098, 0x28);
+ func_8001CD9C(iVar2, D_801B1098);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c b/src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c
index be71b2e17..81b0f5f4d 100644
--- a/src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c
+++ b/src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8018F1D0[];
+ extern u8 D_8018F210[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8018F1D0[1] = 0xE0;
+ D_8018F1D0[2] = 0xE0;
+ D_8018F1D0[0] = 0xE0;
+ D_8018F1D0[6] = 0;
+ D_8018F1D0[5] = 0;
+ D_8018F1D0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8018F1D0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8018F1D0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8018F210[1] = 0xE0;
+ D_8018F210[2] = 0x20;
+ D_8018F210[0] = 0x20;
+ D_8018F210[5] = 0;
+ D_8018F210[6] = 0;
+ D_8018F210[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018F210, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8018F210);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801826F4[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8018F1D0[];
+ int iVar2;
+ int iVar3;
+
+ D_8018F1D0[1] = 0xe0;
+ D_8018F1D0[2] = 0xe0;
+ D_8018F1D0[0] = 0xe0;
+ D_8018F1D0[6] = 0;
+ D_8018F1D0[5] = 0;
+ D_8018F1D0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018F1D0, 0x28);
+ func_8001CD9C(iVar2, D_8018F1D0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c b/src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c
index e3aacdf69..dd3ae0e89 100644
--- a/src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c
+++ b/src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019C1B0[];
+ extern u8 D_8019C1F0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019C1B0[1] = 0xE0;
+ D_8019C1B0[2] = 0xE0;
+ D_8019C1B0[0] = 0xE0;
+ D_8019C1B0[6] = 0;
+ D_8019C1B0[5] = 0;
+ D_8019C1B0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019C1B0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019C1B0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019C1F0[1] = 0xE0;
+ D_8019C1F0[2] = 0x20;
+ D_8019C1F0[0] = 0x20;
+ D_8019C1F0[5] = 0;
+ D_8019C1F0[6] = 0;
+ D_8019C1F0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019C1F0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019C1F0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80183CF0[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019C1B0[];
+ int iVar2;
+ int iVar3;
+
+ D_8019C1B0[1] = 0xe0;
+ D_8019C1B0[2] = 0xe0;
+ D_8019C1B0[0] = 0xe0;
+ D_8019C1B0[6] = 0;
+ D_8019C1B0[5] = 0;
+ D_8019C1B0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019C1B0, 0x28);
+ func_8001CD9C(iVar2, D_8019C1B0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c b/src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c
index 26698be65..9d61567f7 100644
--- a/src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c
+++ b/src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A04E0[];
+ extern u8 D_801A0520[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A04E0[1] = 0xE0;
+ D_801A04E0[2] = 0xE0;
+ D_801A04E0[0] = 0xE0;
+ D_801A04E0[6] = 0;
+ D_801A04E0[5] = 0;
+ D_801A04E0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A04E0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A04E0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A0520[1] = 0xE0;
+ D_801A0520[2] = 0x20;
+ D_801A0520[0] = 0x20;
+ D_801A0520[5] = 0;
+ D_801A0520[6] = 0;
+ D_801A0520[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A0520, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A0520);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80185C48[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A04E0[];
+ int iVar2;
+ int iVar3;
+
+ D_801A04E0[1] = 0xe0;
+ D_801A04E0[2] = 0xe0;
+ D_801A04E0[0] = 0xe0;
+ D_801A04E0[6] = 0;
+ D_801A04E0[5] = 0;
+ D_801A04E0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A04E0, 0x28);
+ func_8001CD9C(iVar2, D_801A04E0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c b/src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c
index ae95e5a5b..d4126f45c 100644
--- a/src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c
+++ b/src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80195EF0[];
+ extern u8 D_80195F30[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80195EF0[1] = 0xE0;
+ D_80195EF0[2] = 0xE0;
+ D_80195EF0[0] = 0xE0;
+ D_80195EF0[6] = 0;
+ D_80195EF0[5] = 0;
+ D_80195EF0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80195EF0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80195EF0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80195F30[1] = 0xE0;
+ D_80195F30[2] = 0x20;
+ D_80195F30[0] = 0x20;
+ D_80195F30[5] = 0;
+ D_80195F30[6] = 0;
+ D_80195F30[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80195F30, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80195F30);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181D58[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80195EF0[];
+ int iVar2;
+ int iVar3;
+
+ D_80195EF0[1] = 0xe0;
+ D_80195EF0[2] = 0xe0;
+ D_80195EF0[0] = 0xe0;
+ D_80195EF0[6] = 0;
+ D_80195EF0[5] = 0;
+ D_80195EF0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80195EF0, 0x28);
+ func_8001CD9C(iVar2, D_80195EF0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c b/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c
index 057f8a909..9d75af9ac 100644
--- a/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c
+++ b/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C6340[];
+ extern u8 D_801C6380[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C6340[1] = 0xE0;
+ D_801C6340[2] = 0xE0;
+ D_801C6340[0] = 0xE0;
+ D_801C6340[6] = 0;
+ D_801C6340[5] = 0;
+ D_801C6340[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C6340, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C6340);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C6380[1] = 0xE0;
+ D_801C6380[2] = 0x20;
+ D_801C6380[0] = 0x20;
+ D_801C6380[5] = 0;
+ D_801C6380[6] = 0;
+ D_801C6380[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C6380, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C6380);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018BC34[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C6340[];
+ int iVar2;
+ int iVar3;
+
+ D_801C6340[1] = 0xe0;
+ D_801C6340[2] = 0xe0;
+ D_801C6340[0] = 0xe0;
+ D_801C6340[6] = 0;
+ D_801C6340[5] = 0;
+ D_801C6340[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C6340, 0x28);
+ func_8001CD9C(iVar2, D_801C6340);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c b/src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c
index 0bc834b5e..f3b12908b 100644
--- a/src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c
+++ b/src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019C4C8[];
+ extern u8 D_8019C508[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019C4C8[1] = 0xE0;
+ D_8019C4C8[2] = 0xE0;
+ D_8019C4C8[0] = 0xE0;
+ D_8019C4C8[6] = 0;
+ D_8019C4C8[5] = 0;
+ D_8019C4C8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019C4C8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019C4C8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019C508[1] = 0xE0;
+ D_8019C508[2] = 0x20;
+ D_8019C508[0] = 0x20;
+ D_8019C508[5] = 0;
+ D_8019C508[6] = 0;
+ D_8019C508[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019C508, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019C508);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80180FAC[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019C4C8[];
+ int iVar2;
+ int iVar3;
+
+ D_8019C4C8[1] = 0xe0;
+ D_8019C4C8[2] = 0xe0;
+ D_8019C4C8[0] = 0xe0;
+ D_8019C4C8[6] = 0;
+ D_8019C4C8[5] = 0;
+ D_8019C4C8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019C4C8, 0x28);
+ func_8001CD9C(iVar2, D_8019C4C8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c b/src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c
index 21f011d0c..6949935ce 100644
--- a/src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c
+++ b/src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801EC008[];
+ extern u8 D_801EC048[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801EC008[1] = 0xE0;
+ D_801EC008[2] = 0xE0;
+ D_801EC008[0] = 0xE0;
+ D_801EC008[6] = 0;
+ D_801EC008[5] = 0;
+ D_801EC008[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801EC008, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801EC008);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801EC048[1] = 0xE0;
+ D_801EC048[2] = 0x20;
+ D_801EC048[0] = 0x20;
+ D_801EC048[5] = 0;
+ D_801EC048[6] = 0;
+ D_801EC048[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EC048, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801EC048);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8019046C[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801EC008[];
+ int iVar2;
+ int iVar3;
+
+ D_801EC008[1] = 0xe0;
+ D_801EC008[2] = 0xe0;
+ D_801EC008[0] = 0xe0;
+ D_801EC008[6] = 0;
+ D_801EC008[5] = 0;
+ D_801EC008[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801EC008, 0x28);
+ func_8001CD9C(iVar2, D_801EC008);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c b/src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c
index 9c154359c..82f38b084 100644
--- a/src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c
+++ b/src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E5748[];
+ extern u8 D_801E5788[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E5748[1] = 0xE0;
+ D_801E5748[2] = 0xE0;
+ D_801E5748[0] = 0xE0;
+ D_801E5748[6] = 0;
+ D_801E5748[5] = 0;
+ D_801E5748[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E5748, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E5748);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E5788[1] = 0xE0;
+ D_801E5788[2] = 0x20;
+ D_801E5788[0] = 0x20;
+ D_801E5788[5] = 0;
+ D_801E5788[6] = 0;
+ D_801E5788[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E5788, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E5788);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80189BC8[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E5748[];
+ int iVar2;
+ int iVar3;
+
+ D_801E5748[1] = 0xe0;
+ D_801E5748[2] = 0xe0;
+ D_801E5748[0] = 0xe0;
+ D_801E5748[6] = 0;
+ D_801E5748[5] = 0;
+ D_801E5748[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E5748, 0x28);
+ func_8001CD9C(iVar2, D_801E5748);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c b/src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c
index a7c2ec4c4..1b2ae14ea 100644
--- a/src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c
+++ b/src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8018EE18[];
+ extern u8 D_8018EE58[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8018EE18[1] = 0xE0;
+ D_8018EE18[2] = 0xE0;
+ D_8018EE18[0] = 0xE0;
+ D_8018EE18[6] = 0;
+ D_8018EE18[5] = 0;
+ D_8018EE18[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8018EE18, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8018EE18);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8018EE58[1] = 0xE0;
+ D_8018EE58[2] = 0x20;
+ D_8018EE58[0] = 0x20;
+ D_8018EE58[5] = 0;
+ D_8018EE58[6] = 0;
+ D_8018EE58[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018EE58, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8018EE58);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018250C[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8018EE18[];
+ int iVar2;
+ int iVar3;
+
+ D_8018EE18[1] = 0xe0;
+ D_8018EE18[2] = 0xe0;
+ D_8018EE18[0] = 0xe0;
+ D_8018EE18[6] = 0;
+ D_8018EE18[5] = 0;
+ D_8018EE18[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018EE18, 0x28);
+ func_8001CD9C(iVar2, D_8018EE18);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c b/src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c
index a5000b284..6276cae4c 100644
--- a/src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c
+++ b/src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801ADA88[];
+ extern u8 D_801ADAC8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801ADA88[1] = 0xE0;
+ D_801ADA88[2] = 0xE0;
+ D_801ADA88[0] = 0xE0;
+ D_801ADA88[6] = 0;
+ D_801ADA88[5] = 0;
+ D_801ADA88[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801ADA88, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801ADA88);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801ADAC8[1] = 0xE0;
+ D_801ADAC8[2] = 0x20;
+ D_801ADAC8[0] = 0x20;
+ D_801ADAC8[5] = 0;
+ D_801ADAC8[6] = 0;
+ D_801ADAC8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801ADAC8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801ADAC8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018B51C[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801ADA88[];
+ int iVar2;
+ int iVar3;
+
+ D_801ADA88[1] = 0xe0;
+ D_801ADA88[2] = 0xe0;
+ D_801ADA88[0] = 0xe0;
+ D_801ADA88[6] = 0;
+ D_801ADA88[5] = 0;
+ D_801ADA88[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801ADA88, 0x28);
+ func_8001CD9C(iVar2, D_801ADA88);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c b/src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c
index 4ccf21d56..aff9b437a 100644
--- a/src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c
+++ b/src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801F74D0[];
+ extern u8 D_801F7510[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801F74D0[1] = 0xE0;
+ D_801F74D0[2] = 0xE0;
+ D_801F74D0[0] = 0xE0;
+ D_801F74D0[6] = 0;
+ D_801F74D0[5] = 0;
+ D_801F74D0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801F74D0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801F74D0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801F7510[1] = 0xE0;
+ D_801F7510[2] = 0x20;
+ D_801F7510[0] = 0x20;
+ D_801F7510[5] = 0;
+ D_801F7510[6] = 0;
+ D_801F7510[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801F7510, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801F7510);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80185040[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801F74D0[];
+ int iVar2;
+ int iVar3;
+
+ D_801F74D0[1] = 0xe0;
+ D_801F74D0[2] = 0xe0;
+ D_801F74D0[0] = 0xe0;
+ D_801F74D0[6] = 0;
+ D_801F74D0[5] = 0;
+ D_801F74D0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801F74D0, 0x28);
+ func_8001CD9C(iVar2, D_801F74D0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c b/src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c
index e25403b5e..4b15d3fa9 100644
--- a/src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c
+++ b/src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A9450[];
+ extern u8 D_801A9490[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A9450[1] = 0xE0;
+ D_801A9450[2] = 0xE0;
+ D_801A9450[0] = 0xE0;
+ D_801A9450[6] = 0;
+ D_801A9450[5] = 0;
+ D_801A9450[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A9450, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A9450);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A9490[1] = 0xE0;
+ D_801A9490[2] = 0x20;
+ D_801A9490[0] = 0x20;
+ D_801A9490[5] = 0;
+ D_801A9490[6] = 0;
+ D_801A9490[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A9490, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A9490);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80188AA8[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A9450[];
+ int iVar2;
+ int iVar3;
+
+ D_801A9450[1] = 0xe0;
+ D_801A9450[2] = 0xe0;
+ D_801A9450[0] = 0xe0;
+ D_801A9450[6] = 0;
+ D_801A9450[5] = 0;
+ D_801A9450[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A9450, 0x28);
+ func_8001CD9C(iVar2, D_801A9450);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c b/src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c
index 8ec243796..5fc709b20 100644
--- a/src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c
+++ b/src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B1488[];
+ extern u8 D_801B14C8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B1488[1] = 0xE0;
+ D_801B1488[2] = 0xE0;
+ D_801B1488[0] = 0xE0;
+ D_801B1488[6] = 0;
+ D_801B1488[5] = 0;
+ D_801B1488[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B1488, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B1488);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B14C8[1] = 0xE0;
+ D_801B14C8[2] = 0x20;
+ D_801B14C8[0] = 0x20;
+ D_801B14C8[5] = 0;
+ D_801B14C8[6] = 0;
+ D_801B14C8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B14C8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B14C8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80189C84[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B1488[];
+ int iVar2;
+ int iVar3;
+
+ D_801B1488[1] = 0xe0;
+ D_801B1488[2] = 0xe0;
+ D_801B1488[0] = 0xe0;
+ D_801B1488[6] = 0;
+ D_801B1488[5] = 0;
+ D_801B1488[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B1488, 0x28);
+ func_8001CD9C(iVar2, D_801B1488);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c b/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c
index cafa08721..dd38a9dfe 100644
--- a/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c
+++ b/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801AB038[];
+ extern u8 D_801AB078[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801AB038[1] = 0xE0;
+ D_801AB038[2] = 0xE0;
+ D_801AB038[0] = 0xE0;
+ D_801AB038[6] = 0;
+ D_801AB038[5] = 0;
+ D_801AB038[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801AB038, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801AB038);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801AB078[1] = 0xE0;
+ D_801AB078[2] = 0x20;
+ D_801AB078[0] = 0x20;
+ D_801AB078[5] = 0;
+ D_801AB078[6] = 0;
+ D_801AB078[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801AB078, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801AB078);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801836E4[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801AB038[];
+ int iVar2;
+ int iVar3;
+
+ D_801AB038[1] = 0xe0;
+ D_801AB038[2] = 0xe0;
+ D_801AB038[0] = 0xe0;
+ D_801AB038[6] = 0;
+ D_801AB038[5] = 0;
+ D_801AB038[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801AB038, 0x28);
+ func_8001CD9C(iVar2, D_801AB038);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c b/src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c
index f8228e891..07571f391 100644
--- a/src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c
+++ b/src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80199EF0[];
+ extern u8 D_80199F30[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80199EF0[1] = 0xE0;
+ D_80199EF0[2] = 0xE0;
+ D_80199EF0[0] = 0xE0;
+ D_80199EF0[6] = 0;
+ D_80199EF0[5] = 0;
+ D_80199EF0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80199EF0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80199EF0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80199F30[1] = 0xE0;
+ D_80199F30[2] = 0x20;
+ D_80199F30[0] = 0x20;
+ D_80199F30[5] = 0;
+ D_80199F30[6] = 0;
+ D_80199F30[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80199F30, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80199F30);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181E60[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80199EF0[];
+ int iVar2;
+ int iVar3;
+
+ D_80199EF0[1] = 0xe0;
+ D_80199EF0[2] = 0xe0;
+ D_80199EF0[0] = 0xe0;
+ D_80199EF0[6] = 0;
+ D_80199EF0[5] = 0;
+ D_80199EF0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80199EF0, 0x28);
+ func_8001CD9C(iVar2, D_80199EF0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c b/src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c
index 08fe08351..c240369fb 100644
--- a/src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c
+++ b/src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A08E0[];
+ extern u8 D_801A0920[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A08E0[1] = 0xE0;
+ D_801A08E0[2] = 0xE0;
+ D_801A08E0[0] = 0xE0;
+ D_801A08E0[6] = 0;
+ D_801A08E0[5] = 0;
+ D_801A08E0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A08E0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A08E0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A0920[1] = 0xE0;
+ D_801A0920[2] = 0x20;
+ D_801A0920[0] = 0x20;
+ D_801A0920[5] = 0;
+ D_801A0920[6] = 0;
+ D_801A0920[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A0920, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A0920);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801831C4[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A08E0[];
+ int iVar2;
+ int iVar3;
+
+ D_801A08E0[1] = 0xe0;
+ D_801A08E0[2] = 0xe0;
+ D_801A08E0[0] = 0xe0;
+ D_801A08E0[6] = 0;
+ D_801A08E0[5] = 0;
+ D_801A08E0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A08E0, 0x28);
+ func_8001CD9C(iVar2, D_801A08E0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c b/src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c
index 353582edb..07fe26d3f 100644
--- a/src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c
+++ b/src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80193CC0[];
+ extern u8 D_80193D00[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80193CC0[1] = 0xE0;
+ D_80193CC0[2] = 0xE0;
+ D_80193CC0[0] = 0xE0;
+ D_80193CC0[6] = 0;
+ D_80193CC0[5] = 0;
+ D_80193CC0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80193CC0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80193CC0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80193D00[1] = 0xE0;
+ D_80193D00[2] = 0x20;
+ D_80193D00[0] = 0x20;
+ D_80193D00[5] = 0;
+ D_80193D00[6] = 0;
+ D_80193D00[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80193D00, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80193D00);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181D1C[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80193CC0[];
+ int iVar2;
+ int iVar3;
+
+ D_80193CC0[1] = 0xe0;
+ D_80193CC0[2] = 0xe0;
+ D_80193CC0[0] = 0xe0;
+ D_80193CC0[6] = 0;
+ D_80193CC0[5] = 0;
+ D_80193CC0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80193CC0, 0x28);
+ func_8001CD9C(iVar2, D_80193CC0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c b/src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c
index a0d2617d0..a15f41b86 100644
--- a/src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c
+++ b/src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019EA90[];
+ extern u8 D_8019EAD0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019EA90[1] = 0xE0;
+ D_8019EA90[2] = 0xE0;
+ D_8019EA90[0] = 0xE0;
+ D_8019EA90[6] = 0;
+ D_8019EA90[5] = 0;
+ D_8019EA90[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019EA90, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019EA90);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019EAD0[1] = 0xE0;
+ D_8019EAD0[2] = 0x20;
+ D_8019EAD0[0] = 0x20;
+ D_8019EAD0[5] = 0;
+ D_8019EAD0[6] = 0;
+ D_8019EAD0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019EAD0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019EAD0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018812C[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019EA90[];
+ int iVar2;
+ int iVar3;
+
+ D_8019EA90[1] = 0xe0;
+ D_8019EA90[2] = 0xe0;
+ D_8019EA90[0] = 0xe0;
+ D_8019EA90[6] = 0;
+ D_8019EA90[5] = 0;
+ D_8019EA90[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019EA90, 0x28);
+ func_8001CD9C(iVar2, D_8019EA90);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c b/src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c
index c785bc3f7..c9c40fe6f 100644
--- a/src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c
+++ b/src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801D4378[];
+ extern u8 D_801D43B8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801D4378[1] = 0xE0;
+ D_801D4378[2] = 0xE0;
+ D_801D4378[0] = 0xE0;
+ D_801D4378[6] = 0;
+ D_801D4378[5] = 0;
+ D_801D4378[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801D4378, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801D4378);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801D43B8[1] = 0xE0;
+ D_801D43B8[2] = 0x20;
+ D_801D43B8[0] = 0x20;
+ D_801D43B8[5] = 0;
+ D_801D43B8[6] = 0;
+ D_801D43B8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D43B8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801D43B8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80196868[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801D4378[];
+ int iVar2;
+ int iVar3;
+
+ D_801D4378[1] = 0xe0;
+ D_801D4378[2] = 0xe0;
+ D_801D4378[0] = 0xe0;
+ D_801D4378[6] = 0;
+ D_801D4378[5] = 0;
+ D_801D4378[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801D4378, 0x28);
+ func_8001CD9C(iVar2, D_801D4378);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c b/src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c
index 4db5e691f..8b5f91d67 100644
--- a/src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c
+++ b/src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B9B90[];
+ extern u8 D_801B9BD0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B9B90[1] = 0xE0;
+ D_801B9B90[2] = 0xE0;
+ D_801B9B90[0] = 0xE0;
+ D_801B9B90[6] = 0;
+ D_801B9B90[5] = 0;
+ D_801B9B90[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B9B90, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B9B90);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B9BD0[1] = 0xE0;
+ D_801B9BD0[2] = 0x20;
+ D_801B9BD0[0] = 0x20;
+ D_801B9BD0[5] = 0;
+ D_801B9BD0[6] = 0;
+ D_801B9BD0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B9BD0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B9BD0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801882F0[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B9B90[];
+ int iVar2;
+ int iVar3;
+
+ D_801B9B90[1] = 0xe0;
+ D_801B9B90[2] = 0xe0;
+ D_801B9B90[0] = 0xe0;
+ D_801B9B90[6] = 0;
+ D_801B9B90[5] = 0;
+ D_801B9B90[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B9B90, 0x28);
+ func_8001CD9C(iVar2, D_801B9B90);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c b/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c
index 52507f247..fdf9391ae 100644
--- a/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c
+++ b/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E13F8[];
+ extern u8 D_801E1438[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E13F8[1] = 0xE0;
+ D_801E13F8[2] = 0xE0;
+ D_801E13F8[0] = 0xE0;
+ D_801E13F8[6] = 0;
+ D_801E13F8[5] = 0;
+ D_801E13F8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E13F8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E13F8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E1438[1] = 0xE0;
+ D_801E1438[2] = 0x20;
+ D_801E1438[0] = 0x20;
+ D_801E1438[5] = 0;
+ D_801E1438[6] = 0;
+ D_801E1438[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E1438, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E1438);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801905AC[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E13F8[];
+ int iVar2;
+ int iVar3;
+
+ D_801E13F8[1] = 0xe0;
+ D_801E13F8[2] = 0xe0;
+ D_801E13F8[0] = 0xe0;
+ D_801E13F8[6] = 0;
+ D_801E13F8[5] = 0;
+ D_801E13F8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E13F8, 0x28);
+ func_8001CD9C(iVar2, D_801E13F8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c b/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c
index b273655d3..e8af4c51e 100644
--- a/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c
+++ b/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801E0578[];
+ extern u8 D_801E05B8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801E0578[1] = 0xE0;
+ D_801E0578[2] = 0xE0;
+ D_801E0578[0] = 0xE0;
+ D_801E0578[6] = 0;
+ D_801E0578[5] = 0;
+ D_801E0578[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801E0578, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801E0578);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801E05B8[1] = 0xE0;
+ D_801E05B8[2] = 0x20;
+ D_801E05B8[0] = 0x20;
+ D_801E05B8[5] = 0;
+ D_801E05B8[6] = 0;
+ D_801E05B8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E05B8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801E05B8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80192A84[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801E0578[];
+ int iVar2;
+ int iVar3;
+
+ D_801E0578[1] = 0xe0;
+ D_801E0578[2] = 0xe0;
+ D_801E0578[0] = 0xe0;
+ D_801E0578[6] = 0;
+ D_801E0578[5] = 0;
+ D_801E0578[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801E0578, 0x28);
+ func_8001CD9C(iVar2, D_801E0578);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c b/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c
index 5d0be8192..9a7a7dcaf 100644
--- a/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c
+++ b/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B0740[];
+ extern u8 D_801B0780[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B0740[1] = 0xE0;
+ D_801B0740[2] = 0xE0;
+ D_801B0740[0] = 0xE0;
+ D_801B0740[6] = 0;
+ D_801B0740[5] = 0;
+ D_801B0740[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B0740, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B0740);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B0780[1] = 0xE0;
+ D_801B0780[2] = 0x20;
+ D_801B0780[0] = 0x20;
+ D_801B0780[5] = 0;
+ D_801B0780[6] = 0;
+ D_801B0780[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B0780, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B0780);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80187F28[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B0740[];
+ int iVar2;
+ int iVar3;
+
+ D_801B0740[1] = 0xe0;
+ D_801B0740[2] = 0xe0;
+ D_801B0740[0] = 0xe0;
+ D_801B0740[6] = 0;
+ D_801B0740[5] = 0;
+ D_801B0740[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B0740, 0x28);
+ func_8001CD9C(iVar2, D_801B0740);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c b/src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c
index d83da255b..0e905853e 100644
--- a/src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c
+++ b/src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019C718[];
+ extern u8 D_8019C758[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019C718[1] = 0xE0;
+ D_8019C718[2] = 0xE0;
+ D_8019C718[0] = 0xE0;
+ D_8019C718[6] = 0;
+ D_8019C718[5] = 0;
+ D_8019C718[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019C718, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019C718);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019C758[1] = 0xE0;
+ D_8019C758[2] = 0x20;
+ D_8019C758[0] = 0x20;
+ D_8019C758[5] = 0;
+ D_8019C758[6] = 0;
+ D_8019C758[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019C758, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019C758);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181268[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019C718[];
+ int iVar2;
+ int iVar3;
+
+ D_8019C718[1] = 0xe0;
+ D_8019C718[2] = 0xe0;
+ D_8019C718[0] = 0xe0;
+ D_8019C718[6] = 0;
+ D_8019C718[5] = 0;
+ D_8019C718[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019C718, 0x28);
+ func_8001CD9C(iVar2, D_8019C718);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c b/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c
index 6a99a2dee..dab255dfb 100644
--- a/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c
+++ b/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801DC038[];
+ extern u8 D_801DC078[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801DC038[1] = 0xE0;
+ D_801DC038[2] = 0xE0;
+ D_801DC038[0] = 0xE0;
+ D_801DC038[6] = 0;
+ D_801DC038[5] = 0;
+ D_801DC038[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801DC038, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801DC038);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801DC078[1] = 0xE0;
+ D_801DC078[2] = 0x20;
+ D_801DC078[0] = 0x20;
+ D_801DC078[5] = 0;
+ D_801DC078[6] = 0;
+ D_801DC078[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801DC078, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801DC078);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_8018F7FC[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801DC038[];
+ int iVar2;
+ int iVar3;
+
+ D_801DC038[1] = 0xe0;
+ D_801DC038[2] = 0xe0;
+ D_801DC038[0] = 0xe0;
+ D_801DC038[6] = 0;
+ D_801DC038[5] = 0;
+ D_801DC038[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801DC038, 0x28);
+ func_8001CD9C(iVar2, D_801DC038);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c b/src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c
index 3d9096cd8..a80cf2d18 100644
--- a/src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c
+++ b/src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801B9298[];
+ extern u8 D_801B92D8[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801B9298[1] = 0xE0;
+ D_801B9298[2] = 0xE0;
+ D_801B9298[0] = 0xE0;
+ D_801B9298[6] = 0;
+ D_801B9298[5] = 0;
+ D_801B9298[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801B9298, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801B9298);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801B92D8[1] = 0xE0;
+ D_801B92D8[2] = 0x20;
+ D_801B92D8[0] = 0x20;
+ D_801B92D8[5] = 0;
+ D_801B92D8[6] = 0;
+ D_801B92D8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B92D8, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801B92D8);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801850EC[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801B9298[];
+ int iVar2;
+ int iVar3;
+
+ D_801B9298[1] = 0xe0;
+ D_801B9298[2] = 0xe0;
+ D_801B9298[0] = 0xe0;
+ D_801B9298[6] = 0;
+ D_801B9298[5] = 0;
+ D_801B9298[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801B9298, 0x28);
+ func_8001CD9C(iVar2, D_801B9298);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c b/src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c
index 47827199b..d5f415972 100644
--- a/src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c
+++ b/src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801CF948[];
+ extern u8 D_801CF988[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801CF948[1] = 0xE0;
+ D_801CF948[2] = 0xE0;
+ D_801CF948[0] = 0xE0;
+ D_801CF948[6] = 0;
+ D_801CF948[5] = 0;
+ D_801CF948[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801CF948, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801CF948);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801CF988[1] = 0xE0;
+ D_801CF988[2] = 0x20;
+ D_801CF988[0] = 0x20;
+ D_801CF988[5] = 0;
+ D_801CF988[6] = 0;
+ D_801CF988[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CF988, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801CF988);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801965B8[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801CF948[];
+ int iVar2;
+ int iVar3;
+
+ D_801CF948[1] = 0xe0;
+ D_801CF948[2] = 0xe0;
+ D_801CF948[0] = 0xe0;
+ D_801CF948[6] = 0;
+ D_801CF948[5] = 0;
+ D_801CF948[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CF948, 0x28);
+ func_8001CD9C(iVar2, D_801CF948);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c b/src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c
index a1ee31fc3..33ea44fe4 100644
--- a/src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c
+++ b/src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801CFA08[];
+ extern u8 D_801CFA48[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801CFA08[1] = 0xE0;
+ D_801CFA08[2] = 0xE0;
+ D_801CFA08[0] = 0xE0;
+ D_801CFA08[6] = 0;
+ D_801CFA08[5] = 0;
+ D_801CFA08[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801CFA08, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801CFA08);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801CFA48[1] = 0xE0;
+ D_801CFA48[2] = 0x20;
+ D_801CFA48[0] = 0x20;
+ D_801CFA48[5] = 0;
+ D_801CFA48[6] = 0;
+ D_801CFA48[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CFA48, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801CFA48);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80194AC8[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801CFA08[];
+ int iVar2;
+ int iVar3;
+
+ D_801CFA08[1] = 0xe0;
+ D_801CFA08[2] = 0xe0;
+ D_801CFA08[0] = 0xe0;
+ D_801CFA08[6] = 0;
+ D_801CFA08[5] = 0;
+ D_801CFA08[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CFA08, 0x28);
+ func_8001CD9C(iVar2, D_801CFA08);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c b/src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c
index 5d9524484..85a491fba 100644
--- a/src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c
+++ b/src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801CEF50[];
+ extern u8 D_801CEF90[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801CEF50[1] = 0xE0;
+ D_801CEF50[2] = 0xE0;
+ D_801CEF50[0] = 0xE0;
+ D_801CEF50[6] = 0;
+ D_801CEF50[5] = 0;
+ D_801CEF50[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801CEF50, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801CEF50);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801CEF90[1] = 0xE0;
+ D_801CEF90[2] = 0x20;
+ D_801CEF90[0] = 0x20;
+ D_801CEF90[5] = 0;
+ D_801CEF90[6] = 0;
+ D_801CEF90[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CEF90, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801CEF90);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80185910[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801CEF50[];
+ int iVar2;
+ int iVar3;
+
+ D_801CEF50[1] = 0xe0;
+ D_801CEF50[2] = 0xe0;
+ D_801CEF50[0] = 0xe0;
+ D_801CEF50[6] = 0;
+ D_801CEF50[5] = 0;
+ D_801CEF50[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801CEF50, 0x28);
+ func_8001CD9C(iVar2, D_801CEF50);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c b/src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c
index 294784076..1cd5d0e3f 100644
--- a/src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c
+++ b/src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801AA000[];
+ extern u8 D_801AA040[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801AA000[1] = 0xE0;
+ D_801AA000[2] = 0xE0;
+ D_801AA000[0] = 0xE0;
+ D_801AA000[6] = 0;
+ D_801AA000[5] = 0;
+ D_801AA000[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801AA000, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801AA000);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801AA040[1] = 0xE0;
+ D_801AA040[2] = 0x20;
+ D_801AA040[0] = 0x20;
+ D_801AA040[5] = 0;
+ D_801AA040[6] = 0;
+ D_801AA040[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801AA040, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801AA040);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_801847C0[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801AA000[];
+ int iVar2;
+ int iVar3;
+
+ D_801AA000[1] = 0xe0;
+ D_801AA000[2] = 0xe0;
+ D_801AA000[0] = 0xe0;
+ D_801AA000[6] = 0;
+ D_801AA000[5] = 0;
+ D_801AA000[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801AA000, 0x28);
+ func_8001CD9C(iVar2, D_801AA000);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c b/src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c
index bd67648f4..789fea4a3 100644
--- a/src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c
+++ b/src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8019AB50[];
+ extern u8 D_8019AB90[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8019AB50[1] = 0xE0;
+ D_8019AB50[2] = 0xE0;
+ D_8019AB50[0] = 0xE0;
+ D_8019AB50[6] = 0;
+ D_8019AB50[5] = 0;
+ D_8019AB50[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8019AB50, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8019AB50);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8019AB90[1] = 0xE0;
+ D_8019AB90[2] = 0x20;
+ D_8019AB90[0] = 0x20;
+ D_8019AB90[5] = 0;
+ D_8019AB90[6] = 0;
+ D_8019AB90[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019AB90, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8019AB90);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80189A7C[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8019AB50[];
+ int iVar2;
+ int iVar3;
+
+ D_8019AB50[1] = 0xe0;
+ D_8019AB50[2] = 0xe0;
+ D_8019AB50[0] = 0xe0;
+ D_8019AB50[6] = 0;
+ D_8019AB50[5] = 0;
+ D_8019AB50[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8019AB50, 0x28);
+ func_8001CD9C(iVar2, D_8019AB50);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c b/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c
index 917e5e222..9fbbbf06d 100644
--- a/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c
+++ b/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c
@@ -10213,7 +10213,96 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801F54F8[];
+ extern u8 D_801F5538[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801F54F8[1] = 0xE0;
+ D_801F54F8[2] = 0xE0;
+ D_801F54F8[0] = 0xE0;
+ D_801F54F8[6] = 0;
+ D_801F54F8[5] = 0;
+ D_801F54F8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801F54F8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801F54F8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801F5538[1] = 0xE0;
+ D_801F5538[2] = 0x20;
+ D_801F5538[0] = 0x20;
+ D_801F5538[5] = 0;
+ D_801F5538[6] = 0;
+ D_801F5538[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801F5538, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801F5538);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
@@ -10234,7 +10323,41 @@ INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8016D5E
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8016D64C);
-INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801F54F8[];
+ int iVar2;
+ int iVar3;
+
+ D_801F54F8[1] = 0xe0;
+ D_801F54F8[2] = 0xe0;
+ D_801F54F8[0] = 0xe0;
+ D_801F54F8[6] = 0;
+ D_801F54F8[5] = 0;
+ D_801F54F8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801F54F8, 0x28);
+ func_8001CD9C(iVar2, D_801F54F8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8016D778);
diff --git a/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c b/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c
index 03eacb48b..6247d6ffa 100644
--- a/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c
+++ b/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c
@@ -10213,7 +10213,96 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801C6C60[];
+ extern u8 D_801C6CA0[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801C6C60[1] = 0xE0;
+ D_801C6C60[2] = 0xE0;
+ D_801C6C60[0] = 0xE0;
+ D_801C6C60[6] = 0;
+ D_801C6C60[5] = 0;
+ D_801C6C60[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801C6C60, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801C6C60);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801C6CA0[1] = 0xE0;
+ D_801C6CA0[2] = 0x20;
+ D_801C6CA0[0] = 0x20;
+ D_801C6CA0[5] = 0;
+ D_801C6CA0[6] = 0;
+ D_801C6CA0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C6CA0, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801C6CA0);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
@@ -10234,7 +10323,41 @@ INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8016D5E
INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8016D64C);
-INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801C6C60[];
+ int iVar2;
+ int iVar3;
+
+ D_801C6C60[1] = 0xe0;
+ D_801C6C60[2] = 0xe0;
+ D_801C6C60[0] = 0xe0;
+ D_801C6C60[6] = 0;
+ D_801C6C60[5] = 0;
+ D_801C6C60[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801C6C60, 0x28);
+ func_8001CD9C(iVar2, D_801C6C60);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8016D778);
diff --git a/src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c b/src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c
index 876e62af8..1b6a0e934 100644
--- a/src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c
+++ b/src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c
@@ -3002,7 +3002,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_80195A38[];
+ extern u8 D_80195A78[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_80195A38[1] = 0xE0;
+ D_80195A38[2] = 0xE0;
+ D_80195A38[0] = 0xE0;
+ D_80195A38[6] = 0;
+ D_80195A38[5] = 0;
+ D_80195A38[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_80195A38, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_80195A38);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_80195A78[1] = 0xE0;
+ D_80195A78[2] = 0x20;
+ D_80195A78[0] = 0x20;
+ D_80195A78[5] = 0;
+ D_80195A78[6] = 0;
+ D_80195A78[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80195A78, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_80195A78);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80180594[])(void);
@@ -3020,7 +3111,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_80195A38[];
+ int iVar2;
+ int iVar3;
+
+ D_80195A38[1] = 0xe0;
+ D_80195A38[2] = 0xe0;
+ D_80195A38[0] = 0xe0;
+ D_80195A38[6] = 0;
+ D_80195A38[5] = 0;
+ D_80195A38[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_80195A38, 0x28);
+ func_8001CD9C(iVar2, D_80195A38);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c b/src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c
index ff35287c8..9ea8a0940 100644
--- a/src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c
+++ b/src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c
@@ -3003,7 +3003,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A30C8[];
+ extern u8 D_801A3108[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A30C8[1] = 0xE0;
+ D_801A30C8[2] = 0xE0;
+ D_801A30C8[0] = 0xE0;
+ D_801A30C8[6] = 0;
+ D_801A30C8[5] = 0;
+ D_801A30C8[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A30C8, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A30C8);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A3108[1] = 0xE0;
+ D_801A3108[2] = 0x20;
+ D_801A3108[0] = 0x20;
+ D_801A3108[5] = 0;
+ D_801A3108[6] = 0;
+ D_801A3108[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A3108, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A3108);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
extern void (*D_80181038[])(void);
@@ -3021,7 +3112,41 @@ DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */
DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */
-INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A30C8[];
+ int iVar2;
+ int iVar3;
+
+ D_801A30C8[1] = 0xe0;
+ D_801A30C8[2] = 0xe0;
+ D_801A30C8[0] = 0xe0;
+ D_801A30C8[6] = 0;
+ D_801A30C8[5] = 0;
+ D_801A30C8[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A30C8, 0x28);
+ func_8001CD9C(iVar2, D_801A30C8);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */
diff --git a/src/ov_SC07_010/ov_SC07_010_o2b.c b/src/ov_SC07_010/ov_SC07_010_o2b.c
index 40f843975..34143431a 100644
--- a/src/ov_SC07_010/ov_SC07_010_o2b.c
+++ b/src/ov_SC07_010/ov_SC07_010_o2b.c
@@ -11131,7 +11131,98 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+extern void RotMatrixYXZ(void *a, void *b);
+extern void ApplyMatrixSV(void *a, void *b, void *c);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_801A7158[];
+ extern u8 D_801A7198[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_801A7158[1] = 0xE0;
+ D_801A7158[2] = 0xE0;
+ D_801A7158[0] = 0xE0;
+ D_801A7158[6] = 0;
+ D_801A7158[5] = 0;
+ D_801A7158[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_801A7158, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_801A7158);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_801A7198[1] = 0xE0;
+ D_801A7198[2] = 0x20;
+ D_801A7198[0] = 0x20;
+ D_801A7198[5] = 0;
+ D_801A7198[6] = 0;
+ D_801A7198[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A7198, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_801A7198);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
@@ -11152,7 +11243,41 @@ INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_8016D5EC);
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_8016D64C);
-INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_801A7158[];
+ int iVar2;
+ int iVar3;
+
+ D_801A7158[1] = 0xe0;
+ D_801A7158[2] = 0xe0;
+ D_801A7158[0] = 0xe0;
+ D_801A7158[6] = 0;
+ D_801A7158[5] = 0;
+ D_801A7158[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_801A7158, 0x28);
+ func_8001CD9C(iVar2, D_801A7158);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_8016D778);
diff --git a/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c b/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c
index ad9075103..c3d994a35 100644
--- a/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c
+++ b/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c
@@ -10209,7 +10209,96 @@ void func_8016D19C(void *a0) {
}
-INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8016D1D8);
+
+
+
+
+
+typedef struct { short vx, vy, vz, pad; } SVEC_L1; /* 8 bytes */
+typedef struct { int a[8]; } MTX_L1; /* 32 bytes */
+
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void*);
+extern void func_80147324(int a);
+extern int rand(void);
+
+void func_8016D1D8(int param_1) {
+
+ extern u8 D_8018F7F0[];
+ extern u8 D_8018F830[];
+ int iVar5;
+ int iVar2;
+ u16 uVar1;
+ unsigned int uVar3;
+ short sVar4;
+ SVEC_L1 sv;
+ MTX_L1 mtx;
+
+ iVar5 = *(int *)(param_1 + 0x34);
+ if (*(int *)(param_1 + 0x2c) == 0) {
+ D_8018F7F0[1] = 0xE0;
+ D_8018F7F0[2] = 0xE0;
+ D_8018F7F0[0] = 0xE0;
+ D_8018F7F0[6] = 0;
+ D_8018F7F0[5] = 0;
+ D_8018F7F0[4] = 0;
+ iVar5 = ((int (*)(void))func_801465C0)();
+ if (iVar5 != 0) {
+ int pp;
+ *(int *)(param_1 + 0x20) = iVar5;
+ ((void (*)(void *, int))func_800233CC)(D_8018F7F0, 0x28);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar5, D_8018F7F0);
+ *(short *)(iVar5 + 0x1a) = 0x1400;
+ *(u32 *)(iVar5 + 4) |= 0x50000000;
+ pp = *(int *)(param_1 + 0x30);
+ *(u16 *)(param_1 + 0x28) = *(u16 *)(pp + 0x36);
+ *(u16 *)(param_1 + 0x12) = *(u16 *)(pp + 6);
+ *(short *)(param_1 + 0x16) = *(u16 *)(pp + 0xa) - 0x28;
+ uVar1 = *(u16 *)(pp + 0xe);
+ *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
+ *(u16 *)(param_1 + 0x1a) = uVar1;
+ }
+ *(int *)(param_1 + 0x1c) = 8;
+ func_80147324(0x647);
+ } else {
+ D_8018F830[1] = 0xE0;
+ D_8018F830[2] = 0x20;
+ D_8018F830[0] = 0x20;
+ D_8018F830[5] = 0;
+ D_8018F830[6] = 0;
+ D_8018F830[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018F830, 0x18);
+ ((void (*)(void *, void *))func_8001CD9C)((void *)iVar2, D_8018F830);
+ *(u32 *)(iVar2 + 4) |= 0x50000000;
+ *(u16 *)(param_1 + 6) = *(u16 *)(iVar5 + 6);
+ *(u16 *)(param_1 + 0xa) = *(u16 *)(iVar5 + 0xa);
+ *(u16 *)(param_1 + 0xe) = *(u16 *)(iVar5 + 0xe);
+ uVar3 = rand();
+ sv.vx = ((uVar3 & 0x7F) * 8) - 0x80;
+ sv.vy = (uVar3 & 0x7F00) >> 3;
+ sv.vz = 0;
+ RotMatrixYXZ(&sv, &mtx);
+ sv.vy = 0;
+ sv.vx = 0;
+ sv.vz = 0x240;
+ ApplyMatrixSV(&mtx, &sv, &sv);
+ *(int *)(param_1 + 0x10) = (int)sv.vx << 0xc;
+ *(int *)(param_1 + 0x14) = (int)sv.vy << 0xc;
+ sVar4 = (uVar3 & 0x3F0) + 0x200;
+ *(int *)(param_1 + 0x18) = (int)sv.vz << 0xc;
+ *(short *)(iVar2 + 0x1a) = sVar4;
+ *(short *)(iVar2 + 0x18) = sVar4;
+ *(int *)(param_1 + 0x1c) = 0x10;
+ *(short *)(param_1 + 2) = 2;
+ }
+ }
+}
+
@@ -10230,7 +10319,41 @@ INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8016D5E
INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8016D64C);
-INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8016D688);
+
+extern void func_801465C0(void);
+extern void func_800233CC(void*, unsigned short);
+extern void func_8001CD9C(int, void *);
+
+void func_8016D688(int param_1)
+{
+
+ extern unsigned char D_8018F7F0[];
+ int iVar2;
+ int iVar3;
+
+ D_8018F7F0[1] = 0xe0;
+ D_8018F7F0[2] = 0xe0;
+ D_8018F7F0[0] = 0xe0;
+ D_8018F7F0[6] = 0;
+ D_8018F7F0[5] = 0;
+ D_8018F7F0[4] = 0;
+ iVar2 = ((int (*)(void))func_801465C0)();
+ if (iVar2 != 0) {
+ *(int *)(param_1 + 0x20) = iVar2;
+ ((void (*)(void *, int))func_800233CC)(D_8018F7F0, 0x28);
+ func_8001CD9C(iVar2, D_8018F7F0);
+ *(unsigned short *)(iVar2 + 0x1a) = 0x1400;
+ *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x50000000;
+ iVar3 = *(int *)(param_1 + 0x30);
+ *(unsigned short *)(param_1 + 0x28) = *(unsigned short *)(iVar3 + 0x36);
+ *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(iVar3 + 6);
+ *(short *)(param_1 + 0x16) = *(unsigned short *)(iVar3 + 0xa) - 0x28;
+ *(unsigned short *)(param_1 + 0x1a) = *(unsigned short *)(iVar3 + 0xe);
+ *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1;
+ }
+ return;
+}
+
INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8016D778);