Repository navigation
Releases
Nightly 1.2.3-nightly.20261113.4f93206
Automated build of 4f93206 from the default branch, version 1.2.3-nightly.20261113.4f93206.
Nightlies get no manual testing. If something breaks, the latest tagged release is the stable build.
Changes since the previous nightly
G-Diffuser 1.3.0-rc1 - Making G-Net foundations.
Release candidate. This is the first test build of 1.3.0. It adds a lot of new features, and most of them have passed automated checks so far, with them being tested by me personally but NOT all of them. Please report anything that breaks on the issue tracker, with your platform and what you were doing.
Back up before upgrading
Close the game and back up the complete save set (your saves folder), not only the GDD. Keep the GDD, its recovery and snapshot directories, and the course-* files together.
Tracks that use the new wind or CPU aggression settings save a newer settings block that 1.2.x cannot read. Tracks that do not use them stay readable by older builds. Keep your backup if you might go back to 1.2.x.
New: G-Diffuser Companion (Windows and Linux)
The Windows x64, Linux x64 and Linux arm64 downloads now include the Companion, a separate desktop program in the companion folder inside your G-Diffuser folder. It builds the files G-Diffuser loads and checks every input before it builds. It never edits your settings, saves or stores.
- Music: install replacement music. Set the loop on a waveform, let Find loop points suggest one, and hear the loop seam before you install. The Companion measures each song's loudness and writes it into the file, so the game can play it at the stock music level. It keeps the file it replaces.
- Textures: build texture packs from your edited dump.
- Models: build machine model packs.
- Tracks: bring in tracks from other players' disk images.
- Inspect: open a pack someone else made, see what is in it, and unpack it to study it.
- Advanced: native sample, sequence and soundfont packs.
No Python install is needed: the Companion carries its own worker. On Linux, Browse... uses kdialog on KDE and zenity elsewhere; without either, type the paths. The Linux arm64 build has not been tested on a device yet. The macOS download does not include the Companion yet. Guide: docs/COMPANION.md.
Course Edit
- Wind, set per segment. Place the WIND part on a segment and pick Weak, Mid, Strong or Gale, or CLEAR to remove it. Windy segments show chevron plates on the road and cloud streaks, and the compass sets the wind's direction.
- Super (blue) and Brake (red) dash pads, with an adjustable pad width. Super boosts harder and a little longer. Brake cuts your speed. CPUs do not aim for Brake pads.
- CPU aggression per track: Track, Calm, Normal, Fierce or Brutal. Fierce is 1.5x and Brutal doubles it.
- Test drive a track with 0 to 29 CPUs.
- Staff times now survive editing. Keep staff time after editing (Enhancements > Course Edit & Machine) is on by default, and a faster Time Attack run still replaces the staff time. Clear staff time in the Content window lets a slower run replace it.
- Staff ghost: the Time Attack run that sets a staff time keeps its replay, and Edit Cup races show it as a STAFF ghost.
- Staff splits: on tracks paced by their creator, Expert and Master CPUs follow the staff run checkpoint by checkpoint from lap 2.
- The course intro shows BY and the author's name.
- Signed tracks. A track you made here and export is signed with your key. On import, a track whose signature fails is dropped. Signed tracks show SIGNED after the author's name, and the Content window shows the Signed by key line. Signing keys stay on your machine.
Modes and multiplayer
- Death Race (Enhancements > Death Race): Death Race course select opens the course screen, so any course can host it, X Cup and Edit courses included. Death Race laps sets 0 to 99 laps, and each course keeps its own records. The result screen shows WINNER or LOSER.
- Split-screen Grand Prix (Enhancements > Multiplayer, off by default): at Grand Prix machine select, press Start on another controller to add a player, up to four. Each player has their own lives. Split-screen Grand Prix machines sets the field from 2 to 30. Split cups are not saved for Continue Cup.
- VS drop-in: press Start on a free controller at VS machine select to join.
- G-NET: the main menu is now a 3x3 grid with a new G-NET card (art by Heebeejeebees). It leads to the LAN Lobby: host a lobby, search your network or join by IP, with up to 8 players, a Ready check and a chat with a word filter. Racing over the network is not in this build; the Start button says so.
Profiles and content
- Creator profiles (Online > Profile): create, choose, rename and delete profiles, each with its own colour and machine. Your profile name is the author shown on your tracks.
- Export Everything (F1 > Workshop > Tools): writes one zip in
exports/with your tracks and snapshots, profiles, saves, records and ghosts, settings, mods and music. Signing keys are left out unless you turn them on (anyone with the zip could then sign tracks as you). ROMs and game data are never exported. - Emulator Save Import (F1 > Workshop > Tools, issue #43): bring in a RetroArch
.srmsave. It is accepted only when its checksums are valid, and it is applied the next time you start the game, after a backup of your current save. - Save cup progress (Enhancements > Gameplay, on by default): turn it off to stop saving the Grand Prix cup between races. With it off, the CONTINUE row never shows.
Graphics and audio
- Extended draw distance (Enhancements > Visuals, issue #45): lifts the draw distance slider from 200% up to 400%.
- HD texture packs can now match textures that share an image but use different palettes.
- Match custom music loudness (Settings > Audio, on by default): replacement music that carries a loudness tag plays at the stock music level. The Companion writes these tags on install, and tags from other ReplayGain tools work too.
- The music guide (
docs/modding/CUSTOM_MUSIC.md) now lists all 30 music slots, and explains that the short jingles cannot be replaced with streamed files.
Fixes
- #62: CPUs now race correctly after Continue Cup.
- #33: fixes crackling audio with the LLE audio option when the KO stars play.
- #60: the macOS race slowdown work is in this build. It has not been tested on a Mac yet, so please report whether races still slow down.
- #42: when the asset extractor fails on a YAML file, its error now names the file. This helps us track the problem down; it is not the fix yet.
- Menu text now draws punctuation correctly.
- Expansion Kit tracks can use up to 8 jumps in a race.
Updating
Extract the download over your current G-Diffuser folder. Your saves/, ROM and game data stay where they are. The new companion folder is added next to them.
Full Changelog: v1.2.3...v1.3.0-rc1
G-Diffuser 1.2.3 - Course Editor Hotfix
Fixes
- Correct complete-course snapshot content binding so metadata-only edits do not reuse an incompatible retained snapshot.
- Handle terminal disk-write refusals without trapping Course Edit in its save wait loop.
- Fix the host editor's remaining 64-node admission ceiling. The supported total remains 127 nodes, including forks.
- Restore Content Library layout previews for supported tracks above 64 nodes.
- Adapt native load, overwrite, and delete confirmations to long filenames while keeping normal-size text and the Yes/No controls in place.
- Size the Course Edit information panel dynamically to fit the track title, length, and node count.
Save compatibility — read before updating
Close the game and back up the complete installation save/state set before updating, not only the cartridge .sav file.
This release writes version-2 .gcs snapshots and still reads version 1. Older builds cannot read version-2 snapshots or packages that contain them. Before downgrading, restore the complete matching pre-upgrade save/state backup. Keeping old snapshots alone is not sufficient.
The name limit remains 20 characters. The course budget remains 127 total nodes, including forks.
G-Diffuser 1.2.2 - Save and Import Hotfix
G-Diffuser 1.2.2 - Save and Import Hotfix
- Fix disk-write ownership checks that could prevent Course Edit saves from completing and cause track imports to fail with MFS error 244.
- Preserve snapshot validation, rollback, and recovery protections during save and import operations.
- Add regression coverage using the production disk-write helper, including write failures and rollback.
Back up your installation's save and course-state files before updating. This hotfix does not change the course snapshot format.
G-Diffuser 1.2.1 - The Small Improvements and Fixes Update
Back up before upgrading
Close the game and back up the complete save set (your saves folder), not only the GDD. Keep the GDD, its recovery and snapshot directories, and course-elements.gdxs, course-forks.gbs, and
course-settings.gks together. Do not open snapshot-backed saves in an older executable.
The new, extended tracks that go above the original 64 node limit are not compatible with the original Expansion Kit or older tools.
Course Edit
-
Widen the native course information panel at a fixed size. Keep full 20-character names on
one row and fit three-digit node counts without moving the buttons below it. Dynamic sizing
is deferred. -
Raise the combined main-path and alternate-path control-point ceiling to 127. Geometry,
jump, effect, decoration, and junction budgets still apply; 127 points is not a guarantee
that every layout fits. -
Add complete, content-bound save snapshots for extended courses and complete course/cup
package sharing. Missing or mismatched required snapshot data is rejected rather than
silently loading a truncated course. -
Keep both paths selectable after editor reload and save/reload. Show stored branch nodes
without requiring the Split tool, and separate path selection from point/track settings. -
Improve fork surface ownership and rail clipping to reduce overlapping road faces and
interior rail remnants. This is not a guarantee that every junction or bank transition is
artifact-free. -
Add alternate-path gadget generation and independent outgoing segment parts/settings at
fork starts, while preserving shared-point decorations and enforcing native budgets. -
Add typed Width and Center values alongside Bank: select points and the tool, press Enter,
type a value, and press Enter to apply or Escape to cancel. -
Add optional fork inclusion in minimaps/previews.
-
Correct destination-tangent initialization during contact projection. Add opt-in CPU lateral
avoidance for supported coverage/range hazards, off by default. CPU fork routing and hazard
look-ahead are not included.
Startup
- Fix a startup failure with relative save paths by resolving the snapshot repository path
before acquiring its lock. Keep snapshot validation and recovery locking enabled.
Content and exports
- Expose cached native-machine export in F1 > Workshop > Tools, rather than Content Library.
The native capture includes generated textured geometry and owned referenced resources;
export requires a valid capture first. The static-body replacement workflow is unchanged. - Add confirmed Content Library track deletion with per-track recovery records and manual
Restore. Remove affected cup references and per-track metadata while preserving shared
music. Interrupted confirmed deletion resumes on restart; Restore refuses conflicting later
edits instead of replacing them. - Decode supported foreign saved-disk course data through a shared validated import path.
Improve creator/checksum diagnostics and refuse source images changed since inspection.
A Project64 savestate is not a saved disk; creator and checksum validation remain enforced.
Music and setup
- Use one
music/folder beside the executable for streamed game replacements and selectable
course songs. Recognized slot names, such asbgm_select.flac, replace game music; ordinary
names, such asCustom Course Edit Song.ogg, appear in the course music controls after restart. - Give
music/priority over legacy locations. Old music folders remain readable fallbacks;
existing recordings are not automatically moved or deleted. New course imports usemusic/,
preserve content conflicts under fingerprinted names, and protect reserved replacement names. - Create supported drop folders on first and subsequent startup:
music/and
exports/machines/beside the executable, andmods/~romhacks/in the resolved game-data root.
Legacy music folders are no longer created automatically. - Fix editor-preview gain and request ownership so explicit custom preview does not depend on
native BGM fade state. Improve cancellation, replacement, pause, and stop handling. - Improve native sample-pack validation, exact-key diagnostics, explicit dump metadata handling,
and the target catalog. Packing no accepted recordings now fails instead of producing an
empty success. - Clarify cartridge versus Expansion Kit banks, title versus selection slots, exact sample keys,
and streamed looping in the guides. Ogg/FLAC custom loops use embeddedLOOPSTARTand
LOOPLENGTH; loose JSON loop files are not read by streamed playback. WAV usessmplloops.
Limits to know
- Complete snapshot history is retained without automatic pruning. Keep its matching files when
moving or backing up saves. - A multi-course import can partially install if a later native write fails; it is not an atomic
whole-cup replacement. - Native-machine export is a captured primary-LOD1 assembly, not an all-LOD/effect/animation
exporter. Inspect the export report for unsupported capture state.
G-Diffuser 1.2.0 - The Big Upgrade Edition
1.2.0 brings G-Diffuser to macOS and Android, adds an in-game updater, and is the biggest Course Edit update so far: Mouse Controls, undo, forks, lava strips from F-Zero GX, Magnet strips for the original F-Zero, and Blender-style camera controls. Thanks to everyone in the feature requests channel who shaped it.
Before you update
- Coming from 1.1.0, download this release by hand. 1.1.0 has no updater. From 1.2 on, desktop builds can update themselves.
- To install by hand, extract the release over your existing
G-Diffuserfolder. Yoursaves/, ROM and game data stay where they are. - Rebuild your ROM hack archives. Hacks now carry more of their own data, and an archive built by an older version doesn't have it.
- Continue Cup is per hack. An existing
gp_resume.binstays with the stock game, and each hack starts with no saved cup. - Courses that use new features need 1.2. Forks, magnet traps, custom music and custom elements are ignored or lost on older versions.
New platforms
- macOS (Apple Silicon), on Metal, for macOS 11 or newer. Tested on an M1. The build isn't signed, so allow the first launch under System Settings > Privacy & Security. Thanks to FeedMana.
- Android (arm64), on OpenGL ES 3.0, for Android 7 or newer. You import your own dumps through the file picker, and the on-screen pad can be remapped like a real controller. Android has no in-game updater, so install new versions from the APK. Thanks to izzy2lost and airon-main. See
docs/ANDROID.md.
Updates
- In-game updater, using the new
gdx-updatehelper, on Windows, Linux and macOS. - Rolling nightly builds, published with checksums. Builds now report their version and channel.
Course Edit
Editing
- Undo and redo, with an optional History panel of the last 32 changes. Click a row to jump back to it.
- Forks: the Split, Insert and Link tools build a second path. Path B can span several segments, split nodes show in green, and a badge shows the active path.
- Lava strips: left, right, middle or both sides. They drain energy and kill at zero, and CPU racers steer away from them. "Lava strips never kill" turns off the kill.
- Magnet traps: thin pulsing rails on the left or right of the road that pull machines toward the track edge, with their own warning sound and adjustable pull strength and range. Drive away from the edge to get clear, and CPU racers steer away from them. They can't be placed on pipes, half-pipes or cylinders.
- Bank snap at 45, 90 or 180 degrees.
- Line up a run of three or more points.
- Multi-select and box select with the mouse.
- Track names up to 20 characters, including in the Edit Cup.
Controls
- Blender-style camera: orbit and pan with a button you choose, and zoom with the wheel. Sensitivity and inversion are adjustable.
- Mouse dragging for point position, height, width, bank and offset.
- Number-key shortcuts and rebindable tool keys.
- A hint strip for the current tool, and a Controls Help page showing your live bindings.
Content
- Per-track custom music: put
.ogg,.flacor.wavfiles inmusic/custom/and pick them from the BGM menu. - Mod packs can add named venues, skyboxes, music, part styles and track effects through
mods/<pack>/elements.txt. Seedocs/modding/COURSE_ELEMENTS.md.
Racing
- Continue Cup: leave a Grand Prix between races and pick it up later from the main menu.
- Single Race rules in Practice: 1 to 99 laps or unlimited, a chosen number of CPU racers, and an optional random rival. These races never write records, ghosts or points. New lap digits by Heebeejeebees.
- X Cup code queue: paste several seed codes to use them in order, and copy the codes of the cup you just played.
- X Cup real courses: an option that makes each X Cup course a random stock or Expansion Kit course, six different ones per cup. CPU racers use that course's tuning. Seed codes are off while it's on.
- Save an X Cup track: after a race, save the generated course you just played as a Course Edit track.
- Skippable ending and credits: hold START for about a second.
- Machine stat editor: override body, boost, grip and weight per machine.
Controls
- Controller profiles.
- Input actions: remap what each button does separately in races, in Course Edit and in menus.
- Steering curve: set how stick travel maps to steering for each controller port. 1.00 is stock, higher is gentler near center, lower is sharper, and full lock doesn't change.
Audio
- Separate music and sound effect volume sliders.
- Streamed music replacement: play your own
.ogg,.flacor.wavfor any BGM frommusic/ormods/music/.
Graphics
- Track depth test, on by default, so a track inside a tube no longer flickers.
- Adjustable detail for machines and boosters, forced machine shadows, and a preliminary Fancy lighting option. Thanks to NewGBAXL.
ROM hacks
- Hack skylines and buildings now carry over.
- Hack text now carries over: menu labels, difficulty names, cup names on the ending screen, the ending message and the credits.
Content library
- Redesigned around cards, with click-to-assign Edit Cup slots. Thanks to airon-main.
- Track preview, with an arrow showing the start and direction. Thanks to airon-main.
.gdxppackages: one file that holds a track or cup with its extras and custom music.
Modding
- New guides in
docs/modding/for texture packs, machine models, custom music, instruments, sound effects, shaders, Lua scripts, code mods, course elements and sharing tracks and machines.
Fixes
- Split-screen borders (#46)
- Linux journal spam (#47)
- Saves after updating (#41)
- Grand Prix fireworks (#29)
- HUD packs (#27)
- Background clamp (#30)
- Menu input leak (#16)
- Rainbow Road with HD packs
- Venue ground flicker
- Course Edit crash when resizing the window on D3D11
- Crash or black screen when the attract demo starts after a Reset from Create Machine or Course Edit
- Course Edit showing the previous background's road after loading a track or changing the background
- Garbled pause menu text and a broken sky in test drives after leaving and reopening Course Edit
- The extra space in the "Death Race Results" title
Known issues
- Path splitting can leave gaps in the track.
- On macOS, Course Edit dialog boxes flicker, and the post-shader chain and some framebuffer formats use Metal defaults. Intel Macs are untested.
Release v1.1.0 - The "I skip Releases" Edition
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
.slangppresets (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.o2rarchives.
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
.slangppresets 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.slangpfiles. - 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:
#referencechains 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 (SourceSizeglobals/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.nndfilename 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
.glslpand.hlslpresets are not listed or loaded; the pipeline is.slangponly.- 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'sfinal_passrotation 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
- Intermittent race-entry crash (~1/13) is still under investigation.
G-Diffuser-JPbuild 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.
Release v1.0.2-rc2 - The Weekend Edition
Changelog
This file records player-facing changes to G-Diffuser. Release candidates are test builds and may still contain known regressions.
This candidate packages the fixes developed after RC1 and adds diagnostics for the remaining Linux extraction report. It is intended for affected-hardware validation, not as the stable 1.0.2 release.
Fixed for testing
- The bundled controller database now includes the PowerA
NSW Wired Controllermapping for USB vendor/product20D6:A719that the reporter generated and validated on Windows. The database is loaded before SDL classifies controllers connected at startup (#9). - Settings resource loading now stops safely when a GUI texture cannot be created, targeting the null write at the crash address reported in issue #7. The About page also reports this candidate as
1.0.2-rc2instead of the stale1.0.0label (#7). - Direct3D 11 shader-cache hits now reconstruct the same shader-bytecode representation and vertex layout used by freshly compiled shaders, targeting the machine deformation that disappears when the cache is disabled (#24).
- Clean builds now generate the Expansion Kit compile-time headers and zero-initialized storage definitions through CMake instead of relying on workflow-only generated files (#23).
- Custom courses can be loaded, edited, saved, and reloaded repeatedly; the issue reporter confirmed the repaired beta behavior (#12).
- Create Machine save and reload now work in maintainer testing on Windows and Linux. The original reporter still needs to confirm the packaged candidate (#10).
Diagnostics
- Linux launcher failures now record whether
chdir()orexecv()failed, including the attempted path, error text, anderrno. This turns the previously blank exit-code-127 report into actionable evidence without assuming its root cause (#25). - Controller startup logs retain the loaded mapping count and each joystick's GUID, USB identifiers, and SDL game-controller classification.
Known issues and test focus
- Issue #25 has additional diagnostics, not a confirmed fix. The Batocera extraction failure has not been reproduced, and RC2 evidence is needed before changing packaging or compatibility requirements (#25).
- The issue #7 null guard, issue #17 ultrawide framebuffer repair, and issue #24 cached-shader repair still require confirmation on the systems that originally failed (#7, #17, #24).
- Trigger and left-stick rebinding are repaired locally but still need reporter confirmation from the packaged candidate (#16).
- Rumble remains planned for 1.1.0 and is not part of this candidate (#15).
Release-candidate test checklist
- Launch with the PowerA
20D6:A719controller connected and confirmgamecontroller=yesingdiffuser-run.log. - Open Settings, inspect tooltips, press Escape, and verify that About shows
1.0.2-rc2. - Retest 5120x1440 fullscreen on Direct3D 11.
- Run with the shader cache enabled and revisit the machines that previously deformed.
- On Linux, complete first-run extraction. If it fails, attach the new
[launcher]line andgdiffuser-run.logto issue #25. - Save and reload one custom course and one custom machine after restarting the application.
Release v1.0.2-rc1 - The University Edition
[1.0.2-rc1] - 2026-08-13
This release candidate focuses on controller rebinding, menu and ultrawide stability, and Expansion Kit Course Edit
recovery. It is not yet a stable 1.0.2 release. I apologize for the delay of it. But I just returned to a new semester in university recently and my free time was butchered.
Fixed for testing
- Controller rebinding now blocks menu gamepad navigation for the entire mapping operation, so shoulder inputs can be
assigned without changing menu tabs (#16). - Multi-viewport docking is disabled by default to avoid the secondary-window path associated with menu and tooltip
crashes. It remains available as an opt-in developer setting that applies after restart ([#7](https://github.com/
/issues/7)). - Oversized offscreen framebuffers are scaled uniformly to the active renderer's texture limit. Direct3D 11 also
creates replacement color and depth resources before replacing the working framebuffer, targeting the reported 32:9
fullscreen crash (#17). - Expansion Kit custom courses now build their runtime segment data in the buffer expected by Course Edit and race
setup (#12). - Expansion Kit file-list failures now complete with a dismissible result instead of leaving Course Edit stuck waiting
for an operation that has already failed. - A missing MFS root directory can be repaired without formatting the rest of the disk save. Full formatting still
requires explicit one-shot authorization from the Workshop menu. - Disk sidecars now use the application's
savesdirectory consistently on Windows and Linux. Linux can copy legacy
sidecars from the old working-directory location when no canonical save exists.
Known issues and test focus
- A newly saved Course Edit track can be written to the
.gddsidecar but still fail to appear in File > Load.
Immediate and post-restart loading remain under investigation, so custom-course persistence is not yet cleared for the
stable 1.0.2 release (#12). - Create Machine needs a complete save, restart, and reload test before its persistence path is considered release-
ready (#10). - The menu, tooltip, and extreme-resolution fixes still need confirmation on the hardware configurations that
originally reported them (#7, [#17](https://github.com/Zorkats/G-
Diffuser/issues/17)).
Release-candidate test checklist
- Rebind L, R, and Z while controller menu navigation is enabled.
- Open the enhancement menu, inspect tooltips, and enter and leave fullscreen.
- Test 5120x1440 with increased internal resolution on Direct3D 11.
- Save a custom course, find it in File > Load, restart, load it again, and enter a race.
- Save a custom machine, restart, and load it again.
Release v1.0.1 - The "I messed up by not building on any other machine than mine" Edition.
A fix release. If v1.0.0 refused to start on your Linux machine, this is the one to get.
Your extracted game data and saves carry over — the asset recipes are unchanged, so there is no
need to re-extract. Replace the files and launch.
Linux: I am sorry.
v1.0.0 was built on my own machine, a ROG Ally Xbox X with CachyOS running on it, and it inherited three things from it that were
invisible to me and fatal to almost everyone else:
- It demanded a CPU feature level it never used. The binary asked the loader for
x86-64-v4(AVX-512) while executing nothing beyond baseline instructions. Anything older than
Zen 4 or 11th-gen Intel was turned away at the door for capabilities the game does not need. - It required glibc 2.43, newer than almost any installed system. Three maths symbols were
responsible. - It expected five shared libraries it never shipped — SDL2, libzip, tinyxml2, spdlog and fmt,
at versions so recent that in practice only rolling-release users could have launched it at all.
On Steam Deck this showed up as nothing happening when you double-clicked, because the error
only appears if you start it from a terminal.
All three had the same cause: the release was produced on a rolling-release distribution and
picked up its libraries, its CPU tuning and its glibc. Releases are now built through Github Actions, in a pinned
container with pinned dependencies, and a check refuses to package a build that would fail to
start on a supported system.
What that means for you:
| v1.0.0 | v1.0.1 | |
|---|---|---|
| glibc needed | 2.43 | 2.34 |
| CPU required | x86-64-v4 (AVX-512) | any 64-bit x86 |
| Libraries to install first | five | none |
glibc 2.34 covers Debian 11+, Ubuntu 22.04+, Fedora 36+, RHEL 9, SteamOS and every rolling
distribution. SDL2 and zlib now travel inside the archive in lib/, so nothing needs installing.
Touchscreens
Tapping the enhancement menu on a handheld either did nothing or needed several tries. Two pointers
were writing to the interface at once, the touch translation and the system's own touch-to-pointer
emulation, pressing in one place and releasing in another, and a menu item only activates when both
land on it.
Touch input now works out which of the two is driving each individual gesture, because the answer
turns out to differ from machine to machine and even from session to session. Taps register first
time, and dragging a slider with your finger still works.
Steam Deck and ROG Ally owners get the most out of this one.
Windows
No behaviour changes beyond the touchscreen fix, which also applies to Windows tablets and
touch-capable laptops. The build is now produced and verified automatically rather than packaged by
hand, so it can no longer accidentally ship needing DLLs that are not in the archive.
Known issues
- The menu crashes on some Windows systems when opened (#7). Being investigated; if this hits
you,gdiffuser-crash.txtnext to the executable is exactly what I need. - Import and export of custom tracks and machines (#1) is not in this release. It is the
headline feature of the next one.
Thanks
This release exists because people took the trouble to report clearly.
adonato87 went furthest: reading the binary's own headers and posting the analysis, which
confirmed the CPU-level diagnosis independently and left nothing to guess at. B-Nerd,
perojas3, Nutjob and Daisuke-Akiyama reported the failures and stayed to answer
questions, and SilverSurferNHS and B-Nerd worked out the AVX-512 angle in the thread before
I got there.
Thank you all! And I am very happy for the port's positive reception, truly, I did not expect it! It warms my heart.