Releases: Frostn1/mxb-app
Release list
MXB App v0.9.2-beta.4
Note
This is a beta build of v0.9.2, for testing. Installed copies of MXB App won't
be offered it by the updater — download the installer below to try it. The full release
follows once it's been checked over.
What's new in v0.9.2 — A track's terrain in 3D, and voice chat picks its microphone
On top of v0.9.1 — the Designer's painting tools, Play on macOS and the SteamOS white screen
are all still in here, and v0.9.0's notes are repeated below.
Worth knowing: voice chat doesn't transmit yet. This is the device half — the mic, the
headset, the levels and the key that opens the mic, with test buttons that do work. The codec
and the voice room are still to come, and the Settings section says so rather than looking
finished.
Also worth knowing: the terrain is read from the game's own height file and checked against
four published tracks' marshal posts, not against every track there is. If one comes out
looking nothing like the track you ride, name it in the report — that's the thing to send.
Added
- See a track's terrain in 3D. Tracks were the one thing the library couldn't show you —
a name, a preview and a size. The viewer now reads the heightfield out of a track and draws
the ground, opening from the library detail view next to View in 3D. - Tracks are drawn with their surfaces, where the track says what they are. A track's
height file can carry coverage masks — one per surface the builder painted, a byte per cell
— and the viewer reads them, so grass, apron, hard standing and the dirt of the riding line
each get their own colour. Tracks that carry no masks keep the elevation shading.- Each surface takes the colour of the material the track names for it — the ids below six
index the table every track carries (asphalt, grass, sand, kerb, soil, concrete), so a
farm's fields come out as the soil they are and a grass circuit comes out green, rather
than every track being coloured by whichever surface happened to cover the most of it. - Tracks also ship a picture in
[ui] pic_info, and that is deliberately not used. Some
of those are true overhead photographs, but others are branded posters — a diagram on a
paper texture with a series logo across the bottom — and laying one on the terrain puts a
logo on the dirt. Nothing in the file distinguishes them, and three ways of asking a
picture to prove it describes the ground all failed to separate a real photograph from a
poster (extents of 0.709 against 0.715). The masks need no such test: they are a byte per
cell of the very grid being drawn, so they line up by construction.
- Each surface takes the colour of the material the track names for it — the ids below six
- The terrain is lit by its own hollows. A directional light can only shade a slope by
which way it faces, so a rut running along the light and a ridge running along it were lit
identically and the shapes a track is made of came out flat. Every point is now measured
against a blurred copy of the terrain at two scales — tight enough to find a rut, wide
enough to see the bowl a turn sits in — and the result darkens hollows and lifts ridges.
The terrain also casts and receives real shadows now. - Voice chat settings — microphone, output, levels and a push-to-talk key. A new
Settings section that picks the mic to listen to and the headset other riders will come
out of, with a live input meter and a test tone. Both device settings default to system
default and mean it: they follow whatever Windows is set to rather than pinning the
headset that happened to be plugged in when you chose. A device that has since been
unplugged falls back to the default and says so — silently going mute is the failure
that reads as "voice chat is broken". - Push-to-talk, bound through the same global-shortcut path as the overlay hotkey, so
it works while the game holds focus. It acts on both edges — mic opens on press, closes
on release — and is bound even when the overlay is switched off. - Your logs, in Settings → Logs. "Send me your logs" was the first thing every bug
report asked for and the one thing there was no way to do. There are three sets and they
sit in three places: MXB App writes its own into a folder buried in AppData, FrostMod
writes into the folder we install and run it from, and the game writeslog.txtbeside
its executable — or, when the game's folder has been moved, somewhere only the app knows.
All three are now named on one page, with how many files are there and how old the newest
one is, so a log that predates the run you're reporting can be seen for what it is.
Open folder takes you to any of them with the newest file selected, and Save logs…
writes the lot into a single zip to attach. The zip holds the logs and a summary of the
folders they came from — never the settings file, which carries session cookies. - Qwest and Kelso credited on Settings → Supporters.
- Point ReShade at the folder it's actually in. The ReShade card only ever looked in the
game's install folder, so if that was unset or detection landed somewhere else, it said
"not installed" to people with ReShade sitting right there, and offered nothing to do about
it. It now names the folder it looked in and takes a pick of your own, kept separately from
the game folder — that one also drives the 3D rider, the game log location and Play, none of
which a choice made on this card should move. A folder with no ReShade in it is still
accepted and simply reported as such, and there's a link back to the game folder. - Share installed files with a code. Sharing was a preset's privilege: a code carried a
look, and the full bundle packed whatever its slots resolved to. Handing someone the track
you just rode, or the paint you just made, still meant uploading it somewhere and pasting a
link. Anything the Library lists can now go straight into a code — Share on any item, or
pick several with Select and share them together. It packs them, uploads them, and puts
one line on your clipboard. - The other end: Import → Paste a share code… Files land back in the folders the sender
had them in — a track filed undertracks/EU/arrives undertracks/EU/, a helmet paint
goes to the helmet it belongs to — so a share carries where things go, not just what they
are. The code is previewed before anything downloads: what it holds, how big it is, and
where it's hosted. - Sharing reuses the preset bundle's upload, so the same 2 GB ceiling and the same slicing
past one part apply, and a share whose parts have gone missing says which one.
Changed
- Settings shows one section at a time. Twelve sections rendered into a single column
meant the folder settings and the version number shared a scrollbar, and the nav on the left
only scrolled you to an anchor in it. That nav is now grouped — Setup, App, Advanced, About
— and opens each section on its own. Experimental was in that column with nothing in the
nav pointing at it; it has an entry now, under Advanced. - Voice chat settings read shorter. Five lines of help text under controls whose labels
already said the same thing are gone — a device picker labelled "Microphone" didn't need a
sentence under it explaining that it picks a microphone. What's left is the things the
labels can't say: that nothing transmits yet, and what the test buttons do. - Full-share bundles are no longer capped at 200 MB. That ceiling was the upload host's,
not ours, and a preset carrying a big track or a few detailed bikes ran straight into it. A
bundle past 190 MB is now sliced across several uploads and stitched back together on
import, taking the limit to 2 GB. Codes for smaller bundles are unchanged, and a share whose
parts have gone missing says so — with the size it expected — instead of failing at the
unzip.
Fixed
- Terrain below a track's datum is no longer drawn as a wall around it. A
.trhstores
its samples signed, and they were read unsigned, so every point below the datum came out
a full half-range — eleven metres — too high. Tracks that sit entirely one side of it were
merely offset; ones that straddle it, like Farm14, were drawn as a plateau with the track
sunk in a pit and the jumps at the bottom of it. Confirmed against the marshal posts of two
published tracks: read signed, their stated ground heights come back to the centimetre
(SandPoint's median error is 0.000 m against 11.001 m read unsigned), and the 32768-unit
cliffs that wrapping left across three of four tracks disappear entirely. - The track is no longer drawn mirrored. The terrain was placed straight into the scene
while the game's frame is left-handed and the viewer's is not, so every track came out
flipped — a left-hander read as a right-hander. It now goes through the same axis
conversion every bike and rider model in the app already does (edf::to_right_handed),
with the triangle winding turned to match so the ground is still lit from above. - Terrain is drawn at the detail it was asked for — twice over. Reductions moved by a
whole number of samples in two separate places, and both overshot. Reading a heightfield
into the master could only halve a 2049-sample grid asked for 2048, so the master was 1025
and half the file was thrown away before the viewer could ask for it. The same fault in the
view's own reduction meant a request for 320 across a 410-sample master could only step by
two and drew 205 — one drawn square covering nearly three metres of ground, wider than the jump
faces and ruts it was meant to show. Reductions now land on the size requested, and the
master itself is kept at twice the resolution. A track is drawn with roughly 3.7x the
samples across it, and a drawn square covers under a metre. - The blind heightfield probe no longer reads a shifted grid. It required the samples to
run to the last byte of the file, so...
MXB App v0.9.2-beta.3
Note
This is a beta build of v0.9.2, for testing. Installed copies of MXB App won't
be offered it by the updater — download the installer below to try it. The full release
follows once it's been checked over.
What's new in v0.9.2 — A track's terrain in 3D, and voice chat picks its microphone
On top of v0.9.1 — the Designer's painting tools, Play on macOS and the SteamOS white screen
are all still in here, and v0.9.0's notes are repeated below.
Worth knowing: voice chat doesn't transmit yet. This is the device half — the mic, the
headset, the levels and the key that opens the mic, with test buttons that do work. The codec
and the voice room are still to come, and the Settings section says so rather than looking
finished.
Also worth knowing: the terrain is read from the game's own height file and checked against
four published tracks' marshal posts, not against every track there is. If one comes out
looking nothing like the track you ride, name it in the report — that's the thing to send.
Added
- See a track's terrain in 3D. Tracks were the one thing the library couldn't show you —
a name, a preview and a size. The viewer now reads the heightfield out of a track and draws
the ground, opening from the library detail view next to View in 3D. - Tracks are drawn with their surfaces, where the track says what they are. A track's
height file can carry coverage masks — one per surface the builder painted, a byte per cell
— and the viewer reads them, so grass, apron, hard standing and the dirt of the riding line
each get their own colour. Tracks that carry no masks keep the elevation shading.- Each surface takes the colour of the material the track names for it — the ids below six
index the table every track carries (asphalt, grass, sand, kerb, soil, concrete), so a
farm's fields come out as the soil they are and a grass circuit comes out green, rather
than every track being coloured by whichever surface happened to cover the most of it. - Tracks also ship a picture in
[ui] pic_info, and that is deliberately not used. Some
of those are true overhead photographs, but others are branded posters — a diagram on a
paper texture with a series logo across the bottom — and laying one on the terrain puts a
logo on the dirt. Nothing in the file distinguishes them, and three ways of asking a
picture to prove it describes the ground all failed to separate a real photograph from a
poster (extents of 0.709 against 0.715). The masks need no such test: they are a byte per
cell of the very grid being drawn, so they line up by construction.
- Each surface takes the colour of the material the track names for it — the ids below six
- The terrain is lit by its own hollows. A directional light can only shade a slope by
which way it faces, so a rut running along the light and a ridge running along it were lit
identically and the shapes a track is made of came out flat. Every point is now measured
against a blurred copy of the terrain at two scales — tight enough to find a rut, wide
enough to see the bowl a turn sits in — and the result darkens hollows and lifts ridges.
The terrain also casts and receives real shadows now. - Voice chat settings — microphone, output, levels and a push-to-talk key. A new
Settings section that picks the mic to listen to and the headset other riders will come
out of, with a live input meter and a test tone. Both device settings default to system
default and mean it: they follow whatever Windows is set to rather than pinning the
headset that happened to be plugged in when you chose. A device that has since been
unplugged falls back to the default and says so — silently going mute is the failure
that reads as "voice chat is broken". - Push-to-talk, bound through the same global-shortcut path as the overlay hotkey, so
it works while the game holds focus. It acts on both edges — mic opens on press, closes
on release — and is bound even when the overlay is switched off. - Your logs, in Settings → Logs. "Send me your logs" was the first thing every bug
report asked for and the one thing there was no way to do. There are three sets and they
sit in three places: MXB App writes its own into a folder buried in AppData, FrostMod
writes into the folder we install and run it from, and the game writeslog.txtbeside
its executable — or, when the game's folder has been moved, somewhere only the app knows.
All three are now named on one page, with how many files are there and how old the newest
one is, so a log that predates the run you're reporting can be seen for what it is.
Open folder takes you to any of them with the newest file selected, and Save logs…
writes the lot into a single zip to attach. The zip holds the logs and a summary of the
folders they came from — never the settings file, which carries session cookies. - Qwest and Kelso credited on Settings → Supporters.
- Point ReShade at the folder it's actually in. The ReShade card only ever looked in the
game's install folder, so if that was unset or detection landed somewhere else, it said
"not installed" to people with ReShade sitting right there, and offered nothing to do about
it. It now names the folder it looked in and takes a pick of your own, kept separately from
the game folder — that one also drives the 3D rider, the game log location and Play, none of
which a choice made on this card should move. A folder with no ReShade in it is still
accepted and simply reported as such, and there's a link back to the game folder.
Changed
- Settings shows one section at a time. Twelve sections rendered into a single column
meant the folder settings and the version number shared a scrollbar, and the nav on the left
only scrolled you to an anchor in it. That nav is now grouped — Setup, App, Advanced, About
— and opens each section on its own. Experimental was in that column with nothing in the
nav pointing at it; it has an entry now, under Advanced. - Voice chat settings read shorter. Five lines of help text under controls whose labels
already said the same thing are gone — a device picker labelled "Microphone" didn't need a
sentence under it explaining that it picks a microphone. What's left is the things the
labels can't say: that nothing transmits yet, and what the test buttons do. - Full-share bundles are no longer capped at 200 MB. That ceiling was the upload host's,
not ours, and a preset carrying a big track or a few detailed bikes ran straight into it. A
bundle past 190 MB is now sliced across several uploads and stitched back together on
import, taking the limit to 2 GB. Codes for smaller bundles are unchanged, and a share whose
parts have gone missing says so — with the size it expected — instead of failing at the
unzip.
Fixed
- Terrain below a track's datum is no longer drawn as a wall around it. A
.trhstores
its samples signed, and they were read unsigned, so every point below the datum came out
a full half-range — eleven metres — too high. Tracks that sit entirely one side of it were
merely offset; ones that straddle it, like Farm14, were drawn as a plateau with the track
sunk in a pit and the jumps at the bottom of it. Confirmed against the marshal posts of two
published tracks: read signed, their stated ground heights come back to the centimetre
(SandPoint's median error is 0.000 m against 11.001 m read unsigned), and the 32768-unit
cliffs that wrapping left across three of four tracks disappear entirely. - The track is no longer drawn mirrored. The terrain was placed straight into the scene
while the game's frame is left-handed and the viewer's is not, so every track came out
flipped — a left-hander read as a right-hander. It now goes through the same axis
conversion every bike and rider model in the app already does (edf::to_right_handed),
with the triangle winding turned to match so the ground is still lit from above. - Terrain is drawn at the detail it was asked for — twice over. Reductions moved by a
whole number of samples in two separate places, and both overshot. Reading a heightfield
into the master could only halve a 2049-sample grid asked for 2048, so the master was 1025
and half the file was thrown away before the viewer could ask for it. The same fault in the
view's own reduction meant a request for 320 across a 410-sample master could only step by
two and drew 205 — one drawn square covering nearly three metres of ground, wider than the jump
faces and ruts it was meant to show. Reductions now land on the size requested, and the
master itself is kept at twice the resolution. A track is drawn with roughly 3.7x the
samples across it, and a drawn square covers under a metre. - The blind heightfield probe no longer reads a shifted grid. It required the samples to
run to the last byte of the file, so a height file with a trailing block — which is what a
real.trhis — could only fit by treating that block as a header, landing the grid over
half a row late and reporting full confidence while doing it. Alignment is now measured
rather than assumed: a read that starts in the wrong place wraps mid-row, breaking every
row in the same column, and that is what the probe now looks for. - Relief is drawn at a fixed, gentle exaggeration. The 1×/2×/4× control is gone: 4×
stretched a track's boundary into spikes without making the track itself any clearer. What
replaces it is a single 1.5×, which is enough for a jump face to cast a shadow while the
ground still reads as ground. - Paints larger than 32 MB were refused, and took the whole publish with them. A 4K livery
runs well past that: the largest on a normal install is 121.7 MB. Because a loadout is
checked as a whole, owning one such paint meant publishing nothing at all and looking default
to everyone. The limit is now 192 MB, and anything still over it is left behi...
MXB App v0.9.2-beta.2
Note
This is a beta build of v0.9.2, for testing. Installed copies of MXB App won't
be offered it by the updater — download the installer below to try it. The full release
follows once it's been checked over.
What's new in v0.9.2 — A track's terrain in 3D, and voice chat picks its microphone
On top of v0.9.1 — the Designer's painting tools, Play on macOS and the SteamOS white screen
are all still in here, and v0.9.0's notes are repeated below.
Worth knowing: voice chat doesn't transmit yet. This is the device half — the mic, the
headset, the levels and the key that opens the mic, with test buttons that do work. The codec
and the voice room are still to come, and the Settings section says so rather than looking
finished.
Also worth knowing: the terrain is read from the game's own height file and checked against
four published tracks' marshal posts, not against every track there is. If one comes out
looking nothing like the track you ride, name it in the report — that's the thing to send.
Added
- See a track's terrain in 3D. Tracks were the one thing the library couldn't show you —
a name, a preview and a size. The viewer now reads the heightfield out of a track and draws
the ground, opening from the library detail view next to View in 3D. - Tracks are drawn with their surfaces, where the track says what they are. A track's
height file can carry coverage masks — one per surface the builder painted, a byte per cell
— and the viewer reads them, so grass, apron, hard standing and the dirt of the riding line
each get their own colour. Tracks that carry no masks keep the elevation shading.- Each surface takes the colour of the material the track names for it — the ids below six
index the table every track carries (asphalt, grass, sand, kerb, soil, concrete), so a
farm's fields come out as the soil they are and a grass circuit comes out green, rather
than every track being coloured by whichever surface happened to cover the most of it. - Tracks also ship a picture in
[ui] pic_info, and that is deliberately not used. Some
of those are true overhead photographs, but others are branded posters — a diagram on a
paper texture with a series logo across the bottom — and laying one on the terrain puts a
logo on the dirt. Nothing in the file distinguishes them, and three ways of asking a
picture to prove it describes the ground all failed to separate a real photograph from a
poster (extents of 0.709 against 0.715). The masks need no such test: they are a byte per
cell of the very grid being drawn, so they line up by construction.
- Each surface takes the colour of the material the track names for it — the ids below six
- The terrain is lit by its own hollows. A directional light can only shade a slope by
which way it faces, so a rut running along the light and a ridge running along it were lit
identically and the shapes a track is made of came out flat. Every point is now measured
against a blurred copy of the terrain at two scales — tight enough to find a rut, wide
enough to see the bowl a turn sits in — and the result darkens hollows and lifts ridges.
The terrain also casts and receives real shadows now. - Voice chat settings — microphone, output, levels and a push-to-talk key. A new
Settings section that picks the mic to listen to and the headset other riders will come
out of, with a live input meter and a test tone. Both device settings default to system
default and mean it: they follow whatever Windows is set to rather than pinning the
headset that happened to be plugged in when you chose. A device that has since been
unplugged falls back to the default and says so — silently going mute is the failure
that reads as "voice chat is broken". - Push-to-talk, bound through the same global-shortcut path as the overlay hotkey, so
it works while the game holds focus. It acts on both edges — mic opens on press, closes
on release — and is bound even when the overlay is switched off. - Your logs, in Settings → Logs. "Send me your logs" was the first thing every bug
report asked for and the one thing there was no way to do. There are three sets and they
sit in three places: MXB App writes its own into a folder buried in AppData, FrostMod
writes into the folder we install and run it from, and the game writeslog.txtbeside
its executable — or, when the game's folder has been moved, somewhere only the app knows.
All three are now named on one page, with how many files are there and how old the newest
one is, so a log that predates the run you're reporting can be seen for what it is.
Open folder takes you to any of them with the newest file selected, and Save logs…
writes the lot into a single zip to attach. The zip holds the logs and a summary of the
folders they came from — never the settings file, which carries session cookies. - Qwest and Kelso credited on Settings → Supporters.
- Point ReShade at the folder it's actually in. The ReShade card only ever looked in the
game's install folder, so if that was unset or detection landed somewhere else, it said
"not installed" to people with ReShade sitting right there, and offered nothing to do about
it. It now names the folder it looked in and takes a pick of your own, kept separately from
the game folder — that one also drives the 3D rider, the game log location and Play, none of
which a choice made on this card should move. A folder with no ReShade in it is still
accepted and simply reported as such, and there's a link back to the game folder.
Changed
- Settings shows one section at a time. Twelve sections rendered into a single column
meant the folder settings and the version number shared a scrollbar, and the nav on the left
only scrolled you to an anchor in it. That nav is now grouped — Setup, App, Advanced, About
— and opens each section on its own. Experimental was in that column with nothing in the
nav pointing at it; it has an entry now, under Advanced. - Voice chat settings read shorter. Five lines of help text under controls whose labels
already said the same thing are gone — a device picker labelled "Microphone" didn't need a
sentence under it explaining that it picks a microphone. What's left is the things the
labels can't say: that nothing transmits yet, and what the test buttons do.
Fixed
- Terrain below a track's datum is no longer drawn as a wall around it. A
.trhstores
its samples signed, and they were read unsigned, so every point below the datum came out
a full half-range — eleven metres — too high. Tracks that sit entirely one side of it were
merely offset; ones that straddle it, like Farm14, were drawn as a plateau with the track
sunk in a pit and the jumps at the bottom of it. Confirmed against the marshal posts of two
published tracks: read signed, their stated ground heights come back to the centimetre
(SandPoint's median error is 0.000 m against 11.001 m read unsigned), and the 32768-unit
cliffs that wrapping left across three of four tracks disappear entirely. - The track is no longer drawn mirrored. The terrain was placed straight into the scene
while the game's frame is left-handed and the viewer's is not, so every track came out
flipped — a left-hander read as a right-hander. It now goes through the same axis
conversion every bike and rider model in the app already does (edf::to_right_handed),
with the triangle winding turned to match so the ground is still lit from above. - Terrain is drawn at the detail it was asked for — twice over. Reductions moved by a
whole number of samples in two separate places, and both overshot. Reading a heightfield
into the master could only halve a 2049-sample grid asked for 2048, so the master was 1025
and half the file was thrown away before the viewer could ask for it. The same fault in the
view's own reduction meant a request for 320 across a 410-sample master could only step by
two and drew 205 — one drawn square covering nearly three metres of ground, wider than the jump
faces and ruts it was meant to show. Reductions now land on the size requested, and the
master itself is kept at twice the resolution. A track is drawn with roughly 3.7x the
samples across it, and a drawn square covers under a metre. - The blind heightfield probe no longer reads a shifted grid. It required the samples to
run to the last byte of the file, so a height file with a trailing block — which is what a
real.trhis — could only fit by treating that block as a header, landing the grid over
half a row late and reporting full confidence while doing it. Alignment is now measured
rather than assumed: a read that starts in the wrong place wraps mid-row, breaking every
row in the same column, and that is what the probe now looks for. - Relief is drawn at a fixed, gentle exaggeration. The 1×/2×/4× control is gone: 4×
stretched a track's boundary into spikes without making the track itself any clearer. What
replaces it is a single 1.5×, which is enough for a jump face to cast a shadow while the
ground still reads as ground. - Paints larger than 32 MB were refused, and took the whole publish with them. A 4K livery
runs well past that: the largest on a normal install is 121.7 MB. Because a loadout is
checked as a whole, owning one such paint meant publishing nothing at all and looking default
to everyone. The limit is now 192 MB, and anything still over it is left behind — and said
out loud — rather than failing the rest. - A loadout the control plane refused took your whole look with it. Two things a real
install produces would fail the entire publish: a paint filed under a slot the control plane
does not store, and the same slot resolving twice — a livery installed both loose and inside
a pack. Either one meant a rider published nothing at all. Only publishable slots are sent
now, one paint per slot, first match ...
MXB App v0.9.2-beta.1
What's Changed
- feat(voice): pick a mic and a headset, and a key to open the mic by @Frostn1 in #143
- chore(supporters): credit Qwest by @Frostn1 in #144
- chore(supporters): credit Kelso by @Frostn1 in #146
- fix(release): start on macOS, and credit supporters in "What's new" by @Frostn1 in #145
- feat(tracks): in-app track viewer — see a track's terrain in 3D by @Frostn1 in #137
Full Changelog: v0.9.1...v0.9.2-beta.1
MXB App v0.9.1
What's new in v0.9.1 — The Designer paints, Play works on a Mac, and SteamOS stops opening to a white screen
On top of v0.9.0 — everything that release added is still the news, and its notes are
repeated below.
Worth knowing: the Mac launch has been tested against a stand-in for Wine, not
against a real bottle, so if Play does something odd on your machine the app log names the
exact command it ran — please send it.
Also worth knowing: the Designer's new UV map has been checked against synthetic meshes, not
against a real bike's geometry — and fitting and clipping a layer to a part both read from it,
so all three are right or wrong together. Hover the sheet with the map on: if the part it names
isn't the panel you're over, that's the thing to report, and it explains the rest.
Added
- You can paint on a template. The Designer could stack images and text on the sheets of an
unpacked paint, but it could not put down a single pixel — a fade across a shroud or a stripe
cut to follow a panel seam meant leaving for an image editor, exporting, coming back, and
losing the live-on-the-model loop that is the point of the tab. It has a tool kit now: a soft
brush with size, edge and strength, an eraser, a gradient, a fill, and rectangle, ellipse and
line. They land on the 2D sheet and on the 3D model at the same time, while you drag. - A gradient that carries one colour into another. Drag across the sheet to say where the
transition happens — the drag is the axis, not the extent, so everything before it is the
first colour and everything past it is the second. Linear or radial, and it can end at
nothing instead of at a colour, which is the version a livery usually wants. - Painting happens on its own layer. A "Paint layer" sits in the stack like any other, so it
gets opacity, blend mode, visibility and stacking for free — and the template underneath is
never written to, so hiding the layer gets the untouched template back. Picking up a brush
with nothing to paint into makes one rather than doing nothing. - Undo, for strokes. ⌘Z and ⇧⌘Z step through painting, remembering as much as fits in a
fixed memory budget — six steps on a 2048² sheet, a couple of dozen on a small one. Layer
edits are not part of it. - Tools have keys. V, B, E, G, F, R, O and L. Hold Shift for straight lines, squares and
circles; right-drag still pans, which matters more with a brush than with a logo. - The Designer can show you what you're drawing on. A livery is drawn flat and worn curved,
and the flat version gives away almost nothing about which rectangle of it ends up on a
shroud — so a sheet has a reference underlay now, and it answers that two ways. Template
lifts the paint you started from out of the sheet and shows it faintly underneath to trace
over; it stops being part of what you save, which is the difference between drawing from a
paint and drawing over one. UV map reads the model already standing beside the canvas
and draws its bodywork where it actually lands on the sheet, each piece in its own colour —
the thing an image editor cannot tell you. Neither is ever composited, staged or saved: they
live outside the sheet entirely, so a guide cannot end up shipped inside somebody's livery.
Both sit underneath what you're drawing — a ghost, not an overlay — so they show through
wherever the sheet is still transparent, which is exactly where you need to know which piece
of bodywork you're about to paint on. The two are meant to be used together: lifting the
template out is what leaves the sheet transparent enough to see the islands through it, and
the panel says so when a still-opaque template is burying the reference. - Layers resize by their corners. The selected layer's box has grabbable handles, dragged
from the centre the same way the inspector's slider scales from it, so the two controls agree
about where a logo grows from. The slider stays for typing an exact number; the corners are
for the other 90% of the time. Handles are still drawn on a layer too small to grab one —
the box is how you see what's selected — but the grab itself steps aside there rather than
leaving a tiny layer resizable and no longer draggable. - A sheet name the model never asks for now says so. Turning on the UV map for a sheet
nothing on the mesh binds reports it in the panel instead of drawing an empty overlay, which
had been indistinguishable from one still loading. It's the same mistake that makes a paint
load and show nothing, caught before the save rather than after it. - Drop a photo onto a specific piece of bodywork. The UV map could show you where the shroud
was; it couldn't help you put anything there. Now the model's parts are a list you can pick
from, and a layer pinned to one gets two things: Fit to part places and scales it to cover
that panel, and the layer is clipped to the panel's outline, so a photo grabbed off the
internet stops at the seam instead of bleeding across the fender next to it. Fit covers
rather than fits inside — a livery panel with the sheet showing through at two edges isn't
what anyone meant — and the clip is what trims the overspill. It works on a paint layer too,
which is how you brush freely and still stay inside the shroud. Parts split across several
mesh nodes under the same name are listed once, biggest first: a bike's shroud is regularly
three nodes that all call themselvesshroud, and three entries holding a third of the
answer each would be a worse menu than none. - The sheet says which part you're pointing at. Hovering names the piece of bodywork under
the cursor, and outlines it while the UV map is on. The islands say a panel is there; only
the name says which one it is — and it's the fastest way to check the map is landing where the
bodywork actually is. - Play and Join Server work on macOS. MX Bikes is a Windows game, so on a Mac it runs
inside a CrossOver, Whisky or Wine bottle — and the app, which had a launcher for Windows
and one for Linux, simply refused: "Launching MX Bikes is supported on Windows and Linux
only." It launches now, through whichever wrapper owns the bottle the game sits in. That
bottle is worked out from the install folder itself: every wrapper keeps its fakeC:drive
atdrive_c, so whatever is above it is the prefix, and no wrapper's private layout has to
be guessed at. CrossOver bottles are started by name, the way CodeWeavers documents, so the
bottle's own graphics settings apply instead of being skipped; everything else is pointed
straight at the prefix. Joining a server goes the same way, connect flag and all. - The app finds a bottled install by itself. Setup and Settings only ever looked where a
native Mac game would be — Steam under~/Library, mods under~/Documents— neither of
which a Windows game inside a bottle ever touches. A Mac player had to type a path like
…/Bottles/MXB/drive_c/…by hand before anything worked at all. Both detectors now search
the CrossOver and Whisky bottles on the machine, including a Windows Steam installed inside
one, and the setup screen's folder hint points at the bottle rather than atDocuments. - The sidebar knows when the game is up on a Mac. Under Wine the game is an ordinary
process, so Play now shows "MX Bikes running" instead of quietly starting a second copy. - A Wine runner picker in Settings, for when the automatic choice is wrong or the wrapper
lives somewhere unusual. It also shows which runner was found and how many bottles the app
can see — so a bottle it can't see shows up as missing before you press Play, not after. - "What's new" credits the people who paid for it. The update notice now names the
supporters underneath the release it's announcing, and opens the full thank-you list in
Settings when you click it. The names are read live rather than baked into the build, so
somebody who started supporting after this version was cut is still thanked by it — and the
credit is part of the modal itself, not of any one release's entry, so every future update
carries it without having to remember to. It credits and links; the button that asks for
anything stays on the Settings page, because an update notice is the wrong place to hold
out a hat.
Changed
- A roster means one grid, not the whole platform.
GET /v1/rostertook a server and
ignored it, because nothing recorded where anyone was, so every rider downloaded the paints
of every other enrolled rider. Each app now reports the server it launched into, and a roster
returns the riders actually on it. A rider whose app goes quiet for ten minutes drops out.
Fixed
- The Mac build starts at all. It aborted on launch before drawing anything — which would
have made the Mac work above impossible to reach in the very release that added it. The
drag-drop fix earlier in this cycle moved the main window out of Tauri's startup and into
the app's own, so the handler can be switched off under Wine; that needs"create": false
in the window config, and it was set in the base config only. macOS keeps its own overrides
— the rounded title bar — and that file replaces the window config rather than merging
into it, so the flag was dropped on macOS alone: Tauri opened the window itself, the app
opened a second one under the same name, and the process aborted on the duplicate. Windows
never had an override, and Linux's doesn't name the window, which is why only the Mac was
hit and no beta caught it. - The Linux app opens to its interface on SteamOS instead of a white screen. Our AppImage
carries Ubuntu 22.04's libwayland next to whatever Mesa the host ships — the pairing the
AppImage excludelist warns about — and WebKitGTK 2.46 and later abort outright when that
leaves them unable to create an EGL ...
MXB App v0.9.1-beta.4
Note
This is a beta build of v0.9.1, for testing. Installed copies of MXB App won't
be offered it by the updater — download the installer below to try it. The full release
follows once it's been checked over.
What's new in v0.9.1 — The Designer paints, Play works on a Mac, and SteamOS stops opening to a white screen
On top of v0.9.0 — everything that release added is still the news, and its notes are
repeated below.
Worth knowing for this beta: the Mac launch has been tested against a stand-in for Wine, not
against a real bottle, so if Play does something odd on your machine the app log names the
exact command it ran — please send it.
Also worth knowing: the Designer's new UV map has been checked against synthetic meshes, not
against a real bike's geometry — and fitting and clipping a layer to a part both read from it,
so all three are right or wrong together. Hover the sheet with the map on: if the part it names
isn't the panel you're over, that's the thing to report, and it explains the rest.
Added
- You can paint on a template. The Designer could stack images and text on the sheets of an
unpacked paint, but it could not put down a single pixel — a fade across a shroud or a stripe
cut to follow a panel seam meant leaving for an image editor, exporting, coming back, and
losing the live-on-the-model loop that is the point of the tab. It has a tool kit now: a soft
brush with size, edge and strength, an eraser, a gradient, a fill, and rectangle, ellipse and
line. They land on the 2D sheet and on the 3D model at the same time, while you drag. - A gradient that carries one colour into another. Drag across the sheet to say where the
transition happens — the drag is the axis, not the extent, so everything before it is the
first colour and everything past it is the second. Linear or radial, and it can end at
nothing instead of at a colour, which is the version a livery usually wants. - Painting happens on its own layer. A "Paint layer" sits in the stack like any other, so it
gets opacity, blend mode, visibility and stacking for free — and the template underneath is
never written to, so hiding the layer gets the untouched template back. Picking up a brush
with nothing to paint into makes one rather than doing nothing. - Undo, for strokes. ⌘Z and ⇧⌘Z step through painting, remembering as much as fits in a
fixed memory budget — six steps on a 2048² sheet, a couple of dozen on a small one. Layer
edits are not part of it. - Tools have keys. V, B, E, G, F, R, O and L. Hold Shift for straight lines, squares and
circles; right-drag still pans, which matters more with a brush than with a logo. - The Designer can show you what you're drawing on. A livery is drawn flat and worn curved,
and the flat version gives away almost nothing about which rectangle of it ends up on a
shroud — so a sheet has a reference underlay now, and it answers that two ways. Template
lifts the paint you started from out of the sheet and shows it faintly underneath to trace
over; it stops being part of what you save, which is the difference between drawing from a
paint and drawing over one. UV map reads the model already standing beside the canvas
and draws its bodywork where it actually lands on the sheet, each piece in its own colour —
the thing an image editor cannot tell you. Neither is ever composited, staged or saved: they
live outside the sheet entirely, so a guide cannot end up shipped inside somebody's livery.
Both sit underneath what you're drawing — a ghost, not an overlay — so they show through
wherever the sheet is still transparent, which is exactly where you need to know which piece
of bodywork you're about to paint on. The two are meant to be used together: lifting the
template out is what leaves the sheet transparent enough to see the islands through it, and
the panel says so when a still-opaque template is burying the reference. - Layers resize by their corners. The selected layer's box has grabbable handles, dragged
from the centre the same way the inspector's slider scales from it, so the two controls agree
about where a logo grows from. The slider stays for typing an exact number; the corners are
for the other 90% of the time. Handles are still drawn on a layer too small to grab one —
the box is how you see what's selected — but the grab itself steps aside there rather than
leaving a tiny layer resizable and no longer draggable. - A sheet name the model never asks for now says so. Turning on the UV map for a sheet
nothing on the mesh binds reports it in the panel instead of drawing an empty overlay, which
had been indistinguishable from one still loading. It's the same mistake that makes a paint
load and show nothing, caught before the save rather than after it. - Drop a photo onto a specific piece of bodywork. The UV map could show you where the shroud
was; it couldn't help you put anything there. Now the model's parts are a list you can pick
from, and a layer pinned to one gets two things: Fit to part places and scales it to cover
that panel, and the layer is clipped to the panel's outline, so a photo grabbed off the
internet stops at the seam instead of bleeding across the fender next to it. Fit covers
rather than fits inside — a livery panel with the sheet showing through at two edges isn't
what anyone meant — and the clip is what trims the overspill. It works on a paint layer too,
which is how you brush freely and still stay inside the shroud. Parts split across several
mesh nodes under the same name are listed once, biggest first: a bike's shroud is regularly
three nodes that all call themselvesshroud, and three entries holding a third of the
answer each would be a worse menu than none. - The sheet says which part you're pointing at. Hovering names the piece of bodywork under
the cursor, and outlines it while the UV map is on. The islands say a panel is there; only
the name says which one it is — and it's the fastest way to check the map is landing where the
bodywork actually is. - Play and Join Server work on macOS. MX Bikes is a Windows game, so on a Mac it runs
inside a CrossOver, Whisky or Wine bottle — and the app, which had a launcher for Windows
and one for Linux, simply refused: "Launching MX Bikes is supported on Windows and Linux
only." It launches now, through whichever wrapper owns the bottle the game sits in. That
bottle is worked out from the install folder itself: every wrapper keeps its fakeC:drive
atdrive_c, so whatever is above it is the prefix, and no wrapper's private layout has to
be guessed at. CrossOver bottles are started by name, the way CodeWeavers documents, so the
bottle's own graphics settings apply instead of being skipped; everything else is pointed
straight at the prefix. Joining a server goes the same way, connect flag and all. - The app finds a bottled install by itself. Setup and Settings only ever looked where a
native Mac game would be — Steam under~/Library, mods under~/Documents— neither of
which a Windows game inside a bottle ever touches. A Mac player had to type a path like
…/Bottles/MXB/drive_c/…by hand before anything worked at all. Both detectors now search
the CrossOver and Whisky bottles on the machine, including a Windows Steam installed inside
one, and the setup screen's folder hint points at the bottle rather than atDocuments. - The sidebar knows when the game is up on a Mac. Under Wine the game is an ordinary
process, so Play now shows "MX Bikes running" instead of quietly starting a second copy. - A Wine runner picker in Settings, for when the automatic choice is wrong or the wrapper
lives somewhere unusual. It also shows which runner was found and how many bottles the app
can see — so a bottle it can't see shows up as missing before you press Play, not after.
Changed
- A roster means one grid, not the whole platform.
GET /v1/rostertook a server and
ignored it, because nothing recorded where anyone was, so every rider downloaded the paints
of every other enrolled rider. Each app now reports the server it launched into, and a roster
returns the riders actually on it. A rider whose app goes quiet for ten minutes drops out.
Fixed
- The Linux app opens to its interface on SteamOS instead of a white screen. Our AppImage
carries Ubuntu 22.04's libwayland next to whatever Mesa the host ships — the pairing the
AppImage excludelist warns about — and WebKitGTK 2.46 and later abort outright when that
leaves them unable to create an EGL display (EGL_BAD_PARAMETER). The window came up and
nothing ever painted. AppImage runs on a Wayland session now start through XWayland, which
never goes down that path; both SteamOS modes qualify, Desktop and Game. Installed
.deb/.rpmbuilds link the host's own libraries, so they're left on native Wayland, and
an explicitGDK_BACKEND=waylandstill wins anywhere. MXB_SAFE_GRAPHICS=1, for a white screen that survives all that — one variable that also
turns off GPU compositing and renders in software. The startup log now records the session
the app began under and every graphics knob it settled on, so the next report of a blank
window arrives with something to read.- A rider who joins after you now shows up properly. The pull happened once, at launch, so
paint sync was lopsided: whoever joined last saw everyone, and whoever was there first never
saw anyone who arrived afterwards — they had pulled before those riders existed. The app now
keeps checking for the length of the session and installs what turns up.
Everything new in v0.9.0 — A studio for paints, the Shop installing what you bought, and presets that carry their own mods
Added
- Share a preset as a complete bundle, not just a code. A sh...
v0.9.1-beta.3 — The Designer paints
What's Changed
- test(windows): build without the OS drag-drop handler to isolate a Wine ole32 crash by @Frostn1 in #131
- feat(release): refuse to run under a debugger by @Frostn1 in #132
- fix(windows): keep the drag-drop handler off only under Wine by @Frostn1 in #134
- feat(settings): a Supporters page for the people buying the coffees by @Frostn1 in #133
- feat(designer): a ghost underlay of the plastics, and corner resize by @Frostn1 in #135
- chore(release): cut v0.9.1-beta.3 by @Frostn1 in #136
- feat(designer): pin a layer to a piece of bodywork, and cut v0.9.1-beta.3 by @Frostn1 in #138
Full Changelog: v0.9.1-beta.2...v0.9.1-beta.3
MXB App v0.9.1-beta.2
Note
This is a beta build of v0.9.1, for testing. Installed copies of MXB App won't
be offered it by the updater — download the installer below to try it. The full release
follows once it's been checked over.
What's new in v0.9.1 — The Designer paints, Play works on a Mac, and SteamOS stops opening to a white screen
On top of v0.9.0 — everything that release added is still the news, and its notes are
repeated below.
Worth knowing for this beta: the Mac launch has been tested against a stand-in for Wine, not
against a real bottle, so if Play does something odd on your machine the app log names the
exact command it ran — please send it.
Added
- You can paint on a template. The Designer could stack images and text on the sheets of an
unpacked paint, but it could not put down a single pixel — a fade across a shroud or a stripe
cut to follow a panel seam meant leaving for an image editor, exporting, coming back, and
losing the live-on-the-model loop that is the point of the tab. It has a tool kit now: a soft
brush with size, edge and strength, an eraser, a gradient, a fill, and rectangle, ellipse and
line. They land on the 2D sheet and on the 3D model at the same time, while you drag. - A gradient that carries one colour into another. Drag across the sheet to say where the
transition happens — the drag is the axis, not the extent, so everything before it is the
first colour and everything past it is the second. Linear or radial, and it can end at
nothing instead of at a colour, which is the version a livery usually wants. - Painting happens on its own layer. A "Paint layer" sits in the stack like any other, so it
gets opacity, blend mode, visibility and stacking for free — and the template underneath is
never written to, so hiding the layer gets the untouched template back. Picking up a brush
with nothing to paint into makes one rather than doing nothing. - Undo, for strokes. ⌘Z and ⇧⌘Z step through painting, remembering as much as fits in a
fixed memory budget — six steps on a 2048² sheet, a couple of dozen on a small one. Layer
edits are not part of it. - Tools have keys. V, B, E, G, F, R, O and L. Hold Shift for straight lines, squares and
circles; right-drag still pans, which matters more with a brush than with a logo. - Play and Join Server work on macOS. MX Bikes is a Windows game, so on a Mac it runs
inside a CrossOver, Whisky or Wine bottle — and the app, which had a launcher for Windows
and one for Linux, simply refused: "Launching MX Bikes is supported on Windows and Linux
only." It launches now, through whichever wrapper owns the bottle the game sits in. That
bottle is worked out from the install folder itself: every wrapper keeps its fakeC:drive
atdrive_c, so whatever is above it is the prefix, and no wrapper's private layout has to
be guessed at. CrossOver bottles are started by name, the way CodeWeavers documents, so the
bottle's own graphics settings apply instead of being skipped; everything else is pointed
straight at the prefix. Joining a server goes the same way, connect flag and all. - The app finds a bottled install by itself. Setup and Settings only ever looked where a
native Mac game would be — Steam under~/Library, mods under~/Documents— neither of
which a Windows game inside a bottle ever touches. A Mac player had to type a path like
…/Bottles/MXB/drive_c/…by hand before anything worked at all. Both detectors now search
the CrossOver and Whisky bottles on the machine, including a Windows Steam installed inside
one, and the setup screen's folder hint points at the bottle rather than atDocuments. - The sidebar knows when the game is up on a Mac. Under Wine the game is an ordinary
process, so Play now shows "MX Bikes running" instead of quietly starting a second copy. - A Wine runner picker in Settings, for when the automatic choice is wrong or the wrapper
lives somewhere unusual. It also shows which runner was found and how many bottles the app
can see — so a bottle it can't see shows up as missing before you press Play, not after.
Fixed
- The Linux app opens to its interface on SteamOS instead of a white screen. Our AppImage
carries Ubuntu 22.04's libwayland next to whatever Mesa the host ships — the pairing the
AppImage excludelist warns about — and WebKitGTK 2.46 and later abort outright when that
leaves them unable to create an EGL display (EGL_BAD_PARAMETER). The window came up and
nothing ever painted. AppImage runs on a Wayland session now start through XWayland, which
never goes down that path; both SteamOS modes qualify, Desktop and Game. Installed
.deb/.rpmbuilds link the host's own libraries, so they're left on native Wayland, and
an explicitGDK_BACKEND=waylandstill wins anywhere. MXB_SAFE_GRAPHICS=1, for a white screen that survives all that — one variable that also
turns off GPU compositing and renders in software. The startup log now records the session
the app began under and every graphics knob it settled on, so the next report of a blank
window arrives with something to read.
Everything new in v0.9.0 — A studio for paints, the Shop installing what you bought, and presets that carry their own mods
Added
- Share a preset as a complete bundle, not just a code. A share code carries the names
of what a look is made of, which is no use to someone who owns none of it — they get your
preset and a list of things to go and find. Create full bundle in the Share dialog
gathers every asset the loadout actually references — bike livery, helmet and its paint,
goggles, suit, gloves, boots, protection, tyres, even a model-swap variant — zips them into
amods/-shaped tree with the preset beside them, and puts the download inside the code.
Full import at the other end unpacks the lot into the folders the game reads, so a rider
with an empty mods folder ends up wearing exactly what you built, first try. Folders are
resolved as they're gathered, so a bundle carries real files rather than links pointing at
your disk. A bundle over 200 MB is refused up front, with its size named, instead of after
the upload. - A paint designer, and one Studio instead of three tabs. Designing a livery meant leaving
for a web editor, exporting a.tga, packing it, launching, looking, and starting over —
the loop was long enough that most of it happened blind. The Designer closes it: start
from a paint already installed for the model (which is how the sheets arrive named the way
the mesh binds them), stack images and text on top, drag them around, and the bike or
rider beside you wears the drawing as you draw it. Save writes the packed.pntthe game
reads, through the same destination picker, overwrite prompt and folder rules Paints already
used. No brushes and no filters — pixels still come from wherever you like drawing them;
this places them and knows where they go. - Designer, Paints and Rider now live under one Studio tab, switched by a segmented
control. They were three sidebar entries answering three halves of one question, and the
sidebar had started listing features rather than places; it's back to seven entries. - The Studio works under GP Bikes too. Building a
.pntis the same job for either title —
same container, same encoder, same folders — and only the 3D preview needs part bindings GP
Bikes doesn't have yet. So Designer and Paints are both there, the preview says plainly why
it isn't, and the Rider tab (which is the rig) stays MX Bikes-only. Paint destinations are
read from the game's own rider layout rather than listed in the app, so GP Bikes is offered
its three — bike livery, helmet, rider kit — instead of MX Bikes' boots and protection
folders it has no use for. - The sidebar collapses to icons, and the Designer's sheets/layers rail folds away, for
when the canvas and the model are what you want the width for. - A new Paints tab turns image files into paints the game loads. MX Bikes reads a paint
as a packed container of compressed texture sheets, which no image editor writes — so
until now a livery drawn in GIMP or Photoshop had to go through somebody else's converter
before the game, or this app's 3D preview, would look at it. Pick the sheets (.tga,
.png,.jpg,.bmp,.webp), say what they're for, and the app builds the.pntand
installs it where the game expects it:mods/bikes/<Bike>/paints,
rider/helmets/<Helmet>/paintsorgoggles, boots, protection, and a rider profile's
kit or gloves. Or save it to a folder of your own, to share. - Unpack an existing paint into editable
.tgasheets. This is how you get a template
that actually fits the model: the sheets come out named the way the mesh binds them
(livery,rider,shell…), open in any editor, and go straight back in under the same
names. Extracted toDocuments\MXB App\Paint Templates\<paint>and loaded into the studio
in one step, so the round trip is edit → Reload from disk → Save paint. - Names are the part that decides whether a paint works, so the studio shows them. A
.pntsupplies textures by name and the mesh binds whichever names it asked for — a
sheet calledliverylands on the bodywork, the same sheet calledmy_liverylands
nowhere. The studio reads the names the paints already installed for that model use (from
their headers — no pixels decoded), lists them, and flags a sheet whose name isn't one of
them before you save. - Preview what you just saved on the real model, through the viewer the app already
has: a bike livery on its bike, a helmet or goggle paint on that helmet, a kit on the
rider. - Sheets that aren't a power of two are resized to one, and say so. MX Bikes is a
DirectX 9 title and its textures are powers of two th...
MXB App v0.9.1-beta.1
Note
This is a beta build of v0.9.1, for testing. Installed copies of MXB App won't
be offered it by the updater — download the installer below to try it. The full release
follows once it's been checked over.
What's new in v0.9.1 — Play works on a Mac, and SteamOS stops opening to a white screen
A patch on top of v0.9.0 — everything that release added is still the news, and its notes
are repeated below.
Worth knowing for this beta: the Mac launch has been tested against a stand-in for Wine, not
against a real bottle, so if Play does something odd on your machine the app log names the
exact command it ran — please send it.
Added
- Play and Join Server work on macOS. MX Bikes is a Windows game, so on a Mac it runs
inside a CrossOver, Whisky or Wine bottle — and the app, which had a launcher for Windows
and one for Linux, simply refused: "Launching MX Bikes is supported on Windows and Linux
only." It launches now, through whichever wrapper owns the bottle the game sits in. That
bottle is worked out from the install folder itself: every wrapper keeps its fakeC:drive
atdrive_c, so whatever is above it is the prefix, and no wrapper's private layout has to
be guessed at. CrossOver bottles are started by name, the way CodeWeavers documents, so the
bottle's own graphics settings apply instead of being skipped; everything else is pointed
straight at the prefix. Joining a server goes the same way, connect flag and all. - The app finds a bottled install by itself. Setup and Settings only ever looked where a
native Mac game would be — Steam under~/Library, mods under~/Documents— neither of
which a Windows game inside a bottle ever touches. A Mac player had to type a path like
…/Bottles/MXB/drive_c/…by hand before anything worked at all. Both detectors now search
the CrossOver and Whisky bottles on the machine, including a Windows Steam installed inside
one, and the setup screen's folder hint points at the bottle rather than atDocuments. - The sidebar knows when the game is up on a Mac. Under Wine the game is an ordinary
process, so Play now shows "MX Bikes running" instead of quietly starting a second copy. - A Wine runner picker in Settings, for when the automatic choice is wrong or the wrapper
lives somewhere unusual. It also shows which runner was found and how many bottles the app
can see — so a bottle it can't see shows up as missing before you press Play, not after.
Fixed
- The Linux app opens to its interface on SteamOS instead of a white screen. Our AppImage
carries Ubuntu 22.04's libwayland next to whatever Mesa the host ships — the pairing the
AppImage excludelist warns about — and WebKitGTK 2.46 and later abort outright when that
leaves them unable to create an EGL display (EGL_BAD_PARAMETER). The window came up and
nothing ever painted. AppImage runs on a Wayland session now start through XWayland, which
never goes down that path; both SteamOS modes qualify, Desktop and Game. Installed
.deb/.rpmbuilds link the host's own libraries, so they're left on native Wayland, and
an explicitGDK_BACKEND=waylandstill wins anywhere. MXB_SAFE_GRAPHICS=1, for a white screen that survives all that — one variable that also
turns off GPU compositing and renders in software. The startup log now records the session
the app began under and every graphics knob it settled on, so the next report of a blank
window arrives with something to read.
Everything new in v0.9.0 — A studio for paints, the Shop installing what you bought, and presets that carry their own mods
Added
-
Share a preset as a complete bundle, not just a code. A share code carries the names
of what a look is made of, which is no use to someone who owns none of it — they get your
preset and a list of things to go and find. Create full bundle in the Share dialog
gathers every asset the loadout actually references — bike livery, helmet and its paint,
goggles, suit, gloves, boots, protection, tyres, even a model-swap variant — zips them into
amods/-shaped tree with the preset beside them, and puts the download inside the code.
Full import at the other end unpacks the lot into the folders the game reads, so a rider
with an empty mods folder ends up wearing exactly what you built, first try. Folders are
resolved as they're gathered, so a bundle carries real files rather than links pointing at
your disk. A bundle over 200 MB is refused up front, with its size named, instead of after
the upload. -
A paint designer, and one Studio instead of three tabs. Designing a livery meant leaving
for a web editor, exporting a.tga, packing it, launching, looking, and starting over —
the loop was long enough that most of it happened blind. The Designer closes it: start
from a paint already installed for the model (which is how the sheets arrive named the way
the mesh binds them), stack images and text on top, drag them around, and the bike or
rider beside you wears the drawing as you draw it. Save writes the packed.pntthe game
reads, through the same destination picker, overwrite prompt and folder rules Paints already
used. No brushes and no filters — pixels still come from wherever you like drawing them;
this places them and knows where they go. -
Designer, Paints and Rider now live under one Studio tab, switched by a segmented
control. They were three sidebar entries answering three halves of one question, and the
sidebar had started listing features rather than places; it's back to seven entries. -
The Studio works under GP Bikes too. Building a
.pntis the same job for either title —
same container, same encoder, same folders — and only the 3D preview needs part bindings GP
Bikes doesn't have yet. So Designer and Paints are both there, the preview says plainly why
it isn't, and the Rider tab (which is the rig) stays MX Bikes-only. Paint destinations are
read from the game's own rider layout rather than listed in the app, so GP Bikes is offered
its three — bike livery, helmet, rider kit — instead of MX Bikes' boots and protection
folders it has no use for. -
The sidebar collapses to icons, and the Designer's sheets/layers rail folds away, for
when the canvas and the model are what you want the width for. -
A new Paints tab turns image files into paints the game loads. MX Bikes reads a paint
as a packed container of compressed texture sheets, which no image editor writes — so
until now a livery drawn in GIMP or Photoshop had to go through somebody else's converter
before the game, or this app's 3D preview, would look at it. Pick the sheets (.tga,
.png,.jpg,.bmp,.webp), say what they're for, and the app builds the.pntand
installs it where the game expects it:mods/bikes/<Bike>/paints,
rider/helmets/<Helmet>/paintsorgoggles, boots, protection, and a rider profile's
kit or gloves. Or save it to a folder of your own, to share. -
Unpack an existing paint into editable
.tgasheets. This is how you get a template
that actually fits the model: the sheets come out named the way the mesh binds them
(livery,rider,shell…), open in any editor, and go straight back in under the same
names. Extracted toDocuments\MXB App\Paint Templates\<paint>and loaded into the studio
in one step, so the round trip is edit → Reload from disk → Save paint. -
Names are the part that decides whether a paint works, so the studio shows them. A
.pntsupplies textures by name and the mesh binds whichever names it asked for — a
sheet calledliverylands on the bodywork, the same sheet calledmy_liverylands
nowhere. The studio reads the names the paints already installed for that model use (from
their headers — no pixels decoded), lists them, and flags a sheet whose name isn't one of
them before you save. -
Preview what you just saved on the real model, through the viewer the app already
has: a bike livery on its bike, a helmet or goggle paint on that helmet, a kit on the
rider. -
Sheets that aren't a power of two are resized to one, and say so. MX Bikes is a
DirectX 9 title and its textures are powers of two throughout; a 1000×1000 export — which
GIMP will happily make — would otherwise be packed into a file the game refuses, and the
failure would land in-game rather than in the app. -
Pick a ReShade preset from Settings. A new ReShade card lists every preset you have —
the ones the app installed and any already sitting loose in your game folder — and switching
between them is one click. There's an "Off" entry that runs no effects, so you can compare a
preset against the stock look without uninstalling anything. -
Browse and install ReShade presets like any other mod. mxb-mods' ReShade Presets
category is now a tab in Browse. Installing one files the preset where the app can find it,
and puts any effects and lookup textures the download bundles where ReShade looks for them —
the usual reason a preset "does nothing" after a manual install. -
Drop a preset on the app. A
.inior an archive of them is recognised as a ReShade
preset and goes straight to the right place. -
The app says when ReShade is installed for the wrong graphics API. MX Bikes and GP Bikes
render with OpenGL, and ReShade's installer offers DirectX first — a DirectX install is
never loaded by the game and looks like ReShade simply not working. The card names that
specifically, and points at the fix. -
Presets warn when they need effects you don't have. A preset that switches on a shader
that isn't installed renders without it and looks like it did nothing; the card lists what's
missing instead.Getting ReShade itself is still a trip to reshade.me — it asks that its binaries not be
redistributed, so the app detects it and links out...
MXB App v0.9.0
What's new in v0.9.0 — A studio for paints, the Shop installing what you bought, and presets that carry their own mods
Added
-
Share a preset as a complete bundle, not just a code. A share code carries the names
of what a look is made of, which is no use to someone who owns none of it — they get your
preset and a list of things to go and find. Create full bundle in the Share dialog
gathers every asset the loadout actually references — bike livery, helmet and its paint,
goggles, suit, gloves, boots, protection, tyres, even a model-swap variant — zips them into
amods/-shaped tree with the preset beside them, and puts the download inside the code.
Full import at the other end unpacks the lot into the folders the game reads, so a rider
with an empty mods folder ends up wearing exactly what you built, first try. Folders are
resolved as they're gathered, so a bundle carries real files rather than links pointing at
your disk. A bundle over 200 MB is refused up front, with its size named, instead of after
the upload. -
A paint designer, and one Studio instead of three tabs. Designing a livery meant leaving
for a web editor, exporting a.tga, packing it, launching, looking, and starting over —
the loop was long enough that most of it happened blind. The Designer closes it: start
from a paint already installed for the model (which is how the sheets arrive named the way
the mesh binds them), stack images and text on top, drag them around, and the bike or
rider beside you wears the drawing as you draw it. Save writes the packed.pntthe game
reads, through the same destination picker, overwrite prompt and folder rules Paints already
used. No brushes and no filters — pixels still come from wherever you like drawing them;
this places them and knows where they go. -
Designer, Paints and Rider now live under one Studio tab, switched by a segmented
control. They were three sidebar entries answering three halves of one question, and the
sidebar had started listing features rather than places; it's back to seven entries. -
The Studio works under GP Bikes too. Building a
.pntis the same job for either title —
same container, same encoder, same folders — and only the 3D preview needs part bindings GP
Bikes doesn't have yet. So Designer and Paints are both there, the preview says plainly why
it isn't, and the Rider tab (which is the rig) stays MX Bikes-only. Paint destinations are
read from the game's own rider layout rather than listed in the app, so GP Bikes is offered
its three — bike livery, helmet, rider kit — instead of MX Bikes' boots and protection
folders it has no use for. -
The sidebar collapses to icons, and the Designer's sheets/layers rail folds away, for
when the canvas and the model are what you want the width for. -
A new Paints tab turns image files into paints the game loads. MX Bikes reads a paint
as a packed container of compressed texture sheets, which no image editor writes — so
until now a livery drawn in GIMP or Photoshop had to go through somebody else's converter
before the game, or this app's 3D preview, would look at it. Pick the sheets (.tga,
.png,.jpg,.bmp,.webp), say what they're for, and the app builds the.pntand
installs it where the game expects it:mods/bikes/<Bike>/paints,
rider/helmets/<Helmet>/paintsorgoggles, boots, protection, and a rider profile's
kit or gloves. Or save it to a folder of your own, to share. -
Unpack an existing paint into editable
.tgasheets. This is how you get a template
that actually fits the model: the sheets come out named the way the mesh binds them
(livery,rider,shell…), open in any editor, and go straight back in under the same
names. Extracted toDocuments\MXB App\Paint Templates\<paint>and loaded into the studio
in one step, so the round trip is edit → Reload from disk → Save paint. -
Names are the part that decides whether a paint works, so the studio shows them. A
.pntsupplies textures by name and the mesh binds whichever names it asked for — a
sheet calledliverylands on the bodywork, the same sheet calledmy_liverylands
nowhere. The studio reads the names the paints already installed for that model use (from
their headers — no pixels decoded), lists them, and flags a sheet whose name isn't one of
them before you save. -
Preview what you just saved on the real model, through the viewer the app already
has: a bike livery on its bike, a helmet or goggle paint on that helmet, a kit on the
rider. -
Sheets that aren't a power of two are resized to one, and say so. MX Bikes is a
DirectX 9 title and its textures are powers of two throughout; a 1000×1000 export — which
GIMP will happily make — would otherwise be packed into a file the game refuses, and the
failure would land in-game rather than in the app. -
Pick a ReShade preset from Settings. A new ReShade card lists every preset you have —
the ones the app installed and any already sitting loose in your game folder — and switching
between them is one click. There's an "Off" entry that runs no effects, so you can compare a
preset against the stock look without uninstalling anything. -
Browse and install ReShade presets like any other mod. mxb-mods' ReShade Presets
category is now a tab in Browse. Installing one files the preset where the app can find it,
and puts any effects and lookup textures the download bundles where ReShade looks for them —
the usual reason a preset "does nothing" after a manual install. -
Drop a preset on the app. A
.inior an archive of them is recognised as a ReShade
preset and goes straight to the right place. -
The app says when ReShade is installed for the wrong graphics API. MX Bikes and GP Bikes
render with OpenGL, and ReShade's installer offers DirectX first — a DirectX install is
never loaded by the game and looks like ReShade simply not working. The card names that
specifically, and points at the fix. -
Presets warn when they need effects you don't have. A preset that switches on a shader
that isn't installed renders without it and looks like it did nothing; the card lists what's
missing instead.Getting ReShade itself is still a trip to reshade.me — it asks that its binaries not be
redistributed, so the app detects it and links out rather than bundling or downloading it. -
Install what you bought on the MX Bikes Shop, from inside the app. The Shop tab now has
two halves — Catalog, the store's public listing as before, and My purchases, which
signs in to your own mxbikes-shop.com account and shows everything you've already paid for.
Cards carry the store's own artwork and author, a product that ships several files (PRO/AMS
and the like) is one card with a picker rather than several, and anything already in your
library is badged as installed. -
Purchases install through the same review sheet a drag-and-drop uses. The file is
downloaded with a progress bar, then read to see what it actually contains, and the sheet
says where each piece will land and warns about collisions before anything is written. -
An Import button in the Library, for setups drag-and-drop never reaches. Dropping a
download on the window stays the fast path, but the OS drop event doesn't arrive
everywhere — remote desktops and some shells eat it — and where it doesn't, there was no
other way to install a file you'd already downloaded. Import → Choose files… (or
Choose a folder…, for an unpacked track) stages exactly what a drop stages: same
classification, same review sheet showing where each piece lands, same collision
warnings, and nothing written until you confirm. -
Presets can use a custom riding style. The Riding style slot only ever offered the
two styles the game ships, so a style you had installed could not be picked — you could
type its name in by hand, but the preset then flagged it as a mod you were missing, never
packed it into a share code, and Manage was free to park it right before a race. The slot
now lists what is installed inmods/rider/animationsalongside the stockmxandsm,
a shared preset carries the style with it like it already carries helmets and paints, and
Manage keeps it. MX Bikes and GP Bikes both, which is the point: the two games load
riding styles from the same folder and record the pick in the same[riding_style]line. -
MX Bikes lists riding styles in the Library, in the Rider tab under their own heading,
and offersmods/rider/animationswhen you install one. GP Bikes already did both; MX
Bikes was treated as if it had no such folder, so a riding style installed there was
invisible to the app. -
FrostMod can be stopped from the app. The sidebar pill and the FrostMod section in
Settings now offer a stop control while it's running, next to the reload and start ones —
until now the only way out was Task Manager or quitting the app from the tray. It stops
FrostMod whoever started it: afrostmod.exeleft behind by an earlier session, or one
launched by hand, is no longer out of reach just because this app didn't spawn it. The app
waits for the process to actually go before saying it stopped, so a FrostMod that survives
the attempt (running elevated, or as another user) is reported rather than papered over with
a success message the status pill contradicts a second later. Stopping is a one-off — it
doesn't touch the "Run FrostMod automatically" setting, so the next app launch behaves as
configured. -
"msvcr90.dll was not found" is now something the app explains and fixes. MX Bikes is
a Visual C++ 2008 build, and it asks Windows for that runtime by manifest rather than by
path — which resolves either machine-wide or out of a private copy sitting in the game
folder. On a PC li...