Debuggable single-NRO Smash Ultimate Deluxe reconstruction with targeted FX controls
  • Rust 93.2%
  • Python 6.3%
  • PowerShell 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
crashbandicode effbaa0466 Docs: record the 0.10.2 release assets and card install
Release 648 (NRO, manifest, SHA256SUMS.txt) matched anonymously; the clean tag
build is byte-identical to the Eden-tested one. Installed over hekate UMS at
17:15Z (installed_verified, verified_in_place); rollback archive on the card.
README links 0.10.2.
2026-11-02 12:22:10 -05:00
config Docs: refresh compatibility and Switch validation 2026-10-24 20:45:33 -04:00
docs Docs: record the 0.10.2 release assets and card install 2026-11-02 12:22:10 -05:00
patches/imgui-smash License: patches/imgui-smash keeps imgui-smash's license (GPL-2.0) 2026-11-02 06:07:54 -05:00
reference Drop the FX dev tooling: eff-variant crate, family generator, FX target lists 2026-10-14 16:46:21 -04:00
sdk License: the plugin SDK (sdk/) is MIT 2026-11-02 06:03:03 -05:00
src Version 0.10.2: Elite Smash stages are online from their stage load 2026-11-02 09:50:19 -05:00
tests Build as a cdylib only so the release profile's LTO applies 2026-10-30 22:44:08 -04:00
tools tools: hoc-standin, a test-only protocol v1 stand-in for Eden runs 2026-10-27 18:22:42 -04:00
.gitattributes Start single-NRO Deluxe rewrite with diagnostics and targeted FX controls 2026-10-05 12:07:08 -04:00
.gitignore Add plugin registration API, Plugins page and SDK; record inherited work 2026-10-12 08:26:25 -04:00
AGENTS.md Docs: character FX is the separate ssbu-fx-control plugin 2026-10-14 16:50:09 -04:00
build.rs Build the ImGui backend from fork c185303: draw-slot budgets 64 KiB + 16 KiB per slot; 0.3.9 2026-10-14 08:17:20 -04:00
Cargo.lock Version 0.10.2: Elite Smash stages are online from their stage load 2026-11-02 09:50:19 -05:00
Cargo.toml Version 0.10.2: Elite Smash stages are online from their stage load 2026-11-02 09:50:19 -05:00
LICENSE License: AGPL-3.0 for the repository, matching upstream; sdk/ excluded 2026-11-02 06:01:48 -05:00
README.md Docs: record the 0.10.2 release assets and card install 2026-11-02 12:22:10 -05:00
rust-toolchain.toml Start single-NRO Deluxe rewrite with diagnostics and targeted FX controls 2026-10-05 12:07:08 -04:00

Online Deluxe rewrite

AI-assisted, human-directed and reviewed.

Tested in Eden and on an Erista Switch without issues observed. Works with Switch firmware 23.0.1, Atmosphère 1.12.1 and Skyline beta 2eb226f (latest checked 2026-10-25). Validation.

A Rust/Skyline rebuild of Online Deluxe for Super Smash Bros. Ultimate 13.0.5, shipped as one NRO: lower-latency rendering, a small in-game Player Info window and the fork's character-select and network display. No overclocking.

The Player Info Settings window: the You row with eye and TV icons, NetLatency and NetProfile

0.10.2 — download NRO and manifest treats an Elite Smash or Quickplay stage as online from its stage load. 0.10.0 let Window Options show or hide each plugin's own page on its own (one row per page, such as FX Control or CPU Pilot). 0.9.0 put the player modes on the You line (ZR+Left/Right picks Stealth, Streamer or the overclock clock, L+R+X toggles it), treated waiting-room practice as Training and used about 300 KiB less memory. Status and version history.

Install only this NRO. It replaces the original Online Deluxe fork, SsbuSync and the PIA manager, so remove all three. If SsbuSync is still loaded, Deluxe switches its hooks off and you are playing the old fork. Install guide

What it does

A window you can open anywhere

Hold L+R and tap D-pad Down to step through the pages; after the last page the window hides.

L+R+Down cycling Settings, the FX Control companion's two pages, Performance and Window Options, then hiding the window

Settings that need ZR

Select a row with Up/Down, then hold ZR and press Left/Right. A plain D-pad press, a taunt or menu navigation never changes a setting.

Selecting NetLatency, then ZR+Right changing Auto to 0 and ZR+Left restoring Auto

Stealth, Streamer and OC on the You row

