github Zorkats/G-Diffuser v1.1.0
Release v1.1.0 - The "I skip Releases" Edition

4 hours ago

Sorry to keep you all waiting! University has me very busy.

Please make sure to read all the new features and fixes, and the warning in the Upgrade Notes section.

1.1.0 is the content-and-customization release: a Workshop for sharing tracks, machines, ghosts
and mods, Course Edit and input upgrades, a post-processing shader pipeline, and a batch of
long-standing bug fixes. It also adds experimental support for importing courses and machines
straight out of emulator disk images, and for playing ROM hacks. Save data from 1.0.x carries
over untouched.

Highlights

  • Workshop > Content Library: export tracks and machines from the 64DD disk as .gdxc
    files, import ones you receive, and move the whole Edit Cup as a single bundle.
  • Shader pipeline: RetroArch .slangp presets (CRT Royale, crt-geom, most of the
    libretro slang pack) with live-editable parameters and custom preset saving.
  • Course Edit and Create Machine mouse support: place and steer with the mouse,
    including optional mouse steering while test-driving.
  • Mod framework growth: model packs, sequence/sample/soundfont audio packs, Lua
    script packs, per-tile atlas overrides, and pack ordering.
  • Experimental: import content from a 64DD disk dump without a conversion step, and
    play ROM hacks packaged as .o2r archives.

New features

Workshop & content

Feature What it does
Content Library Lists tracks/machines on the disk; export to exports/<name>.gdxc, import back, share files with other players
Edit Cup bundles Export CENT + its tracks as one .gdxc; import registers the whole cup
Ghost library names Ghosts show machine and track names instead of raw IDs
Model packs (F4a) Replace stock machine models via Workshop packs
Audio packs Sequence (stage 2), sample (stage 3) and soundfont (stage 4) replacement packs
Lua scripting v1 Workshop.Scripts runs Lua packs; example: docs/examples/lua/lap_timer.lua
Pack ordering Workshop.PackOrder decides which mod wins on conflicts, with Up/Down UI
Atlas per-tile overrides Texture packs can override individual atlas tiles by containing range
CI4/CI8 tooling palette_key manifest column + TLUT swatch in gen_texture_pack.py
EK static asset override ek/<symbol> keys replace Expansion Kit assets

Experimental

These are new, they work on real content, and they are marked experimental because the failure
modes are not fully mapped yet. Nothing here can damage your existing data: disk images and ROMs
are only ever read, and your stock save is never touched.

Feature What it does
Import from a disk image Content Library reads tracks and machines straight out of a 64DD disk dump from an emulator or console, with no .gdxc conversion step. Accepts .ndd, .ndr, .d6r, .n64dd (Project64, Mupen64Plus, RMG, ares, 64DD Dump Tool), .disk and .disk_save (ares, MAME, RetroArch), .d64, and raw .ram partition dumps (MiSTer). The extension is not what decides: the image is identified by its size and filesystem, so a renamed dump still opens.
ROM Hacks Play a hack packaged as an .o2r archive from mods/~romhacks/. One hack at a time, each with its own save file, so stock progress is never touched. The selection is latched at boot, so a change takes effect on the next launch.
Build a hack archive Point G-Diffuser at a ROM that already has the hack patched into it. It reads that ROM with the base game's recipes and writes an .o2r into mods/~romhacks/. Your ROM is only read, never written. US rev0 base only.
Hack course names, subtitles and music Track names, subtitles and per-course music now come from the hack rather than falling back to the retail game's. Extracted into the archive, so a hack is still a single file.

Course Edit & gameplay

