• v0.3.8 f92dd93a15

    v0.3.8 Stable

    intpa released this 2026-10-14 06:36:04 -04:00 | 213 commits to main since this release

    0.3.8 — ImGui backend from the Forgejo fork, trimmed

    The embedded ImGui backend is now built from the fork intpa/imgui-smash (branch deluxe, commit 7f0e47c): upstream Coolsonickirby/imgui-smash bb47b205 plus the renderer correction that used to be a local patch, with the Dear ImGui demo and metrics windows, the debug tools and two unused default fonts removed. The displayed font (JetBrains Mono NL) and the ig* ABI are unchanged, so the overlay looks the same and still borrows a standalone libimgui_smash.nro when one is present.

    0.3.7 0.3.8
    Archive libimgui_smash.a 17,181,302 13,851,556
    NRO size 1,896,448 1,531,904
    .text 1,402,336 1,179,744
    .rodata 343,120 225,200
    .data 69,912 48,864
    .bss 138,672 131,568
    Resident image 1.95 MB 1.59 MB

    Deluxe's own code is unchanged. patches/imgui-smash/archive-pin.json now points at the fork and applies no patch; tools/prepare_imgui.py treats the patch step as optional.

    Standalone companion. The same fork commit builds the standalone backend plugin: libimgui_smash.nro 888,832 B (was 1,282,048), SHA-256 a3f794b2d2af15d5f2c2868f22e81c865702524160640864604731b7afe6775d, identical export set, 1.92.7 WIP (19263) tag and text_offset == 0. It is not a release asset here; it ships from the fork.

    Eden acceptance (2026-10-14): external host (trimmed standalone + Elite Legal Stages), embedded host, and reversed load order all render Deluxe's Debug and settings views and Elite's stage list cleanly at 60 fps with no asserts. Evidence in the tangent directory imgui-fork-1014/eden-test/.

    Gates: 303 host tests, host and Skyline Clippy with warnings denied, cargo build --no-default-features, rustfmt, tools/test_prepare_imgui.py, Skyline release build.

    Asset SHA-256 Size
    libssbu_online_deluxe_rewrite.nro c247bd377a4220233c4bf56470d23a6ea267b752b99cfd02eb3b26b480557222 1531904

    Build 0.3.8-5c97c9c935fe-1791974104, module 34009bd1fe3ac9b329b74635e8738496e84bdde82cbde6e1adc71322d41c251b, game 13.0.5. manifest.json carries the ELF, source-archive and imgui archive digests.

    Downloads
  • v0.3.7 0c8a0492dc

    v0.3.7 Stable

    intpa released this 2026-10-13 22:39:10 -04:00 | 216 commits to main since this release

    0.3.7 — runtime footprint trims

    What the plugin holds while the game runs, after a symbol-level pass over the 0.3.6 ELF:

    • Diagnostics thread stack 2 MiB → 256 KiB. The Switch std gives every Rust thread a 2 MiB stack from the game heap unless the spawner sets one; Deluxe never did. About 1.75 MiB of heap back for the whole run. Hardware check: heartbeats keep arriving in hang-trace.log, no crash report naming deluxe-diagnostics.
    • Pia RTT station table allocated on first use. The 107 KB table (253 stations × 100-sample ring) lived in .data; it is now allocated by the diagnostics poll after the first RTT sample of the process and never exists offline. Until it exists the overlay shows exactly what an empty table shows (tested).
    • API trace chunks 4096 → 2048 rows (80 KiB .bss); still ~1.9 s per chunk at the measured hardware rate against the 500 ms drain.
    • Callback capture buffer (64 KiB) allocated per capture and freed after export; the render path still never allocates.

    Sections .text 1402336 / .rodata 343120 / .data 69912 / .bss 138672; resident image 1.95 MB (0.3.6: 2.21 MB). With the stack the steady-state cost drops by about 2.0 MB.

    Not in this release: the embedded imgui backend trims, which are being prepared in the fork intpa/imgui-smash for both the embedded archive and the standalone companion plugin.

    Gates: 303 host tests, host and Skyline Clippy with warnings denied, cargo build --no-default-features, rustfmt, Skyline release build.

    Asset SHA-256 Size
    libssbu_online_deluxe_rewrite.nro 8562746a292942cf23df19f9e6781cc37b623dda305337161b730e14813707ea 1896448

    Build 0.3.7-61d022bdc3db-1791945438, module c4beb790b8effb2e07ab4676fabab248c8c8733fcef47ab0abe332931f1dd5f7, game 13.0.5. manifest.json carries the ELF and source-archive digests.

    Downloads
  • v0.3.6 8420b3175e

    intpa released this 2026-10-13 19:54:54 -04:00 | 220 commits to main since this release

    Kernel memory probe. Every hang-trace heartbeat now carries mem_used, mem_total, mem_free and heap_region in bytes from svcGetInfo on the game process (TotalMemorySize, UsedMemorySize, HeapRegionSize), refreshed every 500 ms by the diagnostics thread and shown as a Memory row in the Debug view's Performance table. No hook changed; the UI path makes no system call. The same call works under Eden, so console and emulator headroom compare directly.

    Build 0.3.6-c45b2f91b4ee-1791935605. NRO SHA-256 792d88778925c0e6963cf5bead29b1158f73f1b535c59948ae20fef93938c5e4 (2002944 B). Gates: 301 host tests, host and Skyline clippy with warnings denied, no-default-features build, fmt, Skyline release build. See docs/VALIDATION.md "0.3.3" (0.3.6 paragraph) and docs/DEBUGGING.md "Hang trace".

    Downloads
  • v0.3.5 282ea4617a

    intpa released this 2026-10-13 18:32:04 -04:00 | 223 commits to main since this release

    The API trace no longer holds a capture in memory. Rows are packed to 20 bytes and streamed: hooks fill one of two 4096-row chunks (160 KiB in .bss, the whole resident cost) while the diagnostics thread drains the other into the open api-.csv every 500 ms. Nothing is copied at the end. Capture length is bounded by the 30 s duration, not by capacity; rows that arrive while both chunks are full are counted in skipped.

    CSV: header written when the capture arms; engine, reason, skipped and event_count move to the footer before "# complete=1". tools/analyze_render_trace.py reads metadata anywhere and is unchanged.

    Release profile opt-level = "s": .text 1590896 -> 1401296 B. Idle resident image 2.21 MB (0.3.2: 3.99 MB); a running capture adds about 190 KB where 0.3.3/0.3.4 added 2 MiB plus a 2 MiB copy at export.

    Build 0.3.5-ee936bc148d5-1791930600. NRO SHA-256 6b22546e0a0579011f37c3ff3780e7a9f9955226195424ff02665ad142a65dfb (2002944 B). Gates: 300 host tests, host and Skyline clippy with warnings denied, no-default-features build, fmt, Skyline release build. See docs/VALIDATION.md "0.3.3" (0.3.5 paragraph).

    Downloads
  • v0.3.4 69c101bb82

    intpa released this 2026-10-13 18:11:00 -04:00 | 226 commits to main since this release

    Follow-up to 0.3.3: the per-capture API trace allocation is now fallible. Arming a timing or CSS capture on a game heap that cannot spare 2 MiB is refused and reported as "timing capture could not be armed" instead of aborting the game. Nothing else changed; resident footprint stays 2.23 MB.

    Build 0.3.4-f1d570ccb074-1791929407. NRO SHA-256 f514bfe81f142541e5211bc2a9302581fc0d162159d111d5ebd56df41a2042de (2183168 B). Gates: 298 host tests, host and Skyline clippy with warnings denied, no-default-features build, fmt, Skyline release build. Not yet run on hardware. See docs/VALIDATION.md "0.3.3" (0.3.4 paragraph).

    Downloads
  • v0.3.3 1673592ba2

    intpa released this 2026-10-13 17:41:25 -04:00 | 230 commits to main since this release

    Resident footprint 3.99 MB -> 2.23 MB. 0.3.1 kept the 65536-event API trace in .bss; 0.3.3 allocates it on the diagnostics thread when a timing/CSS capture is armed and frees it after the CSV export. No capture, hook, flag or overlay row changed.

    Context: 2026-10-13 evening console boots (0.3.2 + Training Modpack r31 + the OBS companion's trace build) failed before the title with null-pointer faults in unrelated game threads and no plugin frame on any stack, the pattern of a game heap the loaded plugin set has outgrown. This release removes Deluxe's 1.9 MB share of that growth. Not yet run on hardware.

    Build 0.3.3-528137cdff51-1791927586. NRO SHA-256 e930c8f34d1752bf24b1819cc8b86322abef3c2303ef50f3ef8544a5ae9d25f3 (2183168 B). Gates: 298 host tests, host and Skyline clippy with warnings denied, no-default-features build, fmt, Skyline release build. See docs/VALIDATION.md "0.3.3".

    Downloads
  • v0.3.2 3c7944230c

    intpa released this 2026-10-13 13:19:55 -04:00 | 234 commits to main since this release

    Always-on hang-trace.log for loading-screen freezes: a 5 s heartbeat of this plugin's hook call counts (present, backoff idle pass and sleep, the three CAPTURE_CSS hooks, common-module load/unload, per-fighter tick, cut-in) marking any hook that entered and never returned as ACTIVE with its age, plus first-firing and scene-change lines stamped by system tick. Requested by the Training Modpack freeze investigation. No behaviour change.

    Build 0.3.2-85a756321310-1791911904. NRO SHA-256 73823f8f67d6a3b2d3a0de35814042fa1ecea293fef01dae0828cbc1f6eefd8d (2183168 B), module 63b8b5fb9d494c24eeb1b78c2691c1fb70814d945402c7f38ca62900d28aa8fc. Gates: 298 host tests, host and Skyline clippy -D warnings, no-default build, rustfmt, Skyline release build. Not yet run on hardware or Eden. See docs/VALIDATION.md '0.3.2' and docs/DEBUGGING.md 'Hang trace'.

    Downloads
  • v0.3.1 fc8a65e1d0

    intpa released this 2026-10-12 22:41:36 -04:00 | 238 commits to main since this release

    Character-select capture and backoff eligibility gate.

    • Dispatcher backoff now sleeps only after a scene hook has fired and while the tracked window presented within the last 250 ms; the Performance row reads Armed until then (install log code 102 a=5 marks the first pass). Boot, the logo/movie/title sequence and a stalled renderer run the game's original loop.
    • Opt-in CAPTURE_CSS boot flag (empty file in sd:/ultimate/ssbu_online_deluxe_rewrite/): three read-only hooks (dispatcher registration 0x3549720, dependency wait 0x354ccd0, UI job 0x375e260) and an automatic 30 s capture on each character-select entry. Keep the hand still for ten seconds, then move it for twenty. New api-<tick>.csv rows: 60/61 per-frame actual backoff sleep totals, 62/63 read-only thread priority and core mask, 64 UI dispatch, 66 dependency waits, 77 UI job span. Nothing is set or reordered. Without the flag these hooks do not exist.
    • Manual L+R+Up capture lasts 30 s; the API trace holds 65536 events in .bss, so the NRO is smaller than 0.3.0.
    • tools/analyze_render_trace.py reports a css_capture section.

    Smash 13.0.5. NRO SHA-256 9511e8c0f7946bd50434d78f7607283a84f13d299dfe6e6e2aad88c77b43e840 (2174976 bytes, build 0.3.1-00660a3d63cc-1791859184). Hardware validation of the character-select capture is pending; see docs/VALIDATION.md.

    Downloads
  • v0.3.0 f636df2980

    intpa released this 2026-10-12 15:59:32 -04:00 | 240 commits to main since this release

    Dispatcher idle backoff: the character-select slowdown fix, applied to all profiles and scenes.

    Root cause (Astra xhigh trace): the game's task dispatcher (main+0x354a6d0) busy-polls six empty job queues while the main thread waits ~4.8 ms per CSS frame on one nn::ui2d::Layout animation job (main+0x375e260, worker 1); in a match the same wait is ~0.9 ms. The two-image LessLag ring cannot hide the resulting variance. This release adds one inline hook at main+0x354ab48 that lets MainThread sleep briefly (5 us doubling to 50 us after 16 spinning passes) only when every queue is empty, every pending counter is still non-zero and no fiber is ready to resume. No job, counter, lock or ordering changes. Performance view gains a "Backoff" row; DISABLE_BACKOFF flag and dispatcher_backoff.ini tunables documented in README.

    Eden production A/B/A (175% CPU quota): CSS LessLag 55.6 -> 60.0 -> 54.2 fps (off/on/off) at 26.6 -> 19.5 -> 26.8 CPU ms/frame; Vanilla 60.0; live match 59.8 fps at 16.3 CPU ms/frame; unlimited 60. Installed on the Switch 2026-10-12 19:58Z; hardware observation pending (docs/VALIDATION.md).

    Standalone version: https://git.syntaxbyexample.com/intpa/ssbu-dispatcher-backoff (one owner per hook site; do not stack both).

    Assets: libssbu_online_deluxe_rewrite.nro SHA-256 f22d94950be1b4601ad9137a8d87acf6eccf2ec599eb48812e6f386f8e7403d8 (2465792 bytes, build 0.3.0-8aeaa5391343-1791833455, module cac8cc1b...ca31) and its manifest.json.

    Downloads
  • v0.2.1 d16895edba

    intpa released this 2026-10-12 12:44:26 -04:00 | 245 commits to main since this release

    v0.2.1: defer host persistence until a pending plugin change is applied

    Pinned reference for plugin consumers. Crates at this tag: deluxe-plugin-abi
    2.0.0, deluxe-plugin-sdk 2.0.0 (unchanged from v0.2.0); host crate 0.2.1.
    Change versus v0.2.0: a REQUEST_PENDING answer no longer writes the plugin
    INI; the host persists when it observes current(option) equal to the pending
    choice (checked every overlay draw, page hidden or not) or when a later
    request on that option returns REQUEST_APPLIED; stepping a pending change
    back to the live value cancels it and writes nothing. APPLIED unchanged.

    Clean host NRO built from this exact tree:
    build_id 0.2.1-aa8c33ff469b-1791823438
    file libssbu_online_deluxe_rewrite.nro
    sha256 eb87feb1cbcbc2b2c4f4adbe15008d424def377fe2e1d854eaaf880c7ef69f88
    size 2453504 bytes
    module_id 8e8e9491d0eddd5891357113cf68ca83b8f5fe0f1a82f6717eedc875f455977f
    elf sha256 d3e08612f7a6017c06d49e08bc7b35c0c938946a35f15bb333ce077d518d0b36
    Game 13.0.5. 286 host tests + SDK round-trip; host and Skyline Clippy -D
    warnings; no-default build; rustfmt; Skyline release. Not installed on
    hardware (the Switch has d773).

    Downloads