The You row carries three player-mode icons: the Stealth eye, the Streamer TV and, with the game-aware Horizon-OC fork, a clock.

  1. Select You.
  2. Hold ZR and press Left/Right to move the light-blue frame between the icons.
  3. Press L+R+X to toggle the framed one.

The eye closes and the TV turns green when they are on. This works in the window and in the match strip. ZR+X, ZR+Y and ZR+L3 were removed in 0.9.0; ZR+L3 had been triggering by accident in online matches.

0.7.0–0.8.1: ZR+X closing the Stealth eye and ZR+Y turning the Streamer TV green, then both switched off again

Horizon-OC only when online

The clock decides when Smash's saved Horizon-OC profile may apply.

Mode Clock
always, as Horizon-OC itself does White
online Green while the profile is applied, grey while it is held back

In online mode the profile stops 15 s after the last player disconnects unless one reconnects. Toggle the mode with L+R+X on the framed clock.

0.8.1: ZR+L3 switching to always, which removed the clock, and back to online, where the grey clock returns

These three clips are from Eden with the test-only hoc-standin answering for Horizon-OC, offline, so the clock stays grey; no clock was changed. The two You-row clips show the retired 0.8.1 chords and have not been re-recorded for 0.9.0.

A compact strip in matches

In ordinary matches the window becomes a two-row strip at the top left.

The in-match strip: You with privacy icons, Net and Profile, then the timing values

On character select, the fork's status line keeps your profile and input buffer, plus the opponent's settings and coloured ping while their station is live. Native display

Lower-latency rendering

Vanilla, LessLag, LLUltra and LLDoubles trade buffered frames for latency, and Auto picks one per scene. The default is Vanilla+. See the profile table and the measured frames.

Plugin pages

Other mods can add rows or a whole page through the exported API and Rust SDK. The separate FX Control plugin adds its character-FX pages this way.

Stepping a Captain Falcon row in FX Control's page from On to Off to Reduced and back to On with ZR+Right

Plugins explains the API, including a plugin's own ImGui windows. Also in the NRO: dispatcher backoff and opt-in timing captures.

These examples are offline Eden captures of 0.7.0 with manual LessLag, vanilla_plus=false and the optional FX Control companion. They show the menu, not online play, Switch performance or FX's gameplay effects. More in Screenshots; sources in Media provenance.

Optimizations added by this rewrite

Two things the original Online Deluxe does not do; both have an INI switch (dispatcher_backoff, early_present, default on). Basics first: How Deluxe LessLag and LLUltra work.

Dispatcher backoff. When the main CPU task keeps finding no work it can do, the rewrite lets it sleep briefly, with growing pauses up to a small limit, so other tasks get the core. Locks and checks stay as they are. The operator also observed its benefit on Switch, alongside the Eden results. How it works.

Dispatcher backoff, before and after

Present at the flush. The game asked for a frame to be shown only after the next frame's CPU update, which could miss a refresh. The rewrite queues the presentation as soon as the frame's commands are submitted. It does not make frames faster to compute; it gives the display more time to show them on schedule. How it works.

Presenting frame 99 before or after CPU work on frame 100

Conceptual timing diagram, not a measured trace.

Before and after in Eden under a CPU quota calibrated to the console's character-select dip (both switches off on the left, on on the right; LessLag, Performance view open):

Scene Both off (upstream behaviour) Both on
Character select, hand sweep Character select, switches off Character select, switches on
Training, LessLag, Pyra Blazing End Training, switches off Training, switches on

The console went from 49.9 to 59.85 fps on the hand sweep with the 0.4.0 fix. Emulator clips show the mechanism, not console numbers; the quota, the clip procedure and the measured values are in Mimicking the Switch in Eden and the console results in Rendering profiles.

Controls

Press Effect
L+R + Down Next page: Settings → plugin pages → Performance → Window Options → hidden
Up / Down Select a row
ZR + Left / Right Change the selected value (shown as < value >); on You, move the light-blue frame between Stealth, Streamer and OC
L+R + X, You selected Toggle the framed mode: Stealth, Streamer or OC (online/always)
L+R + X, NetProfile selected Toggle Vanilla+; with manual console LLUltra, cycle LLUltra → LLUltra+ → LLUltra++
L+R + X anywhere else Nothing: it toggles only what is highlighted
L+R + Plus or Minus Show or hide Debug

Everything else, including 0.6.2's older chords, is in Controls; the You-row icons are drawn in privacy-indicators.svg, and the Horizon-OC clock that follows them (0.8.1) in oc-indicators.svg.

