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);