Feature What it does
Course Edit mouse (S1-S5) Full mouse workflow in the editor
Mouse steering (#18) Steer with the mouse in-game; sensitivity CVar included
Test drive machine/engine (F6) Pick the machine and engine used in Course Edit test drive
OFFICIAL Back Official courses return cleanly to the menu flow
Ending venue (F8) Choose the venue for the ending ceremony
Widescreen test drive (F7) Test drive renders in widescreen
Random opponent colors (F1) Shuffles rival machine palettes per race
Palette editor (F2) Edit machine palettes and persist them
Custom grid (F3) Define the starting-grid roster yourself
Aggressive AI (F5) Gameplay.AiAggression slider
Effect colors (F9) Boost, dash-pad, side-attack and ghost-boost color pickers
X Cup seed codes (M3) Enter/share seeds for the generated cup

Input & UI

  • Gamepad seating G1-G3: assign pads to players, auto-assign on connect.
  • Rumble (#15): motor support through __osMotorAccess.
  • Menu gamepad navigation batch (D1/D4/D5/D9).

Graphics

  • Slang shader pipeline: multi-pass .slangp presets on both D3D11 and OpenGL,
    with pass outputs, feedback, history, LUT textures and per-pass sizes wired up.
  • Shader parameters are editable live from the menu and persist as CVars; custom
    presets can be saved as new .slangp files.
  • Shaders are user-installed: drop preset folders under shaders/ next to the
    executable. There is no built-in downloader; the libretro slang-shaders pack has
    no repo-wide license, so I do not bundle or fetch it.

Playtime & achievements

  • Playtime tracking plus 26 local achievements (F10), persisted to saves/.
  • RetroAchievements (F11) is not in this release, because RetroAchievements staff
    have not responded to my messages yet.

Bug fixes

  • #34 Ghost data endianness (byteswap) fixed; ghosts load correctly.
  • #15 Rumble implemented.
  • #18 Mouse steering.
  • Shader menu no longer rescans thousands of files on a timer (the FPS tank when
    entering the Shaders menu with a large pack installed).
  • "Reset to defaults" in shader parameters now resets the current shader's
    parameters instead of switching to a different shader.
  • Shader parameter sliders apply live (no shader reload needed).
  • Preset parser: #reference chains resolve relative to each referencing file
    (nested preset folders work), multiple references per preset, long paths on
    Windows.
  • Slang translator: interpolation-qualified varyings (noperspective), shaders
    that shadow builtins (SourceSize globals/locals), UBO instance prefixes that
    collide with local struct variables, and self-defined builtin macros all
    translate correctly now.
  • A shader that fails to translate or parse no longer crashes the game; the frame
    renders unfiltered and the failure is logged.
  • Disk image search also accepts the baserom.translated.ek.nnd filename variant.
  • A freshly built ROM hack archive no longer warns that it is stale or incompatible.
    The mount-time check classified archives by filename, so a hack was measured against
    the texture-pack schema version instead of the ROM CRC it correctly carries.
  • ROM hack archives now report failures instead of loading nothing silently, and the
    ROM Hacks panel has an Open folder button for installing a hack someone else built.

Known issues and limitations

Shaders

  • .glslp and .hlsl presets are not listed or loaded; the pipeline is .slangp only.
  • Very large shader chains (Mega_Bezel ADV class, 40+ passes) translate but may not
    render correctly under OpenGL (texture-unit budget) and are heavy under frame
    interpolation; the interpolation scheduler will shed sub-frames to protect game
    speed, which shows as a lower, quantized FPS (for example ~130 with crt-geom).
  • Shaders relying on typed (non-float) uniforms are unsupported, for example
    koko-aio's final_pass rotation uniform.

ROM hacks

  • Only assets and courses come across. G-Diffuser runs the decompiled game's own
    code, so whatever a hack changed in code does not run. Physics, AI, rules and menu
    logic stay vanilla.
  • A hack has no reference archive to be checked against, so an asset that reads as
    valid but is wrong cannot be detected when the archive is built. Booting it is the
    only way to find out.
  • Building a hack archive requires a US rev0 base; JP is not supported.
  • Course names, subtitles and music are read from fixed table offsets. A hack that
    relocated those tables falls back to the retail text rather than showing garbage.
  • Expect visual glitches in hacks that changed things the recipes do not describe.

Other

  • Frame interpolation camera smoothing (GDX_INTERP_CAMERA) remains behind a dev
    gate.
  • Intermittent race-entry crash (~1/13) is still under investigation.
  • G-Diffuser-JP build remains untested this cycle. Please, if you value your ears,
    do not try to use the JP build right now.

Upgrade notes

  • The About menu now reports version 1.1.0.
  • The asset archive gained an entry this release, so an archive extracted by 1.0.x no
    longer matches and is rebuilt on first launch. Keep your ROM where setup put it.
    Without it, G-Diffuser sets the old archive aside and falls back to the raw ROM.

Don't miss a new G-Diffuser release

NewReleases is sending notifications on new releases.