Skip to content

Releases: Frostn1/mxb-app

MXB App v0.9.2-beta.4

MXB App v0.9.2-beta.4 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Aug 01:11

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.
  • 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 writes log.txt beside
    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 under tracks/EU/ arrives under tracks/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 .trh stores
    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...
Read more

MXB App v0.9.2-beta.3

MXB App v0.9.2-beta.3 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Aug 08:02

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.
  • 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 writes log.txt beside
    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 .trh stores
    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 .trh is — 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...
Read more

MXB App v0.9.2-beta.2

MXB App v0.9.2-beta.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Aug 01:55

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.
  • 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 writes log.txt beside
    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 .trh stores
    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 .trh is — 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 ...
Read more

MXB App v0.9.2-beta.1

MXB App v0.9.2-beta.1 Pre-release
Pre-release

Choose a tag to compare

@Frostn1 Frostn1 released this 11 Aug 16:33
224aad4

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

Choose a tag to compare

@github-actions github-actions released this 11 Aug 07:07

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 themselves shroud, 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 fake C: drive
    at drive_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 at Documents.
  • 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/roster took 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 ...
Read more

MXB App v0.9.1-beta.4

MXB App v0.9.1-beta.4 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Aug 05:00

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 themselves shroud, 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 fake C: drive
    at drive_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 at Documents.
  • 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/roster took 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/.rpm builds link the host's own libraries, so they're left on native Wayland, and
    an explicit GDK_BACKEND=wayland still 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...
Read more

v0.9.1-beta.3 — The Designer paints

Pre-release

Choose a tag to compare

@Frostn1 Frostn1 released this 10 Aug 21:43
3e05524

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

MXB App v0.9.1-beta.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Aug 18:17
412cc85

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 fake C: drive
    at drive_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 at Documents.
  • 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/.rpm builds link the host's own libraries, so they're left on native Wayland, and
    an explicit GDK_BACKEND=wayland still 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
    a mods/-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 .pnt the 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 .pnt is 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 .pnt and
    installs it where the game expects it: mods/bikes/<Bike>/paints,
    rider/helmets/<Helmet>/paints or goggles, 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 .tga sheets. 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 to Documents\MXB App\Paint Templates\<paint> and loaded into the studio
    in one step, so the round trip is edit → Reload from diskSave paint.
  • Names are the part that decides whether a paint works, so the studio shows them. A
    .pnt supplies textures by name and the mesh binds whichever names it asked for — a
    sheet called livery lands on the bodywork, the same sheet called my_livery lands
    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...
Read more

MXB App v0.9.1-beta.1

MXB App v0.9.1-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Aug 15:31
57d4559

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 fake C: drive
    at drive_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 at Documents.
  • 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/.rpm builds link the host's own libraries, so they're left on native Wayland, and
    an explicit GDK_BACKEND=wayland still 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
    a mods/-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 .pnt the 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 .pnt is 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 .pnt and
    installs it where the game expects it: mods/bikes/<Bike>/paints,
    rider/helmets/<Helmet>/paints or goggles, 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 .tga sheets. 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 to Documents\MXB App\Paint Templates\<paint> and loaded into the studio
    in one step, so the round trip is edit → Reload from diskSave paint.

  • Names are the part that decides whether a paint works, so the studio shows them. A
    .pnt supplies textures by name and the mesh binds whichever names it asked for — a
    sheet called livery lands on the bodywork, the same sheet called my_livery lands
    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 .ini or 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...

Read more

MXB App v0.9.0

Choose a tag to compare

@github-actions github-actions released this 10 Aug 08:56
78a724e

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
    a mods/-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 .pnt the 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 .pnt is 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 .pnt and
    installs it where the game expects it: mods/bikes/<Bike>/paints,
    rider/helmets/<Helmet>/paints or goggles, 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 .tga sheets. 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 to Documents\MXB App\Paint Templates\<paint> and loaded into the studio
    in one step, so the round trip is edit → Reload from diskSave paint.

  • Names are the part that decides whether a paint works, so the studio shows them. A
    .pnt supplies textures by name and the mesh binds whichever names it asked for — a
    sheet called livery lands on the bodywork, the same sheet called my_livery lands
    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 .ini or 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 in mods/rider/animations alongside the stock mx and sm,
    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 offers mods/rider/animations when 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: a frostmod.exe left 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...

Read more