Skip to content

Repository files navigation

RSWreckGarage

RSWreckGarage

Edit a Wreckfest garage save instead of grinding it: recolor every car at once, set credits, level and tournament fame, fit the upgrades you already own. Plain files, no memory injection, nothing to install on the PC that runs the game.


RSWreckGarage - the garage list with color swatches, the color panel, career numbers and the save row

cars5.ccrs in your profile (GOG: %USERPROFILE%\AppData\LocalLow\THQNordic\Wreckfest\goguserdata\wreckfest\) holds every garage car - paint colors and fitted parts - as plain numbers and strings inside an LZ4 container. These tools read and rewrite those files; no manual slider work.

There are two implementations with the same features:

file needs
GUI / PowerShell (use this on the gaming PCs) RSWreckGarage.cmd -> RSWreckGarage.ps1 nothing - Windows PowerShell 5.1 + .NET are on every Windows PC
Python CLI rswreckgarage.py, make_colors.cmd Python 3

Both produce byte-identical results.

Get it: git clone https://github.com/RootSwitch/RSWreckGarage.git, or Code -> Download ZIP on GitHub. Everything works from the unpacked folder; there is no install step. Unlicense.

Before you start

You are editing your save game, so treat the profile with respect:

  • Copy the whole profile folder somewhere safe once (right-click -> Copy, paste it on your desktop). That beats every tool-made backup, covers files the tools never touch, and takes ten seconds. The tools also do this for you: the first time one of them saves into a profile it copies every profile file to rswreckgarage-original\ inside it.
  • Quit Wreckfest first. The game keeps the profile in memory and writes it back when you leave a race or change a setting, which silently overwrites your edit - so the tools refuse to save into the live profile while the game is running.
  • Every in-place save keeps the file it replaces as name.bak next to it (.bak with no number is always the file as it was before the first edit; .bak2, .bak3 ... are newer). Restore backup... in the GUI, -Restore / restore on the command lines, or plain renaming puts one back. Files are written to a temp name, verified, and only then swapped in, so a crash mid-save cannot leave a half-written profile.
  • Cloud saves (GOG Galaxy, Steam, Xbox/Game Pass) cut both ways: the launcher can push an older cloud copy back over your edit, and it can upload your edited files - including the .bak files and rswreckgarage-original\, since they live inside the synced folder. The game itself accepts edited values and re-saves them as its own, but if you want none of that synced, disable cloud saves for Wreckfest in the launcher before editing. The GOG offline installer version has no cloud at all - nothing leaves the PC.

GUI (RSWreckGarage.cmd)

Copy the whole folder to a PC (or just RSWreckGarage.cmd + RSWreckGarage.ps1) and double-click RSWreckGarage.cmd. It finds the local profile automatically - it looks in %USERPROFILE%\AppData\LocalLow\THQNordic\Wreckfest\{goguserdata,userdata,egsuserdata,msuserdata}\wreckfest (plus the older layout without the Wreckfest folder), in Steam's Documents\My Games\Wreckfest (and its pre-2019 <Steam>\userdata\<id>\228380\local\wreckfest), and in per-user-id subfolders of all of those; if several are found they're listed in the dropdown at the top right, or Browse... to any folder:

  • Colors - "Replace blue with red" (every slot that looks blue, plus factory-paint cars if ticked), or "Paint bodies". Named colors in the dropdowns, or Pick... for any RGB color.
  • Selected cars only - tick it and the color buttons (and the parts fitter) touch only the rows highlighted in the list. Ctrl/Shift-click to multi-select, Ctrl+A for all. This is how you build category color schemes: select the "slow armoured" cars -> Paint bodies green, and so on.
  • Career - credits, XP, tournament fame (Max = 99,999,999 / 20,000,000 / 99,999,999), experimental name field.
  • Fit best owned engine parts - swaps higher-tier engine parts already in your inventory onto the cars.
  • Clear thumbnails - deletes menu\icon_car_*.png, the cached renders that made the car-select bar keep showing blue cars. Also done automatically on save (tick box).
  • Save changes to profile writes only the files that changed, keeping .bak copies (and the one-time rswreckgarage-original\ snapshot, see above). Refused while Wreckfest is running. Save cars5.ccrs as... writes just the car file elsewhere (e.g. to build one file per color).
  • Restore backup... puts a backup back: pick a .bak file (a number picker away from any earlier state) or a file inside rswreckgarage-original\ to restore one file or the whole snapshot. The file being replaced is kept as a new .bak first, so restoring is also undoable.

