From 9d5e8cf129c9e34fc16cf060b6b663562ec71347 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Tue, 22 Oct 2024 22:36:25 -0600 Subject: [PATCH 1/8] Update dtk-template & README.md --- .github/workflows/build.yml | 5 +- .gitignore | 40 +- .vscode.example/c_cpp_properties.json | 23 - .vscode.example/settings.json | 26 - .vscode/extensions.json | 12 + .vscode/settings.json | 33 ++ .vscode/tasks.json | 16 + README.md | 40 +- config/GMPE01_00/config.yml | 201 ++++---- configure.py | 34 +- tools/decompctx.py | 2 +- tools/download_tool.py | 1 + tools/project.py | 681 ++++++++++++++++++-------- 13 files changed, 726 insertions(+), 388 deletions(-) delete mode 100644 .vscode.example/c_cpp_properties.json delete mode 100644 .vscode.example/settings.json create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4dfcd1c6..91dcc72b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,7 +6,7 @@ on: jobs: build: - container: ghcr.io/rainchus/marioparty4-build:main + container: ghcr.io/mariopartyrd/mp-gc-build:main runs-on: ubuntu-latest strategy: @@ -15,11 +15,10 @@ jobs: version: [GMPE01_00] steps: - # Checkout the repository (shallow clone) + # Checkout the repository - name: Checkout uses: actions/checkout@v4 with: - fetch-depth: 0 submodules: recursive # Set Git config diff --git a/.gitignore b/.gitignore index 81558d47..275db754 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,35 @@ +# IDE folders +.idea/ +.vs/ + +# Caches __pycache__ -.idea -.vscode -.ninja_* -*.exe -build -build.ninja -objdiff.json +.mypy_cache +.cache/ + +# Original files orig/*/* !orig/*/.gitkeep +*.dol +*.rel +*.elf +*.o +*.map +*.MAP + +# Build files +build/ +.ninja_* +build.ninja + +# decompctx output +ctx.* +*.ctx + +# Generated configs +objdiff.json +compile_commands.json + +# Miscellaneous /*.txt -ctx.c -tools/output/* \ No newline at end of file +*.exe diff --git a/.vscode.example/c_cpp_properties.json b/.vscode.example/c_cpp_properties.json deleted file mode 100644 index 3bace88c..00000000 --- a/.vscode.example/c_cpp_properties.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "configurations": [ - { - "name": "Linux", - "includePath": [ - "${workspaceFolder}/include/**", - "${workspaceFolder}/build/GMPE01_00/include/**" - ], - "cStandard": "c99", - "cppStandard": "c++98", - "intelliSenseMode": "linux-clang-x86", - "compilerPath": "", - "configurationProvider": "ms-vscode.makefile-tools", - "browse": { - "path": [ - "${workspaceFolder}/include" - ], - "limitSymbolsToIncludedHeaders": true - } - } - ], - "version": 4 -} diff --git a/.vscode.example/settings.json b/.vscode.example/settings.json deleted file mode 100644 index 60e7e27d..00000000 --- a/.vscode.example/settings.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "[c]": { - "files.encoding": "utf8", - "editor.defaultFormatter": "xaver.clang-format" - }, - "[cpp]": { - "files.encoding": "utf8", - "editor.defaultFormatter": "xaver.clang-format" - }, - "[python]": { - "editor.defaultFormatter": "ms-python.black-formatter" - }, - "files.insertFinalNewline": true, - "files.trimFinalNewlines": true, - "files.associations": { - "*.inc": "cpp" - }, - "search.useIgnoreFiles": false, - "search.exclude": { - "build/*/config.json": true, - "build/**/*.MAP": true, - "build.ninja": true, - ".ninja_*": true, - "objdiff.json": true - } -} \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..c20797ff --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,12 @@ +{ + "recommendations": [ + "llvm-vs-code-extensions.vscode-clangd", + "ms-python.black-formatter", + "ms-python.flake8", + ], + "unwantedRecommendations": [ + "ms-vscode.cmake-tools", + "ms-vscode.cpptools-extension-pack", + "ms-vscode.cpptools", + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..e0b63102 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,33 @@ +{ + "[c]": { + "files.encoding": "utf8", + "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd" + }, + "[cpp]": { + "files.encoding": "utf8", + "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd" + }, + "[python]": { + "editor.defaultFormatter": "ms-python.black-formatter" + }, + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true, + "files.associations": { + "*.inc": "c", + ".clangd": "yaml" + }, + "search.useIgnoreFiles": false, + "search.exclude": { + "build/*/config.json": true, + "build/**/*.MAP": true, + "build.ninja": true, + ".ninja_*": true, + "objdiff.json": true, + "progress.json": true, + "report.json": true, + "compile_commands.json": true, + }, + // Disable C/C++ IntelliSense, use clangd instead + "C_Cpp.intelliSenseEngine": "disabled", + "cmake.ignoreCMakeListsMissing": true, +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..6dc12130 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,16 @@ +{ + // Use Ctrl+Shift+B to run build tasks. + // Or "Run Build Task" in the Command Palette. + "version": "2.0.0", + "tasks": [ + { + "label": "ninja", + "type": "shell", + "command": "ninja", + "group": { + "kind": "build", + "isDefault": true + } + }, + ] +} diff --git a/README.md b/README.md index bca1a5fb..af12d2d7 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ Mario Party 4 -[![Build Status]][actions] ![Progress] ![DOL Progress] ![RELs Progress] [![Discord Badge]][discord] +[![Build Status]][actions] [![Progress]][progress site] [![DOL Progress]][progress site] [![RELs Progress]][progress site] [![Discord Badge]][discord] ============= -[Build Status]: https://github.com/Rainchus/marioparty4/actions/workflows/build.yml/badge.svg -[actions]: https://github.com/Rainchus/marioparty4/actions/workflows/build.yml -[Progress]: https://img.shields.io/endpoint?label=Code&url=https%3A%2F%2Fprogress.decomp.club%2Fdata%2Fmarioparty4%2FGMPE01_00%2Fall%2F%3Fmode%3Dshield%26measure%3Dcode -[DOL Progress]: https://img.shields.io/endpoint?label=DOL&url=https%3A%2F%2Fprogress.decomp.club%2Fdata%2Fmarioparty4%2FGMPE01_00%2Fdol%2F%3Fmode%3Dshield%26measure%3Dcode -[RELs Progress]: https://img.shields.io/endpoint?label=RELs&url=https%3A%2F%2Fprogress.decomp.club%2Fdata%2Fmarioparty4%2FGMPE01_00%2Fmodules%2F%3Fmode%3Dshield%26measure%3Dcode +[Build Status]: https://github.com/mariopartyrd/marioparty4/actions/workflows/build.yml/badge.svg +[actions]: https://github.com/mariopartyrd/marioparty4/actions/workflows/build.yml +[Progress]: https://decomp.dev/mariopartyrd/marioparty4.svg?mode=shield&measure=code&label=Code&category=all +[DOL Progress]: https://decomp.dev/mariopartyrd/marioparty4.svg?mode=shield&measure=code&label=DOL&category=dol +[RELs Progress]: https://decomp.dev/mariopartyrd/marioparty4.svg?mode=shield&measure=code&label=RELs&category=modules +[progress site]: https://decomp.dev/mariopartyrd/marioparty4 [Discord Badge]: https://img.shields.io/discord/994839212618690590?color=%237289DA&logo=discord&logoColor=%23FFFFFF [discord]: https://discord.gg/T4faGveujK @@ -59,28 +60,29 @@ Building - Clone the repository: ``` - git clone https://github.com/Rainchus/marioparty4.git + git clone https://github.com/mariopartyrd/marioparty4.git ``` -- Using [Dolphin Emulator](https://dolphin-emu.org/), extract your game to `orig/GMPE01_00`. -![](assets/dolphin-extract.png) - - To save space, the only necessary files are the following. Any others can be deleted. - - `sys/main.dol` - - `files/dll/*.rel` + +- Initialize and update submodules: + + ```sh + git submodule update --init --recursive + ``` + +- Copy your game's disc image to `orig/GMPE01_00`. + - Supported formats: ISO (GCM), RVZ, WIA, WBFS, CISO, NFS, GCZ, TGC + - After the initial build, the disc image can be deleted to save space. + - Configure: ``` python configure.py ``` - To use a version other than `GMPE01_00` (USA), specify it with `--version`. + - Build: ``` ninja ``` -Visual Studio Code -================== - -If desired, use the recommended Visual Studio Code settings by renaming the `.vscode.example` directory to `.vscode`. - Diffing ======= @@ -89,5 +91,3 @@ Once the initial build succeeds, an `objdiff.json` should exist in the project r Download the latest release from [encounter/objdiff](https://github.com/encounter/objdiff). Under project settings, set `Project directory`. The configuration should be loaded automatically. Select an object from the left sidebar to begin diffing. Changes to the project will rebuild automatically: changes to source files, headers, `configure.py`, `splits.txt` or `symbols.txt`. - -![](assets/objdiff.png) diff --git a/config/GMPE01_00/config.yml b/config/GMPE01_00/config.yml index 8e687a60..81fc8915 100644 --- a/config/GMPE01_00/config.yml +++ b/config/GMPE01_00/config.yml @@ -1,4 +1,5 @@ -object: orig/GMPE01_00/sys/main.dol +object_base: orig/GMPE01_00 +object: sys/main.dol hash: ff8d894776d37167e454ae3f0c9e644407c1e6b1 symbols: config/GMPE01_00/symbols.txt splits: config/GMPE01_00/splits.txt @@ -7,12 +8,12 @@ mw_comment_version: 10 # GC 2.6 linker force_active: [__register_global_object, lbl_801D40D0, _kerent] modules: -- object: orig/GMPE01_00/files/dll/_minigameDll.rel +- object: files/dll/_minigameDll.rel hash: 3fbbebc0440f0d91432ecd6a27ef68d5309b87b6 symbols: config/GMPE01_00/rels/_minigameDll/symbols.txt splits: config/GMPE01_00/rels/_minigameDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/bootDll.rel +- object: files/dll/bootDll.rel hash: bdfca4f9bce60519badca0d2d0a5b71f6d99706f symbols: config/GMPE01_00/rels/bootDll/symbols.txt splits: config/GMPE01_00/rels/bootDll/splits.txt @@ -21,487 +22,487 @@ modules: - symbol: logoNintendoData binary: logoNintendoData.bin header: logoNintendoData.inc -- object: orig/GMPE01_00/files/dll/instDll.rel +- object: files/dll/instDll.rel hash: f09399fee83c63abfe2adb25341152adad959a93 symbols: config/GMPE01_00/rels/instDll/symbols.txt splits: config/GMPE01_00/rels/instDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m302Dll.rel +- object: files/dll/m302Dll.rel hash: f1ad7b5a5198a14d34141b28c654bc1704c9dcd9 symbols: config/GMPE01_00/rels/m302Dll/symbols.txt splits: config/GMPE01_00/rels/m302Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m303Dll.rel +- object: files/dll/m303Dll.rel hash: f1ad7b5a5198a14d34141b28c654bc1704c9dcd9 symbols: config/GMPE01_00/rels/m303Dll/symbols.txt splits: config/GMPE01_00/rels/m303Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m330Dll.rel +- object: files/dll/m330Dll.rel hash: f1ad7b5a5198a14d34141b28c654bc1704c9dcd9 symbols: config/GMPE01_00/rels/m330Dll/symbols.txt splits: config/GMPE01_00/rels/m330Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m333Dll.rel +- object: files/dll/m333Dll.rel hash: f1ad7b5a5198a14d34141b28c654bc1704c9dcd9 symbols: config/GMPE01_00/rels/m333Dll/symbols.txt splits: config/GMPE01_00/rels/m333Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m402Dll.rel +- object: files/dll/m402Dll.rel hash: 136d192a1464e593cd0b767691dfa012c58730ed symbols: config/GMPE01_00/rels/m402Dll/symbols.txt splits: config/GMPE01_00/rels/m402Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m403Dll.rel +- object: files/dll/m403Dll.rel hash: b834eb5f8a2749f3be52aa9023cc81403075eba9 symbols: config/GMPE01_00/rels/m403Dll/symbols.txt splits: config/GMPE01_00/rels/m403Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m404Dll.rel +- object: files/dll/m404Dll.rel hash: c46b7814cefa8e5dee8dfd1883e369877ac78c0c symbols: config/GMPE01_00/rels/m404Dll/symbols.txt splits: config/GMPE01_00/rels/m404Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m405Dll.rel +- object: files/dll/m405Dll.rel hash: 7857e0822079d0c7bbfec756a7cf4206b754d100 symbols: config/GMPE01_00/rels/m405Dll/symbols.txt splits: config/GMPE01_00/rels/m405Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m406Dll.rel +- object: files/dll/m406Dll.rel hash: bea398ac8abe018dce80914e6b3d6d7578eb86bb symbols: config/GMPE01_00/rels/m406Dll/symbols.txt splits: config/GMPE01_00/rels/m406Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m407dll.rel +- object: files/dll/m407dll.rel hash: 6f63338c417ab62740a40f0968c03c570b440b8a symbols: config/GMPE01_00/rels/m407dll/symbols.txt splits: config/GMPE01_00/rels/m407dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m408Dll.rel +- object: files/dll/m408Dll.rel hash: 7a8ff34b4bcaff39037c9e2f717505cbc63d4230 symbols: config/GMPE01_00/rels/m408Dll/symbols.txt splits: config/GMPE01_00/rels/m408Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m409Dll.rel +- object: files/dll/m409Dll.rel hash: 984f031fc50121369d5b04d1ec2c54322efdf281 symbols: config/GMPE01_00/rels/m409Dll/symbols.txt splits: config/GMPE01_00/rels/m409Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m410Dll.rel +- object: files/dll/m410Dll.rel hash: 94e308e409038f7919177d190110ce589cc8a8e8 symbols: config/GMPE01_00/rels/m410Dll/symbols.txt splits: config/GMPE01_00/rels/m410Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m411Dll.rel +- object: files/dll/m411Dll.rel hash: 26ac81a3db9f3850bb43b23cdb7168dcddccaeea symbols: config/GMPE01_00/rels/m411Dll/symbols.txt splits: config/GMPE01_00/rels/m411Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m412Dll.rel +- object: files/dll/m412Dll.rel hash: 3ebb173a52aaea75acb414f73264e72a2943c6f8 symbols: config/GMPE01_00/rels/m412Dll/symbols.txt splits: config/GMPE01_00/rels/m412Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m413Dll.rel +- object: files/dll/m413Dll.rel hash: e59d4b66b1f57637c335b4745a696e3dbcb4bbe3 symbols: config/GMPE01_00/rels/m413Dll/symbols.txt splits: config/GMPE01_00/rels/m413Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m414Dll.rel +- object: files/dll/m414Dll.rel hash: f7fe1aa24c7b6b8ca2bb28922696c0392dc7d029 symbols: config/GMPE01_00/rels/m414Dll/symbols.txt splits: config/GMPE01_00/rels/m414Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m415Dll.rel +- object: files/dll/m415Dll.rel hash: 3c697b54ebdd01971b99af8c812b4850fa181f4f symbols: config/GMPE01_00/rels/m415Dll/symbols.txt splits: config/GMPE01_00/rels/m415Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m416Dll.rel +- object: files/dll/m416Dll.rel hash: d26526935455b26beb2b9eaed1bfae3f3f458c25 symbols: config/GMPE01_00/rels/m416Dll/symbols.txt splits: config/GMPE01_00/rels/m416Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m417Dll.rel +- object: files/dll/m417Dll.rel hash: b5c3805ec3cb023299ed09b782b92441085d0054 symbols: config/GMPE01_00/rels/m417Dll/symbols.txt splits: config/GMPE01_00/rels/m417Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m418Dll.rel +- object: files/dll/m418Dll.rel hash: 0d02610005c46ad4f47ff51f5e154f9b0d16a4f4 symbols: config/GMPE01_00/rels/m418Dll/symbols.txt splits: config/GMPE01_00/rels/m418Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m419Dll.rel +- object: files/dll/m419Dll.rel hash: bbceb138b8cc43e578179a7892801633892cb03c symbols: config/GMPE01_00/rels/m419Dll/symbols.txt splits: config/GMPE01_00/rels/m419Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m420dll.rel +- object: files/dll/m420dll.rel hash: 2ef4ee163bc2aa15f87c8c89afb4f28939f088c8 symbols: config/GMPE01_00/rels/m420dll/symbols.txt splits: config/GMPE01_00/rels/m420dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m421Dll.rel +- object: files/dll/m421Dll.rel hash: 216a99780a3915d7096385bbcddfc979ab3a4025 symbols: config/GMPE01_00/rels/m421Dll/symbols.txt splits: config/GMPE01_00/rels/m421Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m422Dll.rel +- object: files/dll/m422Dll.rel hash: 9ad72ba6c3ac277e521dca2fc1372a5d31c18930 symbols: config/GMPE01_00/rels/m422Dll/symbols.txt splits: config/GMPE01_00/rels/m422Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m423Dll.rel +- object: files/dll/m423Dll.rel hash: 377c6a56b3faf8f991ec4fccaf1972cb41910438 symbols: config/GMPE01_00/rels/m423Dll/symbols.txt splits: config/GMPE01_00/rels/m423Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m424Dll.rel +- object: files/dll/m424Dll.rel hash: 5814f59970268406bd86a86d0fee5a09359ab506 symbols: config/GMPE01_00/rels/m424Dll/symbols.txt splits: config/GMPE01_00/rels/m424Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m425Dll.rel +- object: files/dll/m425Dll.rel hash: ecaeae453393d228f2769aab9c022820bcdb58f1 symbols: config/GMPE01_00/rels/m425Dll/symbols.txt splits: config/GMPE01_00/rels/m425Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m426Dll.rel +- object: files/dll/m426Dll.rel hash: c240697a57cc08d34e27e89d8d3455454799e8b1 symbols: config/GMPE01_00/rels/m426Dll/symbols.txt splits: config/GMPE01_00/rels/m426Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m427Dll.rel +- object: files/dll/m427Dll.rel hash: c78a0857e9c44fb33bd4fdc3e392a15b4dec0431 symbols: config/GMPE01_00/rels/m427Dll/symbols.txt splits: config/GMPE01_00/rels/m427Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m428Dll.rel +- object: files/dll/m428Dll.rel hash: a1d5672d8ef0aac089dda00287fd68bf2bb67807 symbols: config/GMPE01_00/rels/m428Dll/symbols.txt splits: config/GMPE01_00/rels/m428Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m429Dll.rel +- object: files/dll/m429Dll.rel hash: d25f198ce04aa5ca7b54ada9de52f722bd751447 symbols: config/GMPE01_00/rels/m429Dll/symbols.txt splits: config/GMPE01_00/rels/m429Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m430Dll.rel +- object: files/dll/m430Dll.rel hash: 8bef3e2f51db3afa82dcaf64e209067a58c04bf9 symbols: config/GMPE01_00/rels/m430Dll/symbols.txt splits: config/GMPE01_00/rels/m430Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m431Dll.rel +- object: files/dll/m431Dll.rel hash: 7148ec21ca6e0aa8d213a1dce0aeb9d93a9b496c symbols: config/GMPE01_00/rels/m431Dll/symbols.txt splits: config/GMPE01_00/rels/m431Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m432Dll.rel +- object: files/dll/m432Dll.rel hash: 096f5a85bb837af68bd491e962eda7726d8d26a0 symbols: config/GMPE01_00/rels/m432Dll/symbols.txt splits: config/GMPE01_00/rels/m432Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m433Dll.rel +- object: files/dll/m433Dll.rel hash: c36f56264ab9cf74b882c2544cdb9b89f6a098cd symbols: config/GMPE01_00/rels/m433Dll/symbols.txt splits: config/GMPE01_00/rels/m433Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m434Dll.rel +- object: files/dll/m434Dll.rel hash: 55912c8441002b61701fc8c769f707c69e2740c1 symbols: config/GMPE01_00/rels/m434Dll/symbols.txt splits: config/GMPE01_00/rels/m434Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m435Dll.rel +- object: files/dll/m435Dll.rel hash: 56f1fc330e8b97fa426fac3d901b1feed946566e symbols: config/GMPE01_00/rels/m435Dll/symbols.txt splits: config/GMPE01_00/rels/m435Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m436Dll.rel +- object: files/dll/m436Dll.rel hash: e53f3d381bfb99351483e70b9d79c2e8676f73d5 symbols: config/GMPE01_00/rels/m436Dll/symbols.txt splits: config/GMPE01_00/rels/m436Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m437Dll.rel +- object: files/dll/m437Dll.rel hash: 404698b53acad1231e00d84d0196ddce8d9d9dd9 symbols: config/GMPE01_00/rels/m437Dll/symbols.txt splits: config/GMPE01_00/rels/m437Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m438Dll.rel +- object: files/dll/m438Dll.rel hash: 9bddf4b81b9a792260000abe2631da493a8b8564 symbols: config/GMPE01_00/rels/m438Dll/symbols.txt splits: config/GMPE01_00/rels/m438Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m439Dll.rel +- object: files/dll/m439Dll.rel hash: a2a18c9d26dedfa8e2ae003c3a2e1bdcc1cbd4cc symbols: config/GMPE01_00/rels/m439Dll/symbols.txt splits: config/GMPE01_00/rels/m439Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m440Dll.rel +- object: files/dll/m440Dll.rel hash: 227ca13bcd72059bdd506e9611d9b52f661af6c5 symbols: config/GMPE01_00/rels/m440Dll/symbols.txt splits: config/GMPE01_00/rels/m440Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m441Dll.rel +- object: files/dll/m441Dll.rel hash: d6cbf72115374e06ffea3f15001977c288a9c3fb symbols: config/GMPE01_00/rels/m441Dll/symbols.txt splits: config/GMPE01_00/rels/m441Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m442Dll.rel +- object: files/dll/m442Dll.rel hash: 347fcb836b5266dfe3d1088e1aa796c043b0fe60 symbols: config/GMPE01_00/rels/m442Dll/symbols.txt splits: config/GMPE01_00/rels/m442Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m443Dll.rel +- object: files/dll/m443Dll.rel hash: 77444c6739a4d9390f30ba56c5fcd82ee4efc0c2 symbols: config/GMPE01_00/rels/m443Dll/symbols.txt splits: config/GMPE01_00/rels/m443Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m444dll.rel +- object: files/dll/m444dll.rel hash: 76154b165cd86472ce3155028ea049ba0a0f3dcb symbols: config/GMPE01_00/rels/m444dll/symbols.txt splits: config/GMPE01_00/rels/m444dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m445Dll.rel +- object: files/dll/m445Dll.rel hash: d4d9f2aad53aa7f4e1c313438a0e3767f8e58eb9 symbols: config/GMPE01_00/rels/m445Dll/symbols.txt splits: config/GMPE01_00/rels/m445Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m446dll.rel +- object: files/dll/m446dll.rel hash: 4b16e5eff613eaf4cc98411809cd1f1578e33fd1 symbols: config/GMPE01_00/rels/m446dll/symbols.txt splits: config/GMPE01_00/rels/m446dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m447dll.rel +- object: files/dll/m447dll.rel hash: 775ca8f8b3be867ad67f91bc3b6ebcc8c3068d2b symbols: config/GMPE01_00/rels/m447dll/symbols.txt splits: config/GMPE01_00/rels/m447dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m448Dll.rel +- object: files/dll/m448Dll.rel hash: e6f7586dadbe3f5b5045c0bdf2fe618d42ef3a44 symbols: config/GMPE01_00/rels/m448Dll/symbols.txt splits: config/GMPE01_00/rels/m448Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m449Dll.rel +- object: files/dll/m449Dll.rel hash: e797c2ff132ab35e768be62cb62219592464ca9d symbols: config/GMPE01_00/rels/m449Dll/symbols.txt splits: config/GMPE01_00/rels/m449Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m450Dll.rel +- object: files/dll/m450Dll.rel hash: f2ea7da07cf8be4f449c97b829d3231911e158a0 symbols: config/GMPE01_00/rels/m450Dll/symbols.txt splits: config/GMPE01_00/rels/m450Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m451Dll.rel +- object: files/dll/m451Dll.rel hash: 3f82fd24071582b6494a9f99750c0bc3c10d502e symbols: config/GMPE01_00/rels/m451Dll/symbols.txt splits: config/GMPE01_00/rels/m451Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m453Dll.rel +- object: files/dll/m453Dll.rel hash: 49ef28c2862000fae4d8efd8fec0ff9b41f24461 symbols: config/GMPE01_00/rels/m453Dll/symbols.txt splits: config/GMPE01_00/rels/m453Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m455Dll.rel +- object: files/dll/m455Dll.rel hash: e0b21cfbe592955c84662ff50d8a33e147403906 symbols: config/GMPE01_00/rels/m455Dll/symbols.txt splits: config/GMPE01_00/rels/m455Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m456Dll.rel +- object: files/dll/m456Dll.rel hash: 97d5701b151c6ad8cf8cea6e776973daa95eea34 symbols: config/GMPE01_00/rels/m456Dll/symbols.txt splits: config/GMPE01_00/rels/m456Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m457Dll.rel +- object: files/dll/m457Dll.rel hash: d4a411f9ef850f52506afd1ad1de88d2d8de361b symbols: config/GMPE01_00/rels/m457Dll/symbols.txt splits: config/GMPE01_00/rels/m457Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m458Dll.rel +- object: files/dll/m458Dll.rel hash: 7ac361c5a04f83d46f516a13a43e43b59b929435 symbols: config/GMPE01_00/rels/m458Dll/symbols.txt splits: config/GMPE01_00/rels/m458Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m459dll.rel +- object: files/dll/m459dll.rel hash: 1aafc4f38ddfee64ea8f7dda7cbd7113e86997ba symbols: config/GMPE01_00/rels/m459dll/symbols.txt splits: config/GMPE01_00/rels/m459dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m460Dll.rel +- object: files/dll/m460Dll.rel hash: 5d28f1a87edee5216b9bb28d9cbff2b22d617747 symbols: config/GMPE01_00/rels/m460Dll/symbols.txt splits: config/GMPE01_00/rels/m460Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m461Dll.rel +- object: files/dll/m461Dll.rel hash: ab058151bd25600f05f8b6fedbec1c7448175123 symbols: config/GMPE01_00/rels/m461Dll/symbols.txt splits: config/GMPE01_00/rels/m461Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m462Dll.rel +- object: files/dll/m462Dll.rel hash: 78d6ab00677791ece684a0c149d1ae72efc52d1c symbols: config/GMPE01_00/rels/m462Dll/symbols.txt splits: config/GMPE01_00/rels/m462Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/m463Dll.rel +- object: files/dll/m463Dll.rel hash: 32010595b4fd0b75293fc46b9026c5613d0ea4c2 symbols: config/GMPE01_00/rels/m463Dll/symbols.txt splits: config/GMPE01_00/rels/m463Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/mentDll.rel +- object: files/dll/mentDll.rel hash: 9e63dd96943ffd2747be5aad924b95892d46051a symbols: config/GMPE01_00/rels/mentDll/symbols.txt splits: config/GMPE01_00/rels/mentDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/messDll.rel +- object: files/dll/messDll.rel hash: 7e119de456b3557dcf514c70bd7ab81dc5f9cf54 symbols: config/GMPE01_00/rels/messDll/symbols.txt splits: config/GMPE01_00/rels/messDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/mgmodedll.rel +- object: files/dll/mgmodedll.rel hash: 376c78e2d1b7d7a429959c532e9cb92c98f73b7e symbols: config/GMPE01_00/rels/mgmodedll/symbols.txt splits: config/GMPE01_00/rels/mgmodedll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/modeltestDll.rel +- object: files/dll/modeltestDll.rel hash: 8de28c0f254a2c574c4da9b6a3a17e5ad7ffe1f9 symbols: config/GMPE01_00/rels/modeltestDll/symbols.txt splits: config/GMPE01_00/rels/modeltestDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/modeseldll.rel +- object: files/dll/modeseldll.rel hash: bdf8cd57fa23f07c429393817037ade04e2c6024 symbols: config/GMPE01_00/rels/modeseldll/symbols.txt splits: config/GMPE01_00/rels/modeseldll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/mpexDll.rel +- object: files/dll/mpexDll.rel hash: 4524e63b63510b42bca907f72e67affddec856f9 symbols: config/GMPE01_00/rels/mpexDll/symbols.txt splits: config/GMPE01_00/rels/mpexDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/msetupDll.rel +- object: files/dll/msetupDll.rel hash: 86ff8288bb92472376d02cade1d3c9603b613c57 symbols: config/GMPE01_00/rels/msetupDll/symbols.txt splits: config/GMPE01_00/rels/msetupDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/mstory2Dll.rel +- object: files/dll/mstory2Dll.rel hash: 7579ff7aa9638488d876dbb61d3e4b868974a040 symbols: config/GMPE01_00/rels/mstory2Dll/symbols.txt splits: config/GMPE01_00/rels/mstory2Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/mstory3Dll.rel +- object: files/dll/mstory3Dll.rel hash: 951f1951eac515fce1d3314059f27fdc7b39f035 symbols: config/GMPE01_00/rels/mstory3Dll/symbols.txt splits: config/GMPE01_00/rels/mstory3Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/mstory4Dll.rel +- object: files/dll/mstory4Dll.rel hash: 7f9cc4a18a137f861b2c326b099c02ba4e5bd94b symbols: config/GMPE01_00/rels/mstory4Dll/symbols.txt splits: config/GMPE01_00/rels/mstory4Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/mstoryDll.rel +- object: files/dll/mstoryDll.rel hash: 979a83f2d6f5200e2de4333ec8f943701a250131 symbols: config/GMPE01_00/rels/mstoryDll/symbols.txt splits: config/GMPE01_00/rels/mstoryDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/nisDll.rel +- object: files/dll/nisDll.rel hash: d74a5147245a1877b140ee2af7f75b2b6c90892d symbols: config/GMPE01_00/rels/nisDll/symbols.txt splits: config/GMPE01_00/rels/nisDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/option.rel +- object: files/dll/option.rel hash: 5c6973fe7e0271885a5a87d87d4e7164ef711abb symbols: config/GMPE01_00/rels/option/symbols.txt splits: config/GMPE01_00/rels/option/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/present.rel +- object: files/dll/present.rel hash: ddb8d8a825578a588276b9d4f65eceee26f91253 symbols: config/GMPE01_00/rels/present/symbols.txt splits: config/GMPE01_00/rels/present/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/resultDll.rel +- object: files/dll/resultDll.rel hash: 41a820438884ae8566f34f895198a186aae60305 symbols: config/GMPE01_00/rels/resultDll/symbols.txt splits: config/GMPE01_00/rels/resultDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/safDll.rel +- object: files/dll/safDll.rel hash: f34c104078b41971412cb09b37c4dc9526be02e3 symbols: config/GMPE01_00/rels/safDll/symbols.txt splits: config/GMPE01_00/rels/safDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/selmenuDll.rel +- object: files/dll/selmenuDll.rel hash: 81a00a71b8d1ab22bfd3df10d815c87ba618ec84 symbols: config/GMPE01_00/rels/selmenuDll/symbols.txt splits: config/GMPE01_00/rels/selmenuDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/staffDll.rel +- object: files/dll/staffDll.rel hash: a6210fbcdf3d7f0063f3052e2ae525abacac08e7 symbols: config/GMPE01_00/rels/staffDll/symbols.txt splits: config/GMPE01_00/rels/staffDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/subchrselDll.rel +- object: files/dll/subchrselDll.rel hash: 7488bc249dc7c656f60105e4d24c4011983c2ba2 symbols: config/GMPE01_00/rels/subchrselDll/symbols.txt splits: config/GMPE01_00/rels/subchrselDll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/w01Dll.rel +- object: files/dll/w01Dll.rel hash: d3de36269886995d959e1fd58d8ad806843c8819 symbols: config/GMPE01_00/rels/w01Dll/symbols.txt splits: config/GMPE01_00/rels/w01Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/w02Dll.rel +- object: files/dll/w02Dll.rel hash: 750c4d6cd6a49d290f5cc63432d4f65642fbd7e4 symbols: config/GMPE01_00/rels/w02Dll/symbols.txt splits: config/GMPE01_00/rels/w02Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/w03Dll.rel +- object: files/dll/w03Dll.rel hash: f9e8d9c4581d44488adaffa3d46d9bc835d4f9bd symbols: config/GMPE01_00/rels/w03Dll/symbols.txt splits: config/GMPE01_00/rels/w03Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/w04Dll.rel +- object: files/dll/w04Dll.rel hash: 821126eeb7054150744b925cc4cb06c751ddcefd symbols: config/GMPE01_00/rels/w04Dll/symbols.txt splits: config/GMPE01_00/rels/w04Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/w05Dll.rel +- object: files/dll/w05Dll.rel hash: d29f7ccadcba23c8446d05101c4efa5caba26dfd symbols: config/GMPE01_00/rels/w05Dll/symbols.txt splits: config/GMPE01_00/rels/w05Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/w06Dll.rel +- object: files/dll/w06Dll.rel hash: d11a7a6d44189ba8d1e3a7168ea640ea9f2152fe symbols: config/GMPE01_00/rels/w06Dll/symbols.txt splits: config/GMPE01_00/rels/w06Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/w10Dll.rel +- object: files/dll/w10Dll.rel hash: 54bb23228b04c5aaa6aa7c8ca1f846baec5a1f2c symbols: config/GMPE01_00/rels/w10Dll/symbols.txt splits: config/GMPE01_00/rels/w10Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/w20Dll.rel +- object: files/dll/w20Dll.rel hash: 98cc41456afa9e1ccbb8e03718b8d3cb64e4e86f symbols: config/GMPE01_00/rels/w20Dll/symbols.txt splits: config/GMPE01_00/rels/w20Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/w21Dll.rel +- object: files/dll/w21Dll.rel hash: b888f2c6703e680699ff8c59ad9200b9d78d30a1 symbols: config/GMPE01_00/rels/w21Dll/symbols.txt splits: config/GMPE01_00/rels/w21Dll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/ztardll.rel +- object: files/dll/ztardll.rel hash: 87d9fee70ed4f011e0b30e05156d087204cf686f symbols: config/GMPE01_00/rels/ztardll/symbols.txt splits: config/GMPE01_00/rels/ztardll/splits.txt links: [] -- object: orig/GMPE01_00/files/dll/E3setupDLL.rel +- object: files/dll/E3setupDLL.rel hash: 234e07cee1491c7060e30805681bf5f39150122d symbols: config/GMPE01_00/rels/E3setupDLL/symbols.txt splits: config/GMPE01_00/rels/E3setupDLL/splits.txt links: [_minigameDll] -- object: orig/GMPE01_00/files/dll/m300Dll.rel +- object: files/dll/m300Dll.rel hash: eba8a17e8b263bc9cd601b1aea7e698a8785416a symbols: config/GMPE01_00/rels/m300Dll/symbols.txt splits: config/GMPE01_00/rels/m300Dll/splits.txt links: [_minigameDll] -- object: orig/GMPE01_00/files/dll/m401Dll.rel +- object: files/dll/m401Dll.rel hash: f3ec526c25986a3fcf7dfbc8c463626839a3a801 symbols: config/GMPE01_00/rels/m401Dll/symbols.txt splits: config/GMPE01_00/rels/m401Dll/splits.txt diff --git a/configure.py b/configure.py index 0de9c77d..2fe8e8ee 100644 --- a/configure.py +++ b/configure.py @@ -16,7 +16,15 @@ import argparse import sys from pathlib import Path from typing import Any, Dict, List -from tools.project import * + +from tools.project import ( + Object, + ProgressCategory, + ProjectConfig, + calculate_progress, + generate_build, + is_windows, +) # Game versions DEFAULT_VERSION = 0 @@ -105,6 +113,12 @@ parser.add_argument( action="store_true", help="builds equivalent (but non-matching) or modded objects", ) +parser.add_argument( + "--no-progress", + dest="progress", + action="store_false", + help="disable progress calculation", +) args = parser.parse_args() config = ProjectConfig() @@ -117,10 +131,10 @@ config.dtk_path = args.dtk config.objdiff_path = args.objdiff config.binutils_path = args.binutils config.compilers_path = args.compilers -config.debug = args.debug config.generate_map = args.map config.non_matching = args.non_matching config.sjiswrap_path = args.sjiswrap +config.progress = args.progress if not is_windows(): config.wrapper = args.wrapper # Don't build asm unless we're --non-matching @@ -130,8 +144,8 @@ if not config.non_matching: # Tool versions config.binutils_tag = "2.42-1" config.compilers_tag = "20240706" -config.dtk_tag = "v0.9.6" -config.objdiff_tag = "v2.0.0-beta.6" +config.dtk_tag = "v1.1.4" +config.objdiff_tag = "v2.3.3" config.sjiswrap_tag = "v1.1.1" config.wibo_tag = "0.6.11" @@ -149,6 +163,10 @@ config.ldflags = [ "-fp hardware", "-nodefaults", ] +if args.debug: + config.ldflags.append("-g") +if args.map: + config.ldflags.append("-mapunused") # Base flags, common to most GC/Wii games. # Generally leave untouched, with overrides added below. @@ -178,7 +196,7 @@ cflags_base = [ ] # Debug flags -if config.debug: +if args.debug: cflags_base.extend(["-sym on", "-DDEBUG=1"]) else: cflags_base.append("-DNDEBUG=1") @@ -324,6 +342,12 @@ Matching = True # Object matches and should be linked NonMatching = False # Object does not match and should not be linked Equivalent = config.non_matching # Object should be linked when configured with --non-matching + +# Object is only matching for specific versions +def MatchingFor(*versions): + return config.version in versions + + config.warn_missing_config = True config.warn_missing_source = False config.libs = [ diff --git a/tools/decompctx.py b/tools/decompctx.py index 290946f1..87cfb7ef 100644 --- a/tools/decompctx.py +++ b/tools/decompctx.py @@ -23,7 +23,7 @@ include_dirs = [ # Add additional include directories here ] -include_pattern = re.compile(r'^#\s*include\s*[<"](.+?)[>"]$') +include_pattern = re.compile(r'^#\s*include\s*[<"](.+?)[>"]') guard_pattern = re.compile(r"^#\s*ifndef\s+(.*)$") defines = set() diff --git a/tools/download_tool.py b/tools/download_tool.py index 69ef96a7..f4512d01 100644 --- a/tools/download_tool.py +++ b/tools/download_tool.py @@ -55,6 +55,7 @@ def dtk_url(tag: str) -> str: repo = "https://github.com/encounter/decomp-toolkit" return f"{repo}/releases/download/{tag}/dtk-{system}-{arch}{suffix}" + def objdiff_cli_url(tag: str) -> str: uname = platform.uname() suffix = "" diff --git a/tools/project.py b/tools/project.py index 502b2f4b..b4469fcd 100644 --- a/tools/project.py +++ b/tools/project.py @@ -17,7 +17,7 @@ import os import platform import sys from pathlib import Path -from typing import Any, Dict, List, Optional, Set, Tuple, Union, cast +from typing import IO, Any, Dict, Iterable, List, Optional, Set, Tuple, Union, cast from . import ninja_syntax from .ninja_syntax import serialize_path @@ -41,8 +41,9 @@ class Object: "asflags": None, "asm_dir": None, "cflags": None, - "extra_asflags": None, - "extra_cflags": None, + "extra_asflags": [], + "extra_cflags": [], + "extra_clang_flags": [], "host": None, "lib": None, "mw_version": None, @@ -81,6 +82,20 @@ class Object: set_default("shift_jis", config.shift_jis) set_default("src_dir", config.src_dir) + # Validate progress categories + def check_category(category: str): + if not any(category == c.id for c in config.progress_categories): + sys.exit( + f"Progress category '{category}' missing from config.progress_categories" + ) + + progress_category = obj.options["progress_category"] + if isinstance(progress_category, list): + for category in progress_category: + check_category(category) + elif progress_category is not None: + check_category(progress_category) + # Resolve paths build_dir = config.out_path() obj.src_path = Path(obj.options["src_dir"]) / obj.options["source"] @@ -131,7 +146,6 @@ class ProjectConfig: self.build_rels: bool = True # Build REL files self.check_sha_path: Optional[Path] = None # Path to version.sha1 self.config_path: Optional[Path] = None # Path to config.yml - self.debug: bool = False # Build with debug info self.generate_map: bool = False # Generate map file(s) self.asflags: Optional[List[str]] = None # Assembler flags self.ldflags: Optional[List[str]] = None # Linker flags @@ -156,14 +170,22 @@ class ProjectConfig: self.custom_build_steps: Optional[Dict[str, List[Dict[str, Any]]]] = ( None # Custom build steps, types are ["pre-compile", "post-compile", "post-link", "post-build"] ) + self.generate_compile_commands: bool = ( + True # Generate compile_commands.json for clangd + ) + self.extra_clang_flags: List[str] = [] # Extra flags for clangd # Progress output, progress.json and report.json config + self.progress = True # Enable report.json generation and CLI progress output self.progress_all: bool = True # Include combined "all" category self.progress_modules: bool = True # Include combined "modules" category self.progress_each_module: bool = ( False # Include individual modules, disable for large numbers of modules ) self.progress_categories: List[ProgressCategory] = [] # Additional categories + self.print_progress_categories: Union[bool, List[str]] = ( + True # Print additional progress categories in the CLI progress output + ) # Progress fancy printing self.progress_use_fancy: bool = False @@ -200,9 +222,40 @@ class ProjectConfig: out[obj.name] = obj.resolve(self, lib) return out + # Gets the output path for build-related files. def out_path(self) -> Path: return self.build_dir / str(self.version) + # Gets the path to the compilers directory. + # Exits the program if neither `compilers_path` nor `compilers_tag` is provided. + def compilers(self) -> Path: + if self.compilers_path: + return self.compilers_path + elif self.compilers_tag: + return self.build_dir / "compilers" + else: + sys.exit("ProjectConfig.compilers_tag missing") + + # Gets the wrapper to use for compiler commands, if set. + def compiler_wrapper(self) -> Optional[Path]: + wrapper = self.wrapper + + if self.use_wibo(): + wrapper = self.build_dir / "tools" / "wibo" + if not is_windows() and wrapper is None: + wrapper = Path("wine") + + return wrapper + + # Determines whether or not to use wibo as the compiler wrapper. + def use_wibo(self) -> bool: + return ( + self.wibo_tag is not None + and sys.platform == "linux" + and platform.machine() in ("i386", "x86_64") + and self.wrapper is None + ) + def is_windows() -> bool: return os.name == "nt" @@ -214,11 +267,26 @@ CHAIN = "cmd /c " if is_windows() else "" EXE = ".exe" if is_windows() else "" -def make_flags_str(cflags: Union[str, List[str]]) -> str: - if isinstance(cflags, list): - return " ".join(cflags) - else: - return cflags +def file_is_asm(path: Path) -> bool: + return path.suffix.lower() == ".s" + + +def file_is_c(path: Path) -> bool: + return path.suffix.lower() == ".c" + + +def file_is_cpp(path: Path) -> bool: + return path.suffix.lower() in (".cc", ".cp", ".cpp", ".cxx") + + +def file_is_c_cpp(path: Path) -> bool: + return file_is_c(path) or file_is_cpp(path) + + +def make_flags_str(flags: Optional[List[str]]) -> str: + if flags is None: + return "" + return " ".join(flags) # Load decomp-toolkit generated config.json @@ -235,14 +303,14 @@ def load_build_config( build_config: Dict[str, Any] = json.load(f) config_version = build_config.get("version") if config_version is None: - # Invalid config.json + print("Invalid config.json, regenerating...") f.close() os.remove(build_config_path) return None dtk_version = str(config.dtk_tag)[1:] # Strip v if versiontuple(config_version) < versiontuple(dtk_version): - # Outdated config.json + print("Outdated config.json, regenerating...") f.close() os.remove(build_config_path) return None @@ -251,13 +319,14 @@ def load_build_config( return build_config -# Generate build.ninja and objdiff.json +# Generate build.ninja, objdiff.json and compile_commands.json def generate_build(config: ProjectConfig) -> None: config.validate() objects = config.objects() build_config = load_build_config(config, config.out_path() / "config.json") generate_build_ninja(config, objects, build_config) generate_objdiff_config(config, objects, build_config) + generate_compile_commands(config, objects, build_config) # Generate build.ninja @@ -283,12 +352,7 @@ def generate_build_ninja( # Variables ### n.comment("Variables") - ldflags = " ".join(config.ldflags or []) - if config.generate_map: - ldflags += " -mapunused" - if config.debug: - ldflags += " -g" - n.variable("ldflags", ldflags) + n.variable("ldflags", make_flags_str(config.ldflags)) if config.linker_version is None: sys.exit("ProjectConfig.linker_version missing") n.variable("mw_version", Path(config.linker_version)) @@ -409,16 +473,10 @@ def generate_build_ninja( else: sys.exit("ProjectConfig.sjiswrap_tag missing") + wrapper = config.compiler_wrapper() # Only add an implicit dependency on wibo if we download it - wrapper = config.wrapper wrapper_implicit: Optional[Path] = None - if ( - config.wibo_tag is not None - and sys.platform == "linux" - and platform.machine() in ("i386", "x86_64") - and config.wrapper is None - ): - wrapper = build_tools_path / "wibo" + if wrapper is not None and config.use_wibo(): wrapper_implicit = wrapper n.build( outputs=wrapper, @@ -429,15 +487,11 @@ def generate_build_ninja( "tag": config.wibo_tag, }, ) - if not is_windows() and wrapper is None: - wrapper = Path("wine") wrapper_cmd = f"{wrapper} " if wrapper else "" + compilers = config.compilers() compilers_implicit: Optional[Path] = None - if config.compilers_path: - compilers = config.compilers_path - elif config.compilers_tag: - compilers = config.build_dir / "compilers" + if config.compilers_path is None and config.compilers_tag is not None: compilers_implicit = compilers n.build( outputs=compilers, @@ -448,8 +502,6 @@ def generate_build_ninja( "tag": config.compilers_tag, }, ) - else: - sys.exit("ProjectConfig.compilers_tag missing") binutils_implicit = None if config.binutils_path: @@ -663,7 +715,6 @@ def generate_build_ninja( n.comment(f"Link {self.name}") if self.module_id == 0: elf_path = build_path / f"{self.name}.elf" - dol_path = build_path / f"{self.name}.dol" elf_ldflags = f"$ldflags -lcf {serialize_path(self.ldscript)}" if config.generate_map: elf_map = map_path(elf_path) @@ -728,17 +779,33 @@ def generate_build_ninja( source_added: Set[Path] = set() def c_build(obj: Object, src_path: Path) -> Optional[Path]: - cflags_str = make_flags_str(obj.options["cflags"]) - if obj.options["extra_cflags"] is not None: - extra_cflags_str = make_flags_str(obj.options["extra_cflags"]) - cflags_str += " " + extra_cflags_str - used_compiler_versions.add(obj.options["mw_version"]) - # Avoid creating duplicate build rules if obj.src_obj_path is None or obj.src_obj_path in source_added: return obj.src_obj_path source_added.add(obj.src_obj_path) + cflags = obj.options["cflags"] + extra_cflags = obj.options["extra_cflags"] + + # Add appropriate language flag if it doesn't exist already + # Added directly to the source so it flows to other generation tasks + if not any(flag.startswith("-lang") for flag in cflags) and not any( + flag.startswith("-lang") for flag in extra_cflags + ): + # Ensure extra_cflags is a unique instance, + # and insert into there to avoid modifying shared sets of flags + extra_cflags = obj.options["extra_cflags"] = list(extra_cflags) + if file_is_cpp(src_path): + extra_cflags.insert(0, "-lang=c++") + else: + extra_cflags.insert(0, "-lang=c") + + cflags_str = make_flags_str(cflags) + if len(extra_cflags) > 0: + extra_cflags_str = make_flags_str(extra_cflags) + cflags_str += " " + extra_cflags_str + used_compiler_versions.add(obj.options["mw_version"]) + # Add MWCC build rule lib_name = obj.options["lib"] n.comment(f"{obj.name}: {lib_name} (linked {obj.completed})") @@ -770,7 +837,7 @@ def generate_build_ninja( if obj.options["host"] and obj.host_obj_path is not None: n.build( outputs=obj.host_obj_path, - rule="host_cc" if src_path.suffix == ".c" else "host_cpp", + rule="host_cc" if file_is_c(src_path) else "host_cpp", inputs=src_path, variables={ "basedir": os.path.dirname(obj.host_obj_path), @@ -792,7 +859,7 @@ def generate_build_ninja( if obj.options["asflags"] is None: sys.exit("ProjectConfig.asflags missing") asflags_str = make_flags_str(obj.options["asflags"]) - if obj.options["extra_asflags"] is not None: + if len(obj.options["extra_asflags"]) > 0: extra_asflags_str = make_flags_str(obj.options["extra_asflags"]) asflags_str += " " + extra_asflags_str @@ -830,10 +897,10 @@ def generate_build_ninja( link_built_obj = obj.completed built_obj_path: Optional[Path] = None if obj.src_path is not None and obj.src_path.exists(): - if obj.src_path.suffix in (".c", ".cp", ".cpp"): + if file_is_c_cpp(obj.src_path): # Add MWCC & host build rules built_obj_path = c_build(obj, obj.src_path) - elif obj.src_path.suffix == ".s": + elif file_is_asm(obj.src_path): # Add assembler build rule built_obj_path = asm_build(obj, obj.src_path, obj.src_obj_path) else: @@ -1040,7 +1107,12 @@ def generate_build_ninja( n.build( outputs=progress_path, rule="progress", - implicit=[ok_path, configure_script, python_lib, config.config_path], + implicit=[ + ok_path, + configure_script, + python_lib, + report_path, + ], ) ### @@ -1153,8 +1225,10 @@ def generate_build_ninja( if build_config: if config.non_matching: n.default(link_outputs) - else: + elif config.progress: n.default(progress_path) + else: + n.default(ok_path) else: n.default(build_config_path) @@ -1173,6 +1247,13 @@ def generate_objdiff_config( if build_config is None: return + # Load existing objdiff.json + existing_units = {} + if Path("objdiff.json").is_file(): + with open("objdiff.json", "r", encoding="utf-8") as r: + existing_config = json.load(r) + existing_units = {unit["name"]: unit for unit in existing_config["units"]} + objdiff_config: Dict[str, Any] = { "min_version": "2.0.0-beta.5", "custom_make": "ninja", @@ -1194,7 +1275,6 @@ def generate_objdiff_config( } # decomp.me compiler name mapping - # Commented out versions have not been added to decomp.me yet COMPILER_MAP = { "GC/1.0": "mwcc_233_144", "GC/1.1": "mwcc_233_159", @@ -1231,15 +1311,27 @@ def generate_objdiff_config( ) -> None: obj_path, obj_name = build_obj["object"], build_obj["name"] base_object = Path(obj_name).with_suffix("") + name = str(Path(module_name) / base_object).replace(os.sep, "/") unit_config: Dict[str, Any] = { - "name": Path(module_name) / base_object, + "name": name, "target_path": obj_path, + "base_path": None, + "scratch": None, "metadata": { - "auto_generated": build_obj["autogenerated"], + "complete": None, + "reverse_fn_order": None, + "source_path": None, "progress_categories": progress_categories, + "auto_generated": build_obj["autogenerated"], }, + "symbol_mappings": None, } + # Preserve existing symbol mappings + existing_unit = existing_units.get(name) + if existing_unit is not None: + unit_config["symbol_mappings"] = existing_unit.get("symbol_mappings") + obj = objects.get(obj_name) if obj is None: objdiff_config["units"].append(unit_config) @@ -1248,40 +1340,31 @@ def generate_objdiff_config( src_exists = obj.src_path is not None and obj.src_path.exists() if src_exists: unit_config["base_path"] = obj.src_obj_path + unit_config["metadata"]["source_path"] = obj.src_path cflags = obj.options["cflags"] reverse_fn_order = False - if type(cflags) is list: - for flag in cflags: - if not flag.startswith("-inline "): - continue - for value in flag.split(" ")[1].split(","): - if value == "deferred": - reverse_fn_order = True - elif value == "nodeferred": - reverse_fn_order = False + for flag in cflags: + if not flag.startswith("-inline "): + continue + for value in flag.split(" ")[1].split(","): + if value == "deferred": + reverse_fn_order = True + elif value == "nodeferred": + reverse_fn_order = False - # Filter out include directories - def keep_flag(flag): - return not flag.startswith("-i ") and not flag.startswith("-I ") + # Filter out include directories + def keep_flag(flag): + return not flag.startswith("-i ") and not flag.startswith("-I ") - cflags = list(filter(keep_flag, cflags)) - - # Add appropriate lang flag - if obj.src_path is not None and not any( - flag.startswith("-lang") for flag in cflags - ): - if obj.src_path.suffix in (".cp", ".cpp"): - cflags.insert(0, "-lang=c++") - else: - cflags.insert(0, "-lang=c") + cflags = list(filter(keep_flag, cflags)) compiler_version = COMPILER_MAP.get(obj.options["mw_version"]) if compiler_version is None: print(f"Missing scratch compiler mapping for {obj.options['mw_version']}") else: cflags_str = make_flags_str(cflags) - if obj.options["extra_cflags"] is not None: + if len(obj.options["extra_cflags"]) > 0: extra_cflags_str = make_flags_str(obj.options["extra_cflags"]) cflags_str += " " + extra_cflags_str unit_config["scratch"] = { @@ -1305,7 +1388,6 @@ def generate_objdiff_config( { "complete": obj.completed, "reverse_fn_order": reverse_fn_order, - "source_path": obj.src_path, "progress_categories": progress_categories, } ) @@ -1349,160 +1431,357 @@ def generate_objdiff_config( for category in config.progress_categories: add_category(category.id, category.name) + def cleandict(d): + if isinstance(d, dict): + return {k: cleandict(v) for k, v in d.items() if v is not None} + elif isinstance(d, list): + return [cleandict(v) for v in d] + else: + return d + # Write objdiff.json with open("objdiff.json", "w", encoding="utf-8") as w: def unix_path(input: Any) -> str: return str(input).replace(os.sep, "/") if input else "" - json.dump(objdiff_config, w, indent=4, default=unix_path) + json.dump(cleandict(objdiff_config), w, indent=2, default=unix_path) + + +def generate_compile_commands( + config: ProjectConfig, + objects: Dict[str, Object], + build_config: Optional[Dict[str, Any]], +) -> None: + if build_config is None or not config.generate_compile_commands: + return + + # The following code attempts to convert mwcc flags to clang flags + # for use with clangd. + + # Flags to ignore explicitly + CFLAG_IGNORE: Set[str] = { + # Search order modifier + # Has a different meaning to Clang, and would otherwise + # be picked up by the include passthrough prefix + "-I-", + "-i-", + } + CFLAG_IGNORE_PREFIX: Tuple[str, ...] = ( + # Recursive includes are not supported by modern compilers + "-ir ", + ) + + # Flags to replace + CFLAG_REPLACE: Dict[str, str] = {} + CFLAG_REPLACE_PREFIX: Tuple[Tuple[str, str], ...] = ( + # Includes + ("-i ", "-I"), + ("-I ", "-I"), + ("-I+", "-I"), + # Defines + ("-d ", "-D"), + ("-D ", "-D"), + ("-D+", "-D"), + ) + + # Flags with a finite set of options + CFLAG_REPLACE_OPTIONS: Tuple[Tuple[str, Dict[str, Tuple[str, ...]]], ...] = ( + # Exceptions + ( + "-Cpp_exceptions", + { + "off": ("-fno-cxx-exceptions",), + "on": ("-fcxx-exceptions",), + }, + ), + # RTTI + ( + "-RTTI", + { + "off": ("-fno-rtti",), + "on": ("-frtti",), + }, + ), + # Language configuration + ( + "-lang", + { + "c": ("--language=c", "--std=c99"), + "c99": ("--language=c", "--std=c99"), + "c++": ("--language=c++", "--std=c++98"), + "cplus": ("--language=c++", "--std=c++98"), + }, + ), + # Enum size + ( + "-enum", + { + "min": ("-fshort-enums",), + "int": ("-fno-short-enums",), + }, + ), + # Common BSS + ( + "-common", + { + "off": ("-fno-common",), + "on": ("-fcommon",), + }, + ), + ) + + # Flags to pass through + CFLAG_PASSTHROUGH: Set[str] = set() + CFLAG_PASSTHROUGH_PREFIX: Tuple[str, ...] = ( + "-I", # includes + "-D", # defines + ) + + clangd_config = [] + + def add_unit(build_obj: Dict[str, Any]) -> None: + obj = objects.get(build_obj["name"]) + if obj is None: + return + + # Skip unresolved objects + if ( + obj.src_path is None + or obj.src_obj_path is None + or not file_is_c_cpp(obj.src_path) + ): + return + + # Gather cflags for source file + cflags: list[str] = [] + + def append_cflags(flags: Iterable[str]) -> None: + # Match a flag against either a set of concrete flags, or a set of prefixes. + def flag_match( + flag: str, concrete: Set[str], prefixes: Tuple[str, ...] + ) -> bool: + if flag in concrete: + return True + + for prefix in prefixes: + if flag.startswith(prefix): + return True + + return False + + # Determine whether a flag should be ignored. + def should_ignore(flag: str) -> bool: + return flag_match(flag, CFLAG_IGNORE, CFLAG_IGNORE_PREFIX) + + # Determine whether a flag should be passed through. + def should_passthrough(flag: str) -> bool: + return flag_match(flag, CFLAG_PASSTHROUGH, CFLAG_PASSTHROUGH_PREFIX) + + # Attempts replacement for the given flag. + def try_replace(flag: str) -> bool: + replacement = CFLAG_REPLACE.get(flag) + if replacement is not None: + cflags.append(replacement) + return True + + for prefix, replacement in CFLAG_REPLACE_PREFIX: + if flag.startswith(prefix): + cflags.append(flag.replace(prefix, replacement, 1)) + return True + + for prefix, options in CFLAG_REPLACE_OPTIONS: + if not flag.startswith(prefix): + continue + + # "-lang c99" and "-lang=c99" are both generally valid option forms + option = flag.removeprefix(prefix).removeprefix("=").lstrip() + replacements = options.get(option) + if replacements is not None: + cflags.extend(replacements) + + return True + + return False + + for flag in flags: + # Ignore flags first + if should_ignore(flag): + continue + + # Then find replacements + if try_replace(flag): + continue + + # Pass flags through last + if should_passthrough(flag): + cflags.append(flag) + continue + + append_cflags(obj.options["cflags"]) + append_cflags(obj.options["extra_cflags"]) + cflags.extend(config.extra_clang_flags) + cflags.extend(obj.options["extra_clang_flags"]) + + unit_config = { + "directory": Path.cwd(), + "file": obj.src_path, + "output": obj.src_obj_path, + "arguments": [ + "clang", + "-nostdinc", + "-fno-builtin", + "--target=powerpc-eabi", + *cflags, + "-c", + obj.src_path, + "-o", + obj.src_obj_path, + ], + } + clangd_config.append(unit_config) + + # Add DOL units + for unit in build_config["units"]: + add_unit(unit) + + # Add REL units + for module in build_config["modules"]: + for unit in module["units"]: + add_unit(unit) + + # Write compile_commands.json + with open("compile_commands.json", "w", encoding="utf-8") as w: + + def default_format(o): + if isinstance(o, Path): + return o.resolve().as_posix() + return str(o) + + json.dump(clangd_config, w, indent=2, default=default_format) # Calculate, print and write progress to progress.json def calculate_progress(config: ProjectConfig) -> None: config.validate() - objects = config.objects() out_path = config.out_path() - build_config = load_build_config(config, out_path / "config.json") - if build_config is None: - return + report_path = out_path / "report.json" + if not report_path.is_file(): + sys.exit(f"Report file {report_path} does not exist") - class ProgressUnit: - def __init__(self, name: str) -> None: - self.name: str = name - self.code_total: int = 0 - self.code_fancy_frac: int = config.progress_code_fancy_frac - self.code_fancy_item: str = config.progress_code_fancy_item - self.code_progress: int = 0 - self.data_total: int = 0 - self.data_fancy_frac: int = config.progress_data_fancy_frac - self.data_fancy_item: str = config.progress_data_fancy_item - self.data_progress: int = 0 - self.objects_progress: int = 0 - self.objects_total: int = 0 - self.objects: Set[Object] = set() + report_data: Dict[str, Any] = {} + with open(report_path, "r", encoding="utf-8") as f: + report_data = json.load(f) - def add(self, build_obj: Dict[str, Any]) -> None: - self.code_total += build_obj["code_size"] - self.data_total += build_obj["data_size"] + # Convert string numbers (u64) to int + def convert_numbers(data: Dict[str, Any]) -> None: + for key, value in data.items(): + if isinstance(value, str) and value.isdigit(): + data[key] = int(value) - # Avoid counting the same object in different modules twice - include_object = build_obj["name"] not in self.objects - if include_object: - self.objects.add(build_obj["name"]) - self.objects_total += 1 + convert_numbers(report_data["measures"]) + for category in report_data.get("categories", []): + convert_numbers(category["measures"]) - if build_obj["autogenerated"]: - # Skip autogenerated objects - return + # Output to GitHub Actions job summary, if available + summary_path = os.getenv("GITHUB_STEP_SUMMARY") + summary_file: Optional[IO[str]] = None + if summary_path: + summary_file = open(summary_path, "a", encoding="utf-8") + summary_file.write("```\n") - obj = objects.get(build_obj["name"]) - if obj is None or not obj.completed: - return - - self.code_progress += build_obj["code_size"] - self.data_progress += build_obj["data_size"] - if include_object: - self.objects_progress += 1 - - def code_frac(self) -> float: - if self.code_total == 0: - return 1.0 - return self.code_progress / self.code_total - - def data_frac(self) -> float: - if self.data_total == 0: - return 1.0 - return self.data_progress / self.data_total - - progress_units: Dict[str, ProgressUnit] = {} - if config.progress_all: - progress_units["all"] = ProgressUnit("All") - progress_units["dol"] = ProgressUnit("DOL") - if len(build_config["modules"]) > 0: - if config.progress_modules: - progress_units["modules"] = ProgressUnit("Modules") - if len(config.progress_categories) > 0: - for category in config.progress_categories: - progress_units[category.id] = ProgressUnit(category.name) - if config.progress_each_module: - for module in build_config["modules"]: - progress_units[module["name"]] = ProgressUnit(module["name"]) - - def add_unit(id: str, unit: Dict[str, Any]) -> None: - progress = progress_units.get(id) - if progress is not None: - progress.add(unit) - - # Add DOL units - for unit in build_config["units"]: - add_unit("all", unit) - add_unit("dol", unit) - obj = objects.get(unit["name"]) - if obj is not None: - category_opt = obj.options["progress_category"] - if isinstance(category_opt, list): - for id in category_opt: - add_unit(id, unit) - elif category_opt is not None: - add_unit(category_opt, unit) - - # Add REL units - for module in build_config["modules"]: - for unit in module["units"]: - add_unit("all", unit) - add_unit("modules", unit) - add_unit(module["name"], unit) - obj = objects.get(unit["name"]) - if obj is not None: - category_opt = obj.options["progress_category"] - if isinstance(category_opt, list): - for id in category_opt: - add_unit(id, unit) - elif category_opt is not None: - add_unit(category_opt, unit) + def progress_print(s: str) -> None: + print(s) + if summary_file: + summary_file.write(s + "\n") # Print human-readable progress - print("Progress:") + progress_print("Progress:") - def print_category(unit: Optional[ProgressUnit]) -> None: - if unit is None: - return + def print_category(name: str, measures: Dict[str, Any]) -> None: + total_code = measures.get("total_code", 0) + matched_code = measures.get("matched_code", 0) + matched_code_percent = measures.get("matched_code_percent", 0) + total_data = measures.get("total_data", 0) + matched_data = measures.get("matched_data", 0) + matched_data_percent = measures.get("matched_data_percent", 0) + total_functions = measures.get("total_functions", 0) + matched_functions = measures.get("matched_functions", 0) + complete_code_percent = measures.get("complete_code_percent", 0) + total_units = measures.get("total_units", 0) + complete_units = measures.get("complete_units", 0) - code_frac = unit.code_frac() - data_frac = unit.data_frac() - print( - f" {unit.name}: {code_frac:.2%} code, {data_frac:.2%} data ({unit.objects_progress} / {unit.objects_total} files)" + progress_print( + f" {name}: {matched_code_percent:.2f}% matched, {complete_code_percent:.2f}% linked ({complete_units} / {total_units} files)" + ) + progress_print( + f" Code: {matched_code} / {total_code} bytes ({matched_functions} / {total_functions} functions)" + ) + progress_print( + f" Data: {matched_data} / {total_data} bytes ({matched_data_percent:.2f}%)" ) - print(f" Code: {unit.code_progress} / {unit.code_total} bytes") - print(f" Data: {unit.data_progress} / {unit.data_total} bytes") - if config.progress_use_fancy: - print( - "\nYou have {} out of {} {} and {} out of {} {}.".format( - math.floor(code_frac * unit.code_fancy_frac), - unit.code_fancy_frac, - unit.code_fancy_item, - math.floor(data_frac * unit.data_fancy_frac), - unit.data_fancy_frac, - unit.data_fancy_item, - ) - ) - for progress in progress_units.values(): - print_category(progress) + print_category("All", report_data["measures"]) + for category in report_data.get("categories", []): + if config.print_progress_categories is True or ( + isinstance(config.print_progress_categories, list) + and category["id"] in config.print_progress_categories + ): + print_category(category["name"], category["measures"]) + + if config.progress_use_fancy: + measures = report_data["measures"] + total_code = measures.get("total_code", 0) + total_data = measures.get("total_data", 0) + if total_code == 0 or total_data == 0: + return + code_frac = measures.get("complete_code", 0) / total_code + data_frac = measures.get("complete_data", 0) / total_data + + progress_print( + "\nYou have {} out of {} {} and {} out of {} {}.".format( + math.floor(code_frac * config.progress_code_fancy_frac), + config.progress_code_fancy_frac, + config.progress_code_fancy_item, + math.floor(data_frac * config.progress_data_fancy_frac), + config.progress_data_fancy_frac, + config.progress_data_fancy_item, + ) + ) + + # Finalize GitHub Actions job summary + if summary_file: + summary_file.write("```\n") + summary_file.close() # Generate and write progress.json progress_json: Dict[str, Any] = {} - def add_category(category: str, unit: ProgressUnit) -> None: - progress_json[category] = { - "code": unit.code_progress, - "code/total": unit.code_total, - "data": unit.data_progress, - "data/total": unit.data_total, + def add_category(id: str, measures: Dict[str, Any]) -> None: + progress_json[id] = { + "code": measures.get("complete_code", 0), + "code/total": measures.get("total_code", 0), + "data": measures.get("complete_data", 0), + "data/total": measures.get("total_data", 0), + "matched_code": measures.get("matched_code", 0), + "matched_code/total": measures.get("total_code", 0), + "matched_data": measures.get("matched_data", 0), + "matched_data/total": measures.get("total_data", 0), + "matched_functions": measures.get("matched_functions", 0), + "matched_functions/total": measures.get("total_functions", 0), + "fuzzy_match": int(measures.get("fuzzy_match_percent", 0) * 100), + "fuzzy_match/total": 10000, + "units": measures.get("complete_units", 0), + "units/total": measures.get("total_units", 0), } - for id, progress in progress_units.items(): - add_category(id, progress) + if config.progress_all: + add_category("all", report_data["measures"]) + else: + # Support for old behavior where "dol" was the main category + add_category("dol", report_data["measures"]) + for category in report_data.get("categories", []): + add_category(category["id"], category["measures"]) + with open(out_path / "progress.json", "w", encoding="utf-8") as w: - json.dump(progress_json, w, indent=4) + json.dump(progress_json, w, indent=2) From 0035e3316689bf0b107bd95b4d8db78ad955bbcf Mon Sep 17 00:00:00 2001 From: Luke Street Date: Tue, 22 Oct 2024 22:36:42 -0600 Subject: [PATCH 2/8] Source fixes for clangd --- include/ctype.h | 23 +++++++++++++++-------- include/dolphin/os.h | 2 +- include/game/gamework.h | 2 +- include/math.h | 12 ++++++++---- include/stdlib.h | 4 ++++ 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/include/ctype.h b/include/ctype.h index 559e7278..46064191 100644 --- a/include/ctype.h +++ b/include/ctype.h @@ -1,6 +1,7 @@ #ifndef _CTYPE_H #define _CTYPE_H +#include "dolphin/types.h" extern unsigned char __ctype_map[256]; extern unsigned char __lower_map[256]; @@ -22,19 +23,25 @@ extern unsigned char __upper_map[256]; #define __whitespace (__motion_char | __space_char) #define __control (__motion_char | __control_char) +#ifdef __MWERKS__ +#define DECL_WEAK __declspec(weak) +#else +#define DECL_WEAK __attribute__((weak)) +#endif + #ifdef __cplusplus extern "C" { #endif - __declspec(weak) int isalpha(int __c); - __declspec(weak) int isdigit(int __c); - __declspec(weak) int isspace(int __c); - __declspec(weak) int isupper(int __c); - __declspec(weak) int isxdigit(int __c); + DECL_WEAK int isalpha(int __c); + DECL_WEAK int isdigit(int __c); + DECL_WEAK int isspace(int __c); + DECL_WEAK int isupper(int __c); + DECL_WEAK int isxdigit(int __c); - __declspec(weak) int tolower(int __c); - __declspec(weak) int toupper(int __c); + DECL_WEAK int tolower(int __c); + DECL_WEAK int toupper(int __c); // added underscore to avoid naming conflicts inline int _isalpha(int c) { return (int)(__ctype_map[(u8)c] & __letter); } @@ -48,4 +55,4 @@ extern "C" #ifdef __cplusplus } #endif -#endif \ No newline at end of file +#endif diff --git a/include/dolphin/os.h b/include/dolphin/os.h index d231c662..83f15519 100644 --- a/include/dolphin/os.h +++ b/include/dolphin/os.h @@ -19,7 +19,7 @@ extern "C" { #ifdef __MWERKS__ #define AT_ADDRESS(xyz) : (xyz) #else -#define AT_ADDRESS +#define AT_ADDRESS(xyz) #endif typedef s64 OSTime; typedef u32 OSTick; diff --git a/include/game/gamework.h b/include/game/gamework.h index 0e3b4807..869cfad1 100644 --- a/include/game/gamework.h +++ b/include/game/gamework.h @@ -7,7 +7,7 @@ void GWInit(void); void GWGameStatReset(void); -s32 GWMessSpeedGet(void); +// s32 GWMessSpeedGet(void); s32 GWMessDelayGet(void); void GWMGRecordSet(s32 index, u32 value); u32 GWMGRecordGet(s32 index); diff --git a/include/math.h b/include/math.h index 419d4d50..8549b25f 100644 --- a/include/math.h +++ b/include/math.h @@ -7,6 +7,7 @@ #define _MATH_INLINE static inline #endif +#ifdef __MWERKS__ extern inline float sqrtf(float x) { volatile float y; @@ -21,6 +22,9 @@ extern inline float sqrtf(float x) } return x; } +#else +float sqrtf(float x); +#endif double atan(double x); double copysign(double x, double y); @@ -38,15 +42,15 @@ double fmod(double x, double y); double log(double x); double pow(double x, double y); float tanf(float x); -float sinf(float x); -float cosf(float x); -float atan2f(float y, float x); -float acosf(float x); +#ifdef __MWERKS__ extern inline double fabs(double x) { return __fabs(x); } +#else +double fabs(double x); +#endif _MATH_INLINE float fabsf(float x) { return (float)fabs((double)x); } _MATH_INLINE float sinf(float x) { return (float)sin((double)x); } diff --git a/include/stdlib.h b/include/stdlib.h index c6e1d71d..aaf69e6d 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -1,6 +1,10 @@ #ifndef _STDLIB_H #define _STDLIB_H +#ifdef __MWERKS__ #define abs(x) __abs(x) +#else +int abs(int x); +#endif #endif From e34a300610e58191c4b90d0eff0e8e3c661c7646 Mon Sep 17 00:00:00 2001 From: dbalatoni13 Date: Sun, 27 Oct 2024 19:09:24 +0100 Subject: [PATCH 3/8] Almost finished m420dll --- config/GMPE01_00/rels/m420dll/splits.txt | 11 +- config/GMPE01_00/rels/m420dll/symbols.txt | 246 ++-- configure.py | 1 + include/REL/m420dll.h | 68 ++ src/REL/m420dll/camera.c | 144 +++ src/REL/m420dll/main.c | 251 +++++ src/REL/m420dll/map.c | 1235 +++++++++++++++++++++ src/REL/m420dll/player.c | 992 +++++++++++++++++ 8 files changed, 2823 insertions(+), 125 deletions(-) create mode 100644 include/REL/m420dll.h create mode 100644 src/REL/m420dll/camera.c create mode 100644 src/REL/m420dll/main.c create mode 100644 src/REL/m420dll/map.c create mode 100644 src/REL/m420dll/player.c diff --git a/config/GMPE01_00/rels/m420dll/splits.txt b/config/GMPE01_00/rels/m420dll/splits.txt index eb2fc2b9..9c77e32d 100644 --- a/config/GMPE01_00/rels/m420dll/splits.txt +++ b/config/GMPE01_00/rels/m420dll/splits.txt @@ -10,10 +10,15 @@ REL/executor.c: .text start:0x00000000 end:0x000000A0 REL/m420dll/main.c: - .text start:0x000000A0 end:0x00001B8C - .rodata start:0x00000000 end:0x000000F8 + .text start:0x000000A0 end:0x00000D98 + .rodata start:0x00000000 end:0x00000098 + .bss start:0x00000000 end:0x00000030 + +REL/m420dll/camera.c: + .text start:0x00000D98 end:0x00001B8C + .rodata start:0x00000098 end:0x000000F8 .data start:0x00000000 end:0x00000050 - .bss start:0x00000000 end:0x000000B0 + .bss start:0x00000030 end:0x000000B0 REL/m420dll/player.c: .text start:0x00001B8C end:0x00004964 diff --git a/config/GMPE01_00/rels/m420dll/symbols.txt b/config/GMPE01_00/rels/m420dll/symbols.txt index 415bc67d..8e6b2a20 100644 --- a/config/GMPE01_00/rels/m420dll/symbols.txt +++ b/config/GMPE01_00/rels/m420dll/symbols.txt @@ -83,127 +83,129 @@ fn_1_8934 = .text:0x00008934; // type:function size:0x10 fn_1_8944 = .text:0x00008944; // type:function size:0x34 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x54 -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x24 data:4byte -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 data:float -lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 data:float -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 data:float -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 data:double -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 data:double -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 data:double -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x8 data:double -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x160 -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x60 -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 data:float -lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 data:float -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x8 data:double -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float -lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 data:float -lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 data:float -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 data:float -lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 data:float -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 data:float -lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 data:float -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x10 -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 data:float -lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x1C -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 data:double -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x8 data:double -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 data:float -lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 data:float -lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 data:float -lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 data:float -lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 data:float -lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 data:float -lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x8 data:float -lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x6C -lbl_1_rodata_3CC = .rodata:0x000003CC; // type:object size:0xC data:4byte -lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0xC data:4byte -lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 data:float -lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 data:float -lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 data:float -lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 data:float -lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 data:float -lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 data:float -lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 data:float -lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 data:float -lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 data:float -lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 data:float -lbl_1_rodata_40C = .rodata:0x0000040C; // type:object size:0x4 data:float -lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x4 data:float -lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 data:float -lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 data:float -lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 data:float -lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 data:float -lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x8 data:double -lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x8 data:double -lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x8 data:double -lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x8 data:double -lbl_1_rodata_448 = .rodata:0x00000448; // type:object size:0x4 data:float -lbl_1_rodata_44C = .rodata:0x0000044C; // type:object size:0x4 data:float -lbl_1_rodata_450 = .rodata:0x00000450; // type:object size:0x8 data:double -lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x4 data:float -lbl_1_rodata_45C = .rodata:0x0000045C; // type:object size:0x4 data:float -lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x4 data:float -lbl_1_rodata_464 = .rodata:0x00000464; // type:object size:0x4 data:float -lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x4 data:float -lbl_1_rodata_46C = .rodata:0x0000046C; // type:object size:0x4 data:float -lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 data:float -lbl_1_rodata_474 = .rodata:0x00000474; // type:object size:0x4 data:float -lbl_1_rodata_478 = .rodata:0x00000478; // type:object size:0x8 data:double -lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x8 data:double -lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 data:float -lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x8 data:double -lbl_1_rodata_498 = .rodata:0x00000498; // type:object size:0x4 data:float -lbl_1_rodata_49C = .rodata:0x0000049C; // type:object size:0x4 data:float -lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x4 data:float -lbl_1_rodata_4A4 = .rodata:0x000004A4; // type:object size:0x4 data:float -lbl_1_rodata_4A8 = .rodata:0x000004A8; // type:object size:0x4 data:float -lbl_1_rodata_4AC = .rodata:0x000004AC; // type:object size:0x4 data:float -lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 data:float -lbl_1_rodata_4B4 = .rodata:0x000004B4; // type:object size:0x4 data:float -lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x4 data:float -lbl_1_rodata_4BC = .rodata:0x000004BC; // type:object size:0x4 data:float -lbl_1_rodata_4C0 = .rodata:0x000004C0; // type:object size:0x4 data:float -lbl_1_rodata_4C4 = .rodata:0x000004C4; // type:object size:0x4 data:float -lbl_1_rodata_4C8 = .rodata:0x000004C8; // type:object size:0x30 data:4byte -lbl_1_rodata_4F8 = .rodata:0x000004F8; // type:object size:0x30 data:4byte -lbl_1_rodata_528 = .rodata:0x00000528; // type:object size:0x4 data:float -lbl_1_rodata_52C = .rodata:0x0000052C; // type:object size:0x4 data:float -lbl_1_rodata_530 = .rodata:0x00000530; // type:object size:0x4 data:float -lbl_1_rodata_534 = .rodata:0x00000534; // type:object size:0x4 data:float -lbl_1_rodata_538 = .rodata:0x00000538; // type:object size:0x4 data:float -lbl_1_rodata_53C = .rodata:0x0000053C; // type:object size:0x4 data:float -lbl_1_rodata_540 = .rodata:0x00000540; // type:object size:0xC data:4byte -lbl_1_rodata_54C = .rodata:0x0000054C; // type:object size:0x4 data:float -lbl_1_rodata_550 = .rodata:0x00000550; // type:object size:0x8 data:double -lbl_1_rodata_558 = .rodata:0x00000558; // type:object size:0x4 data:float -lbl_1_rodata_55C = .rodata:0x0000055C; // type:object size:0x4 data:float -lbl_1_rodata_560 = .rodata:0x00000560; // type:object size:0x4 data:float -lbl_1_rodata_564 = .rodata:0x00000564; // type:object size:0x4 data:float -lbl_1_rodata_568 = .rodata:0x00000568; // type:object size:0x8 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x1E data:string -lbl_1_data_1E = .data:0x0000001E; // type:object size:0x1E data:string -lbl_1_data_3C = .data:0x0000003C; // type:object size:0x11 +__fakeHalf = .rodata:0x00000000; // type:object size:0x8 data:double +__fakeThree = .rodata:0x00000008; // type:object size:0x8 data:double +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x54 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x24 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x160 scope:local +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x60 scope:local data:float +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x10 scope:local +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x1C scope:local +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 scope:local data:double +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x8 scope:local data:double +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 scope:local data:float +lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 scope:local data:float +lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 scope:local data:float +lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 scope:local data:float +lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x8 scope:local data:float +lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x6C scope:local +lbl_1_rodata_3CC = .rodata:0x000003CC; // type:object size:0xC scope:local data:float +lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0xC scope:local data:float +lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 scope:local data:float +lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 scope:local data:float +lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40C = .rodata:0x0000040C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x4 scope:local data:float +lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 scope:local data:float +lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 scope:local data:float +lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 scope:local data:float +lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x8 scope:local data:double +lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x8 scope:local data:double +lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x8 scope:local data:double +lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x8 scope:local data:double +lbl_1_rodata_448 = .rodata:0x00000448; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44C = .rodata:0x0000044C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_450 = .rodata:0x00000450; // type:object size:0x8 scope:local data:double +lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x4 scope:local data:float +lbl_1_rodata_45C = .rodata:0x0000045C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x4 scope:local data:float +lbl_1_rodata_464 = .rodata:0x00000464; // type:object size:0x4 scope:local data:float +lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x4 scope:local data:float +lbl_1_rodata_46C = .rodata:0x0000046C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 scope:local data:float +lbl_1_rodata_474 = .rodata:0x00000474; // type:object size:0x4 scope:local data:float +lbl_1_rodata_478 = .rodata:0x00000478; // type:object size:0x8 scope:local data:double +lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x8 scope:local data:double +lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 scope:local data:float +lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x8 scope:local data:double +lbl_1_rodata_498 = .rodata:0x00000498; // type:object size:0x4 scope:local data:float +lbl_1_rodata_49C = .rodata:0x0000049C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A4 = .rodata:0x000004A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A8 = .rodata:0x000004A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4AC = .rodata:0x000004AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B4 = .rodata:0x000004B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4BC = .rodata:0x000004BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C0 = .rodata:0x000004C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C4 = .rodata:0x000004C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C8 = .rodata:0x000004C8; // type:object size:0x30 scope:local data:float +lbl_1_rodata_4F8 = .rodata:0x000004F8; // type:object size:0x30 scope:local data:float +lbl_1_rodata_528 = .rodata:0x00000528; // type:object size:0x4 scope:local data:float +lbl_1_rodata_52C = .rodata:0x0000052C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_530 = .rodata:0x00000530; // type:object size:0x4 scope:local data:float +lbl_1_rodata_534 = .rodata:0x00000534; // type:object size:0x4 scope:local data:float +lbl_1_rodata_538 = .rodata:0x00000538; // type:object size:0x4 scope:local data:float +lbl_1_rodata_53C = .rodata:0x0000053C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_540 = .rodata:0x00000540; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_54C = .rodata:0x0000054C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_550 = .rodata:0x00000550; // type:object size:0x8 scope:local data:double +lbl_1_rodata_558 = .rodata:0x00000558; // type:object size:0x4 scope:local data:float +lbl_1_rodata_55C = .rodata:0x0000055C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_560 = .rodata:0x00000560; // type:object size:0x4 scope:local data:float +lbl_1_rodata_564 = .rodata:0x00000564; // type:object size:0x4 scope:local data:float +lbl_1_rodata_568 = .rodata:0x00000568; // type:object size:0x8 scope:local data:float +lbl_1_data_0 = .data:0x00000000; // type:object size:0x1E scope:local data:string +lbl_1_data_1E = .data:0x0000001E; // type:object size:0x1E scope:local data:string +lbl_1_data_3C = .data:0x0000003C; // type:object size:0x11 scope:local data:string lbl_1_data_50 = .data:0x00000050; // type:object size:0x80 lbl_1_data_D0 = .data:0x000000D0; // type:object size:0x1B data:string lbl_1_data_EC = .data:0x000000EC; // type:object size:0x30 @@ -211,7 +213,7 @@ lbl_1_data_11C = .data:0x0000011C; // type:object size:0x19 data:string lbl_1_data_135 = .data:0x00000135; // type:object size:0x1 lbl_1_data_138 = .data:0x00000138; // type:object size:0x1C lbl_1_data_154 = .data:0x00000154; // type:object size:0x10 data:4byte -lbl_1_data_164 = .data:0x00000164; // type:object size:0xD data:string +lbl_1_data_164 = .data:0x00000164; // type:object size:0xD scope:local data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index 2fe8e8ee..eeeb17a4 100644 --- a/configure.py +++ b/configure.py @@ -977,6 +977,7 @@ config.libs = [ "m420dll", # Fish n' Drips objects={ Object(NonMatching, "REL/m420dll/main.c"), + Object(Matching, "REL/m420dll/camera.c"), Object(NonMatching, "REL/m420dll/player.c"), Object(NonMatching, "REL/m420dll/map.c"), Object(Matching, "REL/m420dll/rand.c"), diff --git a/include/REL/m420dll.h b/include/REL/m420dll.h new file mode 100644 index 00000000..9d3dce97 --- /dev/null +++ b/include/REL/m420dll.h @@ -0,0 +1,68 @@ +#ifndef M420DLL_H +#define M420DLL_H + +#include "game/object.h" + +typedef struct M420DllUnkStruct { + /* 0x00 */ Vec unk_00; + /* 0x0C */ Vec unk_0C; + /* 0x18 */ float unk_18; +} M420DllUnkStruct; /* size = 0x1C */ // same as in m447dll/camera.c + +typedef struct M420DllPlayerStruct { + /* 0x00 */ struct { + s8 unk_00_field0 : 1; + s8 unk_00_field1 : 1; + s8 unk_00_field2 : 1; + }; + /* 0x04 */ s32 unk_04; + /* 0x08 */ u8 unk_08; + /* 0x0A */ s16 unk_0A; + /* 0x0C */ u8 unk_0C; + /* 0x10 */ Vec unk_10; + /* 0x1C */ Vec unk_1C; + /* 0x28 */ Vec unk_28; + /* 0x34 */ Vec unk_34; + /* 0x40 */ Process *unk_40; + /* 0x44 */ char unk44[4]; + /* 0x48 */ s32 unk_48; + /* 0x4C */ s32 unk_4C; + /* 0x50 */ s16 unk_50; + /* 0x52 */ char unk52[6]; + /* 0x58 */ s32 unk_58; + /* 0x5C */ s32 unk_5C[0xA]; + /* 0x84 */ s32 unk_84[0xA]; + /* 0xAC */ s16 unk_AC; + /* 0xAE */ s16 unk_AE[0xB]; + /* 0xC4 */ s16 unk_C4[0xA]; + /* 0xD8 */ s16 unk_D8; + /* 0xDC */ float unk_DC; + /* 0xE0 */ float unk_E0; + /* 0xE4 */ s32 unk_E4; + /* 0xE8 */ struct M420DllPlayerStruct *unk_E8; +} M420DllPlayerStruct; /* size = 0xEC */ + +void fn_1_1184(void); + +s32 fn_1_4964(void); +void fn_1_596C(void); +s32 fn_1_59F4(s32); +s32 fn_1_5AA8(s32 arg0, float arg1); +s32 fn_1_60F0(void); +void fn_1_6268(void); +void fn_1_636C(void); +void fn_1_63EC(void); +void fn_1_6554(void); +s16 fn_1_6660(void); +void fn_1_669C(s32 arg0); +void fn_1_6728(void); +s32 fn_1_67E8(s32); +s32 fn_1_6810(void); +void fn_1_8934(void); +s32 fn_1_8944(void); +M420DllPlayerStruct *fn_1_1B8C(s32, s32); +void fn_1_1E14(M420DllPlayerStruct *); + +extern Process *lbl_1_bss_4; + +#endif diff --git a/src/REL/m420dll/camera.c b/src/REL/m420dll/camera.c new file mode 100644 index 00000000..c587a69e --- /dev/null +++ b/src/REL/m420dll/camera.c @@ -0,0 +1,144 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/flag.h" +#include "game/hsfman.h" +#include "game/minigame_seq.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/printfunc.h" +#include "game/wipe.h" + +#include "REL/m420dll.h" + +Process *lbl_1_bss_A8; +M420DllUnkStruct lbl_1_bss_8C; +M420DllUnkStruct lbl_1_bss_70; +M420DllUnkStruct lbl_1_bss_54; +s32 lbl_1_bss_50; +s32 lbl_1_bss_4C; +s32 lbl_1_bss_48; +float lbl_1_bss_44; +float lbl_1_bss_40; +float lbl_1_bss_3C; +float lbl_1_bss_38; +float lbl_1_bss_34; +float lbl_1_bss_30; + +s32 fn_1_D98(void) +{ + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + Hu3DCameraPerspectiveSet(1, 30.0f, 10.0f, 8000.0f, 1.2f); + lbl_1_bss_8C.unk_00.x = 0.0f; + lbl_1_bss_8C.unk_00.y = 0.0f; + lbl_1_bss_8C.unk_00.z = 0.0f; + lbl_1_bss_8C.unk_0C.x = -10.0f; + lbl_1_bss_8C.unk_0C.y = 0.0f; + lbl_1_bss_8C.unk_0C.z = 0.0f; + lbl_1_bss_8C.unk_18 = 1000.0f; + lbl_1_bss_50 = 0; + lbl_1_bss_4C = 0; + lbl_1_bss_48 = 0; + lbl_1_bss_A8 = HuPrcChildCreate(fn_1_1184, 0x1F4, 0x2000, 0, lbl_1_bss_4); + return 1; +} + +void fn_1_F48(void) +{ + HuPrcKill(lbl_1_bss_A8); +} + +void fn_1_F74(const Vec *arg0, s32 arg1) +{ + lbl_1_bss_54.unk_00 = *arg0; + lbl_1_bss_70.unk_00 = lbl_1_bss_8C.unk_00; + lbl_1_bss_44 = 0.0f; + lbl_1_bss_38 = 1.0f / arg1; + lbl_1_bss_50 = 1; +} + +void fn_1_1030(const Vec *arg0, s32 arg1) +{ + lbl_1_bss_54.unk_0C = *arg0; + lbl_1_bss_70.unk_0C = lbl_1_bss_8C.unk_0C; + lbl_1_bss_40 = 0.0f; + lbl_1_bss_34 = 1.0f / arg1; + lbl_1_bss_4C = 1; +} + +void fn_1_10EC(float arg8, s32 arg0) +{ + lbl_1_bss_54.unk_18 = arg8; + lbl_1_bss_70.unk_18 = lbl_1_bss_8C.unk_18; + lbl_1_bss_3C = 0.0f; + lbl_1_bss_30 = 1.0f / arg0; + lbl_1_bss_48 = 1; +} + +void fn_1_1184(void) +{ + Vec sp28; + Vec sp1C; + Vec sp10; + float var_f31; + + while (TRUE) { + if (lbl_1_bss_50 != 0) { + var_f31 = sind((90.0f * lbl_1_bss_44)); + var_f31 *= var_f31; + lbl_1_bss_8C.unk_00.x = lbl_1_bss_70.unk_00.x + (var_f31 * (lbl_1_bss_54.unk_00.x - lbl_1_bss_70.unk_00.x)); + lbl_1_bss_8C.unk_00.y = lbl_1_bss_70.unk_00.y + (var_f31 * (lbl_1_bss_54.unk_00.y - lbl_1_bss_70.unk_00.y)); + lbl_1_bss_8C.unk_00.z = lbl_1_bss_70.unk_00.z + (var_f31 * (lbl_1_bss_54.unk_00.z - lbl_1_bss_70.unk_00.z)); + if ((lbl_1_bss_44 += lbl_1_bss_38) >= 1.0f) { + lbl_1_bss_8C.unk_00 = lbl_1_bss_54.unk_00; + lbl_1_bss_50 = 0; + } + } + if (lbl_1_bss_4C != 0) { + var_f31 = sind((90.0f * lbl_1_bss_40)); + var_f31 *= var_f31; + lbl_1_bss_8C.unk_0C.x = lbl_1_bss_70.unk_0C.x + (var_f31 * (lbl_1_bss_54.unk_0C.x - lbl_1_bss_70.unk_0C.x)); + lbl_1_bss_8C.unk_0C.y = lbl_1_bss_70.unk_0C.y + (var_f31 * (lbl_1_bss_54.unk_0C.y - lbl_1_bss_70.unk_0C.y)); + lbl_1_bss_8C.unk_0C.z = lbl_1_bss_70.unk_0C.z + (var_f31 * (lbl_1_bss_54.unk_0C.z - lbl_1_bss_70.unk_0C.z)); + if ((lbl_1_bss_40 += lbl_1_bss_34) >= 1.0f) { + lbl_1_bss_8C.unk_0C = lbl_1_bss_54.unk_0C; + lbl_1_bss_4C = 0; + } + } + if (lbl_1_bss_48 != 0) { + var_f31 = sind((90.0f * lbl_1_bss_3C)); + var_f31 *= var_f31; + lbl_1_bss_8C.unk_18 = lbl_1_bss_70.unk_18 + (var_f31 * (lbl_1_bss_54.unk_18 - lbl_1_bss_70.unk_18)); + if ((lbl_1_bss_3C += lbl_1_bss_30) >= 1.0f) { + lbl_1_bss_8C.unk_18 = lbl_1_bss_54.unk_18; + lbl_1_bss_48 = 0; + } + } + sp28.x = lbl_1_bss_8C.unk_00.x + (lbl_1_bss_8C.unk_18 * (sind(lbl_1_bss_8C.unk_0C.y) * cosd(lbl_1_bss_8C.unk_0C.x))); + sp28.y = lbl_1_bss_8C.unk_00.y + (lbl_1_bss_8C.unk_18 * -sind(lbl_1_bss_8C.unk_0C.x)); + sp28.z = lbl_1_bss_8C.unk_00.z + (lbl_1_bss_8C.unk_18 * (cosd(lbl_1_bss_8C.unk_0C.y) * cosd(lbl_1_bss_8C.unk_0C.x))); + sp10.x = sind(lbl_1_bss_8C.unk_0C.y) * sind(lbl_1_bss_8C.unk_0C.x); + sp10.y = cosd(lbl_1_bss_8C.unk_0C.x); + sp10.z = cosd(lbl_1_bss_8C.unk_0C.y) * sind(lbl_1_bss_8C.unk_0C.x); + sp1C = lbl_1_bss_8C.unk_00; + + Hu3DCameraPosSet(1, sp28.x, sp28.y, sp28.z, sp10.x, sp10.y, sp10.z, sp1C.x, sp1C.y, sp1C.z); + HuPrcVSleep(); + } +} + +void fn_1_189C(void) +{ + lbl_1_bss_8C.unk_00.x += (0.02f * *HuPadStkX); + lbl_1_bss_8C.unk_00.y += (0.02f * *HuPadStkY); + lbl_1_bss_8C.unk_0C.y -= (0.02f * *HuPadSubStkX); + lbl_1_bss_8C.unk_0C.x += (0.02f * *HuPadSubStkY); + lbl_1_bss_8C.unk_18 += (0.02f * *HuPadTrigL); + lbl_1_bss_8C.unk_18 -= (0.02f * *HuPadTrigR); +} + +void fn_1_1AB0(void) +{ + print8(0x20, 0x84, 1.5f, "LOOKAT : x=%.2f y=%.2f z=%.2f", lbl_1_bss_8C.unk_00.x, lbl_1_bss_8C.unk_00.y, lbl_1_bss_8C.unk_00.z); + print8(0x20, 0x94, 1.5f, "ANGLE : x=%.2f y=%.2f z=%.2f", lbl_1_bss_8C.unk_0C.x, lbl_1_bss_8C.unk_0C.y, lbl_1_bss_8C.unk_0C.z); + print8(0x20, 0xA4, 1.5f, "ZOOM : x=%.2f", lbl_1_bss_8C.unk_18); +} diff --git a/src/REL/m420dll/main.c b/src/REL/m420dll/main.c new file mode 100644 index 00000000..4bad4ddf --- /dev/null +++ b/src/REL/m420dll/main.c @@ -0,0 +1,251 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/flag.h" +#include "game/hsfman.h" +#include "game/minigame_seq.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/printfunc.h" +#include "game/wipe.h" +#include "rel_sqrt_consts.h" + +#include "REL/m420dll.h" + +s32 fn_1_198(void); +void fn_1_3D4(void); +void fn_1_43C(void); +void fn_1_D14(s32 arg0, s32 arg1); +s32 fn_1_D98(void); +void fn_1_F48(void); +void fn_1_F74(const Vec *arg0, s32 arg1); +void fn_1_1030(const Vec *arg0, s32 arg1); +void fn_1_10EC(float arg8, s32 arg0); +void fn_1_118(void); + +s32 lbl_1_bss_2C; +Process *lbl_1_bss_28; +M420DllPlayerStruct *lbl_1_bss_18[4]; +s16 lbl_1_bss_14; +s16 lbl_1_bss_12; +s16 lbl_1_bss_10; +s32 lbl_1_bss_C; +s32 lbl_1_bss_8; +Process *lbl_1_bss_4; +Process *lbl_1_bss_0; + +static const M420DllUnkStruct lbl_1_rodata_10[3] = { + { { 0.0f, 1040.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, 680.0f }, + { { 0.0f, 800.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, 680.0f }, + { { 0.0f, 310.0f, 0.0f }, { -10.0f, 0.0f, 0.0f }, 1950.0f }, +}; + +void ObjectSetup(void) +{ + lbl_1_bss_4 = omInitObjMan(1, 0x2000); + omGameSysInit(lbl_1_bss_4); + lbl_1_bss_0 = HuPrcChildCreate(fn_1_118, 0x3E8, 0x4000, 0, lbl_1_bss_4); + fn_1_198(); +} + +void fn_1_118(void) +{ + while (omSysExitReq == 0) { + HuPrcVSleep(); + } + WipeCreate(2, 0, 0x3C); + + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + HuAudFadeOut(0x64); + fn_1_3D4(); + HuPrcVSleep(); + omOvlReturnEx(1, 1); + HuPrcEnd(); +} + +s32 fn_1_198(void) +{ + s32 sp8[3]; + s32 var_r31; + s32 var_r30; + + Vec sp14[3] = { { 0.0f, 4000.0f, 100.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } }; + frand(); + fn_1_8934(); + fn_1_4964(); + fn_1_D98(); + fn_1_D14(0, 1); + Hu3DShadowCreate(30.0f, 20.0f, 10000.0f); + Hu3DShadowTPLvlSet(0.5f); + Hu3DShadowPosSet(&sp14[0], &sp14[1], &sp14[2]); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + sp8[var_r31] = 0; + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (GWPlayerCfg[var_r31].group == 0) { + lbl_1_bss_18[0] = fn_1_1B8C(var_r31, 0); + } + else { + do { + var_r30 = fn_1_8944() % 3; + } while (sp8[var_r30] != 0); + sp8[var_r30] = 1; + lbl_1_bss_18[var_r30 + 1] = fn_1_1B8C(var_r31, var_r30 + 1); + } + } + lbl_1_bss_18[1]->unk_E8 = NULL; + lbl_1_bss_18[2]->unk_E8 = lbl_1_bss_18[1]; + lbl_1_bss_18[3]->unk_E8 = lbl_1_bss_18[2]; + lbl_1_bss_28 = HuPrcChildCreate(fn_1_43C, 0x3E9, 0x4000, 0, lbl_1_bss_4); + return 1; +} + +void fn_1_3D4(void) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + fn_1_1E14(lbl_1_bss_18[var_r31]); + } + fn_1_596C(); + fn_1_F48(); + HuPrcKill(lbl_1_bss_28); +} + +void fn_1_43C(void) +{ + s32 var_r31; + s32 var_r30; + + lbl_1_bss_C = 0; + WipeCreate(1, 0, 0x3C); + + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + fn_1_59F4(0); + fn_1_D14(1, 0x50); + HuPrcSleep(0x4E); + fn_1_D14(2, 0x3C); + HuPrcSleep(0xB4); + fn_1_59F4(2); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_18[var_r31]->unk_48 = 9; + } + lbl_1_bss_8 = HuAudSeqPlay(0x48); + lbl_1_bss_10 = MGSeqCreate(3, 0); + + while (MGSeqStatGet(lbl_1_bss_10) != 0) { + HuPrcVSleep(); + } + MGSeqKill(lbl_1_bss_10); + lbl_1_bss_12 = 0xE10; + lbl_1_bss_14 = MGSeqCreate(1, lbl_1_bss_12 / 60, -1, -1); + var_r30 = 1; + while (TRUE) { + if (lbl_1_bss_18[0]->unk_48 == 0) { + lbl_1_bss_18[0]->unk_48 = 1; + } + if ((lbl_1_bss_18[var_r30]->unk_48 == 0) && (lbl_1_bss_12 > 5)) { + lbl_1_bss_18[var_r30]->unk_48 = 3; + } + if ((lbl_1_bss_18[var_r30]->unk_00_field1) && (var_r30 != 1)) { + lbl_1_bss_18[var_r30 - 1]->unk_48 = 4; + } + if (lbl_1_bss_18[var_r30]->unk_48 == 6) { + var_r30++; + if (var_r30 > 3) { + var_r30 = 1; + lbl_1_bss_18[3]->unk_48 = 0; + } + } + if (lbl_1_bss_12 >= 0) { + if (((--lbl_1_bss_12) % 60) == 0) { + MGSeqParamSet(lbl_1_bss_14, 1, lbl_1_bss_12 / 60); + } + } + if ((fn_1_67E8(0) == 0) && (fn_1_67E8(1) == 0) && (lbl_1_bss_12 > 0)) { + HuPrcVSleep(); + } + else { + break; + } + } + if ((fn_1_67E8(0) != 0) && (fn_1_67E8(1) != 0)) { + lbl_1_bss_C = 3; + } + else if (fn_1_67E8(0) != 0) { + lbl_1_bss_C = 1; + } + else if (fn_1_67E8(1) != 0) { + lbl_1_bss_C = 2; + } + else { + lbl_1_bss_C = 3; + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_18[var_r31]->unk_48 = 0xB; + } + HuPrcVSleep(); + MGSeqParamSet(lbl_1_bss_14, 2, -1); + HuAudSeqFadeOut(lbl_1_bss_8, 0x64); + lbl_1_bss_10 = MGSeqCreate(3, 1); + + while (MGSeqStatGet(lbl_1_bss_10) != 0) { + HuPrcVSleep(); + } + MGSeqKill(lbl_1_bss_10); + fn_1_6728(); + HuPrcSleep(0x3C); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_18[var_r31]->unk_48 = 0xA; + } + HuPrcSleep(0x3C); + if (lbl_1_bss_C == 3) { + lbl_1_bss_10 = MGSeqCreate(3, 2); + HuAudSStreamPlay(4); + lbl_1_bss_18[0]->unk_48 = 8; + lbl_1_bss_18[1]->unk_48 = 8; + lbl_1_bss_18[2]->unk_48 = 8; + lbl_1_bss_18[3]->unk_48 = 8; + } + else { + fn_1_59F4(1); + while (fn_1_6810() == 0) { + HuPrcVSleep(); + } + if (lbl_1_bss_C == 1) { + lbl_1_bss_10 = MGSeqCreate(5, 3, lbl_1_bss_18[0]->unk_0A, -1, -1, -1); + HuAudSStreamPlay(1); + lbl_1_bss_18[0]->unk_48 = 7; + lbl_1_bss_18[1]->unk_48 = 8; + lbl_1_bss_18[2]->unk_48 = 8; + lbl_1_bss_18[3]->unk_48 = 8; + GWPlayerCoinWinAdd(lbl_1_bss_18[0]->unk_04, 10); + } + else { + lbl_1_bss_10 = MGSeqCreate(5, 3, lbl_1_bss_18[1]->unk_0A, lbl_1_bss_18[2]->unk_0A, lbl_1_bss_18[3]->unk_0A, -1); + HuAudSStreamPlay(1); + lbl_1_bss_18[0]->unk_48 = 8; + lbl_1_bss_18[1]->unk_48 = 7; + lbl_1_bss_18[2]->unk_48 = 7; + lbl_1_bss_18[3]->unk_48 = 7; + GWPlayerCoinWinAdd(lbl_1_bss_18[1]->unk_04, 10); + GWPlayerCoinWinAdd(lbl_1_bss_18[2]->unk_04, 10); + GWPlayerCoinWinAdd(lbl_1_bss_18[3]->unk_04, 10); + } + } + HuPrcSleep(0xD2); + omSysExitReq = 1; + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_D14(s32 arg0, s32 arg1) +{ + fn_1_F74(&lbl_1_rodata_10[arg0].unk_00, arg1); + fn_1_1030(&lbl_1_rodata_10[arg0].unk_0C, arg1); + fn_1_10EC(lbl_1_rodata_10[arg0].unk_18, arg1); +} diff --git a/src/REL/m420dll/map.c b/src/REL/m420dll/map.c new file mode 100644 index 00000000..baf43997 --- /dev/null +++ b/src/REL/m420dll/map.c @@ -0,0 +1,1235 @@ +#include "ext_math.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "REL/m420dll.h" + +typedef struct M420DllUnkMapStruct2 { + /* 0x00 */ struct { + s8 unk_00_field0 : 1; + s8 unk_00_field1 : 1; + s8 unk_00_field2 : 1; + s8 unk_00_field3 : 1; + s8 unk_00_field4 : 1; + s8 unk_00_field5 : 1; + s8 unk_00_field6 : 1; + s8 unk_00_field7 : 1; + }; + /* 0x04 */ s16 unk_02; + /* 0x04 */ Vec unk_04; + /* 0x10 */ Vec unk_10; + /* 0x1C */ Vec unk_1C; + /* 0x28 */ Vec unk_28; + /* 0x34 */ Vec unk_34; + /* 0x40 */ Vec unk_40; + /* 0x4C */ Vec unk_4C; + /* 0x58 */ Vec unk_58; + /* 0x64 */ Vec unk_64; + /* 0x70 */ float unk_70; + /* 0x74 */ float unk_74; + /* 0x78 */ s32 unk_78; + /* 0x7C */ float unk_7C; + /* 0x80 */ float unk_80; + /* 0x84 */ s32 unk_84; + /* 0x88 */ float unk_88; + /* 0x8C */ float unk_8C; + /* 0x90 */ s32 unk_90; +} M420DllUnkMapStruct2; /* size = 0x94 */ + +typedef struct M420DllUnkMapStruct { + /* 0x00 */ M420DllUnkMapStruct2 *unk_00; + /* 0x04 */ M420DllUnkMapStruct2 *unk_04; + /* 0x08 */ M420DllUnkMapStruct2 *unk_08; + /* 0x0C */ M420DllUnkMapStruct2 *unk_0C; + /* 0x10 */ M420DllUnkMapStruct2 *unk_10; + /* 0x14 */ s32 unk_14; + /* 0x18 */ char pad_18[4]; + /* 0x1C */ float unk_1C; + /* 0x20 */ float unk_20; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ float unk_2C; + /* 0x30 */ s32 unk_30; + /* 0x34 */ s32 unk_34; + /* 0x38 */ s32 unk_38; + /* 0x3C */ s32 unk_3C; +} M420DllUnkMapStruct; /* size = 0x40 */ + +typedef struct M420DllUnkMapStruct3 { + /* 0x00 */ Vec unk_00; + /* 0x0C */ Vec unk_0C; + /* 0x18 */ GXColor unk_18; +} M420DllUnkMapStruct3; /* size = 0x1C */ + +s32 fn_1_5A7C(s32 arg0); +void fn_1_6820(void); +void fn_1_6884(void); +void fn_1_6950(void); +void fn_1_6D0C(void); +void fn_1_6D5C(void); +void fn_1_6DF0(M420DllUnkMapStruct2 *arg0); +void fn_1_7230(M420DllUnkMapStruct2 *arg0, Vec *arg1, s32 arg2, s32 arg3); +void fn_1_7704(void); +void fn_1_7E24(void); +void fn_1_8240(void); +void fn_1_8414(void); + +M420DllUnkMapStruct3 lbl_1_data_138 = { + { 1000.0f, 2000.0f, 0.0f }, + { -0.5f, -0.5f, -0.5f }, + { 0xFF, 0xFF, 0xFF, 0xFF }, +}; +void (*lbl_1_data_154[4])() = { fn_1_7704, fn_1_7E24, fn_1_8240, fn_1_8414 }; + +static const s32 lbl_1_rodata_360[0x1B] = { + DATA_MAKE_NUM(DATADIR_M420, 0x00), + DATA_MAKE_NUM(DATADIR_M420, 0x14), + DATA_MAKE_NUM(DATADIR_M420, 0x07), + DATA_MAKE_NUM(DATADIR_M420, 0x08), + DATA_MAKE_NUM(DATADIR_M420, 0x01), + DATA_MAKE_NUM(DATADIR_M420, 0x02), + DATA_MAKE_NUM(DATADIR_M420, 0x03), + DATA_MAKE_NUM(DATADIR_M420, 0x04), + DATA_MAKE_NUM(DATADIR_M420, 0x05), + DATA_MAKE_NUM(DATADIR_M420, 0x06), + DATA_MAKE_NUM(DATADIR_M420, 0x15), + DATA_MAKE_NUM(DATADIR_M420, 0x16), + DATA_MAKE_NUM(DATADIR_M420, 0x17), + DATA_MAKE_NUM(DATADIR_M420, 0x09), + DATA_MAKE_NUM(DATADIR_M420, 0x09), + DATA_MAKE_NUM(DATADIR_M420, 0x0A), + DATA_MAKE_NUM(DATADIR_M420, 0x0B), + DATA_MAKE_NUM(DATADIR_M420, 0x0E), + DATA_MAKE_NUM(DATADIR_M420, 0x0F), + DATA_MAKE_NUM(DATADIR_M420, 0x0C), + DATA_MAKE_NUM(DATADIR_M420, 0x0D), + DATA_MAKE_NUM(DATADIR_M420, 0x12), + DATA_MAKE_NUM(DATADIR_M420, 0x11), + DATA_MAKE_NUM(DATADIR_M420, 0x10), + DATA_MAKE_NUM(DATADIR_M420, 0x10), + DATA_MAKE_NUM(DATADIR_M420, 0x13), + DATA_MAKE_NUM(DATADIR_M420, 0x13), +}; + +Process *lbl_1_bss_A40; +Process *lbl_1_bss_A3C; +Process *lbl_1_bss_A2C[4]; +s32 lbl_1_bss_A28; +s16 lbl_1_bss_9F0[0x1C]; +s16 lbl_1_bss_9EC; +M420DllUnkMapStruct2 lbl_1_bss_140[15]; +struct M420DllUnkMapStruct lbl_1_bss_C0[2]; +s32 lbl_1_bss_BC; +s32 lbl_1_bss_B8; +s32 lbl_1_bss_B4; +s32 lbl_1_bss_B0; + +s32 fn_1_4964(void) +{ + M420DllUnkMapStruct2 *var_r31; + M420DllUnkMapStruct *var_r30; + s32 var_r29; + + lbl_1_bss_A40 = HuPrcChildCreate(fn_1_6820, 0x3E9, 0x4000, 0, lbl_1_bss_4); + lbl_1_bss_A3C = HuPrcChildCreate(fn_1_6884, 0x3EA, 0x4000, 0, lbl_1_bss_4); + for (var_r29 = 0; var_r29 < 4; var_r29++) { + lbl_1_bss_A2C[var_r29] = NULL; + } + lbl_1_bss_A28 = 0; + fn_1_6D5C(); + fn_1_6950(); + + var_r31 = lbl_1_bss_140; + var_r31->unk_02 = lbl_1_bss_9F0[1]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 1000.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[1]; + var_r31->unk_02 = lbl_1_bss_9F0[0xA]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[2]; + var_r31->unk_02 = lbl_1_bss_9F0[0xC]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[3]; + var_r31->unk_02 = lbl_1_bss_9F0[0xB]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[4]; + var_r31->unk_02 = lbl_1_bss_9F0[0xD]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = -220.0f; + var_r31->unk_04.y = -60.0f; + var_r31->unk_04.z = 170.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[9]; + var_r31->unk_02 = lbl_1_bss_9F0[0x17]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = -170.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 170.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[11]; + var_r31->unk_02 = lbl_1_bss_9F0[0x19]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = -160.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 220.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[6]; + var_r31->unk_02 = lbl_1_bss_9F0[0x11]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = -65.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[5]; + var_r31->unk_02 = lbl_1_bss_9F0[0xE]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 220.0f; + var_r31->unk_04.y = -60.0f; + var_r31->unk_04.z = 170.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[10]; + var_r31->unk_02 = lbl_1_bss_9F0[0x18]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 190.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 170.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[12]; + var_r31->unk_02 = lbl_1_bss_9F0[0x1A]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 185.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 220.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[7]; + var_r31->unk_02 = lbl_1_bss_9F0[0x12]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = -65.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[8]; + var_r31->unk_02 = lbl_1_bss_9F0[0x13]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 300.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[13]; + var_r31->unk_02 = lbl_1_bss_9F0[3]; + var_r31->unk_00_field3 = 0; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[14]; + var_r31->unk_02 = lbl_1_bss_9F0[2]; + var_r31->unk_00_field3 = 0; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + for (var_r29 = 0; var_r29 < 2; var_r29++) { + var_r30 = &lbl_1_bss_C0[var_r29]; + var_r30->unk_14 = var_r29; + var_r30->unk_1C = 20.0f; + var_r30->unk_20 = 0.0f; + var_r30->unk_2C = 0.0f; + var_r30->unk_24 = 0.2f; + var_r30->unk_28 = 0.1f; + var_r30->unk_38 = 0; + var_r30->unk_3C = 0; + var_r30->unk_30 = 1; + var_r30->unk_00 = &lbl_1_bss_140[var_r29 + 13]; + var_r30->unk_04 = &lbl_1_bss_140[var_r29 + 4]; + var_r30->unk_08 = &lbl_1_bss_140[var_r29 + 6]; + var_r30->unk_0C = &lbl_1_bss_140[var_r29 + 9]; + var_r30->unk_10 = &lbl_1_bss_140[var_r29 + 11]; + } + lbl_1_bss_B8 = 0; + lbl_1_bss_B4 = 0; + lbl_1_bss_B0 = 0; + fn_1_6728(); + + { + Vec sp14 = { 0.0f, 0.0f, 0.0f }; + Vec sp8 = { 0.0f, 0.0f, -1.0f }; + HuAudFXListnerSetEX(&sp14, &sp8, 3000.0, 1000.0, 100.0, 300.0, 300.0); + HuAudFXPlay(0x5F0); + } + return 1; +} + +void fn_1_596C(void) +{ + Process *var_r30; + s32 var_r31; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + var_r30 = lbl_1_bss_A2C[var_r31]; + if (var_r30) { + HuPrcKill(var_r30); + } + } + fn_1_6D0C(); + HuPrcKill(lbl_1_bss_A3C); + HuPrcKill(lbl_1_bss_A40); +} + +s32 fn_1_59F4(s32 arg0) +{ + if (fn_1_5A7C(arg0) != 0) { + return 0; + } + lbl_1_bss_A2C[arg0] = HuPrcChildCreate(lbl_1_data_154[arg0], 0x3ED, 0x5000, 0, lbl_1_bss_4); + return 1; +} + +s32 fn_1_5A7C(s32 arg0) +{ + return lbl_1_bss_A2C[arg0] != NULL; +} + +s32 fn_1_5AA8(s32 arg0, float arg1) +{ + M420DllUnkMapStruct *var_r31; + s32 var_r29; + s32 var_r30; + + var_r31 = &lbl_1_bss_C0[arg0]; + if ((var_r31->unk_1C += arg1) >= 200.0f) { + var_r31->unk_1C = 200.0f; + } + var_r31->unk_38 = 1; + var_r31->unk_30 = (s32)(200.0f - var_r31->unk_1C) / 10.0f; + switch (arg0) { + case 0: + var_r29 = 3; + var_r30 = 0x15; + break; + case 1: + var_r29 = 2; + var_r30 = 0x16; + break; + } + if (var_r31->unk_1C >= 200.0f) { + if (lbl_1_bss_B0 == 0) { + var_r31->unk_3C = 1; + Hu3DMotionTimeSet(lbl_1_bss_9F0[var_r30], 0.0f); + Hu3DModelAttrReset(lbl_1_bss_9F0[var_r30], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[var_r30], 0x40000001); + Hu3DModelAttrSet(lbl_1_bss_9F0[var_r29], 1); + } + return 1; + } + return 0; +} + +void fn_1_5C8C(M420DllUnkMapStruct *arg0) +{ + Vec sp8; + + if (arg0->unk_38 != 0) { + if (arg0->unk_30 > 0) { + arg0->unk_30--; + } + if (arg0->unk_30 <= 0) { + sp8 = arg0->unk_04->unk_04; + sp8.y = -60.0f + arg0->unk_1C; + fn_1_7230(arg0->unk_04, &sp8, 0x1E, 0); + + sp8 = arg0->unk_08->unk_04; + sp8.y = -65.0f + arg0->unk_1C; + fn_1_7230(arg0->unk_08, &sp8, 0x1E, 0); + + sp8 = arg0->unk_0C->unk_04; + sp8.y = 40.0f + arg0->unk_1C; + fn_1_7230(arg0->unk_0C, &sp8, 0x1E, 1); + + Hu3DMotionTimeSet(arg0->unk_0C->unk_02, 0.0f); + Hu3DModelAttrReset(arg0->unk_0C->unk_02, 1); + + sp8 = arg0->unk_10->unk_04; + sp8.y = -50.0f + arg0->unk_1C; + fn_1_7230(arg0->unk_10, &sp8, 0x1E, 1); + + Hu3DMotionTimeSet(arg0->unk_10->unk_02, 0.0f); + Hu3DModelAttrReset(arg0->unk_10->unk_02, 1); + Hu3DMotionStartEndSet(arg0->unk_00->unk_02, 0.0f, 30.0f); + Hu3DMotionTimeSet(arg0->unk_00->unk_02, 0.0f); + Hu3DModelAttrReset(arg0->unk_00->unk_02, 0x40000002); + Hu3DModelAttrReset(arg0->unk_00->unk_02, 0x40000001); + arg0->unk_34 = 3; + arg0->unk_38 = 0; + arg0->unk_24 = 0.8f; + arg0->unk_28 = 0.3f; + arg0->unk_2C = 0.0f; + if (arg0->unk_14 == 0) { + HuAudFXPlay(0x5F7); + } + else { + HuAudFXPlay(0x5F8); + } + } + } + if ((Hu3DMotionEndCheck(arg0->unk_00->unk_02) != 0) && (arg0->unk_34 > 0)) { + if (--arg0->unk_34 > 0) { + Hu3DMotionTimeSet(arg0->unk_00->unk_02, 0.0f); + } + else { + Hu3DMotionStartEndSet(arg0->unk_00->unk_02, 0.0f, 1.0f); + Hu3DMotionTimeSet(arg0->unk_00->unk_02, 0.0f); + Hu3DModelAttrSet(arg0->unk_00->unk_02, 0x40000002); + } + } + if (arg0->unk_24 > 0.2f) { + if ((arg0->unk_24 -= 0.005f) <= 0.2f) { + arg0->unk_24 = 0.2f; + } + } + arg0->unk_04->unk_28.y += arg0->unk_24; + if (arg0->unk_28 > 0.05f) { + if ((arg0->unk_28 -= 0.003f) <= 0.05f) { + arg0->unk_28 = 0.05f; + } + } + arg0->unk_04->unk_4C.y = 1.0 + (arg0->unk_28 * sind((90.0f * arg0->unk_2C))); + arg0->unk_2C += 0.02f; +} + +s32 fn_1_60F0(void) +{ + float var_f31; + float var_f30; + s32 var_r31; + + if (lbl_1_bss_BC >= 6) { + return 1; + } + var_f31 = 5.0f * (6 - lbl_1_bss_BC); + var_f30 = var_f31 - 5.0f; + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0xF], var_f30, var_f31); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0xF], var_f31); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000001); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xF], 0x40000004); + lbl_1_bss_B8 = 5; + lbl_1_bss_BC += 1; + if (lbl_1_bss_BC == 6) { + var_r31 = 1; + } + else { + var_r31 = 0; + } + return var_r31; +} + +void fn_1_6268(void) +{ + float var_f31 = 0.0f; + float var_f30 = 30.0f; + + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0xF], var_f31, var_f30); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0xF], var_f31); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000001); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000004); + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0x10], var_f31, var_f30); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0x10], var_f31); + lbl_1_bss_BC = 0; +} + +void fn_1_636C(void) +{ + float var_f31 = 0.0f; + float var_f30 = 30.0f; + + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0x14], var_f31, var_f30); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0x14], var_f31); +} + +void fn_1_63EC(void) +{ + float var_f31 = 5.0f * (6 - lbl_1_bss_BC); + float var_f30 = 30.0f; + + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0xF], var_f31, var_f30); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0xF], var_f31); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000001); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000004); + lbl_1_bss_BC = 0; + lbl_1_bss_B8 = 0; +} + +s32 fn_1_650C(void) +{ + s32 var_r31 = 0; + + if ((lbl_1_bss_BC == 6) && (lbl_1_bss_B8 == 0)) { + var_r31 = 1; + } + return var_r31; +} + +void fn_1_6554(void) +{ + Vec sp8; + M420DllUnkMapStruct2 *var_r31; + + var_r31 = &lbl_1_bss_140[8]; + var_r31->unk_04.x = 480.0f; + var_r31->unk_04.y = 800.0f; + var_r31->unk_04.z = -314.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + fn_1_6DF0(var_r31); + sp8.x = 480.0f; + sp8.y = 370.0f; + sp8.z = -314.0f; + Hu3DModelAttrReset(var_r31->unk_02, 1); + fn_1_7230(var_r31, &sp8, 0x14, 0); + Hu3DMotionTimeSet(fn_1_6660(), 0.0f); + Hu3DModelAttrSet(fn_1_6660(), 0x40000002); +} + +s16 fn_1_6660(void) +{ + return lbl_1_bss_140[8].unk_02; +} + +s32 fn_1_6670(void) +{ + M420DllUnkMapStruct2 *var_r31 = &lbl_1_bss_140[8]; + return var_r31->unk_00_field0; +} + +void fn_1_669C(s32 arg0) +{ + M420DllUnkMapStruct2 *var_r31 = &lbl_1_bss_140[8]; + if (arg0 == 0) { + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + fn_1_6DF0(var_r31); + } + var_r31->unk_00_field3 = arg0; +} + +void fn_1_6728(void) +{ + M420DllUnkMapStruct2 *var_r31 = &lbl_1_bss_140[8]; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 1000.0f; + var_r31->unk_04.z = 0.0f; + fn_1_6DF0(var_r31); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x13], 1); +} + +s32 fn_1_67A4(s32 arg0) +{ + M420DllUnkMapStruct *var_r31 = &lbl_1_bss_C0[arg0]; + return var_r31->unk_1C >= 200.0f; +} + +s32 fn_1_67E8(s32 arg0) +{ + M420DllUnkMapStruct *var_r31 = &lbl_1_bss_C0[arg0]; + return var_r31->unk_3C; +} + +s32 fn_1_6810(void) +{ + return lbl_1_bss_B4; +} + +void fn_1_6820(void) +{ + while (TRUE) { + if (lbl_1_bss_B8 > 0) { + if (--lbl_1_bss_B8 <= 0) { + Hu3DModelAttrSet(lbl_1_bss_9F0[0xF], 0x40000002); + } + } + HuPrcVSleep(); + } +} + +void fn_1_6884(void) +{ + s32 var_r31; + M420DllUnkMapStruct *var_r30; + M420DllUnkMapStruct *var_r29; + + while (TRUE) { + for (var_r31 = 0; var_r31 < 0xF; var_r31++) { + fn_1_6DF0(&lbl_1_bss_140[var_r31]); + } + for (var_r31 = 0; var_r31 < 2; var_r31++) { + fn_1_5C8C(&lbl_1_bss_C0[var_r31]); + } + var_r30 = lbl_1_bss_C0; + if ((var_r30->unk_1C >= 200.0f) || (var_r29 = &lbl_1_bss_C0[1], var_r29->unk_1C >= 200.0f)) { + lbl_1_bss_B0 = 1; + } + HuPrcVSleep(); + } +} + +void fn_1_6950(void) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0x1B; var_r31++) { + lbl_1_bss_9F0[var_r31] = Hu3DModelCreateFile(lbl_1_rodata_360[var_r31]); + } + Hu3DModelAttrSet(lbl_1_bss_9F0[1], 0x40000001); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xA], 0x40000001); + Hu3DModelAttrSet(lbl_1_bss_9F0[3], 0x40000002); + Hu3DModelAttrSet(lbl_1_bss_9F0[2], 0x40000002); + Hu3DModelPosSet(lbl_1_bss_9F0[0xF], -219.0f, 300.0f, -92.0f); + Hu3DModelRotSet(lbl_1_bss_9F0[0xF], 0.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_9F0[0x10], 0.0f, 0.0f, 0.0f); + Hu3DModelShadowMapSet(lbl_1_bss_9F0[0]); + Hu3DModelShadowMapSet(lbl_1_bss_9F0[0xD]); + Hu3DModelShadowMapSet(lbl_1_bss_9F0[0xE]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0xF]); + Hu3DModelShadowSet(lbl_1_bss_9F0[1]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0xA]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0xB]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0x10]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0x14]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0x13]); + Hu3DModelAttrSet(lbl_1_bss_9F0[4], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[5], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[6], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[7], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[8], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[9], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xB], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xC], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x15], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x16], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x17], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x18], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x19], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x1A], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xF], 0x40000002); + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0xF], 30.0f, 30.0f); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0xF], 30.0f); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xF], 0x40000002); + Hu3DModelHookSet(lbl_1_bss_9F0[1], "itemhook_sao", lbl_1_bss_9F0[0xA]); +} + +void fn_1_6D0C(void) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0x1B; var_r31++) { + Hu3DModelKill(lbl_1_bss_9F0[var_r31]); + } +} + +void fn_1_6D5C(void) +{ + LightData *var_r31; + + Hu3DLighInit(); + lbl_1_bss_9EC = Hu3DGLightCreateV(&lbl_1_data_138.unk_00, &lbl_1_data_138.unk_0C, &lbl_1_data_138.unk_18); + Hu3DGLightInfinitytSet(lbl_1_bss_9EC); + var_r31 = &Hu3DGlobalLight[lbl_1_bss_9EC]; + var_r31->unk_00 |= 0x8000; +} + +void fn_1_6DF0(M420DllUnkMapStruct2 *arg0) +{ + float var_f31; + + if (arg0->unk_00_field3) { + if (arg0->unk_00_field0) { + switch (arg0->unk_78) { + case 0: + var_f31 = arg0->unk_70; + break; + case 1: + var_f31 = sind((90.0f * arg0->unk_70)); + var_f31 *= var_f31; + break; + case 2: + var_f31 = sind((90.0f * arg0->unk_70)); + var_f31 *= var_f31 * var_f31; + break; + } + arg0->unk_04.x = arg0->unk_10.x + (var_f31 * (arg0->unk_1C.x - arg0->unk_10.x)); + arg0->unk_04.y = arg0->unk_10.y + (var_f31 * (arg0->unk_1C.y - arg0->unk_10.y)); + arg0->unk_04.z = arg0->unk_10.z + (var_f31 * (arg0->unk_1C.z - arg0->unk_10.z)); + if ((arg0->unk_70 += arg0->unk_74) >= 1.0f) { + arg0->unk_04 = arg0->unk_1C; + arg0->unk_00_field0 = 0; + } + } + Hu3DModelPosSet(arg0->unk_02, arg0->unk_04.x, arg0->unk_04.y, arg0->unk_04.z); + if (arg0->unk_00_field1) { + switch (arg0->unk_84) { + case 0: + var_f31 = arg0->unk_7C; + break; + case 1: + var_f31 = sind((90.0f * arg0->unk_7C)); + var_f31 *= var_f31; + break; + } + arg0->unk_28.x = arg0->unk_34.x + (var_f31 * (arg0->unk_40.x - arg0->unk_34.x)); + arg0->unk_28.y = arg0->unk_34.y + (var_f31 * (arg0->unk_40.y - arg0->unk_34.y)); + arg0->unk_28.z = arg0->unk_34.z + (var_f31 * (arg0->unk_40.z - arg0->unk_34.z)); + if ((arg0->unk_7C += arg0->unk_80) >= 1.0f) { + arg0->unk_28 = arg0->unk_40; + arg0->unk_00_field1 = 0; + } + } + Hu3DModelRotSet(arg0->unk_02, arg0->unk_28.x, arg0->unk_28.y, arg0->unk_28.z); + if (arg0->unk_00_field2) { + switch (arg0->unk_90) { + case 0: + var_f31 = arg0->unk_88; + break; + case 1: + var_f31 = sind((90.0f * arg0->unk_88)); + var_f31 *= var_f31; + break; + } + arg0->unk_4C.x = arg0->unk_58.x + (var_f31 * (arg0->unk_64.x - arg0->unk_58.x)); + arg0->unk_4C.y = arg0->unk_58.y + (var_f31 * (arg0->unk_64.y - arg0->unk_58.y)); + arg0->unk_4C.z = arg0->unk_58.z + (var_f31 * (arg0->unk_64.z - arg0->unk_58.z)); + if ((arg0->unk_88 += arg0->unk_8C) >= 1.0f) { + arg0->unk_4C = arg0->unk_64; + arg0->unk_00_field2 = 0; + } + } + Hu3DModelScaleSet(arg0->unk_02, arg0->unk_4C.x, arg0->unk_4C.y, arg0->unk_4C.z); + } +} + +void fn_1_7230(M420DllUnkMapStruct2 *arg0, Vec *arg1, s32 arg2, s32 arg3) +{ + arg0->unk_1C = *arg1; + arg0->unk_10 = arg0->unk_04; + arg0->unk_70 = 0.0f; + arg0->unk_74 = 1.0f / arg2; + arg0->unk_78 = arg3; + arg0->unk_00_field0 = 1; +} + +void fn_1_72C8(M420DllUnkMapStruct2 *arg0, Vec *arg1, s32 arg2, s32 arg3) +{ + arg0->unk_40 = *arg1; + arg0->unk_34 = arg0->unk_28; + arg0->unk_7C = 0.0f; + arg0->unk_80 = 1.0f / arg2; + arg0->unk_84 = arg3; + arg0->unk_00_field1 = 1; +} + +void fn_1_7360(M420DllUnkMapStruct2 *arg0, Vec *arg1, s32 arg2, s32 arg3) +{ + arg0->unk_64 = *arg1; + arg0->unk_58 = arg0->unk_4C; + arg0->unk_88 = 0.0f; + arg0->unk_8C = 1.0f / arg2; + arg0->unk_90 = arg3; + arg0->unk_00_field2 = 1; +} + +float fn_1_73F8(float arg8) +{ + float var_f31; + float var_f30; + + if (arg8 < 0.0f) { + arg8 = -arg8; + } + if (arg8 < 1.0f) { + var_f31 = (4.0f + ((arg8 * (3.0f * arg8 * arg8)) - (6.0f * arg8 * arg8))) / 6.0f; + } + else if (arg8 < 2.0f) { + var_f30 = arg8 - 2.0f; + var_f31 = (var_f30 * (-var_f30 * var_f30)) / 6.0f; + } + else { + var_f31 = 0.0f; + } + return var_f31; +} + +void fn_1_74F8(float *arg0, float *arg1, float *arg2, float *arg3, float arg8) +{ + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f26; + float var_f25; + + s32 var_r31; + s32 var_r30; + s32 var_r29; + + var_r29 = 0xB; + var_f30 = 0.0f; + var_f29 = 0.0f; + for (var_r31 = -2; var_r31 <= var_r29 + 2; var_r31++) { + var_r30 = var_r31; + if (var_r31 < 0) { + var_r30 = 0; + } + if (var_r31 > var_r29) { + var_r30 = var_r29; + } + var_f31 = arg8 - var_r31; + if (var_f31 < 0.0f) { + var_f31 = -var_f31; + } + if (var_f31 < 1.0f) { + var_f27 = (4.0f + ((var_f31 * (3.0f * var_f31 * var_f31)) - (6.0f * var_f31 * var_f31))) / 6.0f; + } + else if (var_f31 < 2.0f) { + var_f28 = var_f31 - 2.0f; + var_f27 = (var_f28 * (-var_f28 * var_f28)) / 6.0f; + } + else { + var_f27 = 0.0f; + } + var_f25 = var_f27; + var_f26 = var_f25; + var_f30 += var_f26 * arg0[var_r30]; + var_f29 += var_f26 * arg1[var_r30]; + } + *arg2 = var_f30; + *arg3 = var_f29; +} + +void fn_1_7704(void) +{ + Vec sp20; + Vec sp14; + Vec sp8; + + M420DllUnkMapStruct2 *var_r31; + s32 var_r29; + s32 var_r28; + + var_r28 = 0; + var_r31 = &lbl_1_bss_140[0]; + sp20.x = 0.0f; + sp20.y = 1000.0f; + sp20.z = 0.0f; + + sp14.x = 0.0f; + sp14.y = 0.0f; + sp14.z = 0.0f; + + sp8.x = 1.0f; + sp8.y = 1.0f; + sp8.z = 1.0f; + + fn_1_7230(var_r31, &sp20, 1, 0); + fn_1_72C8(var_r31, &sp14, 1, 0); + var_r28 = HuAudFXEmiterPlay(0x5EF, &sp20); + sp20.y = 750.0f; + fn_1_7230(var_r31, &sp20, 80, 1); + HuPrcSleep(0x50); + { + float var_f30; + float sp5C[12] = { + 0.0f, + 50.0f, + 300.0f, + 350.0f, + 300.0f, + 0.0f, + -300.0f, + -350.0f, + -350.0f, + -300.0f, + -100.0f, + 0.0f, + }; + float sp2C[12] = { + 750.0f, + 700.0f, + 600.0f, + 500.0f, + 400.0f, + 300.0f, + 350.0f, + 400.0f, + 450.0f, + 500.0f, + 600.0f, + 900.0f, + }; + float var_f24 = 0.050000004f; + for (var_f30 = -1.0f; var_f30 < 12.0f; var_f30 += var_f24) { + fn_1_74F8(sp5C, sp2C, &sp20.x, &sp20.y, var_f30); + fn_1_7230(var_r31, &sp20, 1, 0); + HuAudFXEmiterUpDate(var_r28, &sp20); + HuPrcVSleep(); + } + } + for (var_r29 = 0; var_r29 < 0x1E; var_r29++) { + Hu3DModelTPLvlSet(lbl_1_bss_9F0[1], 1.0f - (0.033333335f * var_r29)); + Hu3DModelTPLvlSet(lbl_1_bss_9F0[0xA], 1.0f - (0.033333335f * var_r29)); + HuAudFXEmiterUpDate(var_r28, &sp20); + HuPrcSleep(1); + } + HuAudFXStop(var_r28); + sp20.x = 1000.0f; + sp20.y = 0.0f; + sp20.z = 0.0f; + fn_1_7230(var_r31, &sp20, 1, 0); + HuPrcSleep(1); + Hu3DModelTPLvlSet(lbl_1_bss_9F0[1], 1.0f); + Hu3DModelTPLvlSet(lbl_1_bss_9F0[0xA], 1.0f); + *lbl_1_bss_A2C = NULL; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_7E24(void) +{ + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f26; + + M420DllUnkMapStruct2 *var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + M420DllUnkMapStruct *var_r27; + s32 var_r26; + s32 var_r25; + + var_r31 = &lbl_1_bss_140[0]; + { + Vec sp8 = { 0.0f, 0.0f, 0.0f }; + var_f29 = 800.0f; + var_f28 = 10.0f; + var_r29 = 0; + var_r28 = 0; + var_r30 = 0; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_f31 = 0.0f; + var_f26 = 0.005f; + var_r27 = &lbl_1_bss_C0[1]; + var_r26 = var_r27->unk_3C; + var_r25 = var_r26; + if (var_r25 != 0) { + var_f27 = 220.0f; + } + else { + var_f27 = -220.0f; + } + + for (var_f30 = var_f27; var_f31 < 1.0f; var_f31 += var_f26) { + sp8.x = (var_f29 * cosd((-180.0f * var_f31))) - (var_f28 * sind((-180.0f * var_f31))); + sp8.y = 1200.0 + ((var_f28 * cosd((-180.0f * var_f31))) + (var_f29 * sind((-180.0f * var_f31)))); + sp8.z = 0.0f; + if (var_f31 <= 0.0f) { + var_r30 = HuAudFXEmiterPlay(0x5EF, &sp8); + } + if ((sp8.x < (200.0f + var_f30)) && (var_r28 == 0)) { + Hu3DModelHookReset(lbl_1_bss_9F0[1]); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xA], 1); + Hu3DModelHookSet(lbl_1_bss_9F0[1], "itemhook_sao", lbl_1_bss_9F0[0xC]); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xC], 1); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0xC], 0.0f); + var_r28 = 1; + } + if ((sp8.x < var_f30) && (var_r29 == 0)) { + sp8.x = var_f30; + if (lbl_1_bss_A2C[3] == NULL) { + lbl_1_bss_A2C[3] = HuPrcChildCreate(lbl_1_data_154[3], 0x3ED, 0x5000, 0, lbl_1_bss_4); + } + var_r29 = 1; + } + fn_1_7230(var_r31, &sp8, 1, 0); + HuAudFXEmiterUpDate(var_r30, &sp8); + HuPrcVSleep(); + } + } + HuAudFXStop(var_r30); + lbl_1_bss_A2C[1] = NULL; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_8240(void) +{ + Hu3DModelAttrReset(lbl_1_bss_9F0[4], 1); + Hu3DMotionTimeSet(lbl_1_bss_9F0[4], 0.0f); + Hu3DModelAttrReset(lbl_1_bss_9F0[6], 1); + Hu3DMotionTimeSet(lbl_1_bss_9F0[6], 0.0f); + Hu3DModelAttrReset(lbl_1_bss_9F0[8], 1); + Hu3DMotionTimeSet(lbl_1_bss_9F0[8], 0.0f); + HuPrcSleep(0x78); + Hu3DModelAttrSet(lbl_1_bss_9F0[4], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[6], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[8], 1); + Hu3DModelAttrReset(lbl_1_bss_9F0[5], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[5], 0x40000001); + Hu3DMotionTimeSet(lbl_1_bss_9F0[5], 0.0f); + Hu3DModelAttrReset(lbl_1_bss_9F0[7], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[7], 0x40000001); + Hu3DMotionTimeSet(lbl_1_bss_9F0[7], 0.0f); + Hu3DModelAttrReset(lbl_1_bss_9F0[9], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[9], 0x40000001); + Hu3DMotionTimeSet(lbl_1_bss_9F0[9], 0.0f); + lbl_1_bss_A2C[2] = NULL; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_8414(void) +{ + Vec sp14; + Vec sp8; + + float var_f31; + float var_f30; + + M420DllUnkMapStruct2 *var_r31; + M420DllUnkMapStruct *var_r30; + M420DllUnkMapStruct2 *var_r29; + M420DllUnkMapStruct2 *var_r28; + M420DllUnkMapStruct2 *var_r27; + M420DllUnkMapStruct2 *var_r26; + s32 var_r25; + + var_r31 = &lbl_1_bss_140[2]; + var_r27 = &lbl_1_bss_140[3]; + var_r26 = &lbl_1_bss_140[0]; + Hu3DModelHookReset(lbl_1_bss_9F0[1]); + var_r31->unk_04 = var_r26->unk_04; + var_r31->unk_04.y -= 100.0f; + var_r31->unk_04.z += 148.0f; + fn_1_6DF0(var_r31); + + sp14 = var_r31->unk_04; + sp14.y = 80.0f; + sp14.z = 170.0f; + + sp8 = var_r31->unk_28; + sp8.x += 45.0f; + + fn_1_7230(var_r31, &sp14, 30, 0); + fn_1_72C8(var_r31, &sp8, 30, 0); + HuPrcSleep(0xA); + HuAudFXPlay(0x5F5); + var_r25 = fn_1_67A4(0) != 0 ? 0 : 1; + var_r30 = &lbl_1_bss_C0[var_r25]; + if (var_r25 == 0) { + var_f30 = -220.0f; + } + else { + var_f30 = 220.0f; + } + var_f31 = var_f30; + + sp14 = var_r30->unk_0C->unk_04; + sp14.y = 40.0f + var_r30->unk_1C; + sp14.x = var_f31; + + var_r29 = var_r30->unk_0C; + fn_1_7230(var_r29, &sp14, 30, 1); + + Hu3DMotionTimeSet(var_r30->unk_0C->unk_02, 0.0f); + Hu3DModelAttrReset(var_r30->unk_0C->unk_02, 1); + sp14 = var_r30->unk_10->unk_04; + sp14.y = -50.0f + var_r30->unk_1C; + sp14.x = var_f31; + var_r28 = var_r30->unk_10; + fn_1_7230(var_r28, &sp14, 30, 1); + Hu3DMotionTimeSet(var_r30->unk_10->unk_02, 0.0f); + Hu3DModelAttrReset(var_r30->unk_10->unk_02, 1); + HuPrcSleep(5); + lbl_1_bss_B4 = 1; + sp8.x = 0.0f; + fn_1_72C8(var_r31, &sp8, 15, 1); + HuPrcSleep(0xF); + var_r27->unk_04 = var_r31->unk_04; + Hu3DModelAttrSet(var_r31->unk_02, 1); + Hu3DModelAttrReset(var_r27->unk_02, 1); + Hu3DMotionTimeSet(var_r27->unk_02, 0.0f); + Hu3DModelAttrReset(var_r27->unk_02, 0x40000002); + Hu3DModelAttrSet(var_r27->unk_02, 0x40000001); + HuPrcSleep(0x78); + lbl_1_bss_A2C[3] = NULL; + HuPrcEnd(); + + while (TRUE) { + HuPrcVSleep(); + } +} diff --git a/src/REL/m420dll/player.c b/src/REL/m420dll/player.c new file mode 100644 index 00000000..2a749b74 --- /dev/null +++ b/src/REL/m420dll/player.c @@ -0,0 +1,992 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/esprite.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/wipe.h" + +#include "REL/m420dll.h" + +typedef void (*M420DllUnkFunc)(M420DllPlayerStruct *); + +typedef struct M420DllUnkStruct2 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ s32 unk_10; + /* 0x14 */ s32 unk_14; + /* 0x18 */ s32 unk_18; + /* 0x1C */ s32 unk_1C; +} M420DllUnkStruct2; /* size = 0x20 */ + +void fn_1_1F14(void); +void fn_1_1F54(M420DllPlayerStruct *arg0); +void fn_1_1F94(M420DllPlayerStruct *arg0); +void fn_1_200C(M420DllPlayerStruct *arg0); +void fn_1_20EC(M420DllPlayerStruct *arg0); +void fn_1_211C(M420DllPlayerStruct *arg0); +void fn_1_2174(M420DllPlayerStruct *arg0); +void fn_1_2260(M420DllPlayerStruct *arg0); +void fn_1_22CC(M420DllPlayerStruct *arg0); +void fn_1_276C(M420DllPlayerStruct *arg0); +void fn_1_2CE0(M420DllPlayerStruct *arg0); +void fn_1_2D7C(M420DllPlayerStruct *arg0); +void fn_1_2EA8(M420DllPlayerStruct *arg0); +void fn_1_3098(M420DllPlayerStruct *arg0); +void fn_1_326C(M420DllPlayerStruct *arg0); +void fn_1_3450(M420DllPlayerStruct *arg0); +s32 fn_1_34AC(M420DllPlayerStruct *arg0); +void fn_1_355C(M420DllPlayerStruct *arg0); +void fn_1_36E4(M420DllPlayerStruct *arg0); +void fn_1_374C(M420DllPlayerStruct *arg0); +void fn_1_378C(M420DllPlayerStruct *arg0); +void fn_1_3854(void); +void fn_1_3970(M420DllPlayerStruct *arg0); +void fn_1_3F94(M420DllPlayerStruct *arg0); +void fn_1_4294(M420DllPlayerStruct *arg0); +void fn_1_4574(M420DllPlayerStruct *arg0); +void fn_1_476C(M420DllPlayerStruct *arg0); + +M420DllUnkStruct2 lbl_1_data_50[4] = { + { 0x19, 0x01, 0x2A, 0x08, 0x2D, 0x10, 0x01, 0x01 }, + { 0x19, 0x01, 0x22, 0x06, 0x22, 0x0C, 0x01, 0x01 }, + { 0x19, 0x01, 0x1B, 0x05, 0x14, 0x0A, 0x01, 0x01 }, + { 0x19, 0x01, 0x14, 0x04, 0x0A, 0x08, 0x01, 0x01 }, +}; + +// TODO MAKE_NUM +static const s32 lbl_1_rodata_F8[8][0xB] = { + { 0x5F0000, 0x5F0017, 0x5F0018, 0x5F0068, 0x5F0069, 0x5F006A, 0x5F0035, 0x5F006B, 0x5F006E, 0x5F0049, 0x33001B }, + { 0x1A0000, 0x1A0017, 0x1A0018, 0x1A0068, 0x1A0069, 0x1A006A, 0x1A0035, 0x1A006B, 0x1A006E, 0x1A0049, 0x33001C }, + { 0x6D0000, 0x6D0017, 0x6D0018, 0x6D0068, 0x6D0069, 0x6D006A, 0x6D0035, 0x6D006B, 0x6D006E, 0x6D0049, 0x33001D }, + { 0x8A0000, 0x8A0017, 0x8A0018, 0x8A0068, 0x8A0069, 0x8A006A, 0x8A0035, 0x8A006B, 0x8A006E, 0x8A0049, 0x33001E }, + { 0x850000, 0x850017, 0x850018, 0x850068, 0x850069, 0x85006A, 0x850035, 0x85006B, 0x85006E, 0x850049, 0x33001F }, + { 0x110000, 0x110017, 0x110018, 0x110068, 0x110069, 0x11006A, 0x110035, 0x11006B, 0x11006E, 0x110049, 0x330020 }, + { 0x0D0000, 0x0D0017, 0x0D0018, 0x0D0068, 0x0D0069, 0x0D006A, 0x0D0035, 0x0D006B, 0x0D006E, 0x0D0049, 0x330021 }, + { 0x810000, 0x810017, 0x810018, 0x810068, 0x810069, 0x81006A, 0x810035, 0x81006B, 0x81006E, 0x810049, 0x330022 }, +}; +static const Vec lbl_1_rodata_258[4][2] = { + { { -372.0f, 300.0f, -220.0f }, { 0.0f, 50.0f, 0.0f } }, + { { 435.0f, 300.0f, -260.0f }, { 0.0f, 140.0f, 0.0f } }, + { { 315.0f, 300.0f, -153.0f }, { 0.0f, 140.0f, 0.0f } }, + { { 195.0f, 300.0f, -46.0f }, { 0.0f, 140.0f, 0.0f } }, +}; + +M420DllPlayerStruct *fn_1_1B8C(s32 arg0, s32 arg1) +{ + M420DllPlayerStruct *var_r31; + s32 var_r30; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M420DllPlayerStruct), MEMORY_DEFAULT_NUM); + if (!var_r31) { + OSReport("M420PlayerCreate ERROR...\n"); + return NULL; + } + var_r31->unk_04 = arg0; + var_r31->unk_4C = arg1; + var_r31->unk_08 = GWPlayerCfg[arg0].diff; + var_r31->unk_00_field0 = GWPlayerCfg[arg0].iscom; + var_r31->unk_0A = GWPlayerCfg[arg0].character; + var_r31->unk_0C = GWPlayerCfg[arg0].pad_idx; + var_r31->unk_10 = lbl_1_rodata_258[arg1][0]; + var_r31->unk_1C = lbl_1_rodata_258[arg1][1]; + var_r31->unk_48 = 0; + var_r31->unk_50 = 0; + var_r31->unk_00_field2 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_E8 = NULL; + for (var_r30 = 0; var_r30 < 0xA; var_r30++) { + var_r31->unk_84[var_r30] = 7; + } + fn_1_1F54(var_r31); + fn_1_1F94(var_r31); + + switch (arg1) { + case 0: + if (var_r31->unk_0A == 5) { + CharModelMotionSet(var_r31->unk_0A, var_r31->unk_AE[0xA]); + Hu3DMotionStartEndSet(var_r31->unk_AC, 0.0f, 1.0f); + Hu3DMotionTimeSet(var_r31->unk_AC, 0.0f); + } + else { + CharModelMotionSet(var_r31->unk_0A, var_r31->unk_AE[0]); + } + break; + case 1: + case 2: + case 3: + var_r31->unk_1C.y = 0.0f; + CharModelMotionSet(var_r31->unk_0A, var_r31->unk_AE[0]); + break; + default: + break; + } + + CharModelMotionDataClose(var_r31->unk_0A); + fn_1_200C(var_r31); + var_r31->unk_40 = HuPrcChildCreate(fn_1_1F14, 0x64, 0x5000, 0, lbl_1_bss_4); + var_r31->unk_40->user_data = var_r31; + return var_r31; +} + +void fn_1_1E14(M420DllPlayerStruct *arg0) +{ + fn_1_2174(arg0); + fn_1_211C(arg0); + fn_1_20EC(arg0); + HuPrcKill(arg0->unk_40); + HuMemDirectFree(arg0); +} + +void fn_1_1E64(M420DllPlayerStruct *arg0, s32 arg1, s32 arg2) +{ + switch (arg1) { + case 0: + omVibrate(arg0->unk_04, arg2, 6, 6); + break; + case 1: + omVibrate(arg0->unk_04, arg2, 4, 2); + break; + case 2: + omVibrate(arg0->unk_04, arg2, 0xC, 0); + break; + } +} + +M420DllUnkFunc lbl_1_data_EC[0xC] = { + fn_1_2260, + fn_1_22CC, + fn_1_2D7C, + fn_1_276C, + fn_1_2CE0, + fn_1_2EA8, + fn_1_2260, + fn_1_4574, + fn_1_476C, + fn_1_3F94, + fn_1_4294, + fn_1_3970, +}; + +void fn_1_1F14(void) +{ + M420DllPlayerStruct *var_r31 = HuPrcCurrentGet()->user_data; + while (TRUE) { + lbl_1_data_EC[var_r31->unk_48](var_r31); + } +} + +void fn_1_1F54(M420DllPlayerStruct *arg0) +{ + arg0->unk_AC = CharModelCreate(arg0->unk_0A, 2); + Hu3DModelShadowSet(arg0->unk_AC); +} + +void fn_1_1F94(M420DllPlayerStruct *arg0) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0xB; var_r31++) { + arg0->unk_AE[var_r31] = CharModelMotionCreate(arg0->unk_0A, lbl_1_rodata_F8[arg0->unk_0A][var_r31]); + } +} + +void fn_1_200C(M420DllPlayerStruct *arg0) +{ + s32 var_r30; + + for (var_r30 = 0; var_r30 <= 9; var_r30++) { + arg0->unk_C4[var_r30] = espEntry(0x330018, 0, 0); + espDispOff(arg0->unk_C4[var_r30]); + } + switch (arg0->unk_4C) { + case 0: + arg0->unk_D8 = espEntry(0x330019, 1, 0); + break; + case 1: + case 2: + case 3: + arg0->unk_D8 = espEntry(0x33001A, 1, 0); + break; + default: + break; + } + espDispOff(arg0->unk_D8); + espTPLvlSet(arg0->unk_D8, 0.8f); +} + +void fn_1_20EC(M420DllPlayerStruct *arg0) +{ + CharModelKill(arg0->unk_0A); +} + +void fn_1_211C(M420DllPlayerStruct *arg0) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0xB; var_r31++) { + CharModelMotionKill(arg0->unk_0A, arg0->unk_AE[var_r31]); + } +} + +void fn_1_2174(M420DllPlayerStruct *arg0) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0xB; var_r31++) { + espKill(arg0->unk_C4[var_r31]); + } +} + +void fn_1_21C8(M420DllPlayerStruct *arg0, Vec *arg1, s32 arg2, s32 arg3) +{ + arg0->unk_34 = *arg1; + arg0->unk_28 = arg0->unk_1C; + arg0->unk_DC = 0.0f; + arg0->unk_E0 = 1.0f / arg2; + arg0->unk_E4 = arg3; + arg0->unk_00_field2 = 1; +} + +void inline fn_1_2260_alt(M420DllPlayerStruct *arg0, s32 arg1) +{ + s32 var_r30; + s32 var_r29; + + for (var_r30 = 0; var_r30 < arg1; var_r30++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + break; + } + } +} + +void fn_1_2260(M420DllPlayerStruct *arg0) +{ + s32 var_r30; + s32 var_r29; + + while (TRUE) { + for (var_r30 = 0; var_r30 < 1; var_r30++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + } +} + +void fn_1_22CC(M420DllPlayerStruct *arg0) +{ + float var_f31; + float var_f30; + M420DllUnkStruct2 *var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r26; + s32 var_r23; + s32 var_r21; + s32 var_r18; + + var_r30 = &lbl_1_data_50[arg0->unk_08]; + fn_1_3098(arg0); + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[8], 0.0f, 10.0f, 0x40000001); + arg0->unk_50 = 0; + arg0->unk_58 = var_r30->unk_00 + (fn_1_8944() % var_r30->unk_04); + + while (arg0->unk_50 < 6) { + fn_1_326C(arg0); + while (var_r29 == 0) { + if (arg0->unk_00_field0 == 0) { + var_r29 = fn_1_34AC(arg0); + } + else if (arg0->unk_58 > 0) { + arg0->unk_58--; + var_r29 = 0; + } + else if ((fn_1_8944() % 30) != 0) { + var_r29 = 1; + arg0->unk_58 = (var_r30->unk_08 - (var_r30->unk_0C / 2)) + (fn_1_8944() % var_r30->unk_0C); + } + else { + var_r29 = 2; + arg0->unk_58 = (var_r30->unk_08 - (var_r30->unk_0C / 2)) + (fn_1_8944() % var_r30->unk_0C); + } + switch (var_r29) { + case 0: + fn_1_2260(arg0); + break; + case 1: + var_f31 = 5.0f * arg0->unk_50; + var_f30 = 5.0f + var_f31; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[5]); + Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30); + Hu3DMotionTimeSet(arg0->unk_AC, var_f31); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000004); + arg0->unk_5C[arg0->unk_50++] = 1; + HuAudFXPlay(0x5F4); + fn_1_60F0(); + fn_1_2260_alt(arg0, 5); + break; + case 2: + if (arg0->unk_50 <= 0) { + fn_1_2260(arg0); + } + else { + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); + Hu3DModelAttrSet(arg0->unk_AC, 0x40000004); + fn_1_63EC(); + fn_1_2260_alt(arg0, 1); + if (Hu3DMotionEndCheck(arg0->unk_AC) != 0) { + for (var_r28 = 0; var_r28 < 0xA; var_r28++) { + arg0->unk_5C[var_r28] = 0; + } + arg0->unk_50 = 0; + var_f31 = 0.0f; + var_f30 = 0.0f; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[5]); + Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30); + Hu3DMotionTimeSet(arg0->unk_AC, var_f31); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); + } + } + break; + default: + break; + } + } + } + fn_1_326C(arg0); + fn_1_2260_alt(arg0, 5); + fn_1_3450(arg0); + arg0->unk_48 = 2; +} + +void fn_1_276C(M420DllPlayerStruct *arg0) +{ + s32 sp8[4]; + + float var_f31; + float var_f30; + + s32 var_r30; + M420DllUnkStruct2 *var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r26; + s32 var_r25; + s32 var_r24; + s32 var_r23; + s32 var_r22; + s32 var_r21; + s32 var_r20; + s32 var_r19; + s32 var_r18; + s32 var_r17; + + var_r29 = &lbl_1_data_50[arg0->unk_08]; + if (arg0->unk_4C == 1) { + HuAudFXPlay(0x5F1); + fn_1_669C(1); + fn_1_6554(); + for (var_r28 = 0; var_r28 < 0xF; var_r28++) { + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[7], 0.0f, 6.0f, 0); + for (var_r27 = 0; var_r27 < 6; var_r27++) { + fn_1_669C(1); + fn_1_36E4(arg0); + HuAudFXPlay(0x5F2); + + fn_1_355C(arg0); + var_r19 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r19) { + break; + } + } + fn_1_355C(arg0); + var_r20 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r20) { + break; + } + } + } + else { + block_10: + fn_1_3098(arg0); + arg0->unk_50 = 0; + arg0->unk_58 = var_r29->unk_10 + (fn_1_8944() % var_r29->unk_14); + + while (arg0->unk_50 < 1) { + fn_1_326C(arg0); + for (var_r21 = 0; var_r21 < 0x12; var_r21++) { + fn_1_3450(arg0); + arg0->unk_48 = 6; + + fn_1_355C(arg0); + sp8[0] = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 == sp8[0]) { + break; + } + } + } + fn_1_326C(arg0); + loop_12: + if (arg0->unk_00_field0 == 0) { + var_r30 = fn_1_34AC(arg0); + } + else if (arg0->unk_58 > 0) { + arg0->unk_58 = arg0->unk_58 - 1; + var_r30 = 0; + } + else if ((fn_1_8944() % 30) != 0) { + var_r30 = 1; + } + else { + var_r30 = 2; + } + switch (var_r30) { + case 0: + for (var_r26 = 0; var_r26 < 1; var_r26++) { + fn_1_355C(arg0); + var_r18 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r18) { + break; + } + } + case 1: + if (arg0->unk_4C != 1) { + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[7], 0.0f, 6.0f, 0); + for (var_r25 = 0; var_r25 < 6; var_r25++) { + fn_1_374C(arg0->unk_E8); + fn_1_36E4(arg0); + HuAudFXPlay(0x5F2); + fn_1_355C(arg0); + var_r17 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 == var_r17) { + break; + } + } + } + block_36: + arg0->unk_5C[arg0->unk_50++] = 1; + switch (arg0->unk_4C) { + case 1: + case 2: + var_f31 = 0.0f; + var_f30 = 34.0f; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]); + Hu3DMotionStartEndSet(arg0->unk_AC, 0.0f, 34.0f); + Hu3DMotionTimeSet(arg0->unk_AC, 0.0f); + Hu3DMotionSpeedSet(arg0->unk_AC, 2.0f); + break; + } + arg0->unk_48 = 5; + break; + case 2: + switch (arg0->unk_4C) { + case 0: + break; + case 1: + var_f31 = 0.0f; + var_f30 = 10.0f; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]); + Hu3DMotionStartEndSet(arg0->unk_AC, 0.0f, 10.0f); + Hu3DMotionTimeSet(arg0->unk_AC, 0.0f); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + for (var_r24 = 0; var_r24 < 0x1E; var_r24++) { + var_f31 = 60.0f; + var_f30 = 70.0f; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]); + Hu3DMotionStartEndSet(arg0->unk_AC, 60.0f, 70.0f); + Hu3DMotionTimeSet(arg0->unk_AC, 60.0f); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + for (var_r23 = 0; var_r23 < 0x1E; var_r23++) { + fn_1_355C(arg0); + sp8[2] = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != sp8[2]) { + break; + } + } + fn_1_355C(arg0); + sp8[3] = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != sp8[3]) { + break; + } + } + case 2: + case 3: + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[9], 0.0f, 2.0f, 0); + for (var_r22 = 0; var_r22 < 0x3C; var_r22++) { + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 8.0f, 0); + fn_1_355C(arg0); + sp8[1] = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != sp8[1]) { + break; + } + } + break; + } + break; + } + } +} + +void fn_1_2CE0(M420DllPlayerStruct *arg0) +{ + s32 var_r30; + s32 var_r29; + + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 30.0f, 0x40000001); + + // fn_1_2260? + for (var_r30 = 0; var_r30 < 0x23; var_r30++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + arg0->unk_48 = 0; +} + +void fn_1_2D7C(M420DllPlayerStruct *arg0) +{ + float var_f31; + float var_f30; + s32 var_r30; + s32 var_r29; + + var_f30 = 0.0f; + var_f31 = 30.0f; + Hu3DMotionStartEndSet(arg0->unk_AC, var_f30, var_f31); + Hu3DMotionTimeSet(arg0->unk_AC, var_f31); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); + Hu3DModelAttrSet(arg0->unk_AC, 0x40000004); + HuAudFXPlay(0x5F6); + fn_1_6268(); + fn_1_5AA8(0, 22.5f); + fn_1_1E64(arg0, 1, 0x1E); + // fn_1_2260? + for (var_r30 = 0; var_r30 < 0x1E; var_r30++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + arg0->unk_48 = 0; +} + +void fn_1_2EA8(M420DllPlayerStruct *arg0) +{ + s16 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r26; + s32 var_r25; + s32 var_r24; + s32 var_r23; + s32 var_r22; + + fn_1_326C(arg0); + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[3], 0.0f, 1.0f, 0); + var_r30 = fn_1_6660(); + Hu3DModelAttrReset(var_r30, 0x40000002); + Hu3DModelAttrSet(var_r30, 0x40000001); + Hu3DMotionTimeSet(var_r30, 0.0f); + + for (var_r29 = 0; var_r29 < 0x18; var_r29++) { + HuAudFXPlay(0x5F7); + fn_1_636C(); + fn_1_1E64(arg0, 0x1E, 1); + Hu3DModelAttrSet(var_r30, 0x40000002); + fn_1_5AA8(1, 22.5f); + for (var_r28 = 0; var_r28 < 0x14; var_r28++) { + HuAudFXPlay(0x5F8); + fn_1_3450(arg0); + fn_1_378C(arg0); + for (var_r27 = 0; var_r27 < 0x14; var_r27++) { + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 30.0f, 0x40000001); + for (var_r26 = 0; var_r26 < 0x19; var_r26++) { + arg0->unk_48 = 6; + + fn_1_355C(arg0); + var_r22 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r22) { + break; + } + } + fn_1_355C(arg0); + var_r23 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r23) { + break; + } + } + fn_1_355C(arg0); + var_r24 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r24) { + break; + } + } + fn_1_355C(arg0); + var_r25 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r25) { + break; + } + } +} + +void fn_1_3098(M420DllPlayerStruct *arg0) +{ + s32 var_r30; + s32 var_r29; + s32 var_r28; + + for (var_r30 = 0; var_r30 < 0xA; var_r30++) { + arg0->unk_5C[var_r30] = 0; + } + arg0->unk_50 = 0; + switch (arg0->unk_4C) { + case 0: + for (var_r29 = 0; var_r29 < 6;) { + arg0->unk_84[var_r29] = fn_1_8944() % 7; + if (arg0->unk_84[var_r29] == 6) { + arg0->unk_84[var_r29] = 0; + } + if ((var_r29 <= 0) || (arg0->unk_84[var_r29] != arg0->unk_84[var_r29 - 1])) { + for (var_r30 = 0, var_r28 = 0; var_r30 < var_r29; var_r30++) { + if (arg0->unk_84[var_r29] == arg0->unk_84[var_r30]) { + var_r28++; + } + } + if (var_r28 < 2) { + var_r29++; + } + } + } + break; + case 1: + case 2: + case 3: + for (var_r30 = 0; var_r30 < 0xA; var_r30++) { + arg0->unk_84[1] = arg0->unk_84[0]; + arg0->unk_84[0] = fn_1_8944() % 7; + if (arg0->unk_84[0] == 6) { + arg0->unk_84[0] = 0; + } + if (arg0->unk_84[0] != arg0->unk_84[1]) { + break; + } + } + break; + default: + break; + } +} + +static const s32 lbl_1_rodata_2F8[4] = { 6, 1, 1, 1 }; + +void fn_1_326C(M420DllPlayerStruct *arg0) +{ + Vec sp14; + Vec sp8; + + s32 var_r30; + s16 var_r29; + s32 var_r28; + s32 var_r26; + + sp14 = arg0->unk_10; + sp14.y += 300.0f; + Hu3D3Dto2D(&sp14, 1, &sp8); + + var_r26 = arg0->unk_4C == 0 ? -6 : 0; + espPosSet(arg0->unk_D8, sp8.x + var_r26, 6.0f + sp8.y); + espDispOn(arg0->unk_D8); + var_r28 = lbl_1_rodata_2F8[arg0->unk_4C]; + sp8.x -= (var_r28 / 2) * 0x1E; + for (var_r30 = 0; var_r30 < var_r28; var_r30++) { + var_r29 = arg0->unk_C4[var_r30]; + if (arg0->unk_5C[var_r30] != 0) { + espBankSet(var_r29, arg0->unk_84[var_r30] + 7); + } + else { + espBankSet(var_r29, arg0->unk_84[var_r30]); + } + espPosSet(var_r29, sp8.x + var_r30 * 0x20, sp8.y); + espDispOn(var_r29); + } +} + +void fn_1_3450(M420DllPlayerStruct *arg0) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0xA; var_r31++) { + espDispOff(arg0->unk_C4[var_r31]); + } + espDispOff(arg0->unk_D8); +} + +static const s32 lbl_1_rodata_30C[7] = { 0x100, 0x200, 0x40, 0x20, 0x800, 0x400, 0x10 }; + +s32 fn_1_34AC(M420DllPlayerStruct *arg0) +{ + s32 var_r31; + u16 var_r30; + u16 var_r29; + + var_r31 = 0; + var_r30 = HuPadBtnDown[arg0->unk_0C] & 0xF60; + var_r29 = lbl_1_rodata_30C[arg0->unk_84[arg0->unk_50]]; + if (var_r30 != 0) { + var_r31 = 2; + } + if (((var_r30 & var_r29) != 0) && ((var_r30 & ~var_r29) == 0)) { + var_r31 = 1; + } + return var_r31; +} + +void fn_1_355C(M420DllPlayerStruct *arg0) +{ + float var_f31; + + arg0 = HuPrcCurrentGet()->user_data; + Hu3DModelPosSet(arg0->unk_AC, arg0->unk_10.x, arg0->unk_10.y, arg0->unk_10.z); + if (arg0->unk_00_field2) { + switch (arg0->unk_E4) { + case 0: + var_f31 = arg0->unk_DC; + break; + case 1: + var_f31 = sind((90.0f * arg0->unk_DC)); + var_f31 *= var_f31; + break; + } + arg0->unk_1C.x = arg0->unk_28.x + (var_f31 * (arg0->unk_34.x - arg0->unk_28.x)); + arg0->unk_1C.y = arg0->unk_28.y + (var_f31 * (arg0->unk_34.y - arg0->unk_28.y)); + arg0->unk_1C.z = arg0->unk_28.z + (var_f31 * (arg0->unk_34.z - arg0->unk_28.z)); + if ((arg0->unk_DC += arg0->unk_E0) >= 1.0f) { + arg0->unk_1C = arg0->unk_34; + arg0->unk_00_field2 = 0; + } + } + Hu3DModelRotSet(arg0->unk_AC, arg0->unk_1C.x, arg0->unk_1C.y, arg0->unk_1C.z); +} + +void fn_1_36E4(M420DllPlayerStruct *arg0) +{ + Hu3DModelHookSet(arg0->unk_AC, "test11_tex_we-itemhook-r", fn_1_6660()); + arg0->unk_00_field1 = 1; + fn_1_1E64(arg0, 1, 0x14); +} + +void fn_1_374C(M420DllPlayerStruct *arg0) +{ + Hu3DModelHookReset(arg0->unk_AC); + arg0->unk_00_field1 = 0; +} + +void fn_1_378C(M420DllPlayerStruct *arg0) +{ + Mtx sp20; + Vec sp14; + Vec sp8; + + if (arg0->unk_00_field1) { + Hu3DModelObjMtxGet(arg0->unk_AC, "test11_tex_we-itemhook-r", sp20); + Hu3DModelHookObjReset(arg0->unk_AC, "test11_tex_we-itemhook-r"); + Hu3DMtxTransGet(sp20, &sp14); + Hu3DMtxRotGet(sp20, &sp8); + Hu3DModelPosSetV(fn_1_6660(), &sp14); + Hu3DModelRotSetV(fn_1_6660(), &sp8); + } + HuPrcChildCreate(fn_1_3854, 0x64, 0x2000, 0, lbl_1_bss_4); + arg0->unk_00_field1 = 0; +} + +char lbl_1_data_135[1] = { 0 }; + +void fn_1_3854(void) +{ + Mtx sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + + float var_f31; + s16 var_r31; + + var_r31 = fn_1_6660(); + Hu3DModelObjMtxGet(var_r31, lbl_1_data_135, sp2C); + Hu3DMtxRotGet(sp2C, &sp8); + Hu3DMtxTransGet(sp2C, &sp20); + var_f31 = 0.0f; + + while (var_f31 < 1.0f) { + sp14.x = cosd((90.0f * var_f31)); + sp14.y = sp14.z = sp14.x; + Hu3DModelScaleSet(var_r31, sp14.x, sp14.y, sp14.z); + var_f31 += 0.05f; + HuPrcVSleep(); + } + fn_1_6728(); + sp14.x = sp14.y = sp14.z = 1.0f; + Hu3DModelScaleSet(var_r31, sp14.x, sp14.y, sp14.z); + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_3970(M420DllPlayerStruct *arg0) +{ + Vec sp38; + + s32 var_r27; + s32 var_r26; + s32 var_r25; + s32 var_r24; + + if (arg0->unk_00_field1) { + fn_1_378C(arg0); + } + else if (arg0->unk_4C == 1) { + fn_1_378C(arg0); + } + fn_1_3450(arg0); + if (arg0->unk_4C == 0) { + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); + Hu3DModelAttrSet(arg0->unk_AC, 0x40000004); + fn_1_63EC(); + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[6], 0.0f, 32.0f, 0); + Hu3DMotionShiftStartEndSet(arg0->unk_AC, 0.0f, 59.0f); + sp38 = arg0->unk_1C; + sp38.y = 0.0f; + fn_1_21C8(arg0, &sp38, 60, 1); + } + for (var_r27 = 0; var_r27 < 0x3C; var_r27++) { + fn_1_355C(arg0); + var_r25 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r25) { + return; + } + } + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 16.0f, 0); + for (var_r26 = 0; var_r26 < 0x3C; var_r26++) { + fn_1_355C(arg0); + var_r24 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r24) { + return; + } + } + arg0->unk_48 = 0; +} + +void fn_1_3F94(M420DllPlayerStruct *arg0) +{ + Vec sp8; + s32 var_r29; + s32 var_r28; + + if (arg0->unk_4C != 0) { + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[6]); + Hu3DMotionStartEndSet(arg0->unk_AC, 60.0f, 119.0f); + Hu3DMotionTimeSet(arg0->unk_AC, 60.0f); + sp8 = arg0->unk_1C; + sp8.y = lbl_1_rodata_258[arg0->unk_4C][1].y; + fn_1_21C8(arg0, &sp8, 60, 1); + while (arg0->unk_00_field2 != 0) { + for (var_r28 = 0; var_r28 < 1; var_r28++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + } + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 4.0f, 0); + } + arg0->unk_48 = 0; +} + +void fn_1_4294(M420DllPlayerStruct *arg0) +{ + Vec sp8; + s32 var_r29; + s32 var_r28; + + if (arg0->unk_4C != 0) { + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[6]); + Hu3DMotionStartEndSet(arg0->unk_AC, 0.0f, 59.0f); + sp8 = arg0->unk_1C; + sp8.y = 0.0f; + fn_1_21C8(arg0, &sp8, 60, 1); + while (arg0->unk_00_field2 != 0) { + for (var_r28 = 0; var_r28 < 1; var_r28++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + } + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 8.0f, 0); + } + arg0->unk_48 = 0; +} + +void fn_1_4574(M420DllPlayerStruct *arg0) +{ + float var_f31; + M420DllPlayerStruct *var_r31; + s32 var_r29; + s32 var_r28; + + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[1], 0.0f, 4.0f, 0); + fn_1_2260(arg0); +} + +void fn_1_476C(M420DllPlayerStruct *arg0) +{ + float var_f31; + M420DllPlayerStruct *var_r31; + s32 var_r29; + s32 var_r28; + + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[2], 0.0f, 4.0f, 0); + fn_1_2260(arg0); +} From 76c369d3cd916ac18d369e7910a4e00ec4d10ed7 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 27 Oct 2024 21:30:43 -0500 Subject: [PATCH 4/8] Decompile rest of m420dll --- configure.py | 6 +- src/REL/m420dll/main.c | 21 ++- src/REL/m420dll/map.c | 25 +-- src/REL/m420dll/player.c | 387 +++++++++++++++++---------------------- 4 files changed, 185 insertions(+), 254 deletions(-) diff --git a/configure.py b/configure.py index eeeb17a4..50b84a50 100644 --- a/configure.py +++ b/configure.py @@ -976,10 +976,10 @@ config.libs = [ Rel( "m420dll", # Fish n' Drips objects={ - Object(NonMatching, "REL/m420dll/main.c"), + Object(Matching, "REL/m420dll/main.c"), Object(Matching, "REL/m420dll/camera.c"), - Object(NonMatching, "REL/m420dll/player.c"), - Object(NonMatching, "REL/m420dll/map.c"), + Object(Matching, "REL/m420dll/player.c"), + Object(Matching, "REL/m420dll/map.c"), Object(Matching, "REL/m420dll/rand.c"), }, ), diff --git a/src/REL/m420dll/main.c b/src/REL/m420dll/main.c index 4bad4ddf..f97a3fd0 100644 --- a/src/REL/m420dll/main.c +++ b/src/REL/m420dll/main.c @@ -83,15 +83,18 @@ s32 fn_1_198(void) sp8[var_r31] = 0; } for (var_r31 = 0; var_r31 < 4; var_r31++) { - if (GWPlayerCfg[var_r31].group == 0) { - lbl_1_bss_18[0] = fn_1_1B8C(var_r31, 0); - } - else { - do { - var_r30 = fn_1_8944() % 3; - } while (sp8[var_r30] != 0); - sp8[var_r30] = 1; - lbl_1_bss_18[var_r30 + 1] = fn_1_1B8C(var_r31, var_r30 + 1); + switch(GWPlayerCfg[var_r31].group) { + case 0: + lbl_1_bss_18[0] = fn_1_1B8C(var_r31, 0); + break; + + default: + do { + var_r30 = fn_1_8944() % 3; + } while (sp8[var_r30] != 0); + sp8[var_r30] = 1; + lbl_1_bss_18[var_r30 + 1] = fn_1_1B8C(var_r31, var_r30 + 1); + break; } } lbl_1_bss_18[1]->unk_E8 = NULL; diff --git a/src/REL/m420dll/map.c b/src/REL/m420dll/map.c index baf43997..94df58f0 100644 --- a/src/REL/m420dll/map.c +++ b/src/REL/m420dll/map.c @@ -116,6 +116,7 @@ Process *lbl_1_bss_A3C; Process *lbl_1_bss_A2C[4]; s32 lbl_1_bss_A28; s16 lbl_1_bss_9F0[0x1C]; +s16 lbl_1_bss_9EE; s16 lbl_1_bss_9EC; M420DllUnkMapStruct2 lbl_1_bss_140[15]; struct M420DllUnkMapStruct lbl_1_bss_C0[2]; @@ -914,13 +915,9 @@ float fn_1_73F8(float arg8) void fn_1_74F8(float *arg0, float *arg1, float *arg2, float *arg3, float arg8) { - float var_f31; float var_f30; float var_f29; - float var_f28; - float var_f27; float var_f26; - float var_f25; s32 var_r31; s32 var_r30; @@ -937,27 +934,13 @@ void fn_1_74F8(float *arg0, float *arg1, float *arg2, float *arg3, float arg8) if (var_r31 > var_r29) { var_r30 = var_r29; } - var_f31 = arg8 - var_r31; - if (var_f31 < 0.0f) { - var_f31 = -var_f31; - } - if (var_f31 < 1.0f) { - var_f27 = (4.0f + ((var_f31 * (3.0f * var_f31 * var_f31)) - (6.0f * var_f31 * var_f31))) / 6.0f; - } - else if (var_f31 < 2.0f) { - var_f28 = var_f31 - 2.0f; - var_f27 = (var_f28 * (-var_f28 * var_f28)) / 6.0f; - } - else { - var_f27 = 0.0f; - } - var_f25 = var_f27; - var_f26 = var_f25; + var_f26 = fn_1_73F8(arg8 - var_r31); var_f30 += var_f26 * arg0[var_r30]; var_f29 += var_f26 * arg1[var_r30]; } *arg2 = var_f30; *arg3 = var_f29; + } void fn_1_7704(void) @@ -1233,3 +1216,5 @@ void fn_1_8414(void) HuPrcVSleep(); } } + +const float _pad = 0; \ No newline at end of file diff --git a/src/REL/m420dll/player.c b/src/REL/m420dll/player.c index 2a749b74..790c43e6 100644 --- a/src/REL/m420dll/player.c +++ b/src/REL/m420dll/player.c @@ -253,21 +253,6 @@ void fn_1_21C8(M420DllPlayerStruct *arg0, Vec *arg1, s32 arg2, s32 arg3) arg0->unk_00_field2 = 1; } -void inline fn_1_2260_alt(M420DllPlayerStruct *arg0, s32 arg1) -{ - s32 var_r30; - s32 var_r29; - - for (var_r30 = 0; var_r30 < arg1; var_r30++) { - fn_1_355C(arg0); - var_r29 = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 != var_r29) { - break; - } - } -} - void fn_1_2260(M420DllPlayerStruct *arg0) { s32 var_r30; @@ -285,6 +270,20 @@ void fn_1_2260(M420DllPlayerStruct *arg0) } } +#define WAITMODECHG(player, maxTime) \ + do { \ + s32 time; \ + s32 mode; \ + for (time = 0; time < maxTime; time++) { \ + fn_1_355C(arg0); \ + mode = arg0->unk_48; \ + HuPrcVSleep(); \ + if (arg0->unk_48 != mode) { \ + return; \ + } \ + } \ + } while(0) + void fn_1_22CC(M420DllPlayerStruct *arg0) { float var_f31; @@ -305,7 +304,7 @@ void fn_1_22CC(M420DllPlayerStruct *arg0) while (arg0->unk_50 < 6) { fn_1_326C(arg0); - while (var_r29 == 0) { + do { if (arg0->unk_00_field0 == 0) { var_r29 = fn_1_34AC(arg0); } @@ -323,7 +322,7 @@ void fn_1_22CC(M420DllPlayerStruct *arg0) } switch (var_r29) { case 0: - fn_1_2260(arg0); + WAITMODECHG(arg0, 1); break; case 1: var_f31 = 5.0f * arg0->unk_50; @@ -337,39 +336,37 @@ void fn_1_22CC(M420DllPlayerStruct *arg0) arg0->unk_5C[arg0->unk_50++] = 1; HuAudFXPlay(0x5F4); fn_1_60F0(); - fn_1_2260_alt(arg0, 5); + WAITMODECHG(arg0, 5); break; case 2: if (arg0->unk_50 <= 0) { - fn_1_2260(arg0); - } - else { + WAITMODECHG(arg0, 1); + } else { Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); Hu3DModelAttrSet(arg0->unk_AC, 0x40000004); fn_1_63EC(); - fn_1_2260_alt(arg0, 1); - if (Hu3DMotionEndCheck(arg0->unk_AC) != 0) { - for (var_r28 = 0; var_r28 < 0xA; var_r28++) { - arg0->unk_5C[var_r28] = 0; - } - arg0->unk_50 = 0; - var_f31 = 0.0f; - var_f30 = 0.0f; - CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[5]); - Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30); - Hu3DMotionTimeSet(arg0->unk_AC, var_f31); - Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); + while(!Hu3DMotionEndCheck(arg0->unk_AC)) + WAITMODECHG(arg0, 1); + for (var_r28 = 0; var_r28 < 0xA; var_r28++) { + arg0->unk_5C[var_r28] = 0; } + arg0->unk_50 = 0; + var_f31 = 0.0f; + var_f30 = 0.0f; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[5]); + Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30); + Hu3DMotionTimeSet(arg0->unk_AC, var_f31); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); } break; default: break; } - } + } while (var_r29 == 0); } fn_1_326C(arg0); - fn_1_2260_alt(arg0, 5); + WAITMODECHG(arg0, 5); fn_1_3450(arg0); arg0->unk_48 = 2; } @@ -401,171 +398,102 @@ void fn_1_276C(M420DllPlayerStruct *arg0) HuAudFXPlay(0x5F1); fn_1_669C(1); fn_1_6554(); - for (var_r28 = 0; var_r28 < 0xF; var_r28++) { - CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[7], 0.0f, 6.0f, 0); - for (var_r27 = 0; var_r27 < 6; var_r27++) { - fn_1_669C(1); - fn_1_36E4(arg0); - HuAudFXPlay(0x5F2); - - fn_1_355C(arg0); - var_r19 = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 != var_r19) { - break; - } - } - fn_1_355C(arg0); - var_r20 = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 != var_r20) { - break; - } - } + WAITMODECHG(arg0, 15); + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[7], 0.0f, 6.0f, 0); + WAITMODECHG(arg0, 6); + fn_1_669C(0); + fn_1_36E4(arg0); + HuAudFXPlay(0x5F2); } - else { - block_10: - fn_1_3098(arg0); - arg0->unk_50 = 0; - arg0->unk_58 = var_r29->unk_10 + (fn_1_8944() % var_r29->unk_14); - - while (arg0->unk_50 < 1) { - fn_1_326C(arg0); - for (var_r21 = 0; var_r21 < 0x12; var_r21++) { - fn_1_3450(arg0); - arg0->unk_48 = 6; - - fn_1_355C(arg0); - sp8[0] = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 == sp8[0]) { - break; - } - } - } + fn_1_3098(arg0); + arg0->unk_50 = 0; + arg0->unk_58 = var_r29->unk_10 + (fn_1_8944() % var_r29->unk_14); + while (arg0->unk_50 < 1) { fn_1_326C(arg0); - loop_12: - if (arg0->unk_00_field0 == 0) { - var_r30 = fn_1_34AC(arg0); - } - else if (arg0->unk_58 > 0) { - arg0->unk_58 = arg0->unk_58 - 1; - var_r30 = 0; - } - else if ((fn_1_8944() % 30) != 0) { - var_r30 = 1; - } - else { - var_r30 = 2; - } - switch (var_r30) { - case 0: - for (var_r26 = 0; var_r26 < 1; var_r26++) { - fn_1_355C(arg0); - var_r18 = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 != var_r18) { - break; - } - } - case 1: - if (arg0->unk_4C != 1) { - CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[7], 0.0f, 6.0f, 0); - for (var_r25 = 0; var_r25 < 6; var_r25++) { + do { + if(arg0->unk_00_field0 == 0) { + var_r30 = fn_1_34AC(arg0); + } else if(arg0->unk_58 > 0) { + arg0->unk_58--; + var_r30 = 0; + } else if(fn_1_8944() % 30) { + var_r30 = 1; + } else { + var_r30 = 2; + } + switch (var_r30) { + case 0: + WAITMODECHG(arg0, 1); + break; + + case 1: + if(arg0->unk_4C != 1) { + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[7], 0.0f, 6.0f, 0); + WAITMODECHG(arg0, 6); fn_1_374C(arg0->unk_E8); fn_1_36E4(arg0); HuAudFXPlay(0x5F2); - fn_1_355C(arg0); - var_r17 = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 == var_r17) { - break; - } } - } - block_36: - arg0->unk_5C[arg0->unk_50++] = 1; - switch (arg0->unk_4C) { - case 1: - case 2: - var_f31 = 0.0f; - var_f30 = 34.0f; - CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]); - Hu3DMotionStartEndSet(arg0->unk_AC, 0.0f, 34.0f); - Hu3DMotionTimeSet(arg0->unk_AC, 0.0f); - Hu3DMotionSpeedSet(arg0->unk_AC, 2.0f); - break; - } - arg0->unk_48 = 5; - break; - case 2: - switch (arg0->unk_4C) { - case 0: - break; - case 1: - var_f31 = 0.0f; - var_f30 = 10.0f; - CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]); - Hu3DMotionStartEndSet(arg0->unk_AC, 0.0f, 10.0f); - Hu3DMotionTimeSet(arg0->unk_AC, 0.0f); - Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); - for (var_r24 = 0; var_r24 < 0x1E; var_r24++) { + arg0->unk_5C[arg0->unk_50++] = 1; + switch(arg0->unk_4C) { + case 1: + case 2: + var_f31 = 0.0f; + var_f30 = 34.0f; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]); + Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30); + Hu3DMotionTimeSet(arg0->unk_AC, var_f31); + Hu3DMotionSpeedSet(arg0->unk_AC, 2.0f); + break; + + case 3: + arg0->unk_48 = 5; + return; + } + break; + + case 2: + switch(arg0->unk_4C) { + case 1: + var_f31 = 0.0f; + var_f30 = 10.0f; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]); + Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30); + Hu3DMotionTimeSet(arg0->unk_AC, var_f31); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + WAITMODECHG(arg0, 30); var_f31 = 60.0f; var_f30 = 70.0f; CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]); - Hu3DMotionStartEndSet(arg0->unk_AC, 60.0f, 70.0f); - Hu3DMotionTimeSet(arg0->unk_AC, 60.0f); + Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30); + Hu3DMotionTimeSet(arg0->unk_AC, var_f31); Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); - for (var_r23 = 0; var_r23 < 0x1E; var_r23++) { - fn_1_355C(arg0); - sp8[2] = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 != sp8[2]) { - break; - } - } - fn_1_355C(arg0); - sp8[3] = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 != sp8[3]) { - break; - } - } - case 2: - case 3: - CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[9], 0.0f, 2.0f, 0); - for (var_r22 = 0; var_r22 < 0x3C; var_r22++) { + WAITMODECHG(arg0, 30); + break; + + case 2: + case 3: + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[9], 0.0f, 2.0f, 0); + WAITMODECHG(arg0, 60); CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 8.0f, 0); - fn_1_355C(arg0); - sp8[1] = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 != sp8[1]) { - break; - } - } - break; - } - break; - } + break; + } + break; + } + } while(var_r30 == 0); + } + fn_1_326C(arg0); + WAITMODECHG(arg0, 18); + fn_1_3450(arg0); + arg0->unk_48 = 6; } void fn_1_2CE0(M420DllPlayerStruct *arg0) { - s32 var_r30; - s32 var_r29; - CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 30.0f, 0x40000001); - - // fn_1_2260? - for (var_r30 = 0; var_r30 < 0x23; var_r30++) { - fn_1_355C(arg0); - var_r29 = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 != var_r29) { - return; - } - } + + WAITMODECHG(arg0, 35); arg0->unk_48 = 0; } @@ -614,53 +542,68 @@ void fn_1_2EA8(M420DllPlayerStruct *arg0) fn_1_326C(arg0); CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[3], 0.0f, 1.0f, 0); var_r30 = fn_1_6660(); + Hu3DModelAttrReset(var_r30, 0x40000002); Hu3DModelAttrSet(var_r30, 0x40000001); Hu3DMotionTimeSet(var_r30, 0.0f); - - for (var_r29 = 0; var_r29 < 0x18; var_r29++) { - HuAudFXPlay(0x5F7); - fn_1_636C(); - fn_1_1E64(arg0, 0x1E, 1); - Hu3DModelAttrSet(var_r30, 0x40000002); - fn_1_5AA8(1, 22.5f); - for (var_r28 = 0; var_r28 < 0x14; var_r28++) { - HuAudFXPlay(0x5F8); - fn_1_3450(arg0); - fn_1_378C(arg0); - for (var_r27 = 0; var_r27 < 0x14; var_r27++) { - CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 30.0f, 0x40000001); - for (var_r26 = 0; var_r26 < 0x19; var_r26++) { - arg0->unk_48 = 6; - - fn_1_355C(arg0); - var_r22 = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 != var_r22) { - break; - } - } - fn_1_355C(arg0); - var_r23 = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 != var_r23) { - break; - } - } + { + s32 var_r30; + s32 var_r29; + for (var_r30 = 0; var_r30 < 24; var_r30++) { fn_1_355C(arg0); - var_r24 = arg0->unk_48; + var_r29 = arg0->unk_48; HuPrcVSleep(); - if (arg0->unk_48 != var_r24) { - break; + if (arg0->unk_48 != var_r29) { + return; } } - fn_1_355C(arg0); - var_r25 = arg0->unk_48; - HuPrcVSleep(); - if (arg0->unk_48 != var_r25) { - break; - } } + HuAudFXPlay(0x5F7); + fn_1_636C(); + fn_1_1E64(arg0, 1, 0x1E); + Hu3DModelAttrSet(var_r30, 0x40000002); + fn_1_5AA8(1, 22.5f); + { + s32 var_r30; + s32 var_r29; + for (var_r30 = 0; var_r30 < 20; var_r30++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + } + HuAudFXPlay(0x5F8); + fn_1_3450(arg0); + fn_1_378C(arg0); + { + s32 var_r30; + s32 var_r29; + for (var_r30 = 0; var_r30 < 20; var_r30++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + } + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 30.0f, 0x40000001); + { + s32 var_r30; + s32 var_r29; + for (var_r30 = 0; var_r30 < 25; var_r30++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + } + arg0->unk_48 = 6; } void fn_1_3098(M420DllPlayerStruct *arg0) From 4aa17102434b1836a5bd5440ffb9839d00109117 Mon Sep 17 00:00:00 2001 From: dbalatoni13 Date: Mon, 28 Oct 2024 15:01:14 +0100 Subject: [PATCH 5/8] Did m443Dll/main.c and map.c Did the includes for m443Dll/player.c --- config/GMPE01_00/rels/m443Dll/splits.txt | 4 +- config/GMPE01_00/rels/m443Dll/symbols.txt | 404 +++---- configure.py | 4 +- include/REL/m443Dll.h | 51 + src/REL/m443Dll/main.c | 1164 +++++++++++++++++++++ src/REL/m443Dll/map.c | 183 ++++ src/REL/m443Dll/player.c | 16 + 7 files changed, 1621 insertions(+), 205 deletions(-) create mode 100644 include/REL/m443Dll.h create mode 100644 src/REL/m443Dll/main.c create mode 100644 src/REL/m443Dll/map.c create mode 100644 src/REL/m443Dll/player.c diff --git a/config/GMPE01_00/rels/m443Dll/splits.txt b/config/GMPE01_00/rels/m443Dll/splits.txt index ff3f7391..b9a84a24 100644 --- a/config/GMPE01_00/rels/m443Dll/splits.txt +++ b/config/GMPE01_00/rels/m443Dll/splits.txt @@ -17,11 +17,11 @@ REL/m443Dll/main.c: REL/m443Dll/map.c: .text start:0x00004A5C end:0x00005444 - .rodata start:0x000001F0 end:0x00000278 + .rodata start:0x000001F0 end:0x00000268 .data start:0x00000240 end:0x00000258 REL/m443Dll/player.c: .text start:0x00005444 end:0x00009638 - .rodata start:0x00000278 end:0x000004E0 + .rodata start:0x00000268 end:0x000004E0 .data start:0x00000258 end:0x000004F0 .bss start:0x00000078 end:0x000000A0 diff --git a/config/GMPE01_00/rels/m443Dll/symbols.txt b/config/GMPE01_00/rels/m443Dll/symbols.txt index 76a2059a..2c1f25ca 100644 --- a/config/GMPE01_00/rels/m443Dll/symbols.txt +++ b/config/GMPE01_00/rels/m443Dll/symbols.txt @@ -76,203 +76,205 @@ fn_1_8FFC = .text:0x00008FFC; // type:function size:0x5A8 fn_1_95A4 = .text:0x000095A4; // type:function size:0x94 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 data:double -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 data:double -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 data:float -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 data:double -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 data:double -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 data:double -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 data:double -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x50 -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x14 data:4byte -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x8 data:double -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 data:double -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 data:double -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 data:double -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 data:double -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 data:double -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x10 data:4byte -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x10 data:4byte -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float -lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 data:double -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 data:double -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8 data:double -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float -lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 data:float -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 data:float -lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 data:float -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0xC data:4byte -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x34 data:4byte -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 data:double -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 data:double -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x4 data:float -lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 data:float -lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 data:float -lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 data:float -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 data:float -lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 data:float -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x8 data:double -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x10 data:4byte -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 data:float -lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 data:float -lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 data:float -lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0x4 data:float -lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 data:float -lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 data:float -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 data:float -lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 data:float -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 data:float -lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 data:float -lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x8 data:double -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 data:float -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 data:float -lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 data:float -lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 data:float -lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 data:float -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float -lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float -lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 data:float -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x8 data:double -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 data:double -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 data:double -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 data:float -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 data:double -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x8 data:double -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x8 data:double -lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 data:float -lbl_1_rodata_314 = .rodata:0x00000314; // type:object size:0x4 data:float -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 data:float -lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 data:float -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 data:double -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 data:float -lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 data:float -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x40 data:4byte -lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x10 data:4byte -lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x10 data:4byte -lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 data:float -lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 data:float -lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 data:float -lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 data:float -lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 data:float -lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 data:float -lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 data:float -lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 data:float -lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 data:float -lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float -lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float -lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float -lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x20 data:4byte -lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 data:float -lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 data:float -lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 data:float -lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 data:float -lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 data:float -lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 data:float -lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 data:float -lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 data:float -lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 data:float -lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 data:float -lbl_1_rodata_40C = .rodata:0x0000040C; // type:object size:0x4 data:float -lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x4 data:float -lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 data:float -lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 data:float -lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 data:float -lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 data:float -lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x8 data:double -lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x4 data:float -lbl_1_rodata_434 = .rodata:0x00000434; // type:object size:0x4 data:float -lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 data:float -lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x4 data:float -lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x4 data:float -lbl_1_rodata_444 = .rodata:0x00000444; // type:object size:0x4 data:float -lbl_1_rodata_448 = .rodata:0x00000448; // type:object size:0x4 data:float -lbl_1_rodata_44C = .rodata:0x0000044C; // type:object size:0x4 data:float -lbl_1_rodata_450 = .rodata:0x00000450; // type:object size:0x4 data:float -lbl_1_rodata_454 = .rodata:0x00000454; // type:object size:0x4 data:float -lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x8 data:double -lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x8 data:double -lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x4 data:float -lbl_1_rodata_46C = .rodata:0x0000046C; // type:object size:0x4 data:float -lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 data:float -lbl_1_rodata_474 = .rodata:0x00000474; // type:object size:0x4 data:float -lbl_1_rodata_478 = .rodata:0x00000478; // type:object size:0x4 data:float -lbl_1_rodata_47C = .rodata:0x0000047C; // type:object size:0x4 data:float -lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x4 data:float -lbl_1_rodata_484 = .rodata:0x00000484; // type:object size:0x4 data:float -lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 data:float -lbl_1_rodata_48C = .rodata:0x0000048C; // type:object size:0x4 data:float -lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x4 data:float -lbl_1_rodata_494 = .rodata:0x00000494; // type:object size:0x4 data:float -lbl_1_rodata_498 = .rodata:0x00000498; // type:object size:0x4 data:float -lbl_1_rodata_49C = .rodata:0x0000049C; // type:object size:0x4 data:float -lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x4 data:float -lbl_1_rodata_4A4 = .rodata:0x000004A4; // type:object size:0x4 data:float -lbl_1_rodata_4A8 = .rodata:0x000004A8; // type:object size:0x4 data:float -lbl_1_rodata_4AC = .rodata:0x000004AC; // type:object size:0x4 data:float -lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 data:float -lbl_1_rodata_4B4 = .rodata:0x000004B4; // type:object size:0x4 data:float -lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x4 data:float -lbl_1_rodata_4BC = .rodata:0x000004BC; // type:object size:0x4 data:float -lbl_1_rodata_4C0 = .rodata:0x000004C0; // type:object size:0x4 data:float -lbl_1_rodata_4C4 = .rodata:0x000004C4; // type:object size:0x4 data:float -lbl_1_rodata_4C8 = .rodata:0x000004C8; // type:object size:0x4 data:float -lbl_1_rodata_4CC = .rodata:0x000004CC; // type:object size:0x4 data:float -lbl_1_rodata_4D0 = .rodata:0x000004D0; // type:object size:0x4 data:float -lbl_1_rodata_4D4 = .rodata:0x000004D4; // type:object size:0x4 data:float -lbl_1_rodata_4D8 = .rodata:0x000004D8; // type:object size:0x4 data:float -lbl_1_rodata_4DC = .rodata:0x000004DC; // type:object size:0x4 data:float +__fakeHalf = .rodata:0x00000000; // type:object size:0x8 data:double +__fakeThree = .rodata:0x00000008; // type:object size:0x8 data:double +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 scope:local data:double +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x50 scope:local data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x14 scope:local data:4byte +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x8 scope:local data:double +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:double +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 scope:local data:double +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 scope:local data:double +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data:double +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 scope:local data:double +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x34 scope:local data:float +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 scope:local data:double +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 scope:local data:double +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 scope:local data:float +lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 scope:local data:float +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 scope:local data:float +lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x8 scope:local data:double +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x10 scope:local data:float +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 scope:local data:float +lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 scope:local data:float +lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0x4 scope:local data:float +lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 scope:local data:float +lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 scope:local data:float +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 scope:local data:float +lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x8 scope:local data:double +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x8 scope:local data:double +lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 scope:local data:float +lbl_1_rodata_314 = .rodata:0x00000314; // type:object size:0x4 scope:local data:float +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 scope:local data:float +lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 scope:local data:double +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 scope:local data:float +lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x40 scope:local data:4byte +lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 scope:local data:float +lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 scope:local data:float +lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x20 scope:local data:4byte +lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 scope:local data:float +lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 scope:local data:float +lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40C = .rodata:0x0000040C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x4 scope:local data:float +lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 scope:local data:float +lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 scope:local data:float +lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 scope:local data:float +lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x8 scope:local data:double +lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x4 scope:local data:float +lbl_1_rodata_434 = .rodata:0x00000434; // type:object size:0x4 scope:local data:float +lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 scope:local data:float +lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x4 scope:local data:float +lbl_1_rodata_444 = .rodata:0x00000444; // type:object size:0x4 scope:local data:float +lbl_1_rodata_448 = .rodata:0x00000448; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44C = .rodata:0x0000044C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_450 = .rodata:0x00000450; // type:object size:0x4 scope:local data:float +lbl_1_rodata_454 = .rodata:0x00000454; // type:object size:0x4 scope:local data:float +lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x8 scope:local data:double +lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x8 scope:local data:double +lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x4 scope:local data:float +lbl_1_rodata_46C = .rodata:0x0000046C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 scope:local data:float +lbl_1_rodata_474 = .rodata:0x00000474; // type:object size:0x4 scope:local data:float +lbl_1_rodata_478 = .rodata:0x00000478; // type:object size:0x4 scope:local data:float +lbl_1_rodata_47C = .rodata:0x0000047C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x4 scope:local data:float +lbl_1_rodata_484 = .rodata:0x00000484; // type:object size:0x4 scope:local data:float +lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48C = .rodata:0x0000048C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x4 scope:local data:float +lbl_1_rodata_494 = .rodata:0x00000494; // type:object size:0x4 scope:local data:float +lbl_1_rodata_498 = .rodata:0x00000498; // type:object size:0x4 scope:local data:float +lbl_1_rodata_49C = .rodata:0x0000049C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A4 = .rodata:0x000004A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A8 = .rodata:0x000004A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4AC = .rodata:0x000004AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B4 = .rodata:0x000004B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4BC = .rodata:0x000004BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C0 = .rodata:0x000004C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C4 = .rodata:0x000004C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C8 = .rodata:0x000004C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4CC = .rodata:0x000004CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4D0 = .rodata:0x000004D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4D4 = .rodata:0x000004D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4D8 = .rodata:0x000004D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4DC = .rodata:0x000004DC; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0xC lbl_1_data_C = .data:0x0000000C; // type:object size:0xC lbl_1_data_18 = .data:0x00000018; // type:object size:0xC data:float @@ -280,15 +282,15 @@ lbl_1_data_24 = .data:0x00000024; // type:object size:0x4 lbl_1_data_28 = .data:0x00000028; // type:object size:0xC data:float lbl_1_data_34 = .data:0x00000034; // type:object size:0xC data:float lbl_1_data_40 = .data:0x00000040; // type:object size:0xC data:float -lbl_1_data_4C = .data:0x0000004C; // type:object size:0x14 data:string +lbl_1_data_4C = .data:0x0000004C; // type:object size:0x14 scope:local data:string lbl_1_data_60 = .data:0x00000060; // type:object size:0x48 lbl_1_data_A8 = .data:0x000000A8; // type:object size:0x48 lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x18 lbl_1_data_108 = .data:0x00000108; // type:object size:0x80 lbl_1_data_188 = .data:0x00000188; // type:object size:0x80 -lbl_1_data_208 = .data:0x00000208; // type:object size:0x1 data:byte -lbl_1_data_20C = .data:0x0000020C; // type:object size:0x1A data:string -lbl_1_data_226 = .data:0x00000226; // type:object size:0x19 data:string +lbl_1_data_208 = .data:0x00000208; // type:object size:0x4 data:byte +lbl_1_data_20C = .data:0x0000020C; // type:object size:0x1A scope:local data:string +lbl_1_data_226 = .data:0x00000226; // type:object size:0x19 scope:local data:string lbl_1_data_240 = .data:0x00000240; // type:object size:0x14 lbl_1_data_264 = .data:0x00000258; // type:object size:0x20 lbl_1_data_284 = .data:0x00000284; // type:object size:0x40 diff --git a/configure.py b/configure.py index 50b84a50..8a5611e2 100644 --- a/configure.py +++ b/configure.py @@ -1143,8 +1143,8 @@ config.libs = [ Rel( "m443Dll", # Mario Speedwagons objects={ - Object(NonMatching, "REL/m443Dll/main.c"), - Object(NonMatching, "REL/m443Dll/map.c"), + Object(Matching, "REL/m443Dll/main.c"), + Object(Matching, "REL/m443Dll/map.c"), Object(NonMatching, "REL/m443Dll/player.c"), }, ), diff --git a/include/REL/m443Dll.h b/include/REL/m443Dll.h new file mode 100644 index 00000000..72b89689 --- /dev/null +++ b/include/REL/m443Dll.h @@ -0,0 +1,51 @@ +#ifndef M443DLL_H +#define M443DLL_H + +#include "game/object.h" + +typedef struct M443DllCameraStruct { + s32 unk_00; + s32 unk_04; + s32 unk_08; + u32 unk_0C; + float unk_10; + float unk_14; + float unk_18; + Vec unk_1C; + Vec unk_28; + float unk_34; + s32 unk_38; + s32 unk_3C; + float unk_40; + float unk_44; + float unk_48; + float unk_4C; + float unk_50; + char unk54[0x24]; + float unk_78; + float unk_7C; + float unk_80; + char unk84[0x1C]; + u32 unk_A0; +} M443DllCameraStruct; /* size = 0xA4 */ + +void fn_1_3FE8(u32 arg0); +u32 fn_1_3FFC(void); +M443DllCameraStruct *fn_1_40AC(s32 arg0); +M443DllCameraStruct *fn_1_4148(u32 arg0); +M443DllCameraStruct *fn_1_41B0(u32 arg0); +void fn_1_421C(s32 arg0, s32 arg1); +s32 fn_1_42CC(void); +u32 fn_1_42E4(void); +s32 fn_1_42FC(void); +void fn_1_4314(s32 arg0, float arg8); +s32 fn_1_4368(s32 arg0); +void fn_1_43AC(s32 arg0); +void fn_1_43DC(s32 arg0); +float fn_1_488C(float arg8, float arg9, float argA); +void fn_1_4A5C(Process *arg0); +void fn_1_4AB0(void); +void fn_1_5444(Process *arg0); +void fn_1_565C(void); + +#endif diff --git a/src/REL/m443Dll/main.c b/src/REL/m443Dll/main.c new file mode 100644 index 00000000..9c939016 --- /dev/null +++ b/src/REL/m443Dll/main.c @@ -0,0 +1,1164 @@ +#include "dolphin/gx/GXVert.h" +#include "ext_math.h" +#include "game/audio.h" +#include "game/flag.h" +#include "game/gamework.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/wipe.h" +#include "math.h" +#include "rel_sqrt_consts.h" +#include "string.h" + +#ifndef __MWERKS__ +#include "game/esprite.h" +#include "game/frand.h" +#endif + +#include "REL/m443Dll.h" + +typedef struct M443DllWork { + u32 unk_00; + s32 unk_04; + s32 unk_08; + s32 unk_0C; + s32 unk_10; + u32 unk_14; + u32 unk_18; + u32 unk_1C; + u32 unk_20; + char unk24[4]; + s32 unk_28; + u32 unk_2C; + s32 unk_30; + s32 unk_34[4]; + float unk_44[4]; + u32 unk_54; + u32 unk_58; + s32 unk_5C; +} M443DllWork; /* size = 0x60 */ + +typedef struct M443DllData108Struct { + u32 unk_00; + s32 unk_04; +} M443DllData108Struct; /* size = 0x08 */ + +typedef struct M443DllUnkStruct { + s32 unk_00; + s32 unk_04; + float unk_08; + float unk_0C; + u32 unk_10; + u32 unk_14; + u32 unk_18; + s16 unk_1C[0x10]; +} M443DllUnkStruct; /* size = 0x3C */ + +void fn_1_1294(omObjData *); +void fn_1_17D8(omObjData *arg0); +omObjFunc fn_1_1C98(Process *arg0, omObjData *arg1); +void fn_1_1D8C(omObjData *); +omObjFunc fn_1_2490(Process *arg0, omObjData *arg1); +void fn_1_25A4(omObjData *); +void fn_1_2DD8(M443DllUnkStruct *arg0); +void fn_1_2F54(M443DllUnkStruct *arg0); +void fn_1_32C0(Process *arg0); +void fn_1_3370(omObjData *object); +void fn_1_3710(omObjData *); +void fn_1_3770(omObjData *object); +void fn_1_3D78(ModelData *, float[3][4]); +void fn_1_420(omObjData *object); +void fn_1_584(omObjData *arg0); +void fn_1_6D0(omObjData *); +void fn_1_9B0(omObjData *); +void fn_1_CE0(omObjData *); +void fn_1_ECC(omObjData *); + +Vec lbl_1_data_0 = { 100.0f, 800.0f, -100.0f }; + +Vec lbl_1_data_C = { 0.3f, -0.8f, 0.3f }; + +Vec lbl_1_data_18 = { 10.0f, 45.0f, 3500.0f }; + +GXColor lbl_1_data_24 = { 0xFF, 0xFF, 0xFF, 0xFF }; + +Vec lbl_1_data_28 = { 50.0f, 150000.0f, 50.0f }; + +Vec lbl_1_data_34 = { 0.0f, 1.0f, 0.0f }; + +Vec lbl_1_data_40 = { 0.0f, 0.0f, 0.0f }; + +Process *lbl_1_bss_74; +omObjData *lbl_1_bss_70; +omObjData *lbl_1_bss_6C; +omObjData *lbl_1_bss_68; +s16 lbl_1_bss_64; +s16 lbl_1_bss_5C[4]; +s16 lbl_1_bss_5A; +s16 lbl_1_bss_58; +s16 lbl_1_bss_56; +s16 lbl_1_bss_54; +s32 lbl_1_bss_50; +M443DllUnkStruct lbl_1_bss_14; +s16 lbl_1_bss_10[1]; // why only 1 long? +s32 lbl_1_bss_C; +s32 lbl_1_bss_8; +s32 lbl_1_bss_4; +s32 lbl_1_bss_0; + +void ObjectSetup(void) +{ + Vec sp14; + Vec sp8; + Process *var_r31; + LightData *var_r30; + + HuAudSndGrpSet(0x45); + lbl_1_bss_C = lbl_1_bss_8 = -1; + lbl_1_bss_4 = lbl_1_bss_0 = -1; + lbl_1_bss_5C[0] = Hu3DGLightCreateV(&lbl_1_data_0, &lbl_1_data_C, &lbl_1_data_24); + Hu3DGLightInfinitytSet(lbl_1_bss_5C[0]); + var_r30 = &Hu3DGlobalLight[lbl_1_bss_5C[0]]; + var_r30->unk_00 |= 0x8000; + + lbl_1_data_18.x = 55.74f; + lbl_1_data_18.y = 0.0f; + lbl_1_data_18.z = 3500.0f; + + sp14.x = sp14.y = sp14.z = 0.0f; + sp8.x = sp8.z = 0.0f; + sp8.y = lbl_1_data_18.z; + sp8.x = 0.0f; + sp8.y = 3480.0002f; + sp8.z = 900.00006f; + Hu3DGLightPosAimSetV(lbl_1_bss_5C[0], &sp8, &sp14); + + lbl_1_data_28.x = 100.0f; + lbl_1_data_28.y = 2000.0f; + lbl_1_data_28.z = 2000.0f; + lbl_1_data_34.x = 0.0f; + lbl_1_data_34.y = 1.0f; + lbl_1_data_34.z = 0.0f; + lbl_1_data_40.x = 0.0f; + lbl_1_data_40.y = 0.0f; + lbl_1_data_40.z = 700.0f; + Hu3DShadowCreate(30.0f, 20.0f, 25000.0f); + Hu3DShadowTPLvlSet(0.625f); + Hu3DShadowPosSet(&lbl_1_data_28, &lbl_1_data_34, &lbl_1_data_40); + lbl_1_bss_5A = lbl_1_bss_58 = lbl_1_bss_56 = lbl_1_bss_54 = -1; + lbl_1_bss_50 = 0; + var_r31 = omInitObjMan(0x32, 0x2000); + lbl_1_bss_74 = var_r31; + omGameSysInit(var_r31); + fn_1_2DD8(&lbl_1_bss_14); + fn_1_32C0(var_r31); + lbl_1_bss_70 = omAddObjEx(var_r31, 0xA, 0, 0, -1, fn_1_420); + fn_1_4A5C(var_r31); + fn_1_5444(var_r31); +} + +void fn_1_420(omObjData *object) +{ + M443DllWork *var_r31; + + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M443DllWork), MEMORY_DEFAULT_NUM); + var_r31 = object->data; + memset(var_r31, 0, sizeof(M443DllWork)); + var_r31->unk_00 = 0; + var_r31->unk_04 = 0; + var_r31->unk_0C = 0; + var_r31->unk_10 = 0; + var_r31->unk_14 = 0; + var_r31->unk_18 = 0; + var_r31->unk_28 = 0; + var_r31->unk_2C = 0; + var_r31->unk_08 = 0; + var_r31->unk_54 = 2; + var_r31->unk_58 = 0; + var_r31->unk_5C = 0; + object->func = fn_1_6D0; +} + +void fn_1_4E4(omObjData *object) +{ + M443DllWork *var_r31; + + var_r31 = object->data; + var_r31->unk_04++; + var_r31->unk_10++; + var_r31->unk_18++; + var_r31->unk_2C++; + fn_1_2F54(&lbl_1_bss_14); + if ((omSysExitReq != 0) && (var_r31->unk_00 != 5)) { + var_r31->unk_00 = 4; + fn_1_584(object); + } +} + +void fn_1_584(omObjData *object) +{ + M443DllWork *var_r31 = object->data; + + if (var_r31->unk_08 == 0) { + switch (var_r31->unk_00) { + case 0: + WipeCreate(1, 0, 0x3C); + lbl_1_bss_14.unk_00 = 1; + var_r31->unk_00 = 1; + var_r31->unk_10 = 0; + object->func = fn_1_1C98(lbl_1_bss_74, object); + break; + case 1: + var_r31->unk_00 = 2; + var_r31->unk_18 = 0; + fn_1_3FE8(4); + object->func = fn_1_ECC; + break; + case 2: + var_r31->unk_00 = 3; + var_r31->unk_2C = 0; + object->func = fn_1_2490(lbl_1_bss_74, object); + break; + case 3: + case 4: + var_r31->unk_08 = 1; + var_r31->unk_00 = 5; + object->func = fn_1_9B0; + break; + case 5: + default: + var_r31->unk_00 = 5; + object->func = fn_1_CE0; + break; + } + var_r31->unk_04 = 0; + } +} + +void fn_1_6D0(omObjData *object) +{ + fn_1_4E4(object); + fn_1_584(object); +} + +void fn_1_9B0(omObjData *object) +{ + M443DllWork *var_r27 = object->data; + + fn_1_4E4(object); + + if (WipeStatGet() == 0) { + WipeCreate(2, 0, 0x3C); + if (lbl_1_bss_8 >= 0) { + HuAudFXStop(lbl_1_bss_8); + lbl_1_bss_8 = -1; + } + var_r27->unk_08 = 0; + fn_1_584(object); + } +} + +void fn_1_CE0(omObjData *object) +{ + fn_1_4E4(object); + + if (WipeStatGet() == 0) { + fn_1_565C(); + fn_1_4AB0(); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + } +} + +void fn_1_ECC(omObjData *object) +{ + M443DllWork *var_r29 = object->data; + + fn_1_4E4(object); + switch (var_r29->unk_14) { + case 0: + var_r29->unk_1C = 0x12C; + var_r29->unk_20 = 0x3C; + lbl_1_bss_5A = MGSeqCreate(3, 0); + MGSeqPosSet(lbl_1_bss_5A, 320.0f, 240.0f); + lbl_1_bss_64 = -1; + Center.x = 0.0f; + Center.y = 200.0f; + Center.z = 0.0f; + CRot.x = -30.0f; + CRot.y = 0.0f; + CRot.z = 0.0f; + CZoom = 1900.0f; + lbl_1_bss_14.unk_00 = 1; + var_r29->unk_14 = 1; + var_r29->unk_18 = 0; + break; + case 1: + if ((var_r29->unk_18 > 60.0f) && (lbl_1_bss_C >= 0)) { + HuAudFXFadeOut(lbl_1_bss_C, 0x1E); + lbl_1_bss_C = -1; + } + if ((MGSeqStatGet(lbl_1_bss_5A) == 0) && (var_r29->unk_08 == 0)) { + var_r29->unk_14 = 2; + var_r29->unk_18 = 0; + object->func = fn_1_1294; + } + break; + } +} + +void fn_1_1294(omObjData *object) +{ + s32 sp8[4]; + + float var_f31; + + s32 var_r30; + s32 var_r26; + s32 var_r25; + s32 var_r24; + s32 var_r23; + + M443DllWork *var_r31 = object->data; + var_r25 = 0; + fn_1_4E4(object); + lbl_1_bss_14.unk_14++; + if (--var_r31->unk_20 == 0) { + var_r31->unk_20 = 0x3C; + var_r31->unk_1C--; + if (var_r31->unk_1C == 0) { + var_r31->unk_54 = 0; + var_r25 = 1; + } + } + if (var_r31->unk_1C <= 5) { + if (lbl_1_bss_64 < 0) { + lbl_1_bss_64 = MGSeqCreate(1, var_r31->unk_1C, -1, -1); + } + MGSeqParamSet(lbl_1_bss_64, 1, var_r31->unk_1C); + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + if (var_r31->unk_44[var_r30] >= 40000.0f) { + var_r31->unk_54 = 1; + } + } + if (var_r31->unk_54 != 2) { + var_r25 = 1; + } + if (var_r25 != 0) { + if (var_r31->unk_54 == 1) { + for (var_r30 = 0; var_r30 < 4; var_r30++) { + sp8[var_r30] = var_r30; + } + for (var_r24 = 0; var_r24 < 0xA; var_r24++) { + for (var_r30 = 0; var_r30 < 3; var_r30++) { + for (var_r26 = var_r30 + 1; var_r26 < 4; var_r26++) { + if ((var_r31->unk_44[var_r30] < var_r31->unk_44[var_r26]) + || ((var_r31->unk_44[var_r30] == var_r31->unk_44[var_r26]) && (frandmod(0x3E8) < 0x2BC))) { + var_f31 = var_r31->unk_44[var_r30]; + var_r31->unk_44[var_r30] = var_r31->unk_44[var_r26]; + var_r31->unk_44[var_r26] = var_f31; + var_r23 = sp8[var_r30]; + sp8[var_r30] = sp8[var_r26]; + sp8[var_r26] = var_r23; + } + } + } + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + var_r31->unk_34[sp8[var_r30]] = var_r30; + } + var_r31->unk_30 = sp8[0]; + } + lbl_1_bss_58 = MGSeqCreate(3, 1); + MGSeqPosSet(lbl_1_bss_58, 320.0f, 240.0f); + if (GWPlayerCfg[var_r31->unk_30].iscom == 0) { + if (lbl_1_bss_14.unk_14 < lbl_1_bss_14.unk_10) { + GWMGRecordSet(5, lbl_1_bss_14.unk_14); + lbl_1_bss_50 = 1; + } + if (lbl_1_bss_14.unk_14 <= 0x258) { + GWGameStat.present[0x39] = 1; + OSReport("Present For You!!!\n"); + } + } + lbl_1_bss_8 = HuAudFXPlay(0x735); + fn_1_3FE8(3); + var_r31->unk_14 = 3; + var_r31->unk_18 = 0; + if (var_r31->unk_08 == 0) { + object->func = fn_1_17D8; + } + } +} + +void fn_1_17D8(omObjData *object) +{ + M443DllWork *var_r27 = object->data; + s32 var_r25 = 0; + + if (lbl_1_bss_64 >= 0) { + MGSeqParamSet(lbl_1_bss_64, 2, -1); + lbl_1_bss_64 = -1; + } + fn_1_4E4(object); + if (var_r27->unk_14 == 3) { + if (var_r27->unk_54 == 1) { + M443DllCameraStruct *var_r31 = fn_1_4148(var_r27->unk_30 + 1); + if (var_r31->unk_A0 == 0) { + var_r31->unk_78 = var_r31->unk_44; + var_r31->unk_7C = var_r31->unk_48; + var_r31->unk_80 = var_r31->unk_40; + var_r31->unk_04 = 0x3E8; + } + if (var_r31->unk_A0 <= 0x3C) { + float var_f31 = 0.016666668f * var_r31->unk_A0; + var_r31->unk_44 = var_r31->unk_78 + ((320.0f - var_r31->unk_78) * var_f31); + var_r31->unk_48 = var_r31->unk_7C + ((240.0f - var_r31->unk_7C) * var_f31); + var_r31->unk_40 = var_r31->unk_80 + ((2.0f - var_r31->unk_80) * var_f31); + } + else { + var_r25 = 1; + } + var_r31->unk_A0 = var_r31->unk_A0 + 1; + } + else { + var_r25 = 1; + } + if ((MGSeqStatGet(lbl_1_bss_58) == 0) && (var_r27->unk_58 == 0x1111) && (var_r25 != 0)) { + if (var_r27->unk_08 == 0) { + WipeCreate(2, 0, 0x3C); + } + var_r27->unk_14 = 4; + var_r27->unk_18 = 0; + } + } + else if (WipeStatGet() == 0) { + var_r27->unk_14 = 5; + var_r27->unk_18 = 0; + fn_1_584(object); + } +} + +omObjFunc fn_1_1C98(Process *process, omObjData *object) +{ + CRot.x = -80.5f; + CRot.y = CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 0.0f; + Center.z = 0.0f; + CZoom = 1000.0f; + object->work[0] = object->work[1] = 0; + fn_1_3FE8(1); + lbl_1_bss_C = HuAudFXPlay(0x734); + + return fn_1_1D8C; +} + +Vec lbl_1_data_60[6] = { + { -500.0f, 150.0f, 350.0f }, + { -500.0f, 150.0f, 350.0f }, + { 500.0f, 150.0f, 350.0f }, + { 500.0f, 150.0f, 350.0f }, + { 0.0f, 150.0f, 350.0f }, + { 0.0f, 150.0f, 350.0f }, +}; + +Vec lbl_1_data_A8[6] = { + { -1.5f, -40.0f, 880.0f }, + { -1.5f, -40.0f, 880.0f }, + { -20.0f, 40.0f, 1000.0f }, + { -40.0f, 130.0f, 1300.0f }, + { -40.0f, 180.0f, 1500.0f }, + { -40.0f, 180.0f, 1500.0f }, +}; + +s32 lbl_1_data_F0[6] = { 0x3C, 0x5A, 0x6C, 0x96, 0x6C, 0 }; + +void fn_1_1D8C(omObjData *object) +{ + Vec sp8; + + float var_f31; + M443DllCameraStruct *var_r27; + + M443DllWork *var_r26 = object->data; + fn_1_4E4(object); + var_r26->unk_0C = 1; + object->work[0]++; + if ((object->work[1] == 1) && (lbl_1_bss_4 < 0)) { + lbl_1_bss_4 = HuAudSStreamPlay(0xB); + } + var_f31 = (float)object->work[0] / lbl_1_data_F0[object->work[1]]; + PSVECSubtract(&lbl_1_data_60[object->work[1] + 1], &lbl_1_data_60[object->work[1]], &sp8); + PSVECScale(&sp8, &sp8, var_f31); + PSVECAdd(&lbl_1_data_60[object->work[1]], &sp8, &sp8); + Center.x = sp8.x; + Center.y = sp8.y; + Center.z = sp8.z; + PSVECSubtract(&lbl_1_data_A8[object->work[1] + 1], &lbl_1_data_A8[object->work[1]], &sp8); + PSVECScale(&sp8, &sp8, var_f31); + PSVECAdd(&lbl_1_data_A8[object->work[1]], &sp8, &sp8); + CRot.x = sp8.x; + CRot.y = sp8.y; + CRot.z = 0.0f; + CZoom = sp8.z; + var_r27 = fn_1_4148(0); + var_r27->unk_1C = Center; + var_r27->unk_28 = CRot; + var_r27->unk_34 = CZoom; + if (object->work[1] == 3) { + fn_1_3FE8(2); + } + if (var_f31 >= 1.0f) { + object->work[0] = 0; + object->work[1] += 1; + if (lbl_1_data_F0[object->work[1]] == 0) { + var_r26->unk_0C = 2; + fn_1_584(object); + } + } +} + +omObjFunc fn_1_2490(Process *process, omObjData *object) +{ + M443DllCameraStruct *var_r31; + M443DllWork *var_r30 = object->data; + + if (var_r30->unk_08 == 0) { + WipeCreate(1, 0, 0x3C); + } + fn_1_3FE8(1); + var_r31 = fn_1_4148(0); + if (var_r30->unk_54 == 1) { + var_r31->unk_1C.x = 70.0f; + var_r31->unk_1C.y = 250.0f; + var_r31->unk_1C.z = 500.0f; + } + else { + var_r31->unk_1C.x = 0.0f; + var_r31->unk_1C.y = 150.0f; + var_r31->unk_1C.z = 1000.0f; + } + var_r31->unk_28.x = -10.0f; + var_r31->unk_28.y = 0.0f; + + var_r31->unk_34 = 800.0f; + return fn_1_25A4; +} + +void fn_1_25A4(omObjData *object) +{ + M443DllWork *var_r28 = object->data; + s32 var_r22 = 1; + + fn_1_4E4(object); + if (lbl_1_bss_50 != 0) { + var_r22 = 0; + if (lbl_1_bss_56 < 0) { + lbl_1_bss_56 = MGSeqCreate(0xE, lbl_1_bss_14.unk_14); + lbl_1_bss_14.unk_04 = 1; + } + else if (MGSeqStatGet(lbl_1_bss_56) == 0) { + var_r22 = 1; + lbl_1_bss_50 = 0; + } + } + if ((WipeStatGet() != 0) || (var_r22 == 0)) { + var_r28->unk_2C = 0; + return; + } + var_r28->unk_28 = 1; + if (lbl_1_bss_0 < 0) { + if (var_r28->unk_54 == 1) { + lbl_1_bss_0 = HuAudSStreamPlay(1); + } + else { + lbl_1_bss_0 = HuAudSStreamPlay(4); + } + } + if (lbl_1_bss_54 < 0) { + if (var_r28->unk_54 == 1) { + lbl_1_bss_54 = MGSeqCreate(5, 3, GWPlayerCfg[var_r28->unk_30].character, -1, -1, -1); + GWPlayerCoinWinAdd(var_r28->unk_30, 10); + } + else { + lbl_1_bss_54 = MGSeqCreate(5, 2); + } + } + else if ((MGSeqStatGet(lbl_1_bss_54) == 0) && (var_r28->unk_2C >= 210.0f)) { + var_r28->unk_28 = 2; + fn_1_584(object); + } +} + +M443DllData108Struct lbl_1_data_108[0x10] = { + { 0x4A001F, 0x10E }, + { 0x610037, 0xFA }, + { 0x610030, 0xFA }, + { 0x610030, 0xFA }, + { 0x610030, 0xFA }, + { 0x610030, 0xFA }, + { 0x610030, 0xFA }, + { 0x610030, 0xFA }, + { 0x610030, 0xFA }, + { 0x610031, 0xFA }, + { 0x610031, 0xFA }, + { 0x610031, 0xFA }, + { 0x610031, 0xFA }, + { 0x610031, 0xFA }, + { 0x610031, 0xFA }, + { 0x610031, 0xFA }, +}; + +void fn_1_2DD8(M443DllUnkStruct *arg0) +{ + s32 var_r30; + + memset(arg0, 0, sizeof(M443DllUnkStruct)); + arg0->unk_10 = GWMGRecordGet(5); + if (arg0->unk_10 == 0) { + arg0->unk_10 = 0xE10; + } + arg0->unk_08 = 320.0f; + arg0->unk_0C = 64.0f; + for (var_r30 = 0; var_r30 < 0x10; var_r30++) { + arg0->unk_1C[var_r30] = -1; + if (lbl_1_data_108[var_r30].unk_00 != 0) { + arg0->unk_1C[var_r30] = espEntry(lbl_1_data_108[var_r30].unk_00, lbl_1_data_108[var_r30].unk_04, 0); + espAttrSet(arg0->unk_1C[var_r30], 8); + espDispOff(arg0->unk_1C[var_r30]); + } + } + espColorSet(arg0->unk_1C[0], 0, 0, 0); + espTPLvlSet(arg0->unk_1C[0], 0.699999988079071); + espBankSet(arg0->unk_1C[7], 0xB); + espBankSet(arg0->unk_1C[8], 0xA); + espBankSet(arg0->unk_1C[14], 0xB); + espBankSet(arg0->unk_1C[15], 0xA); +} + +Vec2f lbl_1_data_188[0x10] = { + { 0.0f, 0.0f }, + { -52.0f, -9.0f }, + { 53.0f, -8.0f }, + { 35.0f, -8.0f }, + { 9.0f, -8.0f }, + { -9.0f, -8.0f }, + { -31.0f, -8.0f }, + { 23.0f, -8.0f }, + { -17.0f, -8.0f }, + { 53.0f, 8.0f }, + { 35.0f, 8.0f }, + { 9.0f, 8.0f }, + { -9.0f, 8.0f }, + { -31.0f, 8.0f }, + { 23.0f, 8.0f }, + { -17.0f, 8.0f }, +}; + +void fn_1_2F54(M443DllUnkStruct *arg0) +{ + u32 sp8[3]; + float var_f31; + + s32 var_r30; + u32 var_r29; + s32 var_r28; + s32 var_r27; + + for (var_r30 = 0; var_r30 < 0x10; var_r30++) { + if (arg0->unk_1C[var_r30] >= 0) { + if (arg0->unk_00 == 0) { + espDispOff(arg0->unk_1C[var_r30]); + } + else { + espDispOn(arg0->unk_1C[var_r30]); + espPosSet(arg0->unk_1C[var_r30], 0.9f * (arg0->unk_08 + lbl_1_data_188[var_r30].x), arg0->unk_0C + lbl_1_data_188[var_r30].y); + } + } + } + arg0->unk_18++; + if (arg0->unk_04 != 0) { + var_r29 = arg0->unk_14; + arg0->unk_10 = var_r29; + var_f31 = 1.100000023841858 + (0.10000000149011612 * sind((22.5f * (arg0->unk_18 & 0xF)))); + espScaleSet(arg0->unk_1C[1], var_f31, var_f31); + for (var_r30 = 2; var_r30 <= 6; var_r30++) { + espScaleSet(arg0->unk_1C[var_r30], var_f31, var_f31); + } + for (var_r30 = 7; var_r30 <= 8; var_r30++) { + espScaleSet(arg0->unk_1C[var_r30], var_f31, var_f31); + } + } + for (var_r30 = 0; var_r30 < 2; var_r30++) { + if (var_r30 != 0) { + var_r29 = arg0->unk_14; + var_r27 = 9; + } + else { + var_r29 = arg0->unk_10; + var_r27 = 2; + } + sp8[0] = var_r29 % 60; + var_r29 = (var_r29 - sp8[0]) / 60; + sp8[0] = 100.0f * (0.016666668f * sp8[0]); + sp8[1] = var_r29 % 60; + var_r29 = (var_r29 - sp8[1]) / 60; + sp8[2] = var_r29; + for (var_r28 = 0; var_r28 < 3; var_r28++) { + espBankSet(arg0->unk_1C[var_r27++], sp8[var_r28] % 10); + if (var_r28 < 2) { + espBankSet(arg0->unk_1C[var_r27++], sp8[var_r28] / 10); + } + } + } +} + +void fn_1_32C0(Process *process) +{ + Hu3DCameraCreate(0x1F); + lbl_1_bss_6C = omAddObjEx(process, 0x7FDA, 0, 0, -1, omOutViewMulti); + lbl_1_bss_6C->work[0] = 5; + lbl_1_bss_68 = omAddObjEx(process, 0xC, 1, 0, -1, fn_1_3370); + lbl_1_bss_68->work[0] = 0; +} + +void fn_1_3370(omObjData *object) +{ + M443DllCameraStruct *var_r31; + s32 var_r30; + M443DllCameraStruct *var_r28; + + float sp1C[5][4] = { + { 320.0f, 240.0f, 640.0f, 416.0f }, + { 160.0f, 136.0f, 320.0f, 208.0f }, + { 480.0f, 136.0f, 320.0f, 208.0f }, + { 160.0f, 344.0f, 320.0f, 208.0f }, + { 480.0f, 344.0f, 320.0f, 208.0f }, + }; + s32 sp8[5] = { 1, 2, 4, 8, 16 }; + + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 10 * sizeof(M443DllCameraStruct), MEMORY_DEFAULT_NUM); + var_r28 = object->data; + memset(var_r28, 0, 10 * sizeof(M443DllCameraStruct)); + object->model[0] = Hu3DHookFuncCreate(fn_1_3D78); + Hu3DModelLayerSet(*object->model, 0); + Hu3DModelCameraSet(*object->model, 0x1E); + for (var_r31 = var_r28, var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + var_r31->unk_00 = 1; + var_r31->unk_04 = var_r30 * 0x64; + var_r31->unk_10 = 41.5f; + var_r31->unk_14 = 100.0f; + var_r31->unk_18 = 60000.0f; + var_r31->unk_1C.x = 0.0f; + var_r31->unk_1C.y = 0.0f; + var_r31->unk_1C.z = 0.0f; + var_r31->unk_28.x = -15.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_34 = 1000.0f; + var_r31->unk_40 = 1.0f; + var_r31->unk_44 = sp1C[var_r30][0]; + var_r31->unk_48 = sp1C[var_r30][1]; + var_r31->unk_4C = sp1C[var_r30][2]; + var_r31->unk_50 = sp1C[var_r30][3]; + var_r31->unk_3C = var_r31->unk_0C = sp8[var_r30]; + var_r31->unk_08 = var_r30; + var_r31->unk_38 = var_r30; + } + object->work[1] = 0; + for (var_r30 = 0; var_r30 < 2; var_r30++) { + lbl_1_bss_10[var_r30] = espEntry(0x4A001E, 0x12C, 0); + espPosSet(lbl_1_bss_10[var_r30], 288.0, 240.0); + if (var_r30 != 0) { + espScaleSet(lbl_1_bss_10[var_r30], 0.22499999403953552, 60.0); + } + else { + espScaleSet(lbl_1_bss_10[var_r30], 72.0, 0.25); + } + espColorSet(lbl_1_bss_10[var_r30], 0, 0, 0); + espTPLvlSet(lbl_1_bss_10[var_r30], 1.0); + espDispOff(lbl_1_bss_10[var_r30]); + } + object->work[0]++; + fn_1_3770(object); + object->func = fn_1_3710; +} + +void fn_1_3710(omObjData *arg0) +{ + M443DllWork *sp8 = arg0->data; + s32 spC[4] = { 0x100, 0x200, 0x400, 0x800 }; + fn_1_3770(arg0); +} + +void fn_1_3770(omObjData *arg0) +{ + float var_f31; + + M443DllCameraStruct *var_r31; + s32 var_r30; + s32 var_r29; + M443DllCameraStruct *var_r28; + omObjData *var_r27; + s32 var_r26; + u32 var_r25; + s32 var_r24; + s32 var_r23; + u32 var_r22; + u32 var_r21; + + var_r28 = arg0->data; + { + s32 sp40[4] = { 2, 4, 8, 16 }; + u32 sp30[4]; + s32 sp20[4]; + float sp18[2]; + float sp10[2]; + float sp8[2]; + + var_r24 = 0; + var_r26 = 0; + memcpy(&var_r28[5], var_r28, 5 * sizeof(M443DllCameraStruct)); + switch (arg0->work[1]) { + case 0: + break; + case 1: + var_r26 |= 1; + break; + case 2: + var_r26 |= 1; + case 3: + var_r24 = 1; + case 4: + var_r26 |= 0x1E; + break; + } + if (var_r24 != 0) { + Hu3DModelAttrReset(arg0->model[0], 1); + } + else { + Hu3DModelAttrSet(arg0->model[0], 1); + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + sp30[var_r30] = var_r28[var_r30 + 6].unk_04; + sp20[var_r30] = var_r30; + } + for (var_r30 = 0; var_r30 < 3; var_r30++) { + for (var_r29 = var_r30 + 1; var_r29 < 4; var_r29++) { + if ((var_r30 != var_r29) && (sp30[var_r30] > sp30[var_r29])) { + var_r25 = sp30[var_r30]; + sp30[var_r30] = sp30[var_r29]; + sp30[var_r29] = var_r25; + var_r25 = sp20[var_r30]; + sp20[var_r30] = sp20[var_r29]; + sp20[var_r29] = var_r25; + } + } + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + var_r28[sp20[var_r30] + 6].unk_3C = sp40[var_r30]; + var_r28[sp20[var_r30] + 6].unk_38 = var_r30 + 1; + } + Hu3DCamera[5].fov = -1.0f; + for (var_r31 = &var_r28[5], var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if ((var_r31->unk_00 == 0) || ((var_r26 & var_r31->unk_0C) == 0)) { + Hu3DCamera[var_r31->unk_38].fov = -1.0f; + } + else { + var_f31 = 1.2f * ((var_r31->unk_4C / 640.0f) / (var_r31->unk_50 / 480.0f)); + sp18[0] = var_r31->unk_4C * var_r31->unk_40; + sp18[1] = var_r31->unk_50 * var_r31->unk_40; + Hu3DCameraPerspectiveSet(var_r31->unk_3C, var_r31->unk_10, var_r31->unk_14, var_r31->unk_18, var_f31); + Hu3DCameraViewportSet( + var_r31->unk_3C, var_r31->unk_44 - (0.5f * sp18[0]), var_r31->unk_48 - (0.5f * sp18[1]), sp18[0], sp18[1], 0.0f, 1.0f); + sp10[0] = var_r31->unk_44 - (0.5f * sp18[0]); + sp10[1] = var_r31->unk_48 - (0.5f * sp18[1]); + sp8[0] = var_r31->unk_44 + (0.5f * sp18[0]); + sp8[1] = var_r31->unk_48 + (0.5f * sp18[1]); + if (sp10[0] < 0.0f) { + sp10[0] = 0.0f; + } + if (sp10[1] < 0.0f) { + sp10[1] = 0.0f; + } + if (sp8[0] > 640.0f) { + sp8[0] = 640.0f; + } + if (sp8[1] > 480.0f) { + sp8[1] = 480.0f; + } + sp8[0] -= sp10[0]; + sp8[1] -= sp10[1]; + Hu3DCameraScissorSet(var_r31->unk_3C, sp10[0], sp10[1], sp8[0], sp8[1]); + var_r29 = var_r31->unk_38; + CenterM[var_r29].x = var_r31->unk_1C.x; + CenterM[var_r29].y = var_r31->unk_1C.y; + CenterM[var_r29].z = var_r31->unk_1C.z; + CRotM[var_r29].x = var_r31->unk_28.x; + CRotM[var_r29].y = var_r31->unk_28.y; + CRotM[var_r29].z = var_r31->unk_28.z; + CZoomM[var_r29] = var_r31->unk_34; + } + } + } + if (arg0->work[1] == 4) { + espDispOn(lbl_1_bss_10[0]); + espDispOn(lbl_1_bss_10[1]); + return; + } + espDispOff(lbl_1_bss_10[0]); + espDispOff(lbl_1_bss_10[1]); +} + +GXColor lbl_1_data_208 = { 0x00, 0x00, 0x00, 0x00 }; + +void fn_1_3D78(ModelData *arg0, Mtx arg1) +{ + Mtx spC; + + PSMTXIdentity(spC); + GXLoadPosMtxImm(spC, 0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, lbl_1_data_208); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET); + GXSetZMode(GX_TRUE, GX_ALWAYS, GX_TRUE); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(-45000.0f, 30000.0f, -59900.0f); + GXPosition3f32(45000.0f, 30000.0f, -59900.0f); + GXPosition3f32(45000.0f, -30000.0f, -59900.0f); + GXPosition3f32(-45000.0f, -30000.0f, -59900.0f); +} + +void fn_1_3FE8(u32 arg0) +{ + lbl_1_bss_68->work[1] = arg0; +} + +u32 fn_1_3FFC(void) +{ + return lbl_1_bss_68->work[1]; +} + +M443DllCameraStruct *fn_1_4010(s32 arg0) +{ + M443DllCameraStruct *var_r31; + s32 var_r30; + M443DllCameraStruct *var_r29; + + var_r29 = lbl_1_bss_68->data; + for (var_r31 = var_r29, var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if (var_r31->unk_0C & arg0) { + break; + } + } + if (var_r30 >= 5) { + OSReport("M443:Camera Flag Error!!\n"); + return NULL; + } + return var_r31; +} + +M443DllCameraStruct *fn_1_40AC(s32 arg0) +{ + M443DllCameraStruct *var_r31; + s32 var_r30; + M443DllCameraStruct *var_r29; + + var_r29 = lbl_1_bss_68->data; + for (var_r31 = &var_r29[5], var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if (var_r31->unk_0C & arg0) { + break; + } + } + if (var_r30 >= 5) { + OSReport("M443:Camera Flag Error!!\n"); + return NULL; + } + return var_r31; +} + +// Get camera +M443DllCameraStruct *fn_1_4148(u32 arg0) +{ + M443DllCameraStruct *var_r31 = lbl_1_bss_68->data; + if (arg0 >= 5) { + OSReport("M443:Camera No. Error!!\n"); + return NULL; + } + return &var_r31[arg0]; +} + +M443DllCameraStruct *fn_1_41B0(u32 arg0) +{ + M443DllCameraStruct *var_r31 = lbl_1_bss_68->data; + if (arg0 >= 5) { + OSReport("M443:Camera No. Error!!\n"); + return NULL; + } + return &var_r31[arg0 + 5]; +} + +void fn_1_421C(s32 arg0, s32 arg1) +{ + M443DllCameraStruct *var_r31; + s32 var_r30; + M443DllCameraStruct *var_r28; + M443DllCameraStruct *var_r27; + + s32 var_r29 = 0; + if (arg0 >= 0) { + var_r27 = lbl_1_bss_68->data; + var_r28 = &var_r27[5]; + for (var_r31 = var_r28, var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if (var_r31->unk_0C & arg1) { + var_r29 |= var_r31->unk_3C; + } + } + Hu3DModelCameraSet(arg0, var_r29); + } +} + +s32 fn_1_42B4(void) +{ + return ((M443DllWork *)lbl_1_bss_70->data)->unk_00; +} + +s32 fn_1_42CC(void) +{ + return ((M443DllWork *)lbl_1_bss_70->data)->unk_0C; +} + +u32 fn_1_42E4(void) +{ + return ((M443DllWork *)lbl_1_bss_70->data)->unk_14; +} + +s32 fn_1_42FC(void) +{ + return ((M443DllWork *)lbl_1_bss_70->data)->unk_28; +} + +void fn_1_4314(s32 arg0, float arg8) +{ + M443DllWork *var_r31 = lbl_1_bss_70->data; + + if (fn_1_42E4() == 2) { + var_r31->unk_44[arg0] = arg8; + } +} + +s32 fn_1_4368(s32 arg0) +{ + M443DllWork *var_r31 = lbl_1_bss_70->data; + + if (var_r31->unk_54 == 1) { + return var_r31->unk_34[arg0]; + } + return -1; +} + +void fn_1_43AC(s32 arg0) +{ + ((M443DllWork *)lbl_1_bss_70->data)->unk_58 |= (1 << ((arg0 & 7) * 4)); +} + +void fn_1_43DC(s32 arg0) +{ + ((M443DllWork *)lbl_1_bss_70->data)->unk_5C |= (1 << ((arg0 & 3) * 4)); +} + +s32 fn_1_440C(void) +{ + return MGSeqStatGet(lbl_1_bss_58) == 0; +} + +void fn_1_4444(Vec *arg0, Vec *arg1) +{ + Vec sp10; + float var_f30; + + PSVECSubtract(arg1, arg0, &sp10); + Center = *arg1; + var_f30 = (sp10.x * sp10.x) + (sp10.z * sp10.z); + CRot.x = atan2d(sp10.y, sqrtf(var_f30)); + CRot.y = atan2d(-sp10.x, -sp10.z); + CRot.z = 0.0f; + CZoom = PSVECMag(&sp10); +} + +void fn_1_464C(float arg8, float arg9, float argA, float argB, float argC, float argD) +{ + Vec sp3C; + Vec sp30; + Vec sp24; + float var_f30; + + sp3C.x = arg8; + sp3C.y = arg9; + sp3C.z = argA; + sp30.x = argB; + sp30.y = argC; + sp30.z = argD; + PSVECSubtract(&sp30, &sp3C, &sp24); + Center = sp30; + var_f30 = (sp24.x * sp24.x) + (sp24.z * sp24.z); + CRot.x = atan2d(sp24.y, sqrtf(var_f30)); + CRot.y = atan2d(-sp24.x, -sp24.z); + CRot.z = 0.0f; + CZoom = PSVECMag(&sp24); +} + +float fn_1_488C(float arg8, float arg9, float argA) +{ + float var_f31; + float var_f30; + float var_f29; + + var_f30 = fmod(arg9 - arg8, 360.0); + var_f31 = var_f30; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } + var_f29 = fmod(arg8 + (argA * var_f31), 360.0); + var_f31 = var_f29; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + return var_f31; +} + +float fn_1_49A8(float arg8, float arg9) +{ + float var_f31; + float var_f30; + + var_f30 = fmod(arg9 - arg8, 360.0); + var_f31 = var_f30; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } + return var_f31; +} diff --git a/src/REL/m443Dll/map.c b/src/REL/m443Dll/map.c new file mode 100644 index 00000000..bab11988 --- /dev/null +++ b/src/REL/m443Dll/map.c @@ -0,0 +1,183 @@ +#include "datadir_enum.h" +#include "ext_math.h" +#include "game/audio.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "REL/m443Dll.h" + +void fn_1_4AB4(omObjData *object); +void fn_1_4D14(omObjData *object); + +s32 lbl_1_data_240[5] = { 1, 2, 4, 8, 0x10 }; + +void fn_1_4A5C(Process *process) +{ + omObjData *var_r31 = omAddObjEx(process, 0x1E, 0xD, 0, -1, fn_1_4AB4); + var_r31->work[0] = 0; +} + +void fn_1_4AB0(void) { } + +void fn_1_4AB4(omObjData *object) +{ + s32 var_r30; + + omSetTra(object, 0.0f, 0.0f, 0.0f); + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M443, 0)); + Hu3DModelLayerSet(object->model[0], 2); + object->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M443, 2)); + Hu3DModelLayerSet(object->model[2], 2); + Hu3DModelAttrSet(object->model[2], 1); + object->model[3] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M443, 4)); + Hu3DModelLayerSet(object->model[3], 2); + Hu3DMotionSpeedSet(object->model[3], 0.0f); + object->model[4] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M443, 3)); + Hu3DModelLayerSet(object->model[4], 2); + for (var_r30 = 0; var_r30 < 4; var_r30++) { + object->model[var_r30 + 5] = Hu3DModelLink(object->model[4]); + Hu3DModelLayerSet(object->model[var_r30 + 5], 2); + Hu3DModelScaleSet(object->model[var_r30 + 5], 0.93f, 0.93f, 0.93f); + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + object->model[var_r30 + 9] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M443, 1)); + Hu3DModelLayerSet(object->model[var_r30 + 9], 2); + Hu3DMotionSpeedSet(object->model[var_r30 + 9], 0.0f); + } + object->work[0] = 0; + object->work[1] = 0; + object->work[2] = 0; + object->work[3] = 0; + object->func = fn_1_4D14; +} + +typedef struct M443DllMapUnkStruct { + Vec unk_00[4]; + float unk_30; +} M443DllMapUnkStruct; /* size = 0x34 */ + +void fn_1_4D14(omObjData *object) +{ + float var_f31; + float var_f30; + + M443DllCameraStruct *var_r30; + s32 var_r29; + s32 var_r28; + + var_r28 = 1; + { + Mtx sp5C; + Vec sp20; + Vec sp14; + Vec sp8 = { 0.0f, 0.0f, 0.0f }; + Vec sp2C[4] = { + { -50.0f, 0.0f, -150.0f }, + { 50.0f, 0.0f, -150.0f }, + { -50.0f, 0.0f, -150.0f }, + { 50.0f, 0.0f, -150.0f }, + }; + + for (var_r29 = 0; var_r29 < 5; var_r29++) { + var_r30 = fn_1_40AC(lbl_1_data_240[var_r29]); + sp20.x = var_r30->unk_1C.x + (var_r30->unk_34 * (sind(var_r30->unk_28.y) * cosd(var_r30->unk_28.x))); + sp20.y = var_r30->unk_1C.y + (var_r30->unk_34 * -sind(var_r30->unk_28.x)); + sp20.z = var_r30->unk_1C.z + (var_r30->unk_34 * (cosd(var_r30->unk_28.y) * cosd(var_r30->unk_28.x))); + Hu3DModelPosSetV(object->model[var_r29 + 4], &sp20); + fn_1_421C(object->model[var_r29 + 4], lbl_1_data_240[var_r29]); + } + object->work[1] += 1; + var_f31 = 150.0f; + switch (object->work[0]) { + case 0: + if (fn_1_3FFC() == 4) { + object->work[0] += 1; + object->work[1] = 0; + } + break; + case 1: + var_f30 = 1.0f - (0.016666668f * object->work[1]); + if (var_f30 <= 0.0f) { + object->work[0] += 1; + object->work[1] = 0; + var_f30 = 0.0f; + } + var_f31 = var_f31 * var_f30; + break; + case 2: + var_f31 = 0.0f; + if (fn_1_42E4() < 2) { + object->work[1] = 0; + } + if (object->work[1] >= 60.0f) { + object->work[0] += 1; + object->work[1] = 0; + } + break; + case 3: + var_f30 = 0.016666668f * object->work[1]; + if (var_f30 > 1.0f) { + object->work[0] += 1; + object->work[1] = 0; + var_r28 = 0; + } + var_f31 = var_f31 * var_f30; + break; + default: + var_r28 = 0; + break; + } + for (var_r29 = 0; var_r29 < 4; var_r29++) { + var_r30 = fn_1_40AC(lbl_1_data_240[var_r29 + 1]); + mtxRot(sp5C, var_r30->unk_28.x, var_r30->unk_28.y, 0.0f); + sp8.z = var_r30->unk_34; + PSMTXMultVec(sp5C, &sp8, &sp14); + PSVECAdd(&var_r30->unk_1C, &sp14, &sp20); + sp2C[var_r29].y += var_f31; + PSMTXMultVec(sp5C, &sp2C[var_r29], &sp14); + PSVECAdd(&sp20, &sp14, &sp20); + Hu3DModelPosSetV(object->model[var_r29 + 9], &sp20); + Hu3DModelRotSet(object->model[var_r29 + 9], var_r30->unk_28.x, var_r30->unk_28.y, 0.0f); + Hu3DModelScaleSet(object->model[var_r29 + 9], 0.15f, 0.15f, 0.15f); + fn_1_421C(object->model[var_r29 + 9], lbl_1_data_240[var_r29 + 1]); + if (fn_1_42E4() >= 1) { + if (object->work[2] == 0) { + object->work[2] = 1; + object->work[3] = 0; + } + Hu3DMotionSpeedSet(object->model[var_r29 + 9], 0.95f); + if (var_r28 == 0) { + Hu3DModelAttrSet(object->model[var_r29 + 9], 1); + } + } + } + if (object->work[2] != 0) { + object->work[3] += 1; + if (object->work[3] >= 60.0f) { + switch (object->work[2]) { + case 1: + case 2: + HuAudFXPlay(0x725); + break; + case 3: + HuAudFXPlay(0x726); + break; + } + object->work[2] += 1; + object->work[3] = 0; + } + } + if (fn_1_42E4() == 2) { + Hu3DMotionSpeedSet(object->model[3], 1.0f); + } + else if (fn_1_42E4() == 5) { + Hu3DModelAttrSet(object->model[3], 1); + } + if (fn_1_42E4() == 5) { + Hu3DModelAttrReset(object->model[2], 1); + Hu3DModelShadowMapSet(object->model[0]); + Hu3DModelShadowMapSet(object->model[2]); + } + } +} diff --git a/src/REL/m443Dll/player.c b/src/REL/m443Dll/player.c new file mode 100644 index 00000000..98e6f793 --- /dev/null +++ b/src/REL/m443Dll/player.c @@ -0,0 +1,16 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/sprite.h" +#include "string.h" + +#ifndef __MWERKS__ +#include "game/esprite.h" +#include "game/frand.h" +#endif + +#include "REL/m443Dll.h" From 85f1363bcc1172a1f302b755ddffafd60a5f710c Mon Sep 17 00:00:00 2001 From: dbalatoni13 Date: Tue, 29 Oct 2024 21:16:32 +0100 Subject: [PATCH 6/8] Got 99% on mpexDll/mpex.c --- config/GMPE01_00/rels/mpexDll/symbols.txt | 58 +- include/REL/mpexDll.h | 33 +- include/game/object.h | 4 +- include/game/objsub.h | 2 +- src/REL/mpexDll/main.c | 56 +- src/REL/mpexDll/mpex.c | 3500 +++++++++++++++++++++ src/game/objmain.c | 4 +- src/game/objsub.c | 2 +- 8 files changed, 3588 insertions(+), 71 deletions(-) create mode 100644 src/REL/mpexDll/mpex.c diff --git a/config/GMPE01_00/rels/mpexDll/symbols.txt b/config/GMPE01_00/rels/mpexDll/symbols.txt index 8b856ada..21ef6f1a 100644 --- a/config/GMPE01_00/rels/mpexDll/symbols.txt +++ b/config/GMPE01_00/rels/mpexDll/symbols.txt @@ -256,7 +256,7 @@ lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0xC scope:local data: lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float -lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0xC scope:local data:float lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double @@ -267,14 +267,14 @@ lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data: lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 scope:local data:float lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 scope:local data:float lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0xC scope:local data:4byte -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0xC scope:local data:4byte -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0xC scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0xC scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0xC scope:local data:float lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 scope:local data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0xC scope:local data:4byte -lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0xC scope:local data:4byte -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0xC scope:local data:float +lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0xC scope:local data:float +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0xC scope:local data:float lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 scope:local data:float lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x8 scope:local data:double @@ -395,34 +395,34 @@ lbl_1_data_232 = .data:0x00000232; // type:object size:0xE scope:local data:stri lbl_1_data_240 = .data:0x00000240; // type:object size:0x54 lbl_1_data_294 = .data:0x00000294; // type:object size:0x4 data:4byte lbl_1_data_298 = .data:0x00000298; // type:object size:0x4 data:4byte -lbl_1_data_29C = .data:0x0000029C; // type:object size:0x18 +lbl_1_data_29C = .data:0x0000029C; // type:object size:0x18 scope:local data:string lbl_1_data_2B4 = .data:0x000002B4; // type:object size:0x10 data:4byte lbl_1_data_2C4 = .data:0x000002C4; // type:object size:0x4 data:4byte -lbl_1_data_2C8 = .data:0x000002C8; // type:object size:0x3 data:string -lbl_1_data_2CB = .data:0x000002CB; // type:object size:0x5 data:string -lbl_1_data_2D0 = .data:0x000002D0; // type:object size:0x19 data:string -lbl_1_data_2E9 = .data:0x000002E9; // type:object size:0x12 data:string -lbl_1_data_2FB = .data:0x000002FB; // type:object size:0x29 +lbl_1_data_2C8 = .data:0x000002C8; // type:object size:0x3 scope:local data:string +lbl_1_data_2CB = .data:0x000002CB; // type:object size:0x5 scope:local data:string +lbl_1_data_2D0 = .data:0x000002D0; // type:object size:0x19 scope:local data:string +lbl_1_data_2E9 = .data:0x000002E9; // type:object size:0x12 scope:local data:string +lbl_1_data_2FB = .data:0x000002FB; // type:object size:0x29 scope:local data:string lbl_1_data_324 = .data:0x00000324; // type:object size:0x4 data:4byte lbl_1_data_328 = .data:0x00000328; // type:object size:0x4 data:4byte lbl_1_data_32C = .data:0x0000032C; // type:object size:0xC data:4byte -lbl_1_data_338 = .data:0x00000338; // type:object size:0x2B data:string -lbl_1_data_363 = .data:0x00000363; // type:object size:0x28 data:string -lbl_1_data_38B = .data:0x0000038B; // type:object size:0x5 data:string -lbl_1_data_390 = .data:0x00000390; // type:object size:0x4 data:string -lbl_1_data_394 = .data:0x00000394; // type:object size:0x4 +lbl_1_data_338 = .data:0x00000338; // type:object size:0x2B scope:local data:string +lbl_1_data_363 = .data:0x00000363; // type:object size:0x28 scope:local data:string +lbl_1_data_38B = .data:0x0000038B; // type:object size:0x5 scope:local data:string +lbl_1_data_390 = .data:0x00000390; // type:object size:0x4 scope:local data:string +lbl_1_data_394 = .data:0x00000394; // type:object size:0x4 scope:local data:string jumptable_1_data_398 = .data:0x00000398; // type:object size:0x2C scope:local -lbl_1_data_3C4 = .data:0x000003C4; // type:object size:0x3C data:string -lbl_1_data_400 = .data:0x00000400; // type:object size:0x16 data:string -lbl_1_data_416 = .data:0x00000416; // type:object size:0x1A data:string -lbl_1_data_430 = .data:0x00000430; // type:object size:0x1A data:string -lbl_1_data_44A = .data:0x0000044A; // type:object size:0x1A data:string -lbl_1_data_464 = .data:0x00000464; // type:object size:0x17 data:string -lbl_1_data_47B = .data:0x0000047B; // type:object size:0x16 data:string -lbl_1_data_491 = .data:0x00000491; // type:object size:0x16 data:string -lbl_1_data_4A7 = .data:0x000004A7; // type:object size:0x19 data:string -lbl_1_data_4C0 = .data:0x000004C0; // type:object size:0x16 data:string -lbl_1_data_4D6 = .data:0x000004D6; // type:object size:0x42 +lbl_1_data_3C4 = .data:0x000003C4; // type:object size:0x3C scope:local data:string +lbl_1_data_400 = .data:0x00000400; // type:object size:0x16 scope:local data:string +lbl_1_data_416 = .data:0x00000416; // type:object size:0x1A scope:local data:string +lbl_1_data_430 = .data:0x00000430; // type:object size:0x1A scope:local data:string +lbl_1_data_44A = .data:0x0000044A; // type:object size:0x1A scope:local data:string +lbl_1_data_464 = .data:0x00000464; // type:object size:0x17 scope:local data:string +lbl_1_data_47B = .data:0x0000047B; // type:object size:0x16 scope:local data:string +lbl_1_data_491 = .data:0x00000491; // type:object size:0x16 scope:local data:string +lbl_1_data_4A7 = .data:0x000004A7; // type:object size:0x19 scope:local data:string +lbl_1_data_4C0 = .data:0x000004C0; // type:object size:0x16 scope:local data:string +lbl_1_data_4D6 = .data:0x000004D6; // type:object size:0x42 scope:local data:string lbl_1_data_518 = .data:0x00000518; // type:object size:0x3C scope:local data:string lbl_1_data_554 = .data:0x00000554; // type:object size:0x19 scope:local data:string lbl_1_data_56D = .data:0x0000056D; // type:object size:0x1A scope:local data:string diff --git a/include/REL/mpexDll.h b/include/REL/mpexDll.h index c14b7b54..58c6910d 100644 --- a/include/REL/mpexDll.h +++ b/include/REL/mpexDll.h @@ -17,26 +17,35 @@ typedef struct MpexDllUnkStruct { /* 0x40 */ s32 unk_40; } MpexDllUnkStruct; /* size = 0x44 */ -typedef struct MpexDllUnkStruct2 { - /* 0x00 */ char unk00[0x40]; - /* 0x40 */ s16 *unk_40; - /* 0x44 */ char unk44; - /* 0x48 */ s16 *unk_48; - /* 0x4C */ char unk_4C[0xC]; - /* 0x58 */ u32 unk_58; -} MpexDllUnkStruct2; /* size = unknown */ - void fn_1_374(void); void fn_1_298(void); void fn_1_910(MpexDllUnkFunc arg0); -void fn_1_25C4(MpexDllUnkStruct2 *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); -void fn_1_28E0(MpexDllUnkStruct2 *arg0, s32 arg1, Vec *arg2, float arg8, float arg9, float argA, s32 arg3, s32 arg4); -s32 fn_1_3044(Process *arg0); +void fn_1_25C4(omObjData *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +void fn_1_28E0(omObjData *arg0, s32 arg1, Vec arg2, float arg8, float arg9, float argA, s32 arg3, s32 arg4); +Process *fn_1_3044(Process *arg0); + +void fn_1_1264C(Process *arg0); +s32 fn_1_140B0(s32 arg0, s32 arg1); +void fn_1_148BC(s32 arg0); +void fn_1_148E4(s32 arg0); +void fn_1_1A5A4(s32 arg0); +float fn_1_1B714(float arg8, float arg9, float argA, float argB); +void fn_1_1B810(void); +void fn_1_1B834(void); +void fn_1_1B9F4(void); +void fn_1_1BA78(u32 arg0, s32 arg1, s32 arg2); +void fn_1_1BB4C(u32 arg0, s32 arg1); +s32 fn_1_1BBA4(s32 arg0); +void fn_1_1BD00(u32 arg0, s32 arg1); +void fn_1_1BF1C(u32 arg0); +void fn_1_1C120(void); void fn_1_1B7D0(s32 arg0); s32 fn_1_1D02C(s32 arg0); extern u8 lbl_1_bss_6AC; +extern s32 lbl_1_bss_63C[0x1C]; +extern MpexDllUnkStruct lbl_1_bss_64; #endif diff --git a/include/game/object.h b/include/game/object.h index 95061c52..69f4cb6b 100644 --- a/include/game/object.h +++ b/include/game/object.h @@ -117,7 +117,7 @@ extern s32 omcurdll; extern s32 omovlhisidx; extern s32 omovlevtno; extern s32 omnextovlevtno; -extern s32 omovlstat; +extern u32 omovlstat; extern char omUPauseFlag; extern s16 omSysExitReq; extern s16 omdispinfo; @@ -134,4 +134,4 @@ extern Vec CenterM[16]; extern float CZoomM[16]; extern s16 omDBGMenuButton; -#endif \ No newline at end of file +#endif diff --git a/include/game/objsub.h b/include/game/objsub.h index 2cc262d0..d42531e5 100644 --- a/include/game/objsub.h +++ b/include/game/objsub.h @@ -26,7 +26,7 @@ extern s16 mgTypeCurr; extern s16 mgBattleStar[4]; extern s16 mgBattleStarMax; extern u8 lbl_801D3E94; -extern s32 mgRecordExtra; +extern u32 mgRecordExtra; extern s32 mgQuitExtraF; extern s32 mgPracticeEnableF; extern s32 mgInstExitEnableF; diff --git a/src/REL/mpexDll/main.c b/src/REL/mpexDll/main.c index ed43b5c1..8e6bdafc 100644 --- a/src/REL/mpexDll/main.c +++ b/src/REL/mpexDll/main.c @@ -3,6 +3,7 @@ #include "game/audio.h" #include "game/hsfman.h" #include "game/hsfmotion.h" +#include "game/object.h" #include "game/objsub.h" #include "game/pad.h" #include "game/printfunc.h" @@ -11,6 +12,13 @@ #include "REL/mpexDll.h" +#ifndef __MWERKS__ +float fn_1_1B52C(float arg8, float arg9, float argA, float argB); +float fn_1_1B554(float, float, float); +float fn_1_1B574(float arg0, float arg1, float arg2, float arg3); +float fn_1_1B64C(float arg0, float arg1, float arg2, float arg3); +#endif + void fn_1_230(); void fn_1_A70(MpexDllUnkStruct *arg0); @@ -338,34 +346,34 @@ void fn_1_2228(MpexDllUnkStruct *arg0, MpexDllUnkStruct *arg1, float arg8, float arg0->unk_38 = fn_1_1B554(arg0->unk_38, arg1->unk_3C, argA); } -void fn_1_25C4(MpexDllUnkStruct2 *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) +void fn_1_25C4(omObjData *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { switch (arg4) { case 0: - Hu3DMotionShiftSet(arg0->unk_40[arg1], arg0->unk_48[arg2], 0.0f, arg3, 0); + Hu3DMotionShiftSet(arg0->model[arg1], arg0->motion[arg2], 0.0f, arg3, 0); break; case 1: - Hu3DMotionShiftSet(arg0->unk_40[arg1], arg0->unk_48[arg2], 0.0f, arg3, 0x40000001); + Hu3DMotionShiftSet(arg0->model[arg1], arg0->motion[arg2], 0.0f, arg3, 0x40000001); break; case 2: - Hu3DMotionShiftSet(arg0->unk_40[arg1], arg0->unk_48[arg2], 0.0f, arg3, 0x40000002); + Hu3DMotionShiftSet(arg0->model[arg1], arg0->motion[arg2], 0.0f, arg3, 0x40000002); break; } } -void fn_1_273C(MpexDllUnkStruct2 *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) +void fn_1_273C(omObjData *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { - if (arg0->unk_58 != arg0->unk_48[arg2]) { - arg0->unk_58 = arg0->unk_48[arg2]; + if (arg0->work[3] != arg0->motion[arg2]) { + arg0->work[3] = arg0->motion[arg2]; switch (arg4) { case 0: - Hu3DMotionShiftSet(arg0->unk_40[arg1], arg0->unk_48[arg2], 0.0f, arg3, 0); + Hu3DMotionShiftSet(arg0->model[arg1], arg0->motion[arg2], 0.0f, arg3, 0); break; case 1: - Hu3DMotionShiftSet(arg0->unk_40[arg1], arg0->unk_48[arg2], 0.0f, arg3, 0x40000001); + Hu3DMotionShiftSet(arg0->model[arg1], arg0->motion[arg2], 0.0f, arg3, 0x40000001); break; case 2: - Hu3DMotionShiftSet(arg0->unk_40[arg1], arg0->unk_48[arg2], 0.0f, arg3, 0x40000002); + Hu3DMotionShiftSet(arg0->model[arg1], arg0->motion[arg2], 0.0f, arg3, 0x40000002); break; } } @@ -373,7 +381,7 @@ void fn_1_273C(MpexDllUnkStruct2 *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) void fn_1_28DC(void) { } -void fn_1_28E0(MpexDllUnkStruct2 *arg0, s32 arg1, Vec *arg2, float arg8, float arg9, float argA, s32 arg3, s32 arg4) +void fn_1_28E0(omObjData *arg0, s32 arg1, Vec arg2, float arg8, float arg9, float argA, s32 arg3, s32 arg4) { Vec sp4C; Vec sp40; @@ -386,17 +394,17 @@ void fn_1_28E0(MpexDllUnkStruct2 *arg0, s32 arg1, Vec *arg2, float arg8, float a s32 var_r28 = 0; s32 var_r26; - sp40.x = Hu3DData[arg0->unk_40[arg1]].pos.x; - sp40.y = Hu3DData[arg0->unk_40[arg1]].pos.y; - sp40.z = Hu3DData[arg0->unk_40[arg1]].pos.z; + sp40.x = Hu3DData[arg0->model[arg1]].pos.x; + sp40.y = Hu3DData[arg0->model[arg1]].pos.y; + sp40.z = Hu3DData[arg0->model[arg1]].pos.z; - sp34.x = arg2->x; - sp34.y = arg2->y; - sp34.z = arg2->z; + sp34.x = arg2.x; + sp34.y = arg2.y; + sp34.z = arg2.z; - sp1C.x = Hu3DData[arg0->unk_40[arg1]].rot.x; - sp1C.y = Hu3DData[arg0->unk_40[arg1]].rot.y; - sp1C.z = Hu3DData[arg0->unk_40[arg1]].rot.z; + sp1C.x = Hu3DData[arg0->model[arg1]].rot.x; + sp1C.y = Hu3DData[arg0->model[arg1]].rot.y; + sp1C.z = Hu3DData[arg0->model[arg1]].rot.z; sp10.x = 0.0f; sp10.y = arg8; @@ -466,15 +474,15 @@ void fn_1_28E0(MpexDllUnkStruct2 *arg0, s32 arg1, Vec *arg2, float arg8, float a if (arg4 != 0) { sp1C.y = fn_1_1B554(sp1C.y, sp28.y, argA); } - Hu3DModelPosSet(arg0->unk_40[arg1], sp4C.x, sp40.y, sp4C.z); - Hu3DModelRotSet(arg0->unk_40[arg1], sp1C.x, sp1C.y, sp1C.z); + Hu3DModelPosSet(arg0->model[arg1], sp4C.x, sp40.y, sp4C.z); + Hu3DModelRotSet(arg0->model[arg1], sp1C.x, sp1C.y, sp1C.z); if (var_r29 == 2 && var_r28 == 2) { break; } }; - sp1C.y = Hu3DData[arg0->unk_40[arg1]].rot.y; + sp1C.y = Hu3DData[arg0->model[arg1]].rot.y; if (arg4 != 0) { for (var_r26 = 0; var_r26 <= argA; var_r26++) { fn_1_1B7D0(1); @@ -495,7 +503,7 @@ void fn_1_28E0(MpexDllUnkStruct2 *arg0, s32 arg1, Vec *arg2, float arg8, float a } } sp10.z = fn_1_1B52C(sp1C.y, sp10.y, var_r26, argA); - Hu3DModelRotSet(arg0->unk_40[arg1], sp1C.x, sp10.z, sp1C.z); + Hu3DModelRotSet(arg0->model[arg1], sp1C.x, sp10.z, sp1C.z); } } } diff --git a/src/REL/mpexDll/mpex.c b/src/REL/mpexDll/mpex.c new file mode 100644 index 00000000..d8d8e422 --- /dev/null +++ b/src/REL/mpexDll/mpex.c @@ -0,0 +1,3500 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/board/main.h" +#include "game/chrman.h" +#include "game/esprite.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/saveload.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" +#include "string.h" + +#ifndef __MWERKS__ +#include "game/hsfex.h" +#include "stdio.h" +#endif + +#include "REL/mpexDll.h" + +typedef void (*MpexDllUnkFunc2)(omObjData *, ...); + +typedef struct MpexDllUnkStruct3 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ s32 unk_10; +} MpexDllUnkStruct3; /* size = 0x14 */ + +typedef struct MpexDllUnkStruct4 { + /* 0x00 */ omObjData *unk_00; + /* 0x04 */ MpexDllUnkFunc2 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ s32 unk_10; + /* 0x14 */ char unk14[0x14]; + /* 0x28 */ s32 unk_28; + /* 0x2C */ char unk2C[0x1C]; +} MpexDllUnkStruct4; /* size = 0x48 */ + +s32 rand8(void); +float fn_1_1B52C(float arg8, float arg9, float argA, float argB); +float fn_1_1B574(float arg0, float arg1, float arg2, float arg3); +float fn_1_1B64C(float arg0, float arg1, float arg2, float arg3); + +void fn_1_1015C(void); +void fn_1_10228(void); +void fn_1_10268(s32 arg0); +void fn_1_1045C(void); +void fn_1_107EC(void); +void fn_1_1085C(void); +void fn_1_10ABC(void); +void fn_1_10C30(void); +void fn_1_110F8(void); +void fn_1_114D4(void); +void fn_1_115A0(void); +void fn_1_115E0(s32 arg0); +void fn_1_117D4(void); +void fn_1_11930(void); +void fn_1_11984(void); +void fn_1_119E0(void); +void fn_1_11A3C(s32 arg0); +void fn_1_11E28(void); +void fn_1_11FC0(omObjData *object, MpexDllUnkStruct4 *arg1); +void fn_1_121E8(void); +void fn_1_125DC(float *arg0, s32 arg1); +void fn_1_32D8(void); +void fn_1_5D40(omObjData *arg0, MpexDllUnkStruct4 *arg1); +void fn_1_7D80(void); +void fn_1_7FC4(omObjData *arg0, MpexDllUnkStruct4 *arg1); +void fn_1_8320(void); +void fn_1_8ADC(void); +void fn_1_901C(omObjData *arg0, MpexDllUnkStruct4 *arg1); +void fn_1_9430(omObjData *arg0, MpexDllUnkStruct4 *arg1); +void fn_1_96B4(void); +void fn_1_A608(void); +void fn_1_AD34(void); +void fn_1_B004(void); +void fn_1_B210(void); +s32 fn_1_B248(s32 arg0, s32 arg1); +void fn_1_B2E4(s32 arg0); +void fn_1_B7F4(s32 arg0); +void fn_1_B870(s32 arg0); +void fn_1_B9A8(s32); +void fn_1_BC18(void); +void fn_1_BCD8(void); +u32 fn_1_BD10(s32 arg0, s32 arg1); +void fn_1_BD78(s32 arg0, s32 arg1); +void fn_1_C0DC(s32 arg0, s32); +void fn_1_C4D4(s32); +void fn_1_C544(void); +void fn_1_C860(void); +s32 fn_1_C898(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +void fn_1_CF10(s32 arg0); +void fn_1_D3AC(s32 arg0); +void fn_1_D468(s32 arg0); +void fn_1_D6AC(s32 arg0); +void fn_1_DBD0(s32 arg0); +void fn_1_E174(void); +void fn_1_E384(void); +void fn_1_E568(void); +void fn_1_EB1C(void); +void fn_1_ED78(s32 arg0, s32 arg1); +void fn_1_F0C0(void); +void fn_1_F40C(void); +void fn_1_F47C(void); +void fn_1_F730(void); +void fn_1_F8A4(void); +void fn_1_FDA0(void); + +s32 lbl_1_data_240[21] = { + 0x00000000, + 0x00000000, + 0x00000000, + 0xC37A0000, + 0x00000000, + 0x00000000, + 0x437A0000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x43FA0000, + 0x00000000, + 0xC47A0000, + 0x00000000, + 0x00000000, + 0x447A0000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x447A0000, + 0x00000000, +}; + +MpexDllUnkStruct4 lbl_1_bss_3F8; +MpexDllUnkStruct4 lbl_1_bss_3B0; +MpexDllUnkStruct4 lbl_1_bss_2D8[3]; +MpexDllUnkStruct4 lbl_1_bss_1B8[4]; +s32 lbl_1_bss_1B4; +s32 lbl_1_bss_1B0; +s32 lbl_1_bss_1AC; +s32 lbl_1_bss_180[0xB]; +MpexDllUnkStruct3 lbl_1_bss_130[4]; +char lbl_1_bss_120[16]; +char lbl_1_bss_118[8]; +char lbl_1_bss_110[8]; +s32 lbl_1_bss_10C; +s32 lbl_1_bss_108; +s32 lbl_1_bss_104; +char lbl_1_bss_FC[8]; +char lbl_1_bss_F4[8]; +char lbl_1_bss_EC[8]; +char lbl_1_bss_E4[8]; +s32 lbl_1_bss_E0; +s32 lbl_1_bss_C8[6]; +s32 lbl_1_bss_C4; +s32 lbl_1_bss_C0; +s32 lbl_1_bss_BC; +float lbl_1_bss_B8; +s32 lbl_1_bss_B4; +s32 lbl_1_bss_B0; +u32 lbl_1_bss_AC; +Process *lbl_1_bss_A8; + +Process *fn_1_3044(Process *arg0) +{ + s32 var_r31; + + lbl_1_bss_A8 = arg0; + if (omovlevtno == 0) { + mgGameStatBackup = GWGameStat; + } + fn_1_298(); + fn_1_374(); + fn_1_1B810(); + fn_1_910(fn_1_96B4); + lbl_1_bss_180[0] = 1; + lbl_1_bss_180[1] = 1; + lbl_1_bss_180[2] = GWMGAvailGet(omMgIndexGet(0x40) + 0x191); + lbl_1_bss_180[3] = GWMGAvailGet(omMgIndexGet(0xB) + 0x191); + lbl_1_bss_180[4] = GWMGAvailGet(omMgIndexGet(0x13) + 0x191); + lbl_1_bss_180[5] = 1; + lbl_1_bss_180[6] = 1; + lbl_1_bss_180[7] = 1; + lbl_1_bss_180[8] = 1; + lbl_1_bss_180[9] = GWMGAvailGet(omMgIndexGet(0x1B) + 0x191); + fn_1_121E8(); + for (var_r31 = 0; var_r31 < 0xA; var_r31++) { + if (lbl_1_bss_180[var_r31] == 0) { + break; + } + } + if (var_r31 == 0xA) { + lbl_1_bss_180[0xA] = 1; + } + else { + lbl_1_bss_180[0xA] = 0; + } + if (omovlevtno == 1) { + for (var_r31 = 0; var_r31 < 4; var_r31++) { + HuPrcChildCreate(fn_1_8320, 0x7D0, 0x2000, 0, HuPrcCurrentGet()); + } + } + HuPrcChildCreate(fn_1_7D80, 0x7D0, 0x2000, 0, HuPrcCurrentGet()); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuPrcChildCreate(fn_1_8ADC, 0x7D0, 0x2000, 0, HuPrcCurrentGet()); + } + fn_1_1264C(lbl_1_bss_A8); + + return HuPrcChildCreate(fn_1_32D8, 0x3E8, 0x2000, 0, HuPrcCurrentGet()); +} + +void fn_1_32D8(void) +{ + omObjData *var_r31; + + var_r31 = NULL; + var_r31 = omAddObjEx(lbl_1_bss_A8, 0x2000, 0x10, 0x10, -1, NULL); + lbl_1_bss_3F8.unk_00 = var_r31; + lbl_1_bss_3F8.unk_04 = (MpexDllUnkFunc2)fn_1_5D40; + while (TRUE) { + fn_1_1B7D0(1); + if (lbl_1_bss_3F8.unk_04 == NULL) { + continue; + } + lbl_1_bss_3F8.unk_04(lbl_1_bss_3F8.unk_00, &lbl_1_bss_3F8); + } +} + +void fn_1_3384(void) +{ + fn_1_1B7D0(0x1E); + HuAudFadeOut(0x3E8); + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, -1); + + while (WipeStatGet() != 0) { + fn_1_1B7D0(1); + } + HuAudAllStop(); + omOvlReturnEx(1, 1); + + while (TRUE) { + fn_1_1B7D0(1); + } +} + +void fn_1_33F8(void) +{ + s16 var_r31; + + if (SLSaveFlagGet() != 0) { + Hu3DAllKill(); + HuSprClose(); + HuSprInit(); + espInit(); + HuPrcVSleep(); + var_r31 = espEntry(0x860020, 0x1388, 0); + espPosSet(var_r31, 288.0f, 240.0f); + espAttrReset(var_r31, 4); + Hu3DBGColorSet(0, 0, 0); + WipeCreate(1, 0, 0xA); + + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + SLCommonSet(); + if (SLSave() == 0) { + GWSystem.save_mode = 1; + } + WipeCreate(2, 0, 0x14); + + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + } +} + +void fn_1_3508(void) +{ + s16 var_r31; + + fn_1_1B7D0(0x1E); + HuAudFadeOut(0x3E8); + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, -1); + + while (WipeStatGet() != 0) { + fn_1_1B7D0(1); + } + + HuAudAllStop(); + CharModelKill(-1); + MGSeqKillAll(); + if (omovlevtno != 0) { + fn_1_1B7D0(0x3C); + fn_1_33F8(); + } + mgQuitExtraF = 0; + omOvlReturnEx(1, 1); + + while (TRUE) { + fn_1_1B7D0(1); + } +} + +void fn_1_36A4(void) +{ + omOvlHisData *sp8; + + fn_1_1B7D0(0x1E); + HuAudSStreamAllFadeOut(0x3E8); + WipeColorSet(0xFF, 0xFF, 0xFF); + WipeCreate(2, 0, -1); + while (WipeStatGet() != 0) { + fn_1_1B7D0(1); + } + CharModelKill(-1); + MGSeqKillAll(); + sp8 = omOvlHisGet(0); + omOvlHisChg(0, OVL_MPEX, 2, 0); + mgQuitExtraF = 0; + omOvlCallEx(OVL_ZTAR, 1, 0, 0); + while (TRUE) { + fn_1_1B7D0(1); + } +} + +void fn_1_3758(s32 arg0, s32 arg1) +{ + s32 spC[10][3] = { + { 0x60, 0x01, 0x00 }, + { 0x61, 0x01, 0x01 }, + { 0x45, 0x01, 0x02 }, + { 0x3C, 0x01, 0x03 }, + { 0x3B, 0x01, 0x04 }, + { 0x32, 0x01, 0x05 }, + { 0x41, 0x01, 0x06 }, + { 0x42, 0x01, 0x07 }, + { 0x43, 0x01, 0x08 }, + { 0x44, 0x01, 0x09 }, + }; + omOvlHisData *sp8; + s32 var_r29; + + fn_1_1B7D0(0x1E); + HuAudSeqAllFadeOut(0x3E8); + HuAudSStreamAllFadeOut(0x3E8); + WipeColorSet(0xFF, 0xFF, 0xFF); + WipeCreate(2, 0, -1); + while (WipeStatGet() != 0) { + fn_1_1B7D0(1); + } + if (arg0 == 0 || arg0 == 1) { + var_r29 = (arg1 * 0xA) + 0xA; + BoardPartyConfigSet(0, 0, 0, var_r29, 0, 0, 0, 0); + BoardSaveInit(arg0 + 7); + spC[arg0][2] += (arg1 * 0xA); + } + else if (arg0 == 4) { + GWSystem.mg_type = arg1; + spC[arg0][2] += (arg1 * 0xA); + } + + sp8 = omOvlHisGet(0); + omOvlHisChg(0, OVL_MPEX, spC[arg0][1], spC[arg0][2]); + HuDataDirClose(DATA_MAKE_NUM(DATADIR_MPEX, 0x00)); + HuDataDirClose(0x150000); + CharModelKill(-1); + CharKill(-1); + CharARAMOpen(GWPlayerCfg[0].character); + CharARAMOpen(GWPlayerCfg[1].character); + CharARAMOpen(GWPlayerCfg[2].character); + CharARAMOpen(GWPlayerCfg[3].character); + HuAudAllStop(); + if (arg0 > 1) { + mgPracticeEnableF = 1; + } + mgQuitExtraF = 0; + omOvlCallEx(spC[arg0][0], 1, 0, 0); + while (TRUE) { + fn_1_1B7D0(1); + } +} + +s32 lbl_1_data_294 = -1; +s32 lbl_1_data_298 = -1; + +void fn_1_397C(void) +{ + if (omovlevtno != 2) { + lbl_1_data_298 = HuAudSeqPlay(0x2E); + } + WipeCreate(1, 0, -1); + while (WipeStatGet() != 0) { + fn_1_1B7D0(1); + } + fn_1_1B7D0(0x3C); +} + +void fn_1_39F4(void) +{ + fn_1_1B834(); + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 3, 0xF, 1); + fn_1_1BA78(0x330000, -1, -1); + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 1, 0xF, 1); + fn_1_1B9F4(); + fn_1_1B7D0(0x3C); + fn_1_1B834(); + fn_1_1BA78(0x330001, 5, -1); + if (fn_1_1BBA4(1) == 0) { + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 3, 0xF, 1); + fn_1_1BA78(0x330002, -1, -1); + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 1, 0xF, 1); + } + fn_1_1B9F4(); + fn_1_1B7D0(0x3C); +} + +void fn_1_3AF8(void) +{ + s16 var_r29; + s32 var_r30; + s32 var_r31; + + var_r31 = -1; + var_r30 = 0; + fn_1_1B834(); + while (TRUE) { + fn_1_1B7D0(1); + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 3, 0xF, 1); + fn_1_1BA78(0x330003, -1, -1); + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 1, 0xF, 1); + fn_1_1BF1C(0x33004C); + var_r31 = -1; + lbl_1_bss_3B0.unk_08 = 0; + lbl_1_bss_3B0.unk_04 = (MpexDllUnkFunc2)fn_1_11FC0; + while (TRUE) { + fn_1_1B7D0(1); + if (var_r31 != lbl_1_bss_3B0.unk_08) { + HuAudFXPlay(0); + fn_1_11A3C(var_r31); + var_r31 = lbl_1_bss_3B0.unk_08; + switch (lbl_1_bss_3B0.unk_08) { + case 0: + fn_1_1BA78(0x330005, -1, 1); + break; + case 1: + fn_1_1BA78(0x330012, -1, 1); + break; + case 2: + fn_1_1BA78(0x330023, -1, 1); + break; + } + } + if (HuPadBtnDown[0] & PAD_BUTTON_A) { + HuAudFXPlay(2); + var_r30 = 1; + break; + } + else if (HuPadBtnDown[0] & PAD_BUTTON_B) { + HuAudFXPlay(3); + var_r30 = 0; + break; + } + else { + if (lbl_1_bss_180[0xA] == 1) { + if (HuPadStkX[0] <= -0x1E) { + lbl_1_bss_3B0.unk_08 = 0; + } + else if (HuPadStkX[0] >= 0x1E) { + lbl_1_bss_3B0.unk_08 = 1; + } + else if (HuPadStkY[0] >= 0x1E) { + lbl_1_bss_3B0.unk_08 = 2; + } + else if ((HuPadStkY[0] <= -0x1E) && (lbl_1_bss_3B0.unk_08 == 2)) { + if (HuPadStkX[0] >= 5) { + lbl_1_bss_3B0.unk_08 = 1; + } + else { + lbl_1_bss_3B0.unk_08 = 0; + } + } + } + else if (HuPadStkX[0] <= -0x1E) { + lbl_1_bss_3B0.unk_08 = 0; + } + else if (HuPadStkX[0] >= 0x1E) { + lbl_1_bss_3B0.unk_08 = 1; + } + } + } + lbl_1_bss_3B0.unk_04 = NULL; + fn_1_1C120(); + if (var_r30 == 0) { + fn_1_11E28(); + fn_1_1BA78(0x330004, 5, -1); + if (fn_1_1BBA4(1) == 0) { + fn_1_1B9F4(); + fn_1_3508(); + } + continue; + } + break; + } + fn_1_11E28(); + fn_1_1B9F4(); + lbl_1_bss_1B4 = lbl_1_bss_3B0.unk_08; +} + +void fn_1_4014(void) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + lbl_1_bss_2D8[var_r31].unk_04 = (MpexDllUnkFunc2)fn_1_901C; + } + do { + fn_1_1B7D0(1); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + if (lbl_1_bss_2D8[var_r31].unk_04 != NULL) { + break; + } + } + } while (var_r31 != 3); +} + +void fn_1_40AC(void) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + lbl_1_bss_2D8[var_r31].unk_04 = (MpexDllUnkFunc2)fn_1_9430; + } + do { + fn_1_1B7D0(1); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + if (lbl_1_bss_2D8[var_r31].unk_04 != NULL) { + break; + } + } + } while (var_r31 != 3); +} + +s32 fn_1_4144(s32 arg0) +{ + s32 var_r31; + + var_r31 = 1; + var_r31 = fn_1_140B0(0, arg0); + return var_r31; +} + +s32 fn_1_4184(s32 arg0) +{ + s32 var_r31 = 0; + s32 var_r30 = -1; + if (arg0 == 0) { + fn_1_148BC(lbl_1_bss_1B4); + } + fn_1_F8A4(); + fn_1_1B834(); + if (lbl_1_data_294 == -1) { + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 3, 0xF, 1); + fn_1_1BA78(0x330007, -1, -1); + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 1, 0xF, 1); + } + else { + lbl_1_bss_3B0.unk_0C = lbl_1_data_294; + lbl_1_data_294 = -1; + } + fn_1_1B7D0(1); + fn_1_1BF1C(0x33004D); + fn_1_1015C(); + while (TRUE) { + fn_1_1B7D0(1); + if (var_r30 != lbl_1_bss_3B0.unk_0C) { + var_r30 = lbl_1_bss_3B0.unk_0C; + HuAudFXPlay(0); + if (lbl_1_bss_180[lbl_1_bss_3B0.unk_0C] == 1) { + fn_1_1BA78(lbl_1_bss_3B0.unk_0C + MAKE_MESSID(0x33, 0x08), -1, 1); + } + else { + fn_1_1BA78(0x33002E, -1, 1); + } + fn_1_1B7D0(1); + } + if (HuPadBtnDown[0] & PAD_BUTTON_A) { + if (lbl_1_bss_180[lbl_1_bss_3B0.unk_0C] == 1) { + HuAudFXPlay(2); + lbl_1_data_294 = lbl_1_bss_3B0.unk_0C; + var_r31 = 1; + break; + } + else { + HuAudFXPlay(4); + } + } + else if (HuPadBtnDown[0] & PAD_BUTTON_B) { + HuAudFXPlay(3); + var_r31 = 0; + break; + } + else { + if (HuPadStkY[0] >= 0x1E) { + fn_1_10268(-1); + } + else if (HuPadStkY[0] <= -0x1E) { + fn_1_10268(1); + } + } + } + fn_1_10228(); + fn_1_1C120(); + fn_1_1B9F4(); + fn_1_FDA0(); + if (var_r31 == 0) { + fn_1_148E4(lbl_1_bss_1B4); + } + lbl_1_bss_1B0 = lbl_1_bss_3B0.unk_0C; + return var_r31; +} + +s32 fn_1_444C(s32 arg0) +{ + s32 var_r31; + + var_r31 = 1; + if (arg0 == 0) { + lbl_1_bss_3B0.unk_10 = 0; + fn_1_D6AC(lbl_1_bss_1B0); + } + while (TRUE) { + fn_1_1B7D0(1); + if (HuPadBtnDown[0] & PAD_BUTTON_START) { + HuAudFXPlay(2); + var_r31 = 1; + break; + } + else if (HuPadBtnDown[0] & PAD_BUTTON_B) { + HuAudFXPlay(3); + var_r31 = 0; + break; + } + } + if (var_r31 == 0) { + fn_1_DBD0(lbl_1_bss_1B0); + } + return var_r31; +} + +s32 fn_1_4514(s32 arg0) +{ + s32 var_r31; + s32 var_r30; + + var_r31 = 1; + var_r30 = lbl_1_bss_3B0.unk_10; + if ((lbl_1_bss_1B0 == 0) || (lbl_1_bss_1B0 == 1) || (lbl_1_bss_1B0 == 4)) { + if (lbl_1_bss_1B0 == 4) { + fn_1_E568(); + } + else { + fn_1_E174(); + } + while (TRUE) { + fn_1_1B7D0(1); + if (lbl_1_bss_3B0.unk_10 != var_r30) { + HuAudFXPlay(0); + fn_1_ED78(lbl_1_bss_3B0.unk_10, var_r30); + var_r30 = lbl_1_bss_3B0.unk_10; + } + if (HuPadStkY[0] <= -0x1E) { + lbl_1_bss_3B0.unk_10++; + if (lbl_1_bss_3B0.unk_10 > 2) { + lbl_1_bss_3B0.unk_10 = 0; + } + continue; + } + if (HuPadStkY[0] >= 0x1E) { + lbl_1_bss_3B0.unk_10--; + if (lbl_1_bss_3B0.unk_10 < 0) { + lbl_1_bss_3B0.unk_10 = 2; + } + continue; + } + if (HuPadBtnDown[0] & PAD_BUTTON_START) { + HuAudFXPlay(2); + var_r31 = 1; + break; + } + else if (HuPadBtnDown[0] & PAD_BUTTON_B) { + HuAudFXPlay(3); + var_r31 = 0; + break; + } + } + lbl_1_bss_1AC = lbl_1_bss_3B0.unk_10; + } + else { + var_r31 = 1; + } + if (var_r31 == 0) { + if (lbl_1_bss_1B0 == 4) { + fn_1_EB1C(); + } + else { + fn_1_E384(); + } + } + return var_r31; +} + +s32 fn_1_4730(s32 arg0) +{ + s32 var_r31; + + var_r31 = 1; + var_r31 = fn_1_140B0(1, arg0); + return var_r31; +} + +s32 fn_1_4770(s32 arg0) +{ + s32 var_r31; + s32 var_r30; + + var_r30 = -1; + if (arg0 == 0) { + fn_1_148BC(lbl_1_bss_1B4); + } + fn_1_10C30(); + fn_1_1B834(); + if (lbl_1_data_294 == -1) { + HuAudFXPlay(0x4A); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 3, 0xF, 1); + fn_1_1BA78(0x330014, -1, -1); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 1, 0xF, 1); + } + else { + lbl_1_bss_3B0.unk_0C = lbl_1_data_294; + lbl_1_data_294 = -1; + } + fn_1_1B7D0(1); + fn_1_1BF1C(0x33004D); + fn_1_114D4(); + while (TRUE) { + fn_1_1B7D0(1); + if (var_r30 != lbl_1_bss_3B0.unk_0C) { + var_r30 = lbl_1_bss_3B0.unk_0C; + HuAudFXPlay(0); + if (lbl_1_bss_180[lbl_1_bss_3B0.unk_0C + 4] == 1) { + fn_1_1BA78(lbl_1_bss_3B0.unk_0C + 0x330015, -1, 1); + } + else { + fn_1_1BA78(0x33002E, -1, 1); + } + fn_1_1B7D0(1); + } + if (HuPadBtnDown[0] & PAD_BUTTON_A) { + if (lbl_1_bss_180[lbl_1_bss_3B0.unk_0C + 4] == 1) { + HuAudFXPlay(2); + lbl_1_data_294 = lbl_1_bss_3B0.unk_0C; + var_r31 = 1; + break; + } + else { + HuAudFXPlay(4); + } + } + else if (HuPadBtnDown[0] & PAD_BUTTON_B) { + HuAudFXPlay(3); + var_r31 = 0; + break; + } + else { + if (HuPadStkY[0] >= 0x1E) { + fn_1_115E0(-1); + } + else if (HuPadStkY[0] <= -0x1E) { + fn_1_115E0(1); + } + } + } + fn_1_115A0(); + fn_1_1C120(); + fn_1_1B9F4(); + fn_1_110F8(); + if (var_r31 == 0) { + fn_1_148E4(lbl_1_bss_1B4); + } + lbl_1_bss_1B0 = lbl_1_bss_3B0.unk_0C + (lbl_1_bss_1B4 * 4); + return var_r31; +} + +s32 fn_1_4A58(s32 arg0) +{ + s32 var_r31 = 1; + var_r31 = fn_1_444C(arg0); + return var_r31; +} + +s32 fn_1_4B3C(s32 arg0) +{ + s32 var_r31 = 1; + var_r31 = fn_1_4514(arg0); + return var_r31; +} + +s32 fn_1_4B78(s32 arg0) +{ + s32 var_r30; + + var_r30 = 1; + lbl_1_bss_1B0 = 0xA; + var_r30 = fn_1_444C(arg0); + return var_r30; +} + +void fn_1_4C6C(void) +{ + s32 var_r31; + + Hu3DModelPosSet(lbl_1_bss_2D8[0].unk_00->model[1], -400.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_2D8[1].unk_00->model[1], 1000.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_2D8[2].unk_00->model[1], 0.0f, 1000.0f, 0.0f); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + Hu3DModelPosSet(lbl_1_bss_1B8[var_r31].unk_00->model[1], -225.0f + (150.0f * var_r31), 0.0f, 0.0f); + Hu3DModelAttrReset(lbl_1_bss_1B8[var_r31].unk_00->model[1], 1); + } +} + +void fn_1_4DF8(void) +{ + s32 var_r31; + + Hu3DModelPosSet(lbl_1_bss_2D8[0].unk_00->model[1], 0.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_2D8[1].unk_00->model[1], 1000.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_2D8[2].unk_00->model[1], 0.0f, 1000.0f, 0.0f); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + Hu3DModelPosSet(lbl_1_bss_1B8[var_r31].unk_00->model[1], -225.0f + (150.0f * var_r31), 0.0f, 0.0f); + Hu3DModelAttrSet(lbl_1_bss_1B8[var_r31].unk_00->model[1], 1); + } +} + +void fn_1_4F84(void) +{ + s32 var_r31; + s32 var_r30; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_130[var_r31].unk_00 = GWPlayerCfg[var_r31].group; + lbl_1_bss_130[var_r31].unk_04 = GWPlayerCfg[var_r31].iscom; + lbl_1_bss_130[var_r31].unk_08 = GWPlayerCfg[var_r31].diff; + lbl_1_bss_130[var_r31].unk_0C = GWPlayerCfg[var_r31].character; + lbl_1_bss_130[var_r31].unk_10 = GWPlayerCfg[var_r31].pad_idx; + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (var_r30 == lbl_1_bss_130[var_r31].unk_10) { + GWPlayer[var_r30].team = GWPlayerCfg[var_r30].group = lbl_1_bss_130[var_r31].unk_00; + GWPlayer[var_r30].com = GWPlayerCfg[var_r30].iscom = lbl_1_bss_130[var_r31].unk_04; + GWPlayer[var_r30].diff = GWPlayerCfg[var_r30].diff = lbl_1_bss_130[var_r31].unk_08; + GWPlayer[var_r30].character = GWPlayerCfg[var_r30].character = lbl_1_bss_130[var_r31].unk_0C; + GWPlayer[var_r30].port = GWPlayerCfg[var_r30].pad_idx = lbl_1_bss_130[var_r31].unk_10; + break; + } + } + } +} + +s32 fn_1_5238(void) +{ + s32 var_r29 = 0; + if (lbl_1_bss_1B0 != 2) { + fn_1_A608(); + } + fn_1_4F84(); + fn_1_1B7D0(0x3C); + var_r29 = 0; + return var_r29; +} + +void fn_1_5530(void) +{ + Vec sp14 = { 0.0f, 0.0f, 0.0f }; + s32 var_r31; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_1B8[var_r31].unk_04 = (MpexDllUnkFunc2)fn_1_7FC4; + } + do { + fn_1_1B7D0(1); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (lbl_1_bss_1B8[var_r31].unk_04 != NULL) { + break; + } + } + } while (var_r31 != 4); + Hu3DModelAttrReset(lbl_1_bss_3B0.unk_00->model[5], 0x40000002); + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 2, 0xF, 1); + fn_1_28E0(lbl_1_bss_2D8[0].unk_00, 1, sp14, 0.0f, 9.0f, 0.0f, 1, 0); + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 1, 0xF, 1); + fn_1_1B7D0(0x3C); +} + +void fn_1_56B8(void) +{ + Hu3DModelPosSet(lbl_1_bss_2D8[0].unk_00->model[1], -1000.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_2D8[1].unk_00->model[1], -400.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_2D8[2].unk_00->model[1], 0.0f, 1000.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_1B8[0].unk_00->model[1], 0.0f, 0.0f, 0.0f); + Hu3DModelAttrReset(lbl_1_bss_1B8[0].unk_00->model[1], 1); +} + +s32 fn_1_57E0(void) +{ + s32 var_r31 = 0; + fn_1_AD34(); + fn_1_1B7D0(0x3C); + var_r31 = 0; + return var_r31; +} + +// similar to fn_1_5530 +void fn_1_581C(void) +{ + Vec sp14 = { 0.0f, 0.0f, 0.0f }; + + lbl_1_bss_1B8[0].unk_04 = (MpexDllUnkFunc2)fn_1_7FC4; + + do { + fn_1_1B7D0(1); + } while (lbl_1_bss_1B8[0].unk_04 != NULL); + + Hu3DModelAttrReset(lbl_1_bss_3B0.unk_00->model[5], 0x40000002); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 2, 0xF, 1); + fn_1_28E0(lbl_1_bss_2D8[1].unk_00, 1, sp14, 0.0f, 9.0f, 0.0f, 1, 0); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 1, 0xF, 1); + fn_1_1B7D0(0x3C); +} + +void fn_1_595C(void) +{ + fn_1_3508(); +} + +void fn_1_5AF8(void) +{ + s32 var_r31; + + Hu3DModelPosSet(lbl_1_bss_2D8[0].unk_00->model[1], 0.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_2D8[1].unk_00->model[1], 1000.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_2D8[2].unk_00->model[1], 0.0f, 1000.0f, 0.0f); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + Hu3DModelAttrSet(lbl_1_bss_1B8[var_r31].unk_00->model[1], 1); + } + fn_1_C544(); + fn_1_D468(lbl_1_bss_1B0); +} + +void fn_1_5C1C(void) +{ + s32 var_r31; + + Hu3DModelPosSet(lbl_1_bss_2D8[0].unk_00->model[1], -1000.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_2D8[1].unk_00->model[1], 0.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_2D8[2].unk_00->model[1], 0.0f, 1000.0f, 0.0f); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + Hu3DModelAttrSet(lbl_1_bss_1B8[var_r31].unk_00->model[1], 1); + } + fn_1_C544(); + fn_1_D468(lbl_1_bss_1B0); +} + +void fn_1_5D40(omObjData *object, MpexDllUnkStruct4 *arg1) +{ + s32 var_r31 = 0; + s32 var_r29 = 0; + s32 var_r30 = 0; + + if (omovlevtno == 1) { + lbl_1_bss_1B0 = omovlstat % 10; + if (lbl_1_bss_1B0 <= 3) { + lbl_1_bss_1B4 = 0; + } + else { + lbl_1_bss_1B4 = 1; + } + lbl_1_bss_1AC = omovlstat / 10; + if (mgQuitExtraF == 1) { + mgQuitExtraF = 0; + Hu3DMotionTimeSet(lbl_1_bss_3B0.unk_00->model[5], Hu3DMotionMotionMaxTimeGet(lbl_1_bss_3B0.unk_00->model[5]) - 5.0f); + if (lbl_1_bss_1B0 <= 3) { + fn_1_4F84(); + lbl_1_data_294 = lbl_1_bss_1B0; + fn_1_5AF8(); + var_r31 = 0x320; + } + else { + lbl_1_data_294 = lbl_1_bss_1B0 - 4; + fn_1_5C1C(); + var_r31 = 0x384; + } + } + else if (lbl_1_bss_1B0 <= 3) { + lbl_1_data_294 = lbl_1_bss_1B0; + if (lbl_1_bss_1B0 == 2) { + Hu3DMotionTimeSet(lbl_1_bss_3B0.unk_00->model[5], Hu3DMotionMotionMaxTimeGet(lbl_1_bss_3B0.unk_00->model[5]) - 5.0f); + fn_1_4DF8(); + var_r31 = 0x1FE; + } + else { + Hu3DMotionTimeSet(lbl_1_bss_3B0.unk_00->model[5], 33.0f); + fn_1_4C6C(); + var_r31 = 0x1F4; + } + } + else { + lbl_1_data_294 = lbl_1_bss_1B0 - 4; + Hu3DMotionTimeSet(lbl_1_bss_3B0.unk_00->model[5], 33.0f); + fn_1_56B8(); + var_r31 = 0x258; + } + } + else if (omovlevtno == 2) { + lbl_1_bss_1B0 = 0; + lbl_1_bss_1B4 = 0; + var_r31 = 1; + } + else { + var_r31 = 0; + } + while (TRUE) { + fn_1_1B7D0(1); + switch (var_r31) { + case 0x0: + fn_1_397C(); + fn_1_25C4(lbl_1_bss_3B0.unk_00, 5, 5, 0, 0); + fn_1_1B7D0(0x3C); + fn_1_39F4(); + var_r31 = 0x64; + break; + case 0x1: + Hu3DMotionTimeSet(lbl_1_bss_3B0.unk_00->model[5], Hu3DMotionMotionMaxTimeGet(lbl_1_bss_3B0.unk_00->model[5]) - 5.0f); + fn_1_397C(); + var_r31 = 0x64; + break; + case 0x64: + fn_1_117D4(); + fn_1_3AF8(); + fn_1_11930(); + var_r30 = 0; + var_r31 = 0x65; + break; + case 0x65: + fn_1_4014(); + + if (lbl_1_bss_1B4 == 2) { + var_r31 = (lbl_1_bss_1B4 * 0x64) + 0xC9; + } + else { + var_r31 = (lbl_1_bss_1B4 * 0x64) + 0xC8; + } + break; + case 0x66: + fn_1_40AC(); + var_r31 = 0x64; + break; + case 0xC8: + var_r29 = fn_1_4144(var_r30); + if (var_r29 != 0) { + var_r30 = 0; + var_r31 = 0xC9; + } + else { + var_r30 = 1; + var_r31 = 0x66; + } + break; + case 0xC9: + fn_1_F0C0(); + var_r29 = fn_1_4184(var_r30); + fn_1_F40C(); + if (var_r29 != 0) { + fn_1_C544(); + var_r30 = 0; + var_r31 = 0xCA; + } + else { + var_r30 = 1; + var_r31 = 0x66; + } + break; + case 0xCA: + var_r29 = fn_1_444C(var_r30); + if (var_r29 != 0) { + var_r30 = 0; + var_r31 = 0xCB; + } + else { + fn_1_C860(); + var_r30 = 1; + var_r31 = 0xC9; + } + break; + case 0xCB: + var_r29 = fn_1_4514(var_r30); + if (var_r29 != 0) { + var_r30 = 0; + var_r31 = 0xCC; + } + else { + var_r30 = 1; + var_r31 = 0xCA; + } + break; + case 0xCC: + fn_1_3758(lbl_1_bss_1B0, lbl_1_bss_1AC); + var_r31 = -1; + break; + case 0x12C: + var_r29 = fn_1_4730(var_r30); + if (var_r29 != 0) { + var_r30 = 0; + var_r31 = 0x12D; + } + else { + var_r30 = 1; + var_r31 = 0x66; + } + break; + case 0x12D: + fn_1_1045C(); + var_r29 = fn_1_4770(var_r30); + fn_1_107EC(); + if (var_r29 != 0) { + fn_1_C544(); + var_r30 = 0; + var_r31 = 0x12E; + } + else { + var_r30 = 1; + var_r31 = 0x66; + } + break; + case 0x12E: + var_r29 = fn_1_4A58(var_r30); + if (var_r29 != 0) { + var_r30 = 0; + var_r31 = 0x12F; + } + else { + fn_1_C860(); + var_r30 = 1; + var_r31 = 0x12D; + } + break; + case 0x12F: + var_r29 = fn_1_4B3C(var_r30); + if (var_r29 != 0) { + var_r30 = 0; + var_r31 = 0x130; + } + else { + var_r30 = 1; + var_r31 = 0x12E; + } + break; + case 0x130: + fn_1_3758(lbl_1_bss_1B0, lbl_1_bss_1AC); + var_r31 = -1; + continue; + case 0x191: + fn_1_C544(); + var_r29 = fn_1_4B78(var_r30); + if (var_r29 != 0) { + var_r30 = 0; + var_r31 = 0x192; + } + else { + fn_1_C860(); + var_r30 = 1; + var_r31 = 0x66; + } + break; + case 0x192: + fn_1_36A4(); + case 0x1F4: + fn_1_397C(); + var_r29 = fn_1_5238(); + if (var_r29 == 1) { + var_r31 = 0xCC; + } + else if (var_r29 == 0) { + var_r31 = 0x1F5; + } + else { + var_r31 = 0x2BC; + } + break; + case 0x1F5: + fn_1_5530(); + var_r31 = 0xC9; + break; + case 0x1FE: + fn_1_397C(); + var_r31 = 0xC9; + break; + case 0x258: + fn_1_397C(); + var_r29 = fn_1_57E0(); + if (var_r29 == 1) { + var_r31 = 0x130; + } + else if (var_r29 == 0) { + var_r31 = 0x259; + } + else { + var_r31 = 0x2BC; + } + break; + case 0x259: + fn_1_581C(); + var_r31 = 0x12D; + break; + case 0x2BC: + fn_1_3508(); + case 0x320: + fn_1_397C(); + var_r31 = 0xCA; + var_r30 = 1; + break; + case 0x384: + fn_1_397C(); + var_r31 = 0x12E; + var_r30 = 1; + break; + default: + break; + } + } +} + +void fn_1_7BC8(omObjData *object) +{ + s32 var_r30; + + object->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x00)); + object->motion[1] = Hu3DMotionIDGet(object->model[1]); + Hu3DModelShadowMapObjSet(object->model[1], "extra_ent_fix0-obj41"); + fn_1_25C4(object, 1, 1, 0, 1); + for (var_r30 = 0; var_r30 < 3; var_r30++) { + object->model[var_r30 + 1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x02)); + Hu3DModelAttrSet(object->model[var_r30 + 1], 1); + } + object->model[5] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x01)); + object->motion[5] = Hu3DMotionIDGet(object->model[5]); + Hu3DModelPosSet(object->model[5], 0.0f, 0.0f, 270.0f); + if (omovlevtno == 2) { + fn_1_25C4(object, 5, 5, 0, 0); + return; + } + if (omovlevtno == 1) { + Hu3DModelAttrSet(object->model[5], 0x40000002); + return; + } + fn_1_25C4(object, 5, 5, 0, 2); +} + +void fn_1_7D80(void) +{ + omObjData *var_r29; + omObjData *var_r31; + s32 var_r30; + + var_r29 = NULL; + var_r29 = omAddObjEx(lbl_1_bss_A8, 0x2000, 0x10, 0x10, -1, NULL); + lbl_1_bss_3B0.unk_00 = var_r29; + lbl_1_bss_3B0.unk_04 = NULL; + var_r31 = lbl_1_bss_3B0.unk_00; + fn_1_7BC8(var_r31); + while (TRUE) { + fn_1_1B7D0(1); + if (lbl_1_bss_3B0.unk_04 == NULL) { + continue; + } + lbl_1_bss_3B0.unk_04(lbl_1_bss_3B0.unk_00, &lbl_1_bss_3B0); + } +} + +void fn_1_7FC4(omObjData *object, MpexDllUnkStruct4 *arg1) +{ + Vec sp14 = { 700.0f, 0.0f, 0.0f }; + fn_1_1B7D0((4 - object->work[0]) * 5); + fn_1_25C4(object, 1, 2, 0xA, 1); + object->work[1] = 0; + while (object->work[1] <= 0xA) { + fn_1_1B7D0(1); + Hu3DData[object->model[1]].rot.y = fn_1_1B52C(0.0f, 90.0f, object->work[1], 10.0f); + object->work[1]++; + } + + fn_1_25C4(object, 1, 3, 0xA, 1); + fn_1_28E0(object, 1, sp14, 0.0f, 9.0f, 0.0f, 1, 0); + fn_1_25C4(object, 1, 1, 0xA, 1); + arg1->unk_04 = NULL; +} + +void fn_1_816C(omObjData *object, s32 arg1) +{ + s32 var_r30 = GWPlayerCfg[arg1].character; + object->model[1] = CharModelCreate(var_r30, 4); + object->motion[1] = CharModelMotionCreate(var_r30, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x00)); + object->motion[2] = CharModelMotionCreate(var_r30, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x02)); + object->motion[3] = CharModelMotionCreate(var_r30, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x03)); + object->motion[4] = CharModelMotionCreate(var_r30, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x48)); + object->motion[5] = CharModelMotionCreate(var_r30, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x49)); + Hu3DModelPosSet(object->model[1], -150.0f + (100.0f * arg1), 0.0f, 0.0f); + Hu3DModelShadowSet(object->model[1]); + Hu3DModelAttrSet(object->model[1], 1); + CharModelLayerSetAll2(2); + fn_1_25C4(object, 1, 1, 0, 1); + CharKill(var_r30); + object->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x02)); + Hu3DModelAttrSet(object->model[2], 1); +} + +void fn_1_8320(void) +{ + MpexDllUnkStruct4 *temp_r5; + omObjData *var_r28; + omObjData *var_r31; + s16 var_r29; + u32 var_r30; + + var_r30 = lbl_1_bss_AC; + lbl_1_bss_AC = var_r30 + 1; + var_r28 = NULL; + var_r28 = omAddObjEx(lbl_1_bss_A8, 0x2000, 0x10, 0x10, -1, NULL); + lbl_1_bss_1B8[var_r30].unk_00 = var_r28; + lbl_1_bss_1B8[var_r30].unk_04 = NULL; + lbl_1_bss_1B8[var_r30].unk_00->work[0] = var_r30; + var_r31 = lbl_1_bss_1B8[var_r30].unk_00; + fn_1_816C(var_r31, var_r30); + while (TRUE) { + fn_1_1B7D0(1); + if (lbl_1_bss_1B8[var_r30].unk_04 == NULL) { + continue; + } + lbl_1_bss_1B8[var_r30].unk_04(lbl_1_bss_1B8[var_r30].unk_00, &lbl_1_bss_1B8[var_r30]); + } +} + +void fn_1_85C4(omObjData *object) +{ + object->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x03)); + object->motion[1] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x04)); + object->motion[2] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x06)); + object->motion[3] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x06)); + object->motion[4] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x07)); + object->motion[5] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x08)); + Hu3DModelPosSet(object->model[1], -200.0f, 0.0f, 0.0f); + Hu3DModelShadowSet(object->model[1]); + CharModelEffectNpcInit(object->model[1], object->motion[2], 0, 0xF); + fn_1_25C4(object, 1, 1, 0, 1); +} + +void fn_1_8758(omObjData *object) +{ + object->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x09)); + object->motion[1] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x0A)); + object->motion[2] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x0B)); + object->motion[3] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x0C)); + object->motion[4] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x0D)); + object->motion[5] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x0E)); + Hu3DModelPosSet(object->model[1], 200.0f, 0.0f, 0.0f); + Hu3DModelShadowSet(object->model[1]); + CharModelEffectNpcInit(object->model[1], object->motion[2], 0, 0x10); + fn_1_25C4(object, 1, 1, 0, 1); +} + +void fn_1_88EC(omObjData *object) +{ + float var_f31; + + var_f31 = 0.0f; + var_f31 = fn_1_1B714(0.0f, 1.0f, object->work[3], 180.0f); + Hu3DData[object->model[1]].pos.y += var_f31; + if (object->work[3]++ >= 0xB4) { + object->work[3] -= 0xB4; + } +} + +void fn_1_89C4(omObjData *object) +{ + object->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x0F)); + object->motion[1] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x10)); + object->motion[3] = Hu3DJointMotionFile(object->model[1], DATA_MAKE_NUM(DATADIR_MPEX, 0x11)); + Hu3DModelPosSet(object->model[1], 0.0f, 400.0f, 0.0f); + if (lbl_1_bss_180[0xA] == 0) { + Hu3DModelAttrSet(object->model[1], 1); + } + fn_1_25C4(object, 1, 1, 0, 1); + object->func = fn_1_88EC; +} + +void fn_1_8ADC(void) +{ + omObjData *var_r31; + omObjData *var_r30; + omObjData *var_r29; + s32 var_r28; + omObjData *var_r27; + + var_r28 = lbl_1_bss_B0; + lbl_1_bss_B0 = var_r28 + 1; + var_r27 = NULL; + var_r27 = omAddObjEx(lbl_1_bss_A8, 0x2000, 0x10, 0x10, -1, NULL); + lbl_1_bss_2D8[var_r28].unk_00 = var_r27; + lbl_1_bss_2D8[var_r28].unk_04 = 0; + lbl_1_bss_2D8[var_r28].unk_00->work[0] = var_r28; + switch (var_r28) { + case 0: + var_r31 = lbl_1_bss_2D8[var_r28].unk_00; + fn_1_85C4(var_r31); + break; + case 1: + var_r30 = lbl_1_bss_2D8[var_r28].unk_00; + fn_1_8758(var_r30); + break; + case 2: + var_r29 = lbl_1_bss_2D8[var_r28].unk_00; + fn_1_89C4(var_r29); + break; + } + while (TRUE) { + fn_1_1B7D0(1); + if (lbl_1_bss_2D8[var_r28].unk_04 == NULL) { + continue; + } + lbl_1_bss_2D8[var_r28].unk_04(lbl_1_bss_2D8[var_r28].unk_00, &lbl_1_bss_2D8[var_r28]); + } +} + +void fn_1_901C(omObjData *object, MpexDllUnkStruct4 *arg1) +{ + float var_f31; + + s32 var_r30; + s32 *var_r29; + s32 *var_r28; + s32 *var_r27; + s32 *var_r26; + void *var_r25; + + Vec sp50 = { 0.0f, 0.0f, 0.0f }; + Vec sp44 = { -1000.0f, 0.0f, 0.0f }; + Vec sp38 = { 1000.0f, 0.0f, 0.0f }; + switch (object->work[0]) { + case 0: + fn_1_25C4(object, 1, 3, 0xF, 1); + if (lbl_1_bss_1B4 == 0) { + fn_1_28E0(object, 1, sp50, 0.0f, 9.0f, 0.0f, 1, 0); + } + else { + fn_1_28E0(object, 1, sp44, 0.0f, 9.0f, 0.0f, 1, 0); + } + fn_1_25C4(object, 1, 1, 0xF, 1); + break; + case 1: + fn_1_25C4(object, 1, 2, 0xF, 1); + if (lbl_1_bss_1B4 == 1) { + fn_1_28E0(object, 1, sp50, 0.0f, 9.0f, 0.0f, 1, 0); + } + else { + fn_1_28E0(object, 1, sp38, 0.0f, 9.0f, 0.0f, 1, 0); + } + fn_1_25C4(object, 1, 1, 0xF, 1); + break; + case 2: + if (lbl_1_bss_1B4 == 2) { + var_f31 = Hu3DData[object->model[1]].pos.y; + for (var_r30 = 0; var_r30 <= 0x78; var_r30++) { + fn_1_1B7D0(1); + Hu3DData[object->model[1]].pos.y = fn_1_1B64C(var_f31, 250.0f, var_r30, 120.0f); + } + } + else { + var_f31 = Hu3DData[object->model[1]].pos.y; + for (var_r30 = 0; var_r30 <= 0x78; var_r30++) { + fn_1_1B7D0(1); + Hu3DData[object->model[1]].pos.y = fn_1_1B64C(var_f31, 1000.0f, var_r30, 120.0f); + } + } + break; + } + arg1->unk_04 = 0; +} + +void fn_1_9430(omObjData *object, MpexDllUnkStruct4 *arg1) +{ + float var_f31; + s32 var_r30; + s32 *var_r29; + s32 *var_r28; + + Vec sp38 = { 0.0f, 0.0f, 0.0f }; + Vec sp2C = { -200.0f, 0.0f, 0.0f }; + Vec sp20 = { 200.0f, 0.0f, 0.0f }; + switch (object->work[0]) { + case 0: + fn_1_25C4(object, 1, 2, 0xF, 1); + fn_1_28E0(object, 1, sp2C, 0.0f, 9.0f, 0.0f, 1, 0); + fn_1_25C4(object, 1, 1, 0xF, 1); + break; + case 1: + fn_1_25C4(object, 1, 2, 0xF, 1); + fn_1_28E0(object, 1, sp20, 0.0f, 9.0f, 0.0f, 1, 0); + fn_1_25C4(object, 1, 1, 0xF, 1); + break; + case 2: + var_f31 = Hu3DData[object->model[1]].pos.y; + for (var_r30 = 0; var_r30 <= 0x78; var_r30++) { + fn_1_1B7D0(1); + Hu3DData[object->model[1]].pos.y = fn_1_1B574(var_f31, 400.0f, var_r30, 120.0f); + } + break; + } + arg1->unk_04 = 0; +} + +void fn_1_96B4(void) +{ + MpexDllUnkStruct *var_r31 = &lbl_1_bss_64; + var_r31->unk_08.x = 0.0f; + var_r31->unk_08.y = 165.0f; + var_r31->unk_08.z = 0.0f; + var_r31->unk_20.x = 0.0f; + var_r31->unk_20.y = 0.0f; + var_r31->unk_20.z = 0.0f; + var_r31->unk_38 = 1200.0f; +} + +s32 lbl_1_data_2B4[4] = { -1, -1, -1, -1 }; +s32 lbl_1_data_2C4 = -1; + +void fn_1_9740(s32 arg0) +{ + s32 spC[4]; + s32 var_r31; + s32 var_r30; + s32 var_r29; + + var_r29 = 0; + var_r30 = 0; + lbl_1_bss_B4 = 0; + lbl_1_data_2B4[0] = lbl_1_data_2B4[1] = lbl_1_data_2B4[2] = lbl_1_data_2B4[3] = -1; + for (var_r31 = 0; var_r31 < 4; var_r31++) { + spC[var_r31] = fn_1_B248(arg0, var_r31); + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (spC[var_r31] >= var_r30) { + var_r30 = spC[var_r31]; + } + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (var_r30 == spC[var_r31]) { + lbl_1_bss_B4++; + lbl_1_data_2B4[var_r29++] = var_r31; + } + } + lbl_1_data_2C4 = var_r30; +} + +void fn_1_9890(void) +{ + fn_1_1B834(); + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 3, 0xF, 1); + fn_1_1BA78(0x33000C, -1, -1); + fn_1_25C4(lbl_1_bss_2D8[0].unk_00, 1, 1, 0xF, 1); + fn_1_1B9F4(); +} + +void fn_1_9908(void) +{ + fn_1_1B834(); + HuAudFXPlay(0x4A); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 3, 0xF, 1); + fn_1_1BA78(0x33001B, -1, -1); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 1, 0xF, 1); + fn_1_1B9F4(); +} + +void fn_1_9988(s32 arg0) +{ + s32 var_r31; + u32 var_r30; + u32 var_r29; + + fn_1_1B834(); + if (((mgRecordExtra == 0) && (arg0 != 4)) || ((mgRecordExtra >= 0x8CA0) && (arg0 == 4))) { + HuAudFXPlay(0x4A); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 3, 0xF, 1); + fn_1_1BA78(arg0 + 0x330096, -1, -1); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 1, 0xF, 1); + } + else { + if ((arg0 == 4) || (arg0 == 8)) { + var_r31 = mgRecordExtra; + var_r30 = var_r31 / 36000; + var_r31 -= var_r30 * 36000; + var_r29 = var_r31 / 3600; + var_r31 -= var_r29 * 3600; + sprintf(lbl_1_bss_120, "%d", var_r29); + fn_1_1BB4C((u32)&lbl_1_bss_120, 0); + var_r30 = var_r31 / 600; + var_r31 -= var_r30 * 600; + var_r29 = var_r31 / 60; + var_r31 -= var_r29 * 60; + sprintf(lbl_1_bss_118, "%d%d", var_r30, var_r29); + fn_1_1BB4C((u32)lbl_1_bss_118, 1); + if (arg0 == 8) { + var_r31 = 1.6916666666666667 * (float)var_r31; + } + else { + var_r31 = 1.6666666666666667 * (float)var_r31; + } + var_r30 = var_r31 / 10; + var_r31 -= var_r30 * 0xA; + var_r29 = var_r31; + sprintf(lbl_1_bss_110, "%d%d", var_r30, var_r29); + fn_1_1BB4C((u32)lbl_1_bss_110, 2); + } + else { + sprintf(lbl_1_bss_110, "%d", mgRecordExtra); + fn_1_1BB4C((u32)lbl_1_bss_110, 0); + } + HuAudFXPlay(0x4A); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 3, 0xF, 1); + fn_1_1BA78(arg0 + 0x330018, -1, -1); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 1, 0xF, 1); + } + fn_1_1B9F4(); +} + +void fn_1_9CD4(s32 arg0) +{ + fn_1_1B834(); + fn_1_1BB4C(fn_1_BD10(arg0, mgRecordExtra), 3); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 3, 0xF, 1); + fn_1_1BA78(0x330090, -1, -1); + fn_1_25C4(lbl_1_bss_2D8[1].unk_00, 1, 1, 0xF, 1); + fn_1_1B9F4(); +} + +void fn_1_9D6C(void) +{ + fn_1_1B834(); + switch (lbl_1_bss_B4) { + case 1: + fn_1_1BB4C(GWPlayerCfg[lbl_1_data_2B4[0]].character, 0); + fn_1_1BA78(0x33000D, -1, -1); + break; + case 2: + fn_1_1BB4C(GWPlayerCfg[lbl_1_data_2B4[0]].character, 0); + fn_1_1BB4C(GWPlayerCfg[lbl_1_data_2B4[1]].character, 1); + fn_1_1BA78(0x33000E, -1, -1); + break; + case 3: + fn_1_1BB4C(GWPlayerCfg[lbl_1_data_2B4[0]].character, 0); + fn_1_1BB4C(GWPlayerCfg[lbl_1_data_2B4[1]].character, 1); + fn_1_1BB4C(GWPlayerCfg[lbl_1_data_2B4[2]].character, 2); + fn_1_1BA78(0x33000F, -1, -1); + break; + case 4: + fn_1_1BA78(0x330010, -1, -1); + break; + } + fn_1_1B9F4(); +} + +void fn_1_9F10(omObjData *object, MpexDllUnkStruct4 *arg1) +{ + float var_f31; + s32 var_r31; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_f31 = 30.0 * sind(8.0f * (lbl_1_bss_B8 + (var_r31 * 0x78))); + Hu3DModelPosSet(object->model[var_r31 + 1], -200.0f + (200.0f * var_r31), 850.0f, 0.0f); + Hu3DModelRotSet(object->model[var_r31 + 1], 0.0f, 0.0f, var_f31); + Hu3DModelScaleSet(object->model[var_r31 + 1], 1.5f, 2.0f, 1.5f); + } + lbl_1_bss_B8 += 0.5f; +} + +void fn_1_A0E4(omObjData *object, MpexDllUnkStruct4 *arg_1) +{ + float var_f31; + float var_f30; + s32 var_r30; + + Hu3DModelAttrReset(object->model[2], 1); + Hu3DModelTPLvlSet(object->model[2], 0.0f); + for (var_r30 = 0; var_r30 <= 0xF; var_r30++) { + fn_1_1B7D0(1); + var_f30 = fn_1_1B52C(0.0f, 0.5f, var_r30, 15.0f); + var_f31 = fn_1_1B52C(0.0f, 1.5f, var_r30, 15.0f); + Hu3DModelPosSet(object->model[2], Hu3DData[object->model[1]].pos.x, 850.0f, Hu3DData[object->model[1]].pos.z); + Hu3DModelScaleSet(object->model[2], var_f31, 2.0f, var_f31); + Hu3DModelTPLvlSet(object->model[2], var_f30); + } + arg_1->unk_04 = NULL; +} + +void fn_1_A2AC(omObjData *object, MpexDllUnkStruct4 *arg1) +{ + float var_f31; + s32 var_r30; + + for (var_r30 = 0; var_r30 <= 0xF; var_r30++) { + fn_1_1B7D0(1); + var_f31 = fn_1_1B52C(0.5f, 0.0f, var_r30, 15.0f); + Hu3DModelTPLvlSet(object->model[2], var_f31); + } + Hu3DModelAttrSet(object->model[2], 1); + Hu3DModelTPLvlSet(object->model[2], 0.0f); + arg1->unk_04 = NULL; +} + +void fn_1_A3A4(void) +{ + float var_f31; + s32 var_r31; + s32 var_r30; + + lbl_1_bss_3B0.unk_04 = (MpexDllUnkFunc2)fn_1_9F10; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + Hu3DModelAttrReset(lbl_1_bss_3B0.unk_00->model[var_r31 + 1], 1); + Hu3DModelTPLvlSet(lbl_1_bss_3B0.unk_00->model[var_r31 + 1], 0.0f); + } + for (var_r31 = 0; var_r31 <= 0x3C; var_r31++) { + fn_1_1B7D0(1); + var_f31 = fn_1_1B52C(0.0f, 0.5f, var_r31, 60.0f); + for (var_r30 = 0; var_r30 < 3; var_r30++) { + Hu3DModelTPLvlSet(lbl_1_bss_3B0.unk_00->model[var_r30 + 1], var_f31); + } + } + fn_1_1B7D0(0x5A); + for (var_r31 = 0; var_r31 <= 0x3C; var_r31++) { + fn_1_1B7D0(1); + var_f31 = fn_1_1B52C(0.5f, 0.0f, var_r31, 60.0f); + for (var_r30 = 0; var_r30 < 3; var_r30++) { + Hu3DModelTPLvlSet(lbl_1_bss_3B0.unk_00->model[var_r30 + 1], var_f31); + } + } + for (var_r31 = 0; var_r31 < 3; var_r31++) { + Hu3DModelAttrSet(lbl_1_bss_3B0.unk_00->model[var_r31 + 1], 1); + Hu3DModelTPLvlSet(lbl_1_bss_3B0.unk_00->model[var_r31 + 1], 0.0f); + } + lbl_1_bss_3B0.unk_04 = NULL; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_A608(void) +{ + s32 var_r31; + s32 var_r29; + + fn_1_9740(lbl_1_bss_1B0); + OSReport("CNT:%d, WIN:%d %d %d %d\n", lbl_1_bss_B4, lbl_1_data_2B4[0], lbl_1_data_2B4[1], lbl_1_data_2B4[2], lbl_1_data_2B4[3]); + fn_1_9890(); + if (lbl_1_data_298 != -1) { + HuAudSeqPause(lbl_1_data_298, 1, 0x1F4); + } + HuPrcChildCreate(fn_1_A3A4, 0x3E8, 0x1000, 0, HuPrcCurrentGet()); + fn_1_1B7D0(0xF); + HuAudFXPlay(0x9E); + fn_1_1B7D0(0xA5); + HuAudFXPlay(0x9F); + HuAudFXPlay(0xA8); + HuAudFXPlay(0x9A); + if (lbl_1_data_298 != -1) { + HuAudSeqPause(lbl_1_data_298, 0, 0x7D0); + } + if ((lbl_1_bss_B4 >= 1) && (lbl_1_data_2C4 != 0)) { + for (var_r31 = 0; var_r31 < lbl_1_bss_B4; var_r31++) { + lbl_1_bss_1B8[lbl_1_data_2B4[var_r31]].unk_04 = (MpexDllUnkFunc2)fn_1_A0E4; + OSReport("CNT:%d, WIN:%d %d %d %d\n", lbl_1_bss_B4, lbl_1_data_2B4[0], lbl_1_data_2B4[1], lbl_1_data_2B4[2], lbl_1_data_2B4[3]); + } + fn_1_9D6C(); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + for (var_r29 = 0; var_r29 < 4; var_r29++) { + if (var_r31 == lbl_1_data_2B4[var_r29]) { + fn_1_25C4(lbl_1_bss_1B8[var_r31].unk_00, 1, 4, 0xF, 0); + break; + } + } + if (var_r29 == 4) { + fn_1_25C4(lbl_1_bss_1B8[var_r31].unk_00, 1, 5, 0xF, 0); + } + } + } + else { + fn_1_1B834(); + fn_1_25C4(lbl_1_bss_2D8->unk_00, 1, 3, 0xF, 1); + fn_1_1BA78(lbl_1_bss_1B0 + MAKE_MESSID(0x33, 0x96), -1, -1); + fn_1_25C4(lbl_1_bss_2D8->unk_00, 1, 1, 0xF, 1); + fn_1_1B9F4(); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + fn_1_25C4(lbl_1_bss_1B8[var_r31].unk_00, 1, 5, 0xF, 0); + } + } + fn_1_1B7D0(0x3C); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + fn_1_25C4(lbl_1_bss_1B8[var_r31].unk_00, 1, 1, 0xF, 1); + } + fn_1_B004(); + fn_1_1B7D0(1); + fn_1_B870(lbl_1_bss_1B0); + fn_1_1B7D0(0x3C); + fn_1_1B7D0(0x3C); + fn_1_1BD00(0x240007, 1); + do { + fn_1_1B7D0(1); + } while ((HuPadBtnDown[0] & 0x100) == 0); + HuAudFXPlay(2); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_1B8[var_r31].unk_04 = (MpexDllUnkFunc2)fn_1_A2AC; + } + fn_1_1C120(); + fn_1_B9A8(lbl_1_bss_1B0); + fn_1_1B7D0(1); + fn_1_B210(); +} + +void fn_1_AD34(void) +{ + fn_1_9908(); + fn_1_1B7D0(0x3C); + fn_1_9988(lbl_1_bss_1B0); + if (lbl_1_data_298 != -1) { + HuAudSeqPause(lbl_1_data_298, 1, 0x1F4); + } + fn_1_1B7D0(0xF); + HuAudFXPlay(0x9E); + fn_1_1B7D0(0xA5); + lbl_1_bss_1B8[0].unk_04 = (MpexDllUnkFunc2)fn_1_A0E4; + if (((mgRecordExtra == 0) && (lbl_1_bss_1B0 != 4)) || ((mgRecordExtra >= 0x8CA0) && (lbl_1_bss_1B0 == 4))) { + fn_1_25C4(lbl_1_bss_1B8[0].unk_00, 1, 5, 0xF, 0); + } + else { + fn_1_25C4(lbl_1_bss_1B8[0].unk_00, 1, 4, 0xF, 0); + } + fn_1_BC18(); + fn_1_1B7D0(1); + HuAudFXPlay(0x9F); + HuAudFXPlay(0xA8); + HuAudFXPlay(0x9A); + if (lbl_1_data_298 != -1) { + HuAudSeqPause(lbl_1_data_298, 0, 0x7D0); + } + fn_1_C0DC(lbl_1_bss_1B0, rand8()); + fn_1_1B7D0(0x3C); + fn_1_25C4(lbl_1_bss_1B8[0].unk_00, 1, 1, 0xF, 1); + fn_1_9CD4(lbl_1_bss_1B0); + lbl_1_bss_1B8[0].unk_04 = (MpexDllUnkFunc2)fn_1_A2AC; + fn_1_C4D4(lbl_1_bss_1B0); + fn_1_1B7D0(1); + fn_1_BCD8(); +} + +void fn_1_B004(void) +{ + s32 var_r31; + s32 var_r30; + s32 var_r29; + AnimData *var_r28; + + var_r29 = HuSprGrpCreate(0x1B); + lbl_1_bss_10C = var_r29; + var_r30 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x37)), 0xBB8, 0); + HuSprGrpMemberSet(var_r29, 0, var_r30); + var_r30 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x38)), 0x7D0, 0); + HuSprGrpMemberSet(var_r29, 1, var_r30); + for (var_r31 = 0; var_r31 < 8; var_r31++) { + var_r30 = HuSprCreate(HuSprAnimReadFile(var_r31 + DATA_MAKE_NUM(DATADIR_MPEX, 0x3E)), 0x7D0, 0); + HuSprGrpMemberSet(var_r29, var_r31 + 2, var_r30); + } + var_r28 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x3B)); + for (var_r31 = 0; var_r31 < 0xC; var_r31++) { + var_r30 = HuSprCreate(var_r28, 0x384, 0); + HuSprGrpMemberSet(var_r29, var_r31 + 0xA, var_r30); + } + var_r28 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x3C)); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + var_r30 = HuSprCreate(var_r28, 0x384, 0); + HuSprGrpMemberSet(var_r29, var_r31 + 0x16, var_r30); + } + var_r30 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x3D)), 0x7D0, 0); + HuSprGrpMemberSet(var_r29, 0x1A, var_r30); + fn_1_B2E4(0); + fn_1_B7F4(0); +} + +void fn_1_B210(void) +{ + s32 var_r31; + + var_r31 = lbl_1_bss_10C; + HuSprGrpKill(var_r31); +} + +s32 fn_1_B248(s32 arg0, s32 arg1) +{ + s32 var_r31 = 0; + if (lbl_1_bss_1B0 <= 1) { + var_r31 = GWPlayer[arg1].coins; + } + else { + var_r31 = GWPlayerCoinWinGet(arg1); + OSReport("########## %d:%d\n", arg1, var_r31); + } + return var_r31; +} + +void fn_1_B2E4(s32 arg0) +{ + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r24; + + var_r30 = lbl_1_bss_10C; + for (var_r31 = 0; var_r31 < 0x1B; var_r31++) { + HuSprAttrSet(var_r30, var_r31, 4); + } + if (arg0 != -1) { + HuSprAttrReset(var_r30, 0, 4); + HuSprPosSet(var_r30, 0, 288.0f, 148.0f); + HuSprAttrReset(var_r30, 1, 4); + HuSprPosSet(var_r30, 1, 288.0f, 156.0f); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + HuSprAttrReset(var_r30, GWPlayerCfg[var_r31].character + 2, 4); + HuSprPosSet(var_r30, GWPlayerCfg[var_r31].character + 2, 201.0f, (var_r31 * 0x2A) + 0x60); + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + for (var_r29 = 0; var_r29 < 3; var_r29++) { + HuSprAttrReset(var_r30, 0xA + var_r29 + (var_r31 * 3), 4); + HuSprPosSet(var_r30, 0xA + var_r29 + (var_r31 * 3), (var_r29 * 0x1C) + 0xF7, (var_r31 * 0x2A) + 0x60); + } + var_r24 = fn_1_B248(0, var_r31); + var_r28 = var_r24 / 100; + if (var_r28 == 0) { + HuSprAttrSet(var_r30, (var_r31 * 3) + 0xA, 4); + } + HuSprBankSet(var_r30, (var_r31 * 3) + 0xA, var_r28); + var_r28 = (var_r24 % 100) / 10; + if ((var_r28 == 0) && ((var_r24 / 100) == 0)) { + HuSprAttrSet(var_r30, (var_r31 * 3) + 0xB, 4); + } + HuSprBankSet(var_r30, (var_r31 * 3) + 0xB, var_r28); + var_r28 = var_r24 % 10; + HuSprBankSet(var_r30, (var_r31 * 3) + 0xC, var_r28); + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + HuSprAttrReset(var_r30, var_r31 + 0x16, 4); + HuSprPosSet(var_r30, var_r31 + 0x16, 358.0f, (var_r31 * 0x2A) + 0x60); + switch (arg0) { + case 0: + case 1: + HuSprBankSet(var_r30, var_r31 + 0x16, 0); + break; + case 3: + HuSprBankSet(var_r30, var_r31 + 0x16, 1); + break; + case 2: + break; + } + } + HuSprAttrReset(var_r30, 0x1A, 4); + HuSprPosSet(var_r30, 0x1A, 288.0f, 55.0f); + switch (arg0) { + case 2: + break; + case 0: + HuSprBankSet(var_r30, 0x1A, 0); + break; + case 1: + HuSprBankSet(var_r30, 0x1A, 1); + break; + case 3: + HuSprBankSet(var_r30, 0x1A, 2); + break; + } + HuSprGrpPosSet(var_r30, 0.0f, -500.0f); + } + (void)var_r29; +} + +void fn_1_B7F4(s32 arg0) +{ + s32 var_r31; + s32 var_r30; + + var_r30 = lbl_1_bss_10C; + for (var_r31 = 0; var_r31 < 0x1B; var_r31++) { + HuSprAttrSet(var_r30, var_r31, 4); + } + HuSprGrpPosSet(var_r30, 0.0f, -500.0f); +} + +void fn_1_B870(s32 arg0) +{ + float var_f31; + s32 var_r31; + s32 var_r30 = lbl_1_bss_10C; + + fn_1_B2E4(arg0); + for (var_r31 = 0; var_r31 < 0x3C; var_r31++) { + fn_1_1B7D0(1); + if (var_r31 <= 0x32) { + var_f31 = fn_1_1B64C(-500.0f, 10.0f, var_r31, 50.0f); + } + else { + var_f31 = fn_1_1B574(10.0f, 0.0f, var_r31 - 0x32, 10.0f); + } + HuSprGrpPosSet(var_r30, 0.0f, var_f31); + } +} + +void fn_1_B9A8(s32 arg0) +{ + float var_f31; + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + + var_r28 = lbl_1_bss_10C; + for (var_r31 = 0; var_r31 < 0x3C; var_r31++) { + fn_1_1B7D0(1); + if (var_r31 <= 0xA) { + var_f31 = fn_1_1B64C(0.0f, 10.0f, var_r31, 10.0f); + } + else { + var_f31 = fn_1_1B574(10.0f, -500.0f, var_r31 - 0xA, 50.0f); + } + HuSprGrpPosSet(var_r28, 0.0f, var_f31); + } + var_r29 = lbl_1_bss_10C; + for (var_r30 = 0; var_r30 < 0x1B; var_r30++) { + HuSprAttrSet(var_r29, var_r30, 4); + } + HuSprGrpPosSet(var_r29, 0.0f, -500.0f); +} + +void fn_1_BB34(s32 arg0, s32 arg1) +{ + float sp10[2]; + s32 var_r31; + HuSprGrp *var_r30; + HuSprite *var_r29; + + var_r30 = &HuSprGrpData[winData[arg0].group]; + HuWinMesMaxSizeGet(1, sp10, arg1); + for (var_r31 = 0; var_r31 < var_r30->capacity; var_r31++) { + var_r29 = &HuSprData[var_r30->members[var_r31]]; + var_r29->x -= sp10[0] / 2; + var_r29->y -= 30.0f; + } +} + +void fn_1_BC18(void) +{ + s32 var_r31; + s32 var_r30 = HuSprGrpCreate(2); + + lbl_1_bss_108 = var_r30; + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x39)), 0xBB8, 0); + HuSprGrpMemberSet(var_r30, 0, var_r31); + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x3A)), 0x7D0, 0); + HuSprGrpMemberSet(var_r30, 1, var_r31); + fn_1_BD78(-1, 0); +} + +void fn_1_BCD8(void) +{ + s32 var_r31 = lbl_1_bss_108; + HuSprGrpKill(var_r31); +} + +u32 fn_1_BD10(s32 arg0, s32 arg1) +{ + s32 var_r31 = fn_1_C898(arg1, arg0, lbl_1_bss_1AC, 0); + return ((arg0 - 4) * 0xA) + MAKE_MESSID(0x33, 0x00) + var_r31 + 0x51; +} + +void fn_1_BD78(s32 arg0, s32 arg1) +{ + float sp10[2]; + s32 var_r31; + s32 var_r30; + u32 var_r25; + + var_r31 = lbl_1_bss_108; + for (var_r30 = 0; var_r30 < 2; var_r30++) { + HuSprAttrSet(var_r31, var_r30, 4); + } + if (arg0 != -1) { + HuSprAttrReset(var_r31, 0, 4); + HuSprAttrReset(var_r31, 1, 4); + HuSprBankSet(var_r31, 1, arg0 - 4); + HuSprGrpPosSet(var_r31, 288.0f, 100.0f); + HuSprGrpScaleSet(var_r31, 0.0f, 0.0f); + OSReport("#################### SCORE(%d-%d) : %d\n", arg0, lbl_1_bss_1AC, mgRecordExtra); + var_r25 = fn_1_BD10(arg0, mgRecordExtra); + HuWinMesMaxSizeGet(1, sp10, var_r25); + lbl_1_bss_104 = HuWinCreate(0.0f, 0.0f, sp10[0], sp10[1], 0); + HuWinBGTPLvlSet(lbl_1_bss_104, 0.0f); + HuWinMesSpeedSet(lbl_1_bss_104, 0); + HuWinDispOn(lbl_1_bss_104); + fn_1_BB34(lbl_1_bss_104, var_r25); + HuWinMesSet(lbl_1_bss_104, var_r25); + HuWinPosSet(lbl_1_bss_104, 296.0f, 100.0f); + } +} + +void fn_1_C06C(void) +{ + s32 var_r31; + s32 var_r30 = lbl_1_bss_108; + for (var_r31 = 0; var_r31 < 2; var_r31++) { + HuSprAttrSet(var_r30, var_r31, 4); + } + HuWinKill(lbl_1_bss_104); +} + +void fn_1_C0DC(s32 arg0, s32 arg1) +{ + float var_f31; + float var_f30; + s32 var_r30; + s32 var_r24; + s32 var_r22; + + var_r30 = 0; + var_r22 = lbl_1_bss_108; + var_f30 = 1.5f; + fn_1_BD78(arg0, arg1); + for (var_r24 = 0; var_r24 < 0xA; var_r24++) { + fn_1_1B7D0(1); + var_f31 = fn_1_1B64C(var_f30, 1.0f, var_r30, 5.0f); + if (++var_r30 == 5) { + if (var_f30 > 1.0f) { + var_f30 -= 0.1f; + } + var_r30 = 0; + } + HuSprGrpScaleSet(var_r22, var_f31, var_f31); + HuWinScaleSet(lbl_1_bss_104, var_f31, var_f31); + } +} + +void fn_1_C4D4(s32 arg0) +{ + fn_1_C06C(); +} + +s32 lbl_1_data_324 = 0xFFFFFFFF; +s32 lbl_1_data_328 = -1; +s32 lbl_1_data_32C[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + +void fn_1_C544(void) +{ + s32 var_r31; + s32 var_r30; + s32 var_r29; + AnimData *var_r28; + + var_r29 = HuSprGrpCreate(0x25); + lbl_1_data_324 = var_r29; + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x1B)), 0x1388, 0); + HuSprGrpMemberSet(var_r29, 0, var_r31); + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x1C)), 0x1388, 0); + HuSprGrpMemberSet(var_r29, 0x23, var_r31); + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x1D)), 0x7D0, 0); + HuSprGrpMemberSet(var_r29, 1, var_r31); + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x1E)), 0x7D0, 0); + HuSprGrpMemberSet(var_r29, 2, var_r31); + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x1F)), 0x7D0, 0); + HuSprGrpMemberSet(var_r29, 3, var_r31); + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x20)), 0x76C, 0); + HuSprGrpMemberSet(var_r29, 4, var_r31); + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x21)), 0x834, 0); + HuSprGrpMemberSet(var_r29, 6, var_r31); + for (var_r30 = 0; var_r30 < 3; var_r30++) { + var_r31 = HuSprCreate(HuSprAnimReadFile(var_r30 + DATA_MAKE_NUM(DATADIR_MPEX, 0x2F)), 0xA, 0); + HuSprGrpMemberSet(var_r29, var_r30 + 7, var_r31); + } + for (var_r30 = 0; var_r30 < 3; var_r30++) { + var_r31 = HuSprCreate(HuSprAnimReadFile(var_r30 + DATA_MAKE_NUM(DATADIR_MPEX, 0x32)), 0xA, 0); + HuSprGrpMemberSet(var_r29, var_r30 + 0xA, var_r31); + } + var_r28 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x35)); + for (var_r30 = 0; var_r30 < 0x15; var_r30++) { + var_r31 = HuSprCreate(var_r28, 9, 0); + HuSprGrpMemberSet(var_r29, var_r30 + 0xD, var_r31); + } + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x15)), 8, 0); + HuSprGrpMemberSet(var_r29, 0x22, var_r31); + fn_1_CF10(-1); + fn_1_D3AC(-1); +} + +void fn_1_C860(void) +{ + s32 var_r31 = lbl_1_data_324; + HuSprGrpKill(var_r31); +} + +s32 fn_1_C898(s32 arg0, s32 arg1, s32 arg2, s32 arg3) +{ + s32 sp88[5][9] = { + { 0x64, 0xC8, 0x12C, 0x136, 0x140, 0x14A, 0x154, 0x15E, 0x168 }, + { 0x05, 0x0A, 0x0F, 0x14, 0x19, 0x1E, 0x23, 0x28, 0x32 }, + { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 }, + { 0xE10, 0x1C20, 0x2A30, 0x3840, 0x4650, 0x5460, 0x6270, 0x7080, 0x7E90 }, + { 0x0A, 0x14, 0x1E, 0x23, 0x28, 0x2D, 0x32, 0x35, 0x37 }, + }; + s32 sp1C[3][9] = { + { 0x4650, 0x3840, 0x2A30, 0x1C20, 0x0E10, 0, 0, 0, 0 }, + { 0x4650, 0x3840, 0x2A30, 0x1C20, 0x1770, 0x12C0, 0x0E10, 0, 0 }, + { 0x4650, 0x3840, 0x2A30, 0x2328, 0x1C20, 0x19C8, 0x1770, 0x1644, 0x1518 }, + }; + s32 sp10[3]; + s32 var_r31; + s32 var_r30; + + if (arg1 >= 5) { + for (var_r31 = 0; var_r31 < 9; var_r31++) { + if (arg0 < sp88[arg1 - 5][var_r31]) { + break; + } + } + } + else if (arg3 != 0) { + for (var_r30 = 0; var_r30 < 3; var_r30++) { + OSReport("#################### HI-SCORE(%d-%d) : %d\n", arg1, var_r30, GWGameStat.mg_record[var_r30 + 6]); + arg0 = GWGameStat.mg_record[var_r30 + 6]; + for (var_r31 = 0; var_r31 < 9; var_r31++) { + if (arg0 >= sp1C[var_r30][var_r31]) { + break; + } + } + sp10[var_r30] = var_r31; + } + if (sp10[0] <= sp10[1]) { + var_r31 = sp10[1]; + } + else { + var_r31 = sp10[0]; + } + if (var_r31 <= sp10[2]) { + var_r31 = sp10[2]; + } + } + else { + for (var_r31 = 0; var_r31 < 9; var_r31++) { + if (arg0 >= sp1C[arg2][var_r31]) { + break; + } + } + } + return var_r31; +} + +void fn_1_CA98(s32 arg0, u32 arg1) +{ + s32 sp8[11] = { + 0xFFFFFFFF, + 0xFFFFFFFF, + 0xFFFFFFFF, + 0x00000009, + 0xFFFFFFFF, + 0x00000004, + 0x0000000B, + 0x0000000C, + 0x0000000D, + 0x0000000E, + 0xFFFFFFFF, + }; + s32 var_r31; + u32 var_r29; + u32 var_r28; + + switch (arg1) { + case 0: + case 1: + case 2: + case 10: + break; + case 4: + var_r31 = fn_1_C898(-1, arg1, 0, 1); + HuWinInsertMesSet(arg0, ((arg1 - 4) * 0xA) + 0x330000 + var_r31 + 0x51, 3); + break; + case 5: + case 6: + case 7: + case 9: + var_r31 = fn_1_C898(GWGameStat.mg_record[sp8[arg1]], arg1, 0, 0); + HuWinInsertMesSet(arg0, ((arg1 - 4) * 0xA) + 0x330000 + var_r31 + 0x51, 3); + case 3: + OSReport("#################### HI-SCORE(%d) : %d\n", arg1, GWGameStat.mg_record[sp8[arg1]]); + var_r31 = GWGameStat.mg_record[sp8[arg1]]; + if (var_r31 < 0xA) { + sprintf(lbl_1_bss_FC, " %d", var_r31); + } + else if (var_r31 < 0x64) { + sprintf(lbl_1_bss_FC, " %d", var_r31); + } + else { + sprintf(lbl_1_bss_FC, "%d", var_r31); + } + HuWinInsertMesSet(arg0, (u32)lbl_1_bss_FC, 0); + break; + case 8: + OSReport("#################### HI-SCORE(%d) : %d\n", arg1, GWGameStat.mg_record[sp8[arg1]]); + var_r31 = GWGameStat.mg_record[sp8[arg1]]; + var_r29 = var_r31 / 36000; + var_r31 -= var_r29 * 36000; + var_r28 = var_r31 / 3600; + var_r31 -= var_r28 * 3600; + sprintf(lbl_1_bss_F4, " %d", var_r28); + HuWinInsertMesSet(arg0, (u32)lbl_1_bss_F4, 0); + var_r29 = var_r31 / 600; + var_r31 -= var_r29 * 600; + var_r28 = var_r31 / 60; + var_r31 -= var_r28 * 60; + sprintf(lbl_1_bss_EC, "%d%d", var_r29, var_r28); + HuWinInsertMesSet(arg0, (u32)lbl_1_bss_EC, 1); + var_r31 = 1.6916666666666667 * (float)var_r31; + var_r29 = var_r31 / 10; + var_r31 -= var_r29 * 0xA; + var_r28 = var_r31; + if (GWGameStat.mg_record[sp8[arg1]] >= 0x8C9F) { + sprintf(lbl_1_bss_E4, "99"); + } + else { + sprintf(lbl_1_bss_E4, "%d%d", var_r29, var_r28); + } + HuWinInsertMesSet(arg0, (u32)lbl_1_bss_E4, 2); + var_r31 = fn_1_C898(GWGameStat.mg_record[sp8[arg1]], arg1, 0, 0); + HuWinInsertMesSet(arg0, ((arg1 - 4) * 0xA) + 0x330000 + var_r31 + 0x51, 3); + break; + default: + break; + } +} + +void fn_1_CF10(s32 arg0) +{ + s32 var_r31; + s32 var_r30; + s32 var_r28; + + var_r31 = lbl_1_data_324; + for (var_r30 = 0; var_r30 < 0x25; var_r30++) { + HuSprAttrSet(var_r31, var_r30, 4); + } + if (arg0 != -1) { + s32 sp8[11][4] = { + { 0x00370000, 0x00370001, 0x00370002, 0x0017003E }, + { 0x00370003, 0x00370004, 0x00370005, 0x0017003F }, + { 0x00370006, 0x00370007, 0x00370008, 0x0017003D }, + { 0x00370009, 0x0037000A, 0x0037000B, 0x00170034 }, + { 0x0037000C, 0x0037000D, 0x0037000E, 0x00170033 }, + { 0x0037000F, 0x00370010, 0x00370011, 0x0017002A }, + { 0x00370012, 0x00370013, 0x00370014, 0x00170039 }, + { 0x00370015, 0x00370016, 0x00370017, 0x0017003A }, + { 0x00370018, 0x00370019, 0x0037001A, 0x0017003B }, + { 0x0037001B, 0x0037001C, 0x0037001D, 0x0017003C }, + { 0x0037001E, 0x0037001F, 0x00370020, 0x00170021 }, + }; + var_r28 = HuSprCreate(HuSprAnimReadFile(arg0 + DATA_MAKE_NUM(DATADIR_MPEX, 0x22)), 0x7D0, 0); + HuSprGrpMemberSet(var_r31, 5, var_r28); + lbl_1_data_328 = fn_1_1D02C(sp8[arg0][3]); + HuSprGrpPosSet(lbl_1_data_328, 288.0f, -437.0f); + for (var_r30 = 0; var_r30 < 3; var_r30++) { + lbl_1_data_32C[var_r30] = HuWinCreate(0.0f, 0.0f, 0x136, 0x78, 0); + HuWinBGTPLvlSet(lbl_1_data_32C[var_r30], 0.0f); + HuWinMesSpeedSet(lbl_1_data_32C[var_r30], 0); + HuWinDispOn(lbl_1_data_32C[var_r30]); + if (sp8[arg0][var_r30] != -1) { + if (var_r30 == 2) { + fn_1_CA98(lbl_1_data_32C[2], arg0); + } + HuWinMesSet(lbl_1_data_32C[var_r30], sp8[arg0][var_r30]); + } + HuWinPosSet(lbl_1_data_32C[var_r30], -485.0f, (var_r30 << 7) + 0x70); + } + if (arg0 != 0xA) { + HuSprAttrReset(var_r31, 0, 4); + HuSprPosSet(var_r31, 0, 288.0f, 240.0f); + HuSprTPLvlSet(var_r31, 0, 0.0f); + } + else { + HuSprAttrReset(var_r31, 0x23, 4); + HuSprPosSet(var_r31, 0x23, 288.0f, 240.0f); + HuSprTPLvlSet(var_r31, 0x23, 0.0f); + } + HuSprAttrReset(var_r31, 1, 4); + HuSprPosSet(var_r31, 1, -331.0f, 272.0f); + HuSprAttrReset(var_r31, 2, 4); + HuSprPosSet(var_r31, 2, 452.0f, 911.0f); + HuSprAttrReset(var_r31, 3, 4); + HuSprPosSet(var_r31, 3, 288.0f, -437.0f); + HuSprAttrReset(var_r31, 4, 4); + HuSprPosSet(var_r31, 4, 952.0f, 212.0f); + HuSprAttrReset(var_r31, 5, 4); + HuSprPosSet(var_r31, 5, 952.0f, 212.0f); + HuSprScaleSet(var_r31, 5, 0.5f, 0.5f); + HuSprAttrReset(var_r31, 6, 4); + HuSprPosSet(var_r31, 6, 952.0f, 212.0f); + } +} + +void fn_1_D3AC(s32 arg0) +{ + s32 var_r31; + s32 var_r30; + + var_r30 = lbl_1_data_324; + for (var_r31 = 0; var_r31 < 0x25; var_r31++) { + HuSprAttrSet(var_r30, var_r31, 4); + } + if (arg0 != -1) { + HuSprGrpMemberKill(var_r30, 5); + HuSprGrpKill(lbl_1_data_328); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuWinKill(lbl_1_data_32C[var_r31]); + } + } +} + +void fn_1_D468(s32 arg0) +{ + s32 var_r28; + s32 var_r30; + s32 var_r31; + + var_r31 = lbl_1_data_324; + fn_1_CF10(arg0); + if (arg0 != 0xA) { + HuSprTPLvlSet(var_r31, 0, 1.0f); + } + else { + HuSprTPLvlSet(var_r31, 0x23, 1.0f); + } + HuSprPosSet(var_r31, 3, 288.0f, 63.0f); + HuSprGrpPosSet(lbl_1_data_328, 288.0f, 63.0f); + HuSprPosSet(var_r31, 1, 169.0f, 272.0f); + for (var_r30 = 0; var_r30 < 3; var_r30++) { + HuWinPosSet(lbl_1_data_32C[var_r30], 14.0f, (var_r30 << 7) + 0x70); + } + HuSprPosSet(var_r31, 4, 452.0f, 212.0f); + HuSprPosSet(var_r31, 5, 452.0f, 212.0f); + HuSprPosSet(var_r31, 6, 452.0f, 212.0f); + HuSprPosSet(var_r31, 2, 452.0f, 411.0f); + var_r28 = lbl_1_bss_63C[2]; + if (arg0 <= 3) { + fn_1_1A5A4(0); + } + else { + fn_1_1A5A4(1); + } + HuSprGrpPosSet(var_r28, 452.0f, 355.0f); +} + +void fn_1_D6AC(s32 arg0) +{ + float var_f31; + float var_f30; + float var_f29; + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r26; + + var_r30 = lbl_1_data_324; + fn_1_CF10(arg0); + for (var_r31 = 0; var_r31 <= 0x1E; var_r31++) { + fn_1_1B7D0(1); + var_f31 = fn_1_1B64C(0.0f, 1.0f, var_r31, 30.0f); + if (arg0 != 0xA) { + HuSprTPLvlSet(var_r30, 0, var_f31); + } + else { + HuSprTPLvlSet(var_r30, 0x23, var_f31); + } + } + if (arg0 != 0xA) { + HuSprTPLvlSet(var_r30, 0, 1.0f); + } + else { + HuSprTPLvlSet(var_r30, 0x23, 1.0f); + } + for (var_r31 = 0; var_r31 <= 0x1E; var_r31++) { + fn_1_1B7D0(1); + var_r29 = fn_1_1B64C(-500.0f, 0.0f, var_r31, 30.0f); + HuSprPosSet(var_r30, 3, 288.0f, var_r29 + 0x3F); + HuSprGrpPosSet(lbl_1_data_328, 288.0f, var_r29 + 0x3F); + HuSprPosSet(var_r30, 1, var_r29 + 0xA9, 272.0f); + for (var_r28 = 0; var_r28 < 3; var_r28++) { + HuWinPosSet(lbl_1_data_32C[var_r28], var_r29 + 0xE, (var_r28 << 7) + 0x70); + } + var_r29 = fn_1_1B64C(500.0f, 0.0f, var_r31, 30.0f); + HuSprPosSet(var_r30, 4, var_r29 + 0x1C4, 212.0f); + HuSprPosSet(var_r30, 5, var_r29 + 0x1C4, 212.0f); + HuSprPosSet(var_r30, 6, var_r29 + 0x1C4, 212.0f); + HuSprPosSet(var_r30, 2, 452.0f, var_r29 + 0x19B); + if (arg0 != 0xA) { + var_r26 = lbl_1_bss_63C[2]; + var_f30 = fn_1_1B64C(112.0f, 452.0f, var_r31, 30.0f); + var_f29 = fn_1_1B64C(72.0f, 355.0f, var_r31, 30.0f); + HuSprGrpPosSet(var_r26, var_f30, var_f29); + } + } +} + +void fn_1_DBD0(s32 arg0) +{ + float var_f31; + float var_f30; + float var_f29; + + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r25; + s32 var_r24; + + var_r30 = lbl_1_data_324; + for (var_r31 = 0; var_r31 <= 0x1E; var_r31++) { + fn_1_1B7D0(1); + var_r29 = fn_1_1B574(0.0f, -500.0f, var_r31, 30.0f); + HuSprPosSet(var_r30, 3, 288.0f, var_r29 + 0x3F); + HuSprGrpPosSet(lbl_1_data_328, 288.0f, var_r29 + 0x3F); + HuSprPosSet(var_r30, 1, var_r29 + 0xA9, 272.0f); + for (var_r27 = 0; var_r27 < 3; var_r27++) { + HuWinPosSet(lbl_1_data_32C[var_r27], var_r29 + 0xE, (var_r27 << 7) + 0x70); + } + var_r29 = fn_1_1B574(0.0f, 500.0f, var_r31, 30.0f); + HuSprPosSet(var_r30, 4, var_r29 + 0x1C4, 212.0f); + HuSprPosSet(var_r30, 5, var_r29 + 0x1C4, 212.0f); + HuSprPosSet(var_r30, 6, var_r29 + 0x1C4, 212.0f); + HuSprPosSet(var_r30, 2, 452.0f, var_r29 + 0x19B); + if (arg0 != 0xA) { + var_r24 = lbl_1_bss_63C[2]; + var_f30 = fn_1_1B574(452.0f, 112.0f, var_r31, 30.0f); + var_f29 = fn_1_1B574(355.0f, 72.0f, var_r31, 30.0f); + HuSprGrpPosSet(var_r24, var_f30, var_f29); + } + } + for (var_r31 = 0; var_r31 <= 0x1E; var_r31++) { + fn_1_1B7D0(1); + var_f31 = fn_1_1B574(1.0f, 0.0f, var_r31, 30.0f); + if (arg0 != 0xA) { + HuSprTPLvlSet(var_r30, 0, var_f31); + } + else { + HuSprTPLvlSet(var_r30, 0x23, var_f31); + } + } + if (arg0 != 0xA) { + HuSprTPLvlSet(var_r30, 0, 0.0f); + } + else { + HuSprTPLvlSet(var_r30, 0x23, 0.0f); + } + var_r25 = lbl_1_data_324; + for (var_r28 = 0; var_r28 < 0x25; var_r28++) { + HuSprAttrSet(var_r25, var_r28, 4); + } + if (arg0 != -1) { + HuSprGrpMemberKill(var_r25, 5); + HuSprGrpKill(lbl_1_data_328); + for (var_r28 = 0; var_r28 < 3; var_r28++) { + HuWinKill(lbl_1_data_32C[var_r28]); + } + } +} + +void fn_1_E174(void) +{ + float var_f31; + s32 var_r31; + s32 var_r30; + s32 var_r29; + + var_r30 = lbl_1_data_324; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrReset(var_r30, var_r31 + 7, 4); + HuSprPosSet(var_r30, var_r31 + 7, 788.0f, (var_r31 * 0x38) + 0xB8); + } + for (var_r29 = 0; var_r29 <= 0x3C; var_r29++) { + fn_1_1B7D0(1); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_f31 = fn_1_1B64C(1000.0f, 0.0f, var_r29, 0x3C - ((2 - var_r31) * 5)); + HuSprPosSet(var_r30, var_r31 + 7, 288.0f + var_f31, (var_r31 * 0x38) + 0xB8); + } + } + HuSprAttrReset(var_r30, 0x22, 4); + HuSprPosSet(var_r30, 0x22, 185.0f, (lbl_1_bss_3B0.unk_10 * 0x38) + 0xA0); +} + +void fn_1_E384(void) +{ + float var_f31; + s32 var_r31; + s32 var_r30; + s32 var_r29; + + var_r30 = lbl_1_data_324; + HuSprAttrSet(var_r30, 0x22, 4); + HuSprPosSet(var_r30, 0x22, 125.0f, 190.0f); + for (var_r29 = 0; var_r29 <= 0x3C; var_r29++) { + fn_1_1B7D0(1); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_f31 = fn_1_1B574(0.0f, -1000.0f, var_r29, 0x3C - ((2 - var_r31) * 5)); + HuSprPosSet(var_r30, var_r31 + 7, 288.0f + var_f31, (var_r31 * 0x38) + 0xB8); + } + } + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r30, var_r31 + 7, 4); + HuSprPosSet(var_r30, var_r31 + 7, 288.0f, (var_r31 * 0x38) + 0xB8); + } +} + +void fn_1_E568(void) +{ + s32 sp10; + s32 spC; + s32 sp8; + float var_f31; + + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + u32 var_r27; + u32 var_r26; + s32 var_r25; + + var_r29 = lbl_1_data_324; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + sp10 = rand8() % 10; + spC = rand8() % 60; + sp8 = rand8() % 100; + HuSprAttrReset(var_r29, var_r31 + 0xA, 4); + HuSprPosSet(var_r29, var_r31 + 0xA, 1288.0f, (var_r31 * 0x38) + 0xB8); + for (var_r28 = 0; var_r28 < 7; var_r28++) { + HuSprAttrReset(var_r29, 0xD + var_r28 + (var_r31 * 7), 4); + HuSprPosSet(var_r29, 0x0D + var_r28 + (var_r31 * 7), (var_r28 * 0x14) + 0x512, (var_r31 * 0x38) + 0xBA); + } + var_r30 = GWGameStat.mg_record[var_r31 + 6]; + var_r27 = var_r30 / 36000; + var_r30 -= var_r27 * 36000; + var_r26 = var_r30 / 3600; + var_r30 -= var_r26 * 3600; + HuSprBankSet(var_r29, (var_r31 * 7) + 0xD, var_r26); + HuSprBankSet(var_r29, (var_r31 * 7) + 0xE, 0xA); + var_r27 = var_r30 / 600; + var_r30 -= var_r27 * 600; + var_r26 = var_r30 / 60; + var_r30 -= var_r26 * 60; + HuSprBankSet(var_r29, (var_r31 * 7) + 0xF, var_r27); + HuSprBankSet(var_r29, (var_r31 * 7) + 0x10, var_r26); + HuSprBankSet(var_r29, (var_r31 * 7) + 0x11, 0xB); + var_r30 = 1.6666666666666667 * (float)var_r30; + var_r27 = var_r30 / 10; + var_r30 -= var_r27 * 0xA; + var_r26 = var_r30; + if (GWGameStat.mg_record[var_r31 + 6] == 0x8C9F) { + HuSprBankSet(var_r29, (var_r31 * 7) + 0x12, 9); + HuSprBankSet(var_r29, (var_r31 * 7) + 0x13, 9); + } + else { + HuSprBankSet(var_r29, (var_r31 * 7) + 0x12, var_r27); + HuSprBankSet(var_r29, (var_r31 * 7) + 0x13, var_r26); + } + } + for (var_r25 = 0; var_r25 <= 0x3C; var_r25++) { + fn_1_1B7D0(1); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_f31 = fn_1_1B64C(1000.0f, 0.0f, var_r25, 0x3C - ((2 - var_r31) * 5)); + HuSprPosSet(var_r29, var_r31 + 0xA, 288.0f + var_f31, (var_r31 * 0x38) + 0xB8); + for (var_r28 = 0; var_r28 < 7; var_r28++) { + HuSprPosSet(var_r29, 0xD + var_r28 + (var_r31 * 7), var_f31 + ((var_r28 * 0x14) + 0x12A), (var_r31 * 0x38) + 0xBA); + } + } + } + HuSprAttrReset(var_r29, 0x22, 4); + HuSprPosSet(var_r29, 0x22, 110.0f, (lbl_1_bss_3B0.unk_10 * 0x38) + 0xA0); +} + +void fn_1_EB1C(void) +{ + float var_f31; + s32 var_r28; + s32 var_r29; + s32 var_r30; + s32 var_r31; + + var_r29 = lbl_1_data_324; + HuSprAttrSet(var_r29, 0x22, 4); + HuSprPosSet(var_r29, 0x22, 125.0f, 184.0f); + for (var_r28 = 0; var_r28 <= 0x3C; var_r28++) { + fn_1_1B7D0(1); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_f31 = fn_1_1B574(0.0f, -1000.0f, var_r28, 0x3C - ((2 - var_r31) * 5)); + HuSprPosSet(var_r29, var_r31 + 0xA, 288.0f + var_f31, (var_r31 * 0x38) + 0xB8); + for (var_r30 = 0; var_r30 < 7; var_r30++) { + HuSprPosSet(var_r29, 0xD + var_r30 + (var_r31 * 7), var_f31 + ((var_r30 * 0x14) + 0x12A), (var_r31 * 0x38) + 0xBA); + } + } + } + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r29, var_r31 + 0xA, 4); + for (var_r30 = 0; var_r30 < 7; var_r30++) { + HuSprAttrSet(var_r29, 0xD + var_r30 + (var_r31 * 7), 4); + } + } +} + +void fn_1_ED78(s32 arg0, s32 arg1) +{ + float var_f31; + float var_f30; + s32 var_r31; + s32 var_r30; + s32 var_r29; + + var_r30 = lbl_1_data_324; + { + s32 spC[3] = { 4, 11, 12 }; + for (var_r31 = 0; var_r31 <= 0xA; var_r31++) { + fn_1_1B7D0(1); + if (var_r31 <= 5) { + var_f30 = fn_1_1B64C(1.0f, 0.0f, var_r31, 5.0f); + } + else { + var_f30 = fn_1_1B64C(0.0f, 1.0f, var_r31, var_r31 - 5); + } + if (lbl_1_bss_1B0 == 4) { + HuSprTPLvlSet(var_r30, 5, var_f30); + } + var_f31 = fn_1_1B64C((arg1 * 0x38) + 0xA0, (arg0 * 0x38) + 0xA0, var_r31, 10.0f); + if (lbl_1_bss_1B0 == 4) { + HuSprPosSet(var_r30, 0x22, 110.0f, var_f31); + } + else { + HuSprPosSet(var_r30, 0x22, 185.0f, var_f31); + } + if ((lbl_1_bss_1B0 == 4) && (var_r31 == 5)) { + HuSprGrpMemberKill(var_r30, 5); + var_r29 = HuSprCreate(HuSprAnimReadFile(spC[arg0] + DATA_MAKE_NUM(DATADIR_MPEX, 0x22)), 0x7D0, 0); + HuSprGrpMemberSet(var_r30, 5, var_r29); + HuSprPosSet(var_r30, 5, 452.0f, 212.0f); + HuSprScaleSet(var_r30, 5, 0.5f, 0.5f); + HuSprTPLvlSet(var_r30, 5, 0.0f); + } + } + } +} + +void fn_1_F0C0(void) +{ + float sp8[2]; + s32 var_r31; + s32 var_r30; + s32 var_r29; + + var_r30 = HuSprGrpCreate(3); + lbl_1_bss_E0 = var_r30; + var_r29 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x16)), 0xBB8, 0); + HuSprGrpMemberSet(var_r30, 0, var_r29); + HuSprPosSet(var_r30, 0, 0.0f, 88.0f); + var_r29 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x18)), 0x7D0, 0); + HuSprGrpMemberSet(var_r30, 1, var_r29); + HuSprPosSet(var_r30, 1, 0.0f, 25.0f); + var_r29 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x1A)), 0x3E8, 0); + HuSprGrpMemberSet(var_r30, 2, var_r29); + HuSprPosSet(var_r30, 2, 0.0f, 0.0f); + HuSprScaleSet(var_r30, 2, 0.9f, 0.65f); + HuSprTPLvlSet(var_r30, 2, 0.8f); + for (var_r31 = 0; var_r31 < 6; var_r31++) { + fn_1_125DC(sp8, MAKE_MESSID(0x33, 0x2F)); + fn_1_125DC(sp8, MAKE_MESSID(0x33, 0x30)); + fn_1_125DC(sp8, MAKE_MESSID(0x33, 0x31)); + fn_1_125DC(sp8, MAKE_MESSID(0x33, 0x32)); + lbl_1_bss_C8[var_r31] = HuWinCreate(0.0f, 0.0f, sp8[0], sp8[1], 0); + HuWinBGTPLvlSet(lbl_1_bss_C8[var_r31], 0.0f); + HuWinMesSpeedSet(lbl_1_bss_C8[var_r31], 0); + HuWinDispOff(lbl_1_bss_C8[var_r31]); + HuWinPosSet(lbl_1_bss_C8[var_r31], 304.0f, 40.0f + (((60.0f - (sp8[1] / 2)) + (var_r31 * 0x1F)) - 500.0f)); + } + fn_1_F47C(); + fn_1_F730(); +} + +void fn_1_F40C(void) +{ + s32 var_r31; + s32 var_r30 = lbl_1_bss_E0; + for (var_r31 = 0; var_r31 < 6; var_r31++) { + HuWinKill(lbl_1_bss_C8[var_r31]); + } + HuSprGrpKill(var_r30); +} + +void fn_1_F47C(void) +{ + float sp8[2]; + s32 var_r31; + + s32 var_r30 = lbl_1_bss_E0; + lbl_1_bss_3B0.unk_0C = 0; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r30, var_r31, 4); + } + HuSprAttrReset(var_r30, 0, 4); + HuSprPosSet(var_r30, 0, 0.0f, 92.0f); + HuSprAttrReset(var_r30, 1, 4); + HuSprPosSet(var_r30, 1, 0.0f, 25.0f); + lbl_1_bss_3B0.unk_0C = 0; + HuSprPosSet(var_r30, 2, -3.0f, (lbl_1_bss_3B0.unk_0C * 0x19) + 0x3C); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + HuWinDispOn(lbl_1_bss_C8[var_r31]); + if (lbl_1_bss_180[var_r31] == 1) { + HuWinMesSet(lbl_1_bss_C8[var_r31], var_r31 + MAKE_MESSID(0x33, 0x2F)); + } + else { + HuWinMesSet(lbl_1_bss_C8[var_r31], MAKE_MESSID(0x33, 0x2E)); + } + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(0x33, 0x30)); + HuWinPosSet(lbl_1_bss_C8[var_r31], 288.0f - (sp8[0] / 2), 40.0f + (((60.0f - (sp8[1] / 2)) + (var_r31 * 0x1F)) - 500.0f)); + } + HuSprGrpPosSet(var_r30, 288.0f, -460.0f); +} + +void fn_1_F730(void) +{ + float sp8[2]; + s32 var_r31; + + s32 var_r30 = lbl_1_bss_E0; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r30, var_r31, 4); + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + HuWinDispOff(lbl_1_bss_C8[var_r31]); + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(0x33, 0x30)); + HuWinPosSet(lbl_1_bss_C8[var_r31], 288.0f - (sp8[0] / 2), 40.0f + (((60.0f - (sp8[1] / 2)) + (var_r31 * 0x1F)) - 500.0f)); + } + HuSprGrpPosSet(var_r30, 288.0f, -460.0f); +} + +void fn_1_F8A4(void) +{ + float sp10[2]; + float sp8[2]; + float var_f31; + + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + + s32 var_r27 = lbl_1_bss_E0; + sp10[0] = sp10[1] = 0.0f; + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x2E)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x2F)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x30)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x31)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x32)); + var_r30 = lbl_1_bss_E0; + lbl_1_bss_3B0.unk_0C = 0; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r30, var_r31, 4); + } + HuSprAttrReset(var_r30, 0, 4); + HuSprPosSet(var_r30, 0, 0.0f, 92.0f); + HuSprAttrReset(var_r30, 1, 4); + HuSprPosSet(var_r30, 1, 0.0f, 25.0f); + lbl_1_bss_3B0.unk_0C = 0; + HuSprPosSet(var_r30, 2, -3.0f, (lbl_1_bss_3B0.unk_0C * 0x19) + 0x3C); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + HuWinDispOn(lbl_1_bss_C8[var_r31]); + if (lbl_1_bss_180[var_r31] == 1) { + HuWinMesSet(lbl_1_bss_C8[var_r31], var_r31 + MAKE_MESSID(0x33, 0x2F)); + } + else { + HuWinMesSet(lbl_1_bss_C8[var_r31], MAKE_MESSID(0x33, 0x2E)); + } + HuWinMesMaxSizeGet(1, sp8, 0x330030); + HuWinPosSet(lbl_1_bss_C8[var_r31], 288.0f - (sp8[0] / 2), 40.0f + (((60.0f - (sp8[1] / 2)) + (var_r31 * 0x1F)) - 500.0f)); + } + HuSprGrpPosSet(var_r30, 288.0f, -460.0f); + for (var_r29 = 0; var_r29 < 0x3C; var_r29++) { + fn_1_1B7D0(1); + if (var_r29 <= 0x32) { + var_f31 = fn_1_1B64C(-500.0f, 10.0f, var_r29, 50.0f); + } + else { + var_f31 = fn_1_1B574(10.0f, 0.0f, var_r29 - 0x32, 10.0f); + } + HuSprGrpPosSet(var_r27, 288.0f, 64.0f + (40.0f + var_f31)); + for (var_r28 = 0; var_r28 < 4; var_r28++) { + HuWinPosSet(lbl_1_bss_C8[var_r28], 288.0f - (sp10[0] / 2), 64.0f + (40.0f + (var_f31 + ((60.0f - (sp10[1] / 2)) + (var_r28 * 0x1F))))); + } + } +} + +void fn_1_FDA0(void) +{ + float sp10[2]; + float sp8[2]; + float var_f31; + + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + + s32 var_r27 = lbl_1_bss_E0; + sp10[0] = sp10[1] = 0.0f; + + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x2E)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x2F)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x30)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x31)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x32)); + for (var_r30 = 0; var_r30 < 0x3C; var_r30++) { + fn_1_1B7D0(1); + if (var_r30 <= 0xA) { + var_f31 = fn_1_1B64C(0.0f, 10.0f, var_r30, 10.0f); + } + else { + var_f31 = fn_1_1B574(10.0f, -500.0f, var_r30 - 0xA, 50.0f); + } + HuSprGrpPosSet(var_r27, 288.0f, 64.0f + (40.0f + var_f31)); + for (var_r29 = 0; var_r29 < 4; var_r29++) { + HuWinPosSet(lbl_1_bss_C8[var_r29], 288.0f - (sp10[0] / 2), 64.0f + (40.0f + (var_f31 + ((60.0f - (sp10[1] / 2)) + (var_r29 * 0x1F))))); + } + } + var_r28 = lbl_1_bss_E0; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r28, var_r31, 4); + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + HuWinDispOff(lbl_1_bss_C8[var_r31]); + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(0x33, 0x30)); + HuWinPosSet(lbl_1_bss_C8[var_r31], 288.0f - (sp8[0] / 2), 40.0f + (((60.0f - (sp8[1] / 2)) + (var_r31 * 0x1F)) - 500.0f)); + } + HuSprGrpPosSet(var_r28, 288.0f, -460.0f); +} + +void fn_1_1015C(void) +{ + float sp8[2]; + s32 var_r31 = lbl_1_bss_E0; + HuWinMesMaxSizeGet(1, sp8, 0x330030); + HuSprAttrReset(var_r31, 2, 4); + HuSprPosSet(var_r31, 2, 0.0f, 40.0f + ((60.0f - sp8[1]) + (lbl_1_bss_3B0.unk_0C * 0x1F))); +} + +void fn_1_10228(void) +{ + s32 var_r31 = lbl_1_bss_E0; + HuSprAttrSet(var_r31, 2, 4); +} + +void fn_1_10268(s32 arg0) +{ + float spC[2]; + float var_f31; + float var_f30; + float var_f29; + s32 var_r31; + s32 var_r30; + s32 var_r29; + + s32 var_r28 = lbl_1_bss_E0; + HuWinMesMaxSizeGet(1, spC, MAKE_MESSID(0x33, 0x30)); + var_r29 = lbl_1_bss_3B0.unk_0C; + var_r31 = lbl_1_bss_3B0.unk_0C + arg0; + if (var_r31 > 3) { + var_r31 = 0; + } + else if (var_r31 < 0) { + var_r31 = 3; + } + for (var_r30 = 0; var_r30 <= 5; var_r30++) { + fn_1_1B7D0(1); + var_f31 = 40.0f + ((60.0f - spC[1]) + (var_r29 * 0x1F)); + var_f30 = 40.0f + ((60.0f - spC[1]) + (var_r31 * 0x1F)); + var_f29 = fn_1_1B64C(var_f31, var_f30, var_r30, 5.0f); + HuSprPosSet(var_r28, 2, -4.0f, var_f29); + } + lbl_1_bss_3B0.unk_0C = var_r31; +} + +void fn_1_1045C(void) +{ + float sp8[2]; + s32 var_r31; + s32 var_r29; + + s32 var_r30 = HuSprGrpCreate(3); + lbl_1_bss_C4 = var_r30; + var_r29 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x17)), 0xBB8, 0); + HuSprGrpMemberSet(var_r30, 0, var_r29); + HuSprPosSet(var_r30, 0, 0.0f, 118.0f); + var_r29 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x19)), 0x7D0, 0); + HuSprGrpMemberSet(var_r30, 1, var_r29); + HuSprPosSet(var_r30, 1, 0.0f, 25.0f); + var_r29 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x1A)), 0x3E8, 0); + HuSprGrpMemberSet(var_r30, 2, var_r29); + HuSprPosSet(var_r30, 2, 0.0f, 0.0f); + HuSprPosSet(var_r30, 2, 0.0f, 0.0f); + HuSprScaleSet(var_r30, 2, 0.9f, 0.65f); + HuSprTPLvlSet(var_r30, 2, 0.8f); + for (var_r31 = 0; var_r31 < 6; var_r31++) { + fn_1_125DC(sp8, MAKE_MESSID(0x33, 0x33)); + fn_1_125DC(sp8, MAKE_MESSID(0x33, 0x34)); + fn_1_125DC(sp8, MAKE_MESSID(0x33, 0x35)); + fn_1_125DC(sp8, MAKE_MESSID(0x33, 0x36)); + fn_1_125DC(sp8, MAKE_MESSID(0x33, 0x37)); + fn_1_125DC(sp8, MAKE_MESSID(0x33, 0x38)); + lbl_1_bss_C8[var_r31] = HuWinCreate(0.0f, 0.0f, sp8[0], sp8[1], 0); + HuWinBGTPLvlSet(lbl_1_bss_C8[var_r31], 0.0f); + HuWinMesSpeedSet(lbl_1_bss_C8[var_r31], 0); + HuWinDispOff(lbl_1_bss_C8[var_r31]); + HuWinPosSet(lbl_1_bss_C8[var_r31], 304.0f, 40.0f + (((60.0f - (sp8[1] / 2)) + (var_r31 * 0x1D)) - 500.0f)); + } + fn_1_1085C(); + fn_1_10ABC(); + (void)var_r31; +} + +void fn_1_107EC(void) +{ + s32 var_r30; + s32 var_r31; + + var_r30 = lbl_1_bss_C4; + for (var_r31 = 0; var_r31 < 6; var_r31++) { + HuWinKill(lbl_1_bss_C8[var_r31]); + } + HuSprGrpKill(var_r30); +} + +void fn_1_1085C(void) +{ + float sp8[2]; + s32 var_r31; + + s32 var_r30 = lbl_1_bss_C4; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r30, var_r31, 4); + } + HuSprAttrReset(var_r30, 0, 4); + HuSprAttrReset(var_r30, 1, 4); + lbl_1_bss_3B0.unk_0C = 0; + HuSprPosSet(var_r30, 2, -3.0f, (lbl_1_bss_3B0.unk_0C * 0x19) + 0x3C); + for (var_r31 = 0; var_r31 < 6; var_r31++) { + HuWinDispOn(lbl_1_bss_C8[var_r31]); + if (lbl_1_bss_180[var_r31 + 4] == 1) { + HuWinMesSet(lbl_1_bss_C8[var_r31], var_r31 + MAKE_MESSID(0x33, 0x33)); + } + else { + HuWinMesSet(lbl_1_bss_C8[var_r31], MAKE_MESSID(0x33, 0x2E)); + } + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(0x33, 0x33)); + HuWinPosSet(lbl_1_bss_C8[var_r31], 288.0f - (sp8[0] / 2), 40.0f + (((60.0f - (sp8[1] / 2)) + (var_r31 * 0x1D)) - 500.0f)); + } + HuSprGrpPosSet(var_r30, 288.0f, -460.0f); +} + +void fn_1_10ABC(void) +{ + float sp8[2]; + s32 var_r31; + + s32 var_r30 = lbl_1_bss_C4; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r30, var_r31, 4); + } + for (var_r31 = 0; var_r31 < 6; var_r31++) { + HuWinDispOff(lbl_1_bss_C8[var_r31]); + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(0x33, 0x33)); + HuWinPosSet(lbl_1_bss_C8[var_r31], 288.0f - (sp8[0] / 2), 40.0f + (((60.0f - (sp8[1] / 2)) + (var_r31 * 0x1D)) - 500.0f)); + } + HuSprGrpPosSet(var_r30, 288.0f, -460.0f); +} + +void fn_1_10C30(void) +{ + float sp10[2]; + float sp8[2]; + float var_f31; + + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r27; + + var_r27 = lbl_1_bss_C4; + sp10[0] = sp10[1] = 0.0f; + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x2E)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x33)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x34)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x35)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x36)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x37)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x38)); + var_r28 = lbl_1_bss_C4; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r28, var_r31, 4); + } + HuSprAttrReset(var_r28, 0, 4); + HuSprAttrReset(var_r28, 1, 4); + lbl_1_bss_3B0.unk_0C = 0; + HuSprPosSet(var_r28, 2, -3.0f, (lbl_1_bss_3B0.unk_0C * 0x19) + 0x3C); + for (var_r31 = 0; var_r31 < 6; var_r31++) { + HuWinDispOn(lbl_1_bss_C8[var_r31]); + if (lbl_1_bss_180[var_r31 + 4] == 1) { + HuWinMesSet(lbl_1_bss_C8[var_r31], var_r31 + MAKE_MESSID(0x33, 0x33)); + } + else { + HuWinMesSet(lbl_1_bss_C8[var_r31], MAKE_MESSID(0x33, 0x2E)); + } + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(0x33, 0x33)); + HuWinPosSet(lbl_1_bss_C8[var_r31], 288.0f - (sp8[0] / 2), 40.0f + (((60.0f - (sp8[1] / 2)) + (var_r31 * 0x1D)) - 500.0f)); + } + HuSprGrpPosSet(var_r28, 288.0f, -460.0f); + for (var_r30 = 0; var_r30 < 0x3C; var_r30++) { + fn_1_1B7D0(1); + if (var_r30 <= 0x32) { + var_f31 = fn_1_1B64C(-500.0f, 10.0f, var_r30, 50.0f); + } + else { + var_f31 = fn_1_1B574(10.0f, 0.0f, var_r30 - 0x32, 10.0f); + } + HuSprGrpPosSet(var_r27, 288.0f, 64.0f + (40.0f + var_f31)); + for (var_r29 = 0; var_r29 < 6; var_r29++) { + HuWinPosSet(lbl_1_bss_C8[var_r29], 288.0f - (sp10[0] / 2), 64.0f + (40.0f + (var_f31 + ((60.0f - (sp10[1] / 2)) + (var_r29 * 0x1D))))); + } + } +} + +void fn_1_110F8(void) +{ + float sp10[2]; + float sp8[2]; + float var_f31; + + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r27; + + var_r27 = lbl_1_bss_C4; + sp10[0] = sp10[1] = 0.0f; + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x2E)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x33)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x34)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x35)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x36)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x37)); + fn_1_125DC(sp10, MAKE_MESSID(0x33, 0x38)); + for (var_r30 = 0; var_r30 < 0x3C; var_r30++) { + fn_1_1B7D0(1); + if (var_r30 <= 0xA) { + var_f31 = fn_1_1B64C(0.0f, 10.0f, var_r30, 10.0f); + } + else { + var_f31 = fn_1_1B574(10.0f, -500.0f, var_r30 - 0xA, 50.0f); + } + HuSprGrpPosSet(var_r27, 288.0f, 64.0f + (40.0f + var_f31)); + for (var_r29 = 0; var_r29 < 6; var_r29++) { + HuWinPosSet(lbl_1_bss_C8[var_r29], 288.0f - (sp10[0] / 2), 64.0f + (40.0f + (var_f31 + ((60.0f - (sp10[1] / 2)) + (var_r29 * 0x1D))))); + } + } + var_r28 = lbl_1_bss_C4; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r28, var_r31, 4); + } + for (var_r31 = 0; var_r31 < 6; var_r31++) { + HuWinDispOff(lbl_1_bss_C8[var_r31]); + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(0x33, 0x33)); + HuWinPosSet(lbl_1_bss_C8[var_r31], 288.0f - (sp8[0] / 2), 40.0f + (((60.0f - (sp8[1] / 2)) + (var_r31 * 0x1D)) - 500.0f)); + } + HuSprGrpPosSet(var_r28, 288.0f, -460.0f); +} + +void fn_1_114D4(void) +{ + float sp8[2]; + s32 var_r31 = lbl_1_bss_C4; + HuWinMesMaxSizeGet(1, sp8, 0x330033); + HuSprAttrReset(var_r31, 2, 4); + HuSprPosSet(var_r31, 2, 0.0f, 40.0f + ((60.0f - sp8[1]) + (lbl_1_bss_3B0.unk_0C * 0x1D))); +} + +void fn_1_115A0(void) +{ + s32 var_r31 = lbl_1_bss_C4; + HuSprAttrSet(var_r31, 2, 4); +} + +void fn_1_115E0(s32 arg0) +{ + float spC[2]; + float var_f31; + float var_f30; + float var_f29; + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + + var_r28 = lbl_1_bss_C4; + HuWinMesMaxSizeGet(1, spC, MAKE_MESSID(0x33, 0x33)); + var_r29 = lbl_1_bss_3B0.unk_0C; + var_r31 = lbl_1_bss_3B0.unk_0C + arg0; + if (var_r31 > 5) { + var_r31 = 0; + } + else if (var_r31 < 0) { + var_r31 = 5; + } + for (var_r30 = 0; var_r30 <= 5; var_r30++) { + fn_1_1B7D0(1); + var_f31 = 40.0f + ((60.0f - spC[1]) + (var_r29 * 0x1D)); + var_f30 = 40.0f + ((60.0f - spC[1]) + (var_r31 * 0x1D)); + var_f29 = fn_1_1B64C(var_f31, var_f30, var_r30, 5.0f); + HuSprPosSet(var_r28, 2, -4.0f, var_f29); + } + lbl_1_bss_3B0.unk_0C = var_r31; +} + +void fn_1_117D4(void) +{ + s32 var_r31; + s32 var_r30; + s32 var_r29; + + var_r30 = HuSprGrpCreate(3); + lbl_1_bss_C0 = var_r30; + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x12)), 0xBB8, 0); + HuSprGrpMemberSet(var_r30, 0, var_r31); + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x13)), 0xBB8, 0); + HuSprGrpMemberSet(var_r30, 1, var_r31); + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x14)), 0xBB8, 0); + HuSprGrpMemberSet(var_r30, 2, var_r31); + var_r29 = HuSprGrpCreate(1); + lbl_1_bss_BC = var_r29; + var_r31 = HuSprCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_MPEX, 0x15)), 0xBB8, 0); + HuSprGrpMemberSet(var_r29, 0, var_r31); + HuSprAttrSet(var_r29, 0, 4); + fn_1_11984(); + fn_1_119E0(); +} + +void fn_1_11930(void) +{ + s32 var_r31 = lbl_1_bss_C0; + s32 var_r30 = lbl_1_bss_BC; + HuSprGrpKill(var_r31); + HuSprGrpKill(var_r30); +} + +void fn_1_11984(void) +{ + s32 var_r31; + s32 var_r30 = lbl_1_bss_C0; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r30, var_r31, 4); + } +} + +void fn_1_119E0(void) +{ + s32 var_r31; + s32 var_r30 = lbl_1_bss_C0; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + HuSprAttrSet(var_r30, var_r31, 4); + } +} + +void fn_1_11A3C(s32 arg0) +{ + float var_f31; + float var_f30; + + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r26; + + var_r29 = lbl_1_bss_C0; + var_r28 = lbl_1_bss_BC; + { + s32 sp8[3][2] = { + { 0x72, 0xFA }, + { 0x144, 0xE1 }, + { 0xEF, 0x5A }, + }; + var_r26 = lbl_1_bss_C0; + for (var_r30 = 0; var_r30 < 3; var_r30++) { + HuSprAttrSet(var_r26, var_r30, 4); + } + if (lbl_1_bss_3B0.unk_08 != 2) { + HuSprAttrReset(var_r29, lbl_1_bss_3B0.unk_08, 4); + } + HuSprGrpScaleSet(var_r29, 0.0f, 0.0f); + for (var_r31 = 0; var_r31 <= 0xF; var_r31++) { + fn_1_1B7D0(1); + if (var_r31 <= 0xA) { + var_f31 = fn_1_1B64C(0.0f, 1.0f, var_r31, 10.0f); + var_f30 = 0.01f; + } + else { + var_f31 = 1.0f; + var_f30 = fn_1_1B64C(0.01f, 1.0f, var_r31 - 0xA, 5.0f); + } + HuSprGrpScaleSet(var_r29, var_f31, var_f30); + if (arg0 != -1) { + var_f31 = fn_1_1B64C(sp8[arg0][0], sp8[lbl_1_bss_3B0.unk_08][0], var_r31, 15.0f); + var_f30 = fn_1_1B64C(sp8[arg0][1], sp8[lbl_1_bss_3B0.unk_08][1], var_r31, 15.0f); + HuSprGrpPosSet(var_r28, var_f31, var_f30); + } + } + HuSprAttrReset(var_r28, 0, 4); + if (arg0 == -1) { + HuSprGrpPosSet(var_r28, sp8[0][0], sp8[0][1]); + } + } +} + +void fn_1_11E28(void) +{ + float var_f31; + float var_f30; + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r27; + + var_r29 = lbl_1_bss_C0; + var_r28 = lbl_1_bss_BC; + HuSprAttrSet(var_r28, 0, 4); + for (var_r31 = 0; var_r31 <= 0xF; var_r31++) { + fn_1_1B7D0(1); + if (var_r31 <= 0xA) { + var_f30 = fn_1_1B64C(1.0f, 0.01f, var_r31, 10.0f); + var_f31 = 1.0f; + } + else { + var_f30 = 0.01f; + var_f31 = fn_1_1B64C(1.0f, 0.01f, var_r31 - 0xA, 5.0f); + } + HuSprGrpScaleSet(var_r29, var_f31, var_f30); + } + var_r27 = lbl_1_bss_C0; + for (var_r30 = 0; var_r30 < 3; var_r30++) { + HuSprAttrSet(var_r27, var_r30, 4); + } +} + +void fn_1_11FC0(omObjData *object, MpexDllUnkStruct4 *arg1) +{ + Vec sp20; + Vec sp14; + + s32 var_r31 = lbl_1_bss_C0; + s32 sp8[3] = { 0x64, 0x64, 0xE1 }; + sp20.x = Hu3DData[lbl_1_bss_2D8[lbl_1_bss_3B0.unk_08].unk_00->model[1]].pos.x; + sp20.y = 0.0f; + sp20.z = Hu3DData[lbl_1_bss_2D8[lbl_1_bss_3B0.unk_08].unk_00->model[1]].pos.z; + Hu3D3Dto2D(&sp20, 1, &sp14); + sp14.y = fn_1_1B714(sp8[lbl_1_bss_3B0.unk_08], 10.0f + sp8[lbl_1_bss_3B0.unk_08], lbl_1_bss_3B0.unk_28++, 360.0f); + if (lbl_1_bss_3B0.unk_28 >= 0x168) { + lbl_1_bss_3B0.unk_28 = 0; + } + HuSprGrpPosSet(var_r31, sp14.x, (s32)sp14.y); +} + +void fn_1_121E8(void) +{ + OSReport("\n\n####################### HI SCORE #######################\n"); + OSReport("HIScore 453(0-99):%d\n", GWGameStat.mg_record[9]); + if (GWGameStat.mg_record[9] == 0) { + GWGameStat.mg_record[9] = 0; + } + else if (GWGameStat.mg_record[9] >= 0x63) { + GWGameStat.mg_record[9] = 0x63; + } + OSReport("HIScore 451A(0-35999):%d\n", GWGameStat.mg_record[6]); + if (GWGameStat.mg_record[6] == 0) { + GWGameStat.mg_record[6] = 0; + } + else if (GWGameStat.mg_record[6] >= 0x8C9F) { + GWGameStat.mg_record[6] = 0x8C9F; + } + OSReport("HIScore 451B(0-35999):%d\n", GWGameStat.mg_record[7]); + if (GWGameStat.mg_record[7] == 0) { + GWGameStat.mg_record[7] = 0; + } + else if (GWGameStat.mg_record[7] >= 0x8C9F) { + GWGameStat.mg_record[7] = 0x8C9F; + } + OSReport("HIScore 451C(0-35999):%d\n", GWGameStat.mg_record[8]); + if (GWGameStat.mg_record[8] == 0) { + GWGameStat.mg_record[8] = 0; + } + else if (GWGameStat.mg_record[8] >= 0x8C9F) { + GWGameStat.mg_record[8] = 0x8C9F; + } + OSReport("HIScore 442(0-999):%d\n", GWGameStat.mg_record[4]); + if (GWGameStat.mg_record[4] == 0) { + GWGameStat.mg_record[4] = 0; + } + else if (GWGameStat.mg_record[4] >= 0x3E7) { + GWGameStat.mg_record[4] = 0x3E7; + } + OSReport("HIScore 459(0-99):%d\n", GWGameStat.mg_record[0xB]); + if (GWGameStat.mg_record[0xB] == 0) { + GWGameStat.mg_record[0xB] = 0; + } + else if (GWGameStat.mg_record[0xB] >= 0x63) { + GWGameStat.mg_record[0xB] = 0x63; + } + OSReport("HIScore 460(0-99):%d\n", GWGameStat.mg_record[0xC]); + if (GWGameStat.mg_record[0xC] == 0) { + GWGameStat.mg_record[0xC] = 0; + } + else if (GWGameStat.mg_record[0xC] >= 0x63) { + GWGameStat.mg_record[0xC] = 0x63; + } + OSReport("HIScore 461(0-35999):%d\n", GWGameStat.mg_record[0xD]); + if (GWGameStat.mg_record[0xD] == 0) { + GWGameStat.mg_record[0xD] = 0; + } + else if (GWGameStat.mg_record[0xD] >= 0x8C9F) { + GWGameStat.mg_record[0xD] = 0x8C9F; + } + OSReport("HIScore 462(0-99):%d\n", GWGameStat.mg_record[0xE]); + if (GWGameStat.mg_record[0xE] == 0) { + GWGameStat.mg_record[0xE] = 0; + } + else if (GWGameStat.mg_record[0xE] >= 0x63) { + GWGameStat.mg_record[0xE] = 0x63; + } + OSReport("########################################################\n\n"); +} + +void fn_1_125DC(float *arg0, s32 arg1) +{ + float spC[2]; + + HuWinMesMaxSizeGet(1, spC, arg1); + if (spC[0] > arg0[0]) { + arg0[0] = spC[0]; + } + if (spC[1] > arg0[1]) { + arg0[1] = spC[1]; + } +} diff --git a/src/game/objmain.c b/src/game/objmain.c index f802d287..39bc9e12 100644 --- a/src/game/objmain.c +++ b/src/game/objmain.c @@ -38,7 +38,7 @@ s32 omcurdll; s32 omovlhisidx; s32 omovlevtno; s32 omnextovlevtno; -s32 omovlstat; +u32 omovlstat; static s32 omnextovlstat; char omUPauseFlag; s16 omSysExitReq; @@ -568,4 +568,4 @@ char omPauseChk(void) OverlayID omCurrentOvlGet(void) { return omcurovl; -} \ No newline at end of file +} diff --git a/src/game/objsub.c b/src/game/objsub.c index d982fff6..b00631c4 100644 --- a/src/game/objsub.c +++ b/src/game/objsub.c @@ -1166,7 +1166,7 @@ s16 mgTypeCurr; s16 mgBattleStar[4]; s16 mgBattleStarMax; u8 lbl_801D3E94; -s32 mgRecordExtra; +u32 mgRecordExtra; s32 mgQuitExtraF; s32 mgPracticeEnableF; s32 mgInstExitEnableF; From ce005e042877dc67620b9501092403e92bfa7142 Mon Sep 17 00:00:00 2001 From: dbalatoni13 Date: Tue, 29 Oct 2024 21:21:54 +0100 Subject: [PATCH 7/8] Corrected the type of lbl_1_data_240 in mpexDll/mpex.c --- config/GMPE01_00/rels/mpexDll/symbols.txt | 2 +- src/REL/mpexDll/mpex.c | 44 +++++++++++------------ 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/config/GMPE01_00/rels/mpexDll/symbols.txt b/config/GMPE01_00/rels/mpexDll/symbols.txt index 21ef6f1a..bc7d5ab0 100644 --- a/config/GMPE01_00/rels/mpexDll/symbols.txt +++ b/config/GMPE01_00/rels/mpexDll/symbols.txt @@ -392,7 +392,7 @@ lbl_1_data_1DC = .data:0x000001DC; // type:object size:0x22 scope:local data:str lbl_1_data_1FE = .data:0x000001FE; // type:object size:0x1A scope:local data:string lbl_1_data_218 = .data:0x00000218; // type:object size:0x1A scope:local data:string lbl_1_data_232 = .data:0x00000232; // type:object size:0xE scope:local data:string -lbl_1_data_240 = .data:0x00000240; // type:object size:0x54 +lbl_1_data_240 = .data:0x00000240; // type:object size:0x54 data:float lbl_1_data_294 = .data:0x00000294; // type:object size:0x4 data:4byte lbl_1_data_298 = .data:0x00000298; // type:object size:0x4 data:4byte lbl_1_data_29C = .data:0x0000029C; // type:object size:0x18 scope:local data:string diff --git a/src/REL/mpexDll/mpex.c b/src/REL/mpexDll/mpex.c index d8d8e422..7067c1c6 100644 --- a/src/REL/mpexDll/mpex.c +++ b/src/REL/mpexDll/mpex.c @@ -115,28 +115,28 @@ void fn_1_F730(void); void fn_1_F8A4(void); void fn_1_FDA0(void); -s32 lbl_1_data_240[21] = { - 0x00000000, - 0x00000000, - 0x00000000, - 0xC37A0000, - 0x00000000, - 0x00000000, - 0x437A0000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x43FA0000, - 0x00000000, - 0xC47A0000, - 0x00000000, - 0x00000000, - 0x447A0000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x447A0000, - 0x00000000, +float lbl_1_data_240[21] = { + 0.0f, + 0.0f, + 0.0f, + -250.0f, + 0.0f, + 0.0f, + 250.0f, + 0.0f, + 0.0f, + 0.0f, + 500.0f, + 0.0f, + -1000.0f, + 0.0f, + 0.0f, + 1000.0f, + 0.0f, + 0.0f, + 0.0f, + 1000.0f, + 0.0f, }; MpexDllUnkStruct4 lbl_1_bss_3F8; From 120cfa57a180ded1effe724fb71d220f291a3ac6 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 29 Oct 2024 15:39:57 -0500 Subject: [PATCH 8/8] Match mpex.c --- configure.py | 2 +- src/REL/mpexDll/mpex.c | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/configure.py b/configure.py index 8a5611e2..dd0f6cb2 100644 --- a/configure.py +++ b/configure.py @@ -1325,7 +1325,7 @@ config.libs = [ "mpexDll", objects={ Object(Matching, "REL/mpexDll/main.c"), - Object(NonMatching, "REL/mpexDll/mpex.c"), + Object(Matching, "REL/mpexDll/mpex.c"), Object(Matching, "REL/mpexDll/charsel.c"), Object(Matching, "REL/mpexDll/mgname.c"), }, diff --git a/src/REL/mpexDll/mpex.c b/src/REL/mpexDll/mpex.c index 7067c1c6..5931ebd8 100644 --- a/src/REL/mpexDll/mpex.c +++ b/src/REL/mpexDll/mpex.c @@ -1,5 +1,4 @@ #include "ext_math.h" -#include "game/audio.h" #include "game/board/main.h" #include "game/chrman.h" #include "game/esprite.h"