Go to file
Lucent 52f7d3c5d0 revert requirements version removal
PySimpleGUI went closed source and paid, so back to 4.60.5
2024-02-13 12:53:06 +01:00
data initial commit 2023-10-10 12:13:02 +02:00
flips@fdd5c6e342 add flips as a submodule, python-bps-continued is too slow creating a patch 2024-02-12 23:27:01 +01:00
.gitignore update gitignore, remove version req on requirements 2024-02-08 00:52:01 +01:00
.gitmodules add flips as a submodule, python-bps-continued is too slow creating a patch 2024-02-12 23:27:01 +01:00
Fusion_Graph.py fix items not being placed on bosses 2024-02-08 00:55:40 +01:00
Fusion_Items.py reinstated credits on the source 2023-10-20 00:41:11 +02:00
GUI.py fix the GUI 2024-02-05 19:28:00 -08:00
LICENSE initial commit 2023-10-10 12:13:02 +02:00
MFOR.py reinstated credits on the source 2023-10-20 00:41:11 +02:00
README.md yet another readme edit with some useful info 2024-02-13 01:14:58 +01:00
Randomizer.py revert to using flips; build script coming soon 2024-02-13 00:09:42 +01:00
requirements.txt revert requirements version removal 2024-02-13 12:53:06 +01:00

README.md

(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.

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
  • Solver refactoring
  • CI/CD for Windows frozen builds

Install

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

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.