The same script works from a command prompt (handy for scripting), e.g.

RSWreckGarage.cmd -Dump
RSWreckGarage.cmd -Recolor -From blue -To red -IncludeUnpainted [-Out cars5_red.ccrs]
RSWreckGarage.cmd -Career -Credits 99999999 -Xp 20000000 -Fame 99999999
RSWreckGarage.cmd -EquipBest
RSWreckGarage.cmd -ClearThumbnails
RSWreckGarage.cmd -Backups
RSWreckGarage.cmd -Restore "<profile>\cars5.ccrs.bak"

Add -Profile <folder> to pick a profile, -Car "supervan,big rig" to touch only cars whose name or vehicle id contains one of the words, and -WhatIf to preview without writing. -Force writes even while Wreckfest is running (not recommended). -Restore also takes the rswreckgarage-original folder to put the whole pre-edit profile back.

The GUI uses the Canvas Suite "Classic" look (the fifteen --se-* values as a table, flat bordered controls, one filled primary button, dim uppercase section labels) so it sits next to the other RS tools.

The tools were built for a row of sim-racing PCs that share one profile and each want their cars in a different color. That routine is: copy the master profile over -> run the GUI -> Replace blue with the PC's color -> Save (thumbnails cleared automatically) -> start the game.

Python CLI (rswreckgarage.py)

python rswreckgarage.py dump wreckfest\cars5.ccrs
python rswreckgarage.py recolor wreckfest\cars5.ccrs --from blue --to red --include-unpainted --out cars5_red.ccrs
python rswreckgarage.py paint   wreckfest\cars5.ccrs --color "#ff8800" --out cars5_orange.ccrs
python rswreckgarage.py career  wreckfest\career.cres --credits 99999999 --xp 20000000 --fame 99999999
python rswreckgarage.py parts   wreckfest\cars5.ccrs --car sweeper
python rswreckgarage.py equip-best wreckfest\cars5.ccrs
python rswreckgarage.py clear-thumbnails wreckfest
python rswreckgarage.py backups auto
python rswreckgarage.py restore wreckfest\cars5.ccrs.bak
make_colors.cmd            :: one cars5.ccrs per color -> colors\<color>\

Wherever a file is expected you can also give the profile folder, or auto for the first profile found on this PC (e.g. python rswreckgarage.py career auto --fame 99999999).

Common options: --out FILE (default: overwrite input, .bak kept), --car "big rig,limo", --dry-run, --clear-thumbnails, --force (write even while the game runs - not recommended). recolor: --include-unpainted, --slots 1 (body only), --hue-tolerance 20. paint: --skip-unpainted, --slot N. equip-best: --inventory FILE, --out-dir DIR. restore takes a .bak file, a file inside rswreckgarage-original\, or that folder itself for the whole pre-edit profile.

Colors: red orange yellow lime green teal cyan skyblue blue purple magenta pink white black gray silver brown, #rrggbb, rgb(r,g,b), hsv(h,s,v). Named colors use brightness 0.9, matching the game's own palette swatches.

Suggested one-time setup (several PCs, one profile)

  1. On the master profile: credits + XP so every part is buyable (-Career / career).
  2. Optionally -EquipBest (rewrites cars5.ccrs and playerinventory2.usli - keep them together).
  3. Play once, buy/fit whatever else you want, quit; that profile is the new master.
  4. Copy it to each PC, run the GUI there, pick the color, save. Done.

On a single PC just run the GUI against the live profile; see "Before you start" for the safety net every write gets (snapshot, .bak, verified atomic writes, game-running check).

Player name

The in-game name is not stored in the profile: career.cres starts with a fixed label "Driver" and the championship block merely snapshots the current name ("Guest1" here, empty in a fresh profile). The game takes the name from Windows / GOG Galaxy at runtime. The GUI's name field edits both strings anyway (harmless). A separate experiment, LaunchWreckfestAs.cmd Red, starts the game with the USERNAME environment variable changed - it works only if the game reads that variable rather than asking Windows directly.

What's in the files (for the curious)

All the profile files (cars5.ccrs, playerinventory2.usli, career.cres, records.ercs, ...) share one container:

