data | ||
flips@e12ef18990 | ||
.gitignore | ||
.gitmodules | ||
Fusion_Graph.py | ||
Fusion_Items.py | ||
Fusion_Palette_Shuffle.py | ||
GUI.py | ||
LICENSE | ||
MFOR.py | ||
OpenMFOR.spec | ||
Randomizer.py | ||
README.md | ||
requirements.txt |
(Open) Metroid Fusion Open Randomizer
This is the official unofficial Git repository for the Metroid Fusion Open Randomizer reverse engineering efforts, more casually referred to as MFOR or Fusion rando.
We're striving to have feature parity with the (now closed source) original project, while targeting any platform where Python can run (and, if patches are needed, FLIPS can be built).
Caveat emptor: the project is already diverging from the original decompilation as logic variations and patches to make the software platform independent have been applied already to this repository.
Links
- OpenMFOR repository (this project, in case you are looking at a fork)
- The original MFOR repository on Github
- The original MFOR thread on Metroid Construction
Project Status
- Decent disassembly
- GUI
- CRC verification
- Logic
- Reconstructing missing parts of code
- Patching
- Generating BPS patches (python-bps-continued used to apply base patch as it's platform independent, but FLIPS to generate BPS files)
- Potentially merging/reimplementing the new features from v2024.02.10
- Merging the logic edits from v2024.02.10
- Solver refactoring
- CI/CD for Windows frozen builds
Quick start (Windows)
- fetch the latest OpenMFOR release
- fetch the latest FLIPS for Windows release
- extract OpenMFOR
- put
flips.exe
extracted from the second archive into theflips
folder in OpenMFOR - double click
OpenMFOR.exe
- ????
- PROFIT
Prebuilt release builds might be available on the releases tab.
If you feel more inclined testing the tip of the development branches or playing with the logic, part of the following guide can be used on Windows too to run the randomizer from sources rather than PyInstaller packed executables.
Install (any OS)
On *NIX OSes, the only strict prerequisites are Python 3.x and pip. For the GUI, sourcing python3-tk
from your package manager is highly recommended.
Quick start on Debian and derivative distros (Ubuntu, Mint, etc.) while there's no install script:
git clone --recursive https://git.inabaudonge.reisen/OpenMFOR/OpenMFOR.git
sudo apt install python3-tk build-essential g++
cd OpenMFOR
python -m venv venv
. venv/bin/activate
(remember to use this command whenever you need to run OpenMFOR again)pip install -r requirements.txt
python MFOR.py
(Optional, but recommended) to build FLIPS to generate patches:
cd flips
./make.sh
On other distros refer to your package manager to track the equivalent packages. As an example, on Void Linux, under xbps, python3-tk
is named python3-tkinter
.
Usage
The command to launch the GUI/CLI interface is python MFOR.py
, --help
is available to have a list of valid switches. On the GUI, choose your game options (hover over a given option to see a tooltip explaining it), then click Generate. A popup will ask you to open an unmodified copy of the original game. This is not provided with the randomizer for legal reasons.
To build FLIPS (present as a submodule), prerequisites are a C++ compiler and OpenMP headers (both part of build-essential
on Debian and derivatives). Refer to FLIPS' README for further info.
The randomizer currently works only with the USA (and, by proxy, the Australian) version of the game. To ensure you have the correct version of the game, the CRC32 checksum should be: 6C75479C
.
Help
- OpenMFOR Discord guild since we've been told to refrain to bring this up on the wider community server over ongoing diplomacy issues.
- soon™ we might have an IRC channel or a Matrix group bridged to the Discord guild.
Special Thanks
- magical's efforts into untangling pretty much the entirety of the randomizer logic. Without their contribution this repository would be yet another project left to rot into yet another of my hard drives.
- Decompyle++ has been used for the initial disassembly. R. Bernstein because uncompyle6, decompile3, xdis and python-control-flow kickstarted this project.
- tcprescott's python-bps-continued since this makes at least rolling the seeds completely platform independent.
- Alcaro's Floating IPS
- Fedor Batogonov's docker-pyinstaller used by the CI/CD to make Windows builds on AppVeyor
- The testers in the various Discord guilds that are spotting the massive scams before I do! (SkullAdult, Mr. Fox, baria, Fpiz_, jakoliath)
Kazuto88 being the original randomizer developer. The following lines are his special thanks to the people that contributed to making this a reality:
- Much thanks to the folks in the MAGConst Discord for longtime help with Metroid Fusion/general GBA modding.
- Thanks to biospark for creating the Fusion level editor MAGE, and nearly all of the documented data on Metroid Fusion that helped make this randomizer a possibility.
- Thanks to interdpth for direct code assistance, and for his longtime contributions to the GBAtroid modding scene.
- Thanks to everyone who helped with early testing, bug finding, proposed fixes, etc.