Skip to content

v1.4.1-hotfix

Latest

Choose a tag to compare

@github-actions github-actions released this 18 Jun 03:39

Hotfix: P2 frozen on Master Hand in Co-Op Classic mode, added 2P for challenger fight, added contributors to port credits menu.

I'm really excited to bring this release to everyone. There's a host of new features and quality of life improvements from myself and a lot of other contributors.

Headline: This is the modding release. It ships a native C mod system that works on Windows, Linux, and macOS, with documentation and example mods. Alongside it: Classic Co-op (2-player local Classic mode), a music shuffler + selection screen, Z-cancel assist options, the hi-res texture pack is supported on Android, and a fix that makes the game fill the whole window.

New Features

1. Native C mod support - cross platform

The big feature. Write mods in C, compiled at runtime through TinyCC, packaged into .o2r, with hot-reload for development and tooling to convert PNG/WAV assets. Brought to you by @Mickemoose, with expansion to cross-platform by me.

  • Engine foundation — runtime TinyCC compilation, .o2r packaging, hot reload, asset converters.
  • Cross-platform hook backend — replaced the Windows-only MinHook with funchook (Windows x64, Linux x64/arm64, macOS arm64) behind the existing per-mod hot-reload chain interface. Bundled-capstone bumped 4.0.2→5.0.1 so it builds on CMake ≥ 4.
  • macOS Apple Silicon detours — lifted all three W^X barriers that blocked runtime prologue patching on signed __TEXT (mach_vm_protect + VM_PROT_COPY, JIT entitlements, Mach-O maxprot rewrite). True three-platform parity.
  • Character mod hooks (#230) — fighter registry + FighterEvent surface, reloc/byteswap support for mod-supplied data, and the CharacterEngine hook path.
  • Engine data exports for modsgGCCommonLinks accessor and the MP ground-collision data pointer exposed through the mod bridge (stage bounds, fighter list).
  • The event system (port/hooks/, EngineEvent + FighterEvent) ships on every target; only TinyCC scripting is gated off on Android (DISABLE_SCRIPTING).

2. Classic Co-op - 2-player Classic mode (#229)

Bring a friend to play the original Classic mode with you. Friendly fire can be enabled or disabled. Original CSS assets are reused at runtime for a truly native feel. Your P2 appears in the VS screen along with you prior to each stage. The feature is enabled by default, from me..

3. Music shuffler + music selection screen

Randomize the stage background music or select a track yourself from a new in-game selection screen in VS modes. From @the-outcaster

4. Z-cancel assist options (#219)

Checkbox options for Auto Z-Cancel and Flash on Failed Z-Cancel. Practice practice practice! By @the-outcaster

5. Hi-res texture support on Android + in-place .zip packs (#235)

The SSB Reloaded texture pack can now be dropped into your mods folder as the .zip it's distributed as.

On android, you can enable hi-res support in the menu. Download the .zip. Then, on your phone screen, hold the BattleShip icon to select the hi-res pack.

Quality-of-Life improvements

  • Input & controls UI cleanup (#216) — renamed the input/controls tabs and widened the ESC-menu left column for readability. (the-outcaster)
  • Modding guide + worked example (#234)docs/modding.md: the three extension models (event listeners, function detours, fighter query/override events), a full firing-site event catalog, gotchas, plus the playertint example mod (per-player fighter tint via FighterEnvColorQueryEvent). Makes the new mod system actually discoverable. From @Zorkats
  • Per-PR cross-platform CI build gate (#233) — compiles the ssb64 target on Windows/Linux/macOS for every PR and push to main, catching platform-specific breaks (e.g. Windows-only mod loaders) before review. From @Zorkats

Bug Fixes

  • Game now fills the window — SSB64 bakes a 10px title-safe overscan inset on every side; on a desktop window that showed up as a black frame. Cropped at present time in Gui::DrawGame, with a Crop Overscan Border toggle + H/V sliders under Settings → Enhancements (default on; skipped in pixel-perfect mode).
  • Multi-gamepad "second pad dead" family — plug-and-play port routing no longer reverts on device events; the Nth new pad auto-assigns to the first free port; ports 2–4 get default mappings at init; identical controllers get unique input-editor IDs.
  • Crash-handler lost its backtrace — the readability probe wrote to /dev/null, which never copies from the source buffer, so it reported every address readable; the FP walk then stepped onto a coroutine guard page and SIGBUS'd inside the signal handler. Reworked to probe via a self-pipe (real EFAULT). Coroutine-stack crashes now produce a full backtrace.
  • Yoshi's Story clouds vanished when stage hazards were disabled (#220) — Yoshi's Story is whitelisted from the hazard process-pause and its cloud-evaporation timer is frozen instead of stopped. From @the-outcaster

Contributors

@Zorkats had his first contribution to the project!

Full Changelog: v1.3...v1.4