One-shot Linux installer for Super Mario 64 PC port with Odyssey Mario's Moveset (OMM) — choose at runtime between Render96ex (HD models + DynOS, recommended) and SM64EX (vanilla). Both options get the Render96 HD texture pack + improved 3D models and the OMM patch (Cappy, captures, roll, dive, cap bounce…).
All cloning, downloads and compilation happen in a temporary directory (deleted afterwards). The compiled game is then moved to the chosen install folder (default ~/Mario64) and only that stays on disk.
- Linux (Arch / Ubuntu / Debian / Fedora / openSUSE — auto-detected)
git,curl,make,gcc/g++,python3,unzip,zip,p7zip(7z),SDL2,GLEW— installed automatically via your package manager (or setSKIP_DEPS=1)- A legally dumped, unmodified Super Mario 64 (US) ROM (
.z64/.n64/.v64/.zip). The build verifies the SHA1 and will abort on a hacked/extended ROM.
Replace
zonaro/Mario64/mainwith your actual GitHub user/repo/branch if different.
curl -fsSL https://raw.githubusercontent.com/zonaro/Mario64/main/install.sh -o install.sh && chmod +x install.sh && ./install.shPiped variant (also prompts for ROM — works via /dev/tty):
bash -c "$(curl -fsSL https://raw.githubusercontent.com/zonaro/Mario64/main/install.sh)"ROM handling (one-liner friendly): the script will prompt for the ROM path (you can drag & drop the file into the terminal). If you leave it empty, it auto-searches common folders: ~/Downloads, ~/ROMs, ~/Games, ~/Documents/Documentos, ~/Jogos and subfolders (up to 3 levels deep) for *mario*64*.z64/.zip, baserom*, sm64*, etc. You can also skip the prompt by setting ROM_ZIP:
ROM_ZIP=~/Downloads/Super\ Mario\ 64.zip bash -c "$(curl -fsSL https://raw.githubusercontent.com/zonaro/Mario64/main/install.sh)"Engine handling (one-liner friendly): the script will prompt for the base — 1 Render96ex (recommended) or 2 SM64EX. Both get Render96 HD textures/models. Skip the prompt with ENGINE:
ENGINE=render96 bash -c "$(curl -fsSL https://raw.githubusercontent.com/zonaro/Mario64/main/install.sh)"
ENGINE=sm64ex bash -c "$(curl -fsSL https://raw.githubusercontent.com/zonaro/Mario64/main/install.sh)"
# aliases: r96/render96ex → render96, ex/sm64 → sm64ex; also BASE/R96/SM64EX env varsInstall dir handling (one-liner friendly): the script will prompt for the install path. Leave empty for the default ~/Mario64. Clone/downloads/compilation still happen in a temp dir and are deleted — only the compiled game stays in the chosen folder. Skip the prompt with FINAL_DIR:
FINAL_DIR=~/Games/Mario64 bash -c "$(curl -fsSL https://raw.githubusercontent.com/zonaro/Mario64/main/install.sh)"
# or all at once:
ENGINE=sm64ex ROM_ZIP=~/roms/sm64.z64 FINAL_DIR=~/Mario64 bash -c "$(curl -fsSL https://raw.githubusercontent.com/zonaro/Mario64/main/install.sh)"-
Have your ROM ready (or let the script prompt/search). Accepted names (any one is enough):
baserom.us.z64,baserom.z64,Super Mario 64 (USA).z64,Super Mario 64 (U) [!].z64,Super Mario 64.z64,sm64.z64,mario64.z64.n64/.v64variants of the above.zipcontaining any of the above (e.g.Super Mario 64.zip)- Fallback: any
*.z64/*.n64/*.v64/*.zipin the script folder or current directory is auto-detected - Or set
ROM_ZIP=/path/to/rom.zipexplicitly to skip the prompt
-
Run:
chmod +x install.sh
./install.sh
# You'll be prompted for:
# 1) Base: 1) Render96ex (recommended) 2) SM64EX (empty = 1) — both get Render96 HD packs
# 2) Install path (empty = ~/Mario64)
# 3) ROM path if not found (paste/drag or empty to auto-search ~/Downloads, ~/ROMs, etc.)- Prompts for base:
1Render96ex (tester) or2SM64EX (master) — or usesENGINE=render96|sm64ex - Detects your package manager and installs build deps (unless
SKIP_DEPS=1) - Creates a temp dir via
mktemp -d(/tmp/mario64_build_XXXXXX) - Resolves the ROM:
ROM_ZIP→ script dir / PWD scan → interactive prompt (drag & drop) → auto-search in~/Downloads,~/ROMs,~/Games, etc. - Clones the chosen base (
Render96/Render96exorsm64pc/sm64ex) into the temp dir - Downloads and applies
PeachyPeachSM64/sm64ex-ommomm.patch+ defensive fixes - Builds with
make -j$(nproc) RENDER_API=GL WINDOW_API=SDL2 AUDIO_API=SDL2 CONTROLLER_API=SDL2 GRUCODE=f3dex2e - Downloads Render96 HD packs for both engines (
Render96_DynOs_v3.25.7z+ OMM zip) into the temp build - Moves the compiled
build/us_pcto the chosen install dir (~/Mario64/build/us_pc/sm64.r96xorsm64.us.f3dex2e) - Cleans all downloads and removes the temp directory (
trap+ explicitrm -rf) — only the game stays - Creates
launch.shin the install dir,~/.local/bin/render96-odyssey(orsm64ex-odyssey) symlink and desktop entry
After a successful run, in the chosen install directory (default ~/Mario64):
~/Mario64/build/us_pc/sm64.r96x (or sm64.us.f3dex2e for SM64EX) # game binary
~/Mario64/build/us_pc/dynos/packs/ # DynOS packs (Render96 HD)
~/Mario64/build/us_pc/res/packs/ # OMM Render96 HD pack
~/Mario64/launch.sh # launcher
~/.local/share/applications/render96-odyssey.desktop (or sm64ex-odyssey)
~/.local/share/icons/render96-odyssey.svg
Launch:
~/Mario64/launch.sh
# or
render96-odyssey # Render96ex
sm64ex-odyssey # SM64EX
# or from your app menu: "Super Mario 64 - Render96 EX (Odyssey)" / "SM64EX (Odyssey + Render96 HD)"| Variable | Default | Description |
|---|---|---|
ENGINE |
prompt (render96) |
Base: render96 (Render96ex) or sm64ex (aliases: r96, ex, sm64; also BASE/R96/SM64EX) |
ROM_ZIP |
auto-detected / prompt+search | Path to ROM .zip/.z64/.n64/.v64 (prompt if not found) |
FINAL_DIR |
~/Mario64 (prompt) |
Where the compiled game is moved to (prompt; empty = ~/Mario64) |
BRANCH |
tester (r96) / master (ex) |
Base branch (override per engine) |
JOBS |
nproc |
Parallel make jobs |
SKIP_DEPS |
0 |
1 to skip dependency install |
SKIP_MODELS |
0 |
1 to skip DynOS/OMM model packs |
FORCE |
0 |
1 to force clean rebuild |
ALLOW_REJECTS |
0 |
1 to continue even if patch hunks are rejected |
Example:
ENGINE=sm64ex ROM_ZIP=~/roms/sm64.zip JOBS=8 ./install.sh
ENGINE=render96 FINAL_DIR=~/Games/Mario64 ./install.sh- HD textures/models: already installed for both bases (Render96 packs)
- Render96ex: Pause → DynOS → Packs → enable
Render96_DynOS_v3.25 - SM64EX/OMM: Options → Model Packs →
Render96_DynOs_v3.25 - Odyssey moves: already active (Cappy, captures, roll, dive, cap bounce…)
- Controls: Options → Controls (keyboard / gamepad)
- You must own the original game. This project does not distribute ROMs.
- PortMaster is not used — it targets handheld CFWs and has no desktop Linux port for Render96ex.
- Idempotent: re-running is safe; use
FORCE=1to force a fresh clone/build.
Installer scripts: MIT. Game assets and Render96ex/OMM retain their original licenses.