Rendering profiles

Profile Textures Presentation Console Emulator
Vanilla 3 TwoBehind; Vanilla+ (the default) presents at the flush 1080p, DRS off 1080p, DRS off
LessLag 2 OneBehind, presents at the flush 1080p, DRS on 1080p, DRS off
LLUltra 2 Immediate, earlier flush, presents at the flush 576p, DRS on; ultra_resolution raises it to 720p or 1080p (0.7.0 menu labels: LLUltra+ / LLUltra++) 1080p, DRS off
LLDoubles 3 OneBehind, presents at the flush 1080p, DRS on 1080p, DRS on

Auto uses Vanilla in menus, offline matches and Training; online singles get LessLag on console or LLUltra on emulator; online matches with more than two fighters get LLDoubles. How Auto recognises an online match, the cleanup hold (Vanilla*) and DRS are in Rendering profiles.

Measured input delay

Captured frames from a synthetic input to the first visible response in Eden, three trials per cell, on the 0.5.2 build (the earlier builds gave the same normal-phase counts):

Profile Normal phase Later phase Frames saved vs Vanilla
Vanilla 6, 6, 6 6, 6, 6 —
LessLag 3, 3, 3 3, 3, 3 3
LLUltra 2, 2, 2 2, 3, 3 4 normal, 3–4 later
LLDoubles 4, 4, 4 4, 4, 5 2 normal, 1–2 later
Vanilla: 6 frames LessLag: 3 frames LLUltra: 2 frames LLUltra, late press: 3 frames
Vanilla input to crouch LessLag input to crouch LLUltra input to crouch LLUltra input to crouch, input late in the frame

These are emulator captures with synthetic input, not Switch input-to-photon measurements. Method, every trial and the caveats: LATENCY_METHODOLOGY.md; full results: PERFORMANCE.md.

Configuration

sd:/ultimate/ssbu_online_deluxe_rewrite/config.ini, created with defaults on first boot; menu edits are saved automatically. Keys, boot flags and the Eden overrides are in Configuration.

Diagnostics

Logs live under sd:/ultimate/ssbu_online_deluxe_rewrite/ (install.log, events.log, hang-trace.log, renderer-status.txt, panic.log). Keep the exact NRO and its debug bundle when reporting a crash. Event codes, log formats, bisection flags and the Eden test lifecycle are in Debugging.

Build

cargo clippy --all-targets -- -D warnings
cargo build --no-default-features
cargo test
cargo skyline clippy -- -- -D warnings
/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -Command '& ./tools/Build.ps1 -Package'

Toolchain, native dependency and release steps: Build.

Documentation

Topic Document
Install, coexistence with other plugins, rollback INSTALL.md
Controls and the settings rows CONTROLS.md
Screenshots and GIFs SCREENSHOTS.md
Media builds, encoding and scope MEDIA_PROVENANCE.md
Rendering profiles, Auto, present-at-flush, measured results RENDERING.md
Mimicking the Switch in Eden (CPU quota bias for clips and A/B runs) EMULATOR_METHOD.md
Native character-select and arena display NATIVE_DISPLAY.md
Dispatcher backoff DISPATCHER_BACKOFF.md
How another plugin plugs in (menu rows, or its own ImGui windows) PLUGINS.md, sdk/README.md
Timing captures CAPTURES.md
Configuration keys and boot flags CONFIGURATION.md
Logs, event codes, crash diagnosis, Eden test lifecycle DEBUGGING.md
Performance measurement method and results PERFORMANCE.md, LATENCY_METHODOLOGY.md
Build, toolchain, release BUILD.md, IMGUI_DEPENDENCY.md
Validation ledger (every build, install and console result) VALIDATION.md, STATUS.md
Fork provenance and deliberate differences reference/README.md, FORK_PARITY.md

License

This repository is licensed under the GNU Affero General Public License v3.0 (LICENSE), the same license as upstream saad-script/ssbu-online-deluxe.

Exceptions, not covered by LICENSE:

  • sdk/: the plugin SDK in sdk/ (deluxe-plugin-abi, deluxe-plugin-sdk and the demo plugin) is original work and is not derived from upstream. It is licensed under the MIT License (sdk/LICENSE).
  • patches/imgui-smash/: these files modify, and build, the C++ library of Coolsonickirby/imgui-smash (bb47b205). They keep imgui-smash's license, the GNU GPL v2 (patches/imgui-smash/LICENSE, copied verbatim from imgui-smash/LICENSE at bb47b205).