This commit is contained in:
CreateSource 2024-10-29 17:03:58 -04:00
commit 716b0714e9
39 changed files with 8718 additions and 813 deletions

View file

@ -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

40
.gitignore vendored
View file

@ -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/*
*.exe

View file

@ -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
}

View file

@ -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
}
}

12
.vscode/extensions.json vendored Normal file
View file

@ -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",
]
}

33
.vscode/settings.json vendored Normal file
View file

@ -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,
}

16
.vscode/tasks.json vendored Normal file
View file

@ -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
}
},
]
}

View file

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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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
@ -392,37 +392,37 @@ 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
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

View file

@ -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 = [
@ -952,9 +976,10 @@ config.libs = [
Rel(
"m420dll", # Fish n' Drips
objects={
Object(NonMatching, "REL/m420dll/main.c"),
Object(NonMatching, "REL/m420dll/player.c"),
Object(NonMatching, "REL/m420dll/map.c"),
Object(Matching, "REL/m420dll/main.c"),
Object(Matching, "REL/m420dll/camera.c"),
Object(Matching, "REL/m420dll/player.c"),
Object(Matching, "REL/m420dll/map.c"),
Object(Matching, "REL/m420dll/rand.c"),
},
),
@ -1118,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"),
},
),
@ -1300,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"),
},

68
include/REL/m420dll.h Normal file
View file

@ -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

View file

@ -1,6 +1,51 @@
#ifndef M443DLL_H
#define M443DLL_H
#include "dolphin.h"
#include "game/object.h"
#endif
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

View file

@ -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

View file

@ -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
#endif

View file

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

View file

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

View file

@ -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
#endif

View file

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

View file

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

View file

@ -1,6 +1,10 @@
#ifndef _STDLIB_H
#define _STDLIB_H
#ifdef __MWERKS__
#define abs(x) __abs(x)
#else
int abs(int x);
#endif
#endif

144
src/REL/m420dll/camera.c Normal file
View file

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

254
src/REL/m420dll/main.c Normal file
View file

@ -0,0 +1,254 @@
#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++) {
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;
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);
}

1220
src/REL/m420dll/map.c Normal file

File diff suppressed because it is too large Load diff

935
src/REL/m420dll/player.c Normal file
View file

@ -0,0 +1,935 @@
#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 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;
}
}
}
}
#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;
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);
do {
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:
WAITMODECHG(arg0, 1);
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();
WAITMODECHG(arg0, 5);
break;
case 2:
if (arg0->unk_50 <= 0) {
WAITMODECHG(arg0, 1);
} else {
Hu3DModelAttrReset(arg0->unk_AC, 0x40000002);
Hu3DModelAttrReset(arg0->unk_AC, 0x40000001);
Hu3DModelAttrSet(arg0->unk_AC, 0x40000004);
fn_1_63EC();
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);
WAITMODECHG(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();
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);
}
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);
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);
}
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, var_f31, var_f30);
Hu3DMotionTimeSet(arg0->unk_AC, var_f31);
Hu3DModelAttrReset(arg0->unk_AC, 0x40000002);
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);
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)
{
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 30.0f, 0x40000001);
WAITMODECHG(arg0, 35);
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);
{
s32 var_r30;
s32 var_r29;
for (var_r30 = 0; var_r30 < 24; var_r30++) {
fn_1_355C(arg0);
var_r29 = arg0->unk_48;
HuPrcVSleep();
if (arg0->unk_48 != var_r29) {
return;
}
}
}
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)
{
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);
}

File diff suppressed because it is too large Load diff

View file

@ -1 +1,183 @@
#include "m443Dll.h"
#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]);
}
}
}

View file

@ -1 +1,16 @@
#include "m443Dll.h"
#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"

View file

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

3499
src/REL/mpexDll/mpex.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -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;
}
}

View file

@ -1166,7 +1166,7 @@ s16 mgTypeCurr;
s16 mgBattleStar[4];
s16 mgBattleStarMax;
u8 lbl_801D3E94;
s32 mgRecordExtra;
u32 mgRecordExtra;
s32 mgQuitExtraF;
s32 mgPracticeEnableF;
s32 mgInstExitEnableF;

View file

@ -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()

View file

@ -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 = ""

View file

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