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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user