feat: v4.1.0 -- workshop-ready (logo, path discovery, docs)

Players install from Steam Workshop instead of install.sh, which failed on
Windows (bash) and a Manjaro box (hard-coded Mods globs). Adds Logo +
logo.png the uploader ships, tools/steam_paths.py reading Steam's
libraryfolders.vdf (Flatpak/Snap/second disk/Windows), and README install
tiers plus in-game publishing steps.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014TkQMhvEyoFqKzeCC69N6o
This commit is contained in:
2026-08-29 17:10:22 +02:00
co-authored by Claude Fable 5
parent 68af02fb3f
commit 1001abf57a
7 changed files with 344 additions and 45 deletions
+50 -5
View File
@@ -96,26 +96,70 @@ No stat or number is changed. Only *when* radiators run.
```
mod.rules manifest + patch actions
logo.png Workshop preview / in-game mod logo
components/radiator_auto.rules measures network headroom, gates the radiator
tests/ offline validation suite
tools/steam_paths.py finds the game and the Mods folder via Steam's library list
tools/dotnet_enum.py reads component schemas out of Cosmoteer.dll
tools/ildump.py disassembles component methods to readable CIL
install.sh validate + copy into the Mods folder
install.sh author's dev loop: validate + copy into the Mods folder
```
## Install
### Steam Workshop (any OS)
Subscribe to **Auto Radiator** on the Steam Workshop and enable it in the
game's Mods menu. Steam places it under
`steamapps/workshop/content/799600/<item id>/` and the game loads it from
there; no files to copy.
*Workshop link: pending first upload.*
### Manual (any OS)
Copy `mod.rules`, `logo.png` and the `components/` folder into a folder named
`auto_radiator` inside your user Mods folder, then enable it in the Mods menu:
| | Mods folder |
|---|---|
| Windows | `%USERPROFILE%\Saved Games\Cosmoteer\<SteamID>\Mods\` |
| Linux (Proton) | `<Steam library>/steamapps/compatdata/799600/pfx/drive_c/users/steamuser/Saved Games/Cosmoteer/<SteamID>/Mods/` |
### From this repo (Linux, for development)
```sh
./install.sh
```
Then enable **Auto Radiator** in the game's Mods menu. `./install.sh --uninstall`
removes it. If the script cannot find your Mods folder, set `COSMOTEER_MODS_DIR`.
Validates against the installed game first, then copies the same file set the
Workshop uploader ships. `./install.sh --uninstall` removes it. Discovery reads
Steam's `libraryfolders.vdf`, so a second disk, Flatpak, Snap or the Debian
package all work; if it still cannot find your Mods folder, set
`COSMOTEER_MODS_DIR` (and `COSMOTEER_DATA` for the game data).
## Publishing to the Workshop
The uploader is built into the game; no `steamcmd` needed.
1. `./install.sh` so the current files sit in the user Mods folder.
2. In game: **Mods** → find *Auto Radiator* under *User Mods* → right-click →
**Upload to Steam Workshop**.
3. Fill name, description, preview image (defaults to `logo.png`), visibility
and game version range → **Start Upload**.
4. Updates use the same menu item; it asks for change notes. Bump `Version`
in `mod.rules` first — multiplayer and save syncing match on it.
The **entire** mod folder is uploaded, which is why `install.sh` copies only
`mod.rules`, `logo.png` and `components/`. The Workshop item is bound to the
mod `ID`; keep `ganter.auto_radiator` stable. Steam does not refresh the
preview image on later uploads, and rejects previews over 500 KB.
## Tests
```sh
python3 tests/test_mod.py
python3 tests/test_mod.py # mod against installed game data
python3 tests/test_steam_paths.py # Steam library discovery, on fake layouts
```
Cosmoteer applies mod actions to vanilla data at load time. Some mistakes crash
@@ -127,7 +171,8 @@ silently do nothing; see **Status** below for the four this project hit and the
guard for each. The suite also self-checks its own parser against known vanilla
facts first, so a broken parser fails loudly instead of passing everything.
Set `COSMOTEER_DATA` to point at a different install, and `COSMOTEER_ASSEMBLY`
The game is found through Steam's library list (`tools/steam_paths.py`). Set
`COSMOTEER_DATA` to point at a different install, and `COSMOTEER_ASSEMBLY`
for the schema checks.
## How to tell it is working