u32 7 | 4-char tag reversed ("srcc") | u32 version
blocks: u32 compressed_size | u32 CRC32-C of the uncompressed data | LZ4 block
        (64 KB uncompressed per block, blocks are LZ4 "linked")

cars5.ccrs: each car record starts with a nart chunk (internal key, display name, vehicle id), then the fitted parts, then the paint:

usli | u32 2 | u32 1 | tspu | u32 2 | u32 32 | 32 x (4-char tag, string path, u32 item id)
usli | u32 2 | u32 1 | tspu | u32 2 | u32 0 | u32 0            (empty second list, purpose unknown)
sccv | u32 1 | u32 1 | u32 flags | 4 x (float hue_deg, float saturation, float value)
stsc | ...performance stats...

Color slot 1 is the body paint; slots 2-4 are the livery colors. flags bit 0 is set once a custom color has been applied. Pure blue at full saturation is 240, 1.0, 0.9.

Part paths look like data/vehicle/37_european/part/engine/a_class/air_filter/racing.vefi; the ten engine sub-parts come in tiers stock < street < sport < racing (not every vehicle has them). Every part is an item with an id that is unique across cars5.ccrs and playerinventory2.usli (the spare-parts list - the same tspu layout). Fitting a part = moving the item between the two lists, which is exactly what equip-best does. It never invents new items: the counter the game uses to hand out ids hasn't been located, and a "buy everything" mode would also need the part catalogue from the game's .bfs archives.

career.cres: u32 len | "Driver" | u32 credits | u32 xp | ... (a fresh profile has 10 000 / 0); ppsc | u32 5 | u32 | string name further in is the championship snapshot. The (solo) tournament state is in the same file: a leot block with the season's events, ending in neot(empty) | u32 fame | u8 season | nrpu(shop items) - that u32 is the fame balance (0 on a fresh profile, season byte 0xff), and it survives the game's own re-save.

Repository layout

  RSWreckGarage.cmd / .ps1     GUI + CLI, no dependencies (the one to copy to guest PCs)
  rswreckgarage.py             Python CLI, same features
  favicon.svg                  the mark (the GUI draws the same wheel for its window icon)
  make_colors.cmd              one cars5.ccrs per color from a master profile in wreckfest\ beside it
  LaunchWreckfestAs.cmd        USERNAME experiment for the player name
  samples/fresh-profile/       an anonymous fresh profile (34 cars, 10 000 credits) used by the tests
  tools/selftest.py            round-trip, edit-isolation and PowerShell-parity checks
  tools/charcheck.py           style check: no em/en dashes, scripts stay ASCII
  tools/make-hero.ps1          regenerates docs/hero.png from a local profile (paths swapped for the standard one)
  tools/make-social.ps1        regenerates docs/social-preview.png from the hero (GitHub's link-preview card)
  docs/                        hero.png (the screenshot above), social-preview.png

Real profiles (any wreckfest*\ folder, colors\, any *.bak) are git-ignored on purpose: they are personal save data. Run python tools/selftest.py and python tools/charcheck.py before committing; both must exit 0.

Caveats

  • Recoloring, credits, XP and fame are confirmed working in-game on the GOG version (the game re-saves the files in its own encoding and keeps the values; the tournament shop is pricey enough that 999,999 fame did not cover everything, hence the 99,999,999 default). Steam, Epic and MS Store locations are searched and protected by the same guards, but no edit has been confirmed in-game there. Equip-best and the name field are verified against the file format but not yet loaded in the game - try them on a copy first.
  • If a huge XP value makes the level display look silly, lower it; the exact level curve isn't known.
  • The Xbox / Game Pass version has no offline tournament, so a fame balance may be useless there (nothing to spend it on) or the counter may be absent altogether - in that case the tools find no fame slot and refuse to write one (the GUI greys the field out) rather than guessing.
  • GOG Galaxy cloud saves may push an older profile back over your edited one; disable cloud saves for Wreckfest on the guest PCs if that happens.
  • Backups pile up if you save a lot (.bak2, .bak3 ...). They are plain copies - delete the older ones whenever you like; keep name.bak and rswreckgarage-original\ if you want the pre-edit state around.

About

Edit a Wreckfest garage save instead of grinding it: recolor every car at once, set credits, level and fame, fit the upgrades you already own. PowerShell GUI with nothing to install, plus a Python CLI.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages