Repository navigation
Releases
rimworld-go v0.1.35
Download
| System | Installer (recommended) | Portable archive |
|---|---|---|
| macOS 13 or later (Apple silicon and Intel) | rimworld-go-v0.1.35-macos.dmg | rimworld-go-v0.1.35-macos-universal.tar.gz |
| Windows 10 or 11 (64-bit) | rimworld-go-v0.1.35-windows-setup.exe | rimworld-go-v0.1.35-windows-amd64.zip |
| Linux (x86-64), any distribution | rimworld-go-v0.1.35-x86_64.AppImage | rimworld-go-v0.1.35-linux-amd64.tar.gz |
| Debian, Ubuntu | rimworld-go-v0.1.35-linux-amd64.deb | |
| Fedora, openSUSE | rimworld-go-v0.1.35-linux-x86_64.rpm |
The builds are not signed yet, so your system asks once before the first start:
- macOS: open the
.dmgand drag rimworld-go to Applications. If macOS says it can't check the app, open System Settings → Privacy & Security, scroll down and click Open Anyway. - Windows: run the setup. If SmartScreen warns about an unknown publisher, click More info → Run anyway. It installs for your user only (no administrator needed) and adds a Start menu entry; uninstall it from Settings → Apps.
- Linux: make the AppImage executable (
chmod +x rimworld-go-*.AppImage) and run it, or install the package (sudo apt install ./rimworld-go-*.deb,sudo dnf install ./rimworld-go-*.rpm) and start rimworld-go from your menu. Needs OpenGL and ALSA (most desktops have them). - Portable archive: unpack it and run
rimworld-go(rimworld-go.exeon Windows); keep theassetsfolder next to it.
rimworld-go -selfcheck prints where the game finds its files, which helps with a bug report.
Changelog
New features
- 5c8c4ca: feat(animals): EAI-001..007 bashing, manhunter foes, herd defence, packs by points, grieving pets (@arxdsilva)
- 49902c9: feat(art): original app icon, packaging icons and window icon loader (@arxdsilva)
- 992629f: feat(factions): older saves get their factions' wars; the Factions window lists enemies (EAI-015) (@arxdsilva)
- 36e7840: feat(game): EAI-0 enemy-AI contract: hostility rule, skeletons, save v17 (@arxdsilva)
- ab42be7: feat(game): wealth sweep, faction wars and rival raids, visitors defend (EAI-014, EAI-015, EAI-011) (@arxdsilva)
- 61967cb: feat(hud): Advancing on the colony sheet line and the sparking turret alert (@arxdsilva)
- 24c080e: feat(raid): PawnView.Advancing for the sheet; schema lines for raider sight memory (EAI-010) (@arxdsilva)
- c334e2e: feat(raid): raiders advance until seen, step from sparking turrets, indexed picks (EAI-010, 012, 020-023) (@arxdsilva)
- 72acbd7: feat(release): -version, -selfcheck and one list of packaged assets (@arxdsilva)
- 33bbc68: feat(release): installers for macOS, Windows and Linux (@arxdsilva)
- f4eaca8: feat(saves): Save & Quit, unsaved progress, load rows, sort/filter, compat and damaged saves (SAV-005, SAV-011..013, SAV-021, SAV-022) (@arxdsilva)
- 6ea6211: feat(saves): delete, compat, damaged-file check and content id (SAV-010, SAV-021, SAV-022, SAV-025) (@arxdsilva)
- 3f46a8a: feat(saves): savefmt.CheckName's rules: length, characters, autosave names, device names (SAV-004) (@arxdsilva)
- 0f6700b: feat(saves): savefmt.Info, the v16 save header and slot naming (SAV-003) (@arxdsilva)
- c3e5ebb: feat(saves): the Save dialog, overwrite question, name checks, delete, colony session (SAV-001..004, SAV-010) (@arxdsilva)
- b94dd2f: feat(saves): the pause menu's Save & Quit rows and save status (SAV-005, SAV-013) (@arxdsilva)
- 6e935df: feat(saves): v16 save header names its colony; compose stamps it (SAV-003) (@arxdsilva)
- 26621c2: feat(story): EAI-016, EAI-030..035 incident queue, letter choices, message merge, positive bias, story panel, whole-map infestation (@arxdsilva)
- 505e52d: feat(story): route AnswerLetter to the letter's answer (EAI-031) (@arxdsilva)
- f8b8c4a: feat(story): threat points capped, colonists weighted by wealth (EAI-013) (@arxdsilva)
- cc8ba7a: feat(wealth): the tracker sweeps in the threats phase; Wealth() reads it (EAI-014) (@arxdsilva)
Fixes
- e91ce7f: fix(render): copy sprites for the batch only between frames (GAR-161) (@arxdsilva)
- 4198f7a: fix(saves): Enter in the Save dialog's name field saves (SAV-001) (@arxdsilva)
- 2f4bc91: fix(windows): the Wealth tab's day labels go through the catalog (@arxdsilva)
Performance
- 4db4d03: perf(animals): bound a manhunter's searches like a normal animal's (@arxdsilva)
- 25bfd0d: perf(animals): bound the EAI-001 breach search to the foes that matter (@arxdsilva)
- 8d7f06c: perf(render): count the lit draws of each frame by why their batch went out (GAR-161) (@arxdsilva)
- d8b2168: perf(render): draw the colony's buildings, items and creatures in a few batches (GAR-161) (@arxdsilva)
- 24967ff: perf(render): sort the object queue by small keys, then move each draw once (GAR-161) (@arxdsilva)
Documentation
- 923faf4: docs(agents): saves, devtools story panel, rage and combat package notes (SAV-, EAI-) (@arxdsilva)
- 577390b: docs(backlog): UI checklist save and load dialog rows (SAV-001..013, 021, 022) and the wealth graph (@arxdsilva)
- 9e5deba: docs(backlog): vanilla checklist rows closed by the saves and enemy AI waves (SAV-, EAI-) (@arxdsilva)
- 783926e: docs(eai): EAI-007 journeys landed (5917ec0) (@arxdsilva)
- 8cbec55: docs(gaps): DEFENCE rows the enemy AI wave and earlier waves closed (EAI-010, 012, 013, 014, 035) (@arxdsilva)
- 64f6ec5: docs(gaps): EAI performance results and the ceiling raise (@arxdsilva)
- e310fb3: docs(gaps): enemy AI gap analysis (EAI-*) (@arxdsilva)
- fe46515: docs(gaps): index the enemy AI gap analysis (@arxdsilva)
- 912df25: docs(gaps): saves gap analysis (SAV-*) (@arxdsilva)
- e1863a8: docs(handoffs): SAV-0..3 and EAI-0..4 ledger sections; Enter-to-save leftover closed (@arxdsilva)
- dffc970: docs(perf): PERF-015 ledger and the GAR-161 gap row (@arxdsilva)
- f32d324: docs(release): REL-003 ledger; selfcheck and flag notes in the compose and cli AGENTS (@arxdsilva)
- b0cc907: docs(release): install steps for the new installers (@arxdsilva)
- c6c3496: docs(saves): the Book's named-saves fields are no longer stubs (@arxdsilva)
- 90b2adb: docs(spec): pause menu, Save dialog and Load screen as shipped (SAV-001..025) (@arxdsilva)
Everything else
- 812c036: arch: raise the game package ceilings for the enemy AI wave (user-approved, perf holds) (@arxdsilva)
- 3cee1b3: chore(lang): catalog keys for the enemy-AI alerts, letters, story panel and visitors (@arxdsilva)
- fe3c8a9: chore(lang): the pause menu's Save & Quit to Desktop and commitment Save reason (@arxdsilva)
- f8a1097: refactor(game): move animal aggression into game/rage (@arxdsilva)
- b118dec: refactor(saves): the saves book leaves options; one Save hook; save dir (SAV-023, SAV-024) (@arxdsilva)
- 4b5096d: style(saves): gofmt the save hook test fakes (@arxdsilva)
- e57a0e8: style: gofmt the wave's phase list, savefmt test imports and threat constants (@arxdsilva)
- 5917ec0: test(eai): manhunter pack and predator charge journeys (EAI-007) (@arxdsilva)
- 44af54b: test(game): count merged casket notices by Repeat (@arxdsilva)
- f49161d: test(gfx): the painter's allocation check compares the fewest of interleaved samples (PERF-008) (@arxdsilva)
- d6226ad: test(saves): drop the unused lacksButton helper (staticcheck U1000) (@arxdsilva)
- 1a5e820: test(saves): v17 schema lines; the v12 fixture re-pinned for the enemies migration (@arxdsilva)
- 5be5ee6: test(scenario): re-pin the grown golden for the enemy AI wave (@arxdsilva)
Details
49902c958 feat(art): original app icon, packaging icons and window icon loader
A procedural icon (limbless gold colonist on a charcoal rounded square over a
dark-green hill, ui.yaml palette) drawn by pkg/appicon; make app-icon writes
packaging/icons (.icns, .ico, PNGs) and the runtime window icons, which
display.LoadIcons reads through assetroot and display.Window.Icons passes to
ebiten.SetWindowIcon.
24967ffc5 perf(render): sort the object queue by small keys, then move each draw once (GAR-161)
The object queue (thousands of 80-byte records a frame) was ordered with
a stable merge sort that moved the records themselves. It now sorts a
reused slice of (row, column, queue place) keys and moves each record once;
an already ordered queue is detected and left alone. The order is the
stable sort's exactly (TestSortDrawsMatchesStable), with no allocation.
4,000-draw queue: 1.39 ms -> 0.48 ms. DrawArt500/z1 draw calls and
allocations unchanged.
72acbd781 feat(release): -version, -selfcheck and one list of packaged assets
rimworld-go -version prints the build's version and rimworld-go -selfcheck prints where the game finds its translations, art, menu
splash, sounds and window icon, and where its settings folder is, then
exits; status 1 when something is missing. Neither opens a window, starts
the log or creates a folder, so installers and bug reports can use them.
The game now also finds its assets inside a macOS app bundle
(rimworld-go.app/Contents/Resources), and through a symlink...
rimworld-go v0.1.33
Unpack the archive for your system and run rimworld-go (rimworld-go.exe on Windows); keep the assets folder next to it.
- macOS: the build is unsigned. The first time, right-click
rimworld-go→ Open, or runxattr -dr com.apple.quarantine <folder>. - Windows: SmartScreen may warn about an unknown publisher → More info → Run anyway.
- Linux: needs OpenGL and ALSA (most desktops have them).
Changelog
New features
- 49cd353: feat(gfx): aashape, anti-aliased shapes as one triangle batch each (@arxdsilva)
- 40c9e8b: feat(render): pixel-diff harness, -capture-diff old/new/old with exact and aa policies (render-h) (@arxdsilva)
Fixes
- 02d0172: fix(lint): drop six unused funcs, convert three struct literals (staticcheck U1000, S1016) (@arxdsilva)
Performance
- dbf8fba: perf(gfx): anti-aliased canvas shapes and map overlays through aashape (@arxdsilva)
- 153faec: perf(lang): parse a catalog file once per process (CI-002) (@arxdsilva)
- 862f5fc: perf(render): batch live ground tiles into one lit call per sheet run (GAR-159) (@arxdsilva)
- 17d08c9: perf(render): cache rendered stack-count text, one quad per count (GAR-160) (@arxdsilva)
- 31a7ba5: perf(render): creature cells rebuilt on change, light uniforms copied on change (GAR-153, GAR-154, PERF-009) (@arxdsilva)
- 1c1c65c: perf(render): prepare pass for chunk, map, snow, wet and fog bakes (GAR-145, PERF-009) (@arxdsilva)
- b1a737b: perf(render): queued crop units flush only for an object whose reach overlaps them (PERF-009) (@arxdsilva)
- 1cf2ac5: perf(render): remaining anti-aliased world, creature, menu and globe shapes through aashape; vector-AA guard (@arxdsilva)
- b3707e1: perf(save): StateHash reads raw gob, no gzip round trip (CI-002, GAR-190) (@arxdsilva)
- 329e2b8: perf(save): autosaves write in the background, with a Saving row and a failure toast (CI-002) (@arxdsilva)
- be3c0d1: perf(save): export EncodeSave and add savefmt.Compress (CI-002) (@arxdsilva)
- 1a91eef: perf(save): filesave.Queue writes saves on one worker goroutine (CI-002) (@arxdsilva)
- 2f486ed: perf(sim): animal repath back-off, a 15-tick mech look, one creature index a tick (sim S5, S6, S4b) (@arxdsilva)
- 47a8066: perf(sim): animal repaths as a serial path stage, decide all then apply (GAR-035, 3c) (@arxdsilva)
- 2ad0e20: perf(sim): bedOf reads a bed list cached on structure version and building count (sim-b S1) (@arxdsilva)
- 0ec242d: perf(sim): cache ground path cost per cell on structure, plant and store versions (sim-b S3) (@arxdsilva)
- 76d873d: perf(sim): run the path stage's searches on an 8-lane pool (GAR-035, GAR-031, GAR-103, 3d) (@arxdsilva)
- ce602a0: perf(sim): spread the periodic sites over their periods (game/cadence, GAR day tick) (@arxdsilva)
- 32f209a: perf(sim): standingWalker reads by Ref, occ.carried is a bitset (sim S2) (@arxdsilva)
- 49562ce: perf(tools): scripts/ebdebug.sh counts Ebitengine's executed commands (PERF-007) (@arxdsilva)
Documentation
- 4b8203c: docs(adr): 0004 narrowed by measurement (PERF-007) (@arxdsilva)
- eda9917: docs(agents): ARCH-009 phase scheduler ledger; GAR-001..005, 012 status (@arxdsilva)
- 331d261: docs(agents): PERF-007 (draw measured, pixel diff) and PERF-010 (async autosave) ledgers (@arxdsilva)
- a277a1e: docs(agents): PERF-008 AA shapes ledger (@arxdsilva)
- e7f4bc4: docs(agents): PERF-011 periodic spread ledger; GAR-006..009 status (@arxdsilva)
- 3fb3cb6: docs(arch): ARCH-010 path stage and pool; ADR 0001 and 0002 revisions; GAR-031, 035 partial (@arxdsilva)
- 9ef7e15: docs(arch): redraw five target diagrams as built (autosave, cadence, scheduler, path stage, frame draw) (@arxdsilva)
- 5568383: docs(gaps): GAR-156 cause found (PERF-008); GAR-157 draw allocations, GAR-158 pixel-diff edge mask (@arxdsilva)
- 3fa927d: docs(gfx): aashape in the package notes, the AA-vector guard as an invariant (PERF-008) (@arxdsilva)
- fe0f860: docs(handoff): CI-005 CI headroom (commits labelled CI-002) (@arxdsilva)
- d452df9: docs(handoff): PERF-009 lists the frame-constants commit (@arxdsilva)
- a637324: docs(handoff): PERF-012 sim index fixes S1-S6 (@arxdsilva)
- cf1b6a7: docs(perf): PERF-013 round 2 in-game acceptance; GAR-159 ground calls, GAR-160 stack-count text (@arxdsilva)
- 5afd626: docs(perf): PERF-014 ground batch and stack-count text; GAR-159, GAR-160 done (@arxdsilva)
Everything else
- 8483e4b: chore(arch): game root line budget 51871 -> 51828 (ARCH-009, PERF-012) (@arxdsilva)
- 1475313: ci: heavy test binaries run one at a time, the rest two at a time (CI-002) (@arxdsilva)
- d5f5c65: refactor(sim): bucketGrid moves to game/spatial with a closure-free fill (sim-b S4) (@arxdsilva)
- 1083574: refactor(sim): the phase scheduler, game/sched (GAR 3b) (@arxdsilva)
- 32e7116: test(golden): re-pin for the spread periodic work (GAR-006) (@arxdsilva)
- 3c7cce7: test(journeys): build the wizard colony once, drop caravan walks, reuse command-cell scenes (@arxdsilva)
- ce819a3: test(pixeldiff): edge mask counts partial alpha in either frame and a 1 px halo (GAR-158) (@arxdsilva)
- 236eaf4: test(save): background save twins, the Saving row and the failure toast (CI-002) (@arxdsilva)
- c82e446: test(save): the async load journey sees the save's report whichever Update polls it (PERF-010) (@arxdsilva)
- c7ea5e1: test(sim): bedof test appends slices directly (lint) (@arxdsilva)
- 797e8a2: test(sim): re-pin three goldens for the animal repath back-off (PERF-012) (@arxdsilva)
- bf0fbb2: test(ui): the canvas guard exempts the cached text runs (GAR-160) (@arxdsilva)
Details
02d017299 fix(lint): drop six unused funcs, convert three struct literals (staticcheck U1000, S1016)
CI's make lint failed on main: drawDim, Renderer.drawSprite, the hud and
windows drawButtons copies, threatCommand and careTip had no callers (the
-In variants are the ones used), and questSite, careGuests and mapsSettle
were built as struct literals from a same-shaped type.
1475313b1 ci: heavy test binaries run one at a time, the rest two at a time (CI-002)
The ebiten test binary hit the 10-minute -timeout in run 42526626027 while
sharing four vCPUs with the game binary (567 s). scripts/ci_test.sh now runs
those two with -p 1, each with every CPU, after building both in parallel
(-exec true), then every other package with -p 2. The package lists are
complementary (272 = 2 + 270). A binary over 6 minutes gets a warning
annotation.
153faecc3 perf(lang): parse a catalog file once per process (CI-002)
Every NewApp loaded en.json (217 KB) and parsed it only to drop the map,
and the Language row called Codes, which parsed every catalog, on each
draw: about 26 CPU-s across the ebiten tests. A sync.Map keyed by path
holds the last parse, stamped with size and mtime; a rewritten file parses
again. Parsed catalogs are never written, so callers share the map.
TestLoadParsesAFileOnce.
b3707e169 perf(save): StateHash reads raw gob, no gzip round trip (CI-002, GAR-190)
Save is now encodeSave (the raw gob stream) wrapped in game/savefmt's
gzip writer; Load and ReadSaveInfo read through savefmt. StateHash, called
321 times in the game tests, encodes raw gob and decodes it directly
instead of compressing and decompressing it. The gob stream is unchanged,
so every pin holds (TestScaleGolden, TestGrownGolden). The async autosave
(Phase 2a) builds on this split. Root -2 lines; budget 51873 -> 51871.
49562ce63 perf(tools): scripts/ebdebug.sh counts Ebitengine's executed commands (PERF-007)
Reads a -tags ebitenginedebug run's stdout: draw commands per frame after
merging, destination switches, write-pixels, new images, and the source
lines that started the most commands (each a call the previous command
could not merge with). Counts only; the debug build's timings are not
representative.
3c7cce759 test(journeys): build the wizard colony once, drop caravan walks, reuse command-cell scenes
Parallel run of the touched journeys, -race, before -> after (contended):
- whole selection (TestJourney World/Orders/Hud/Caravan/Quest/Flow/Gone + CommandText): 46.4s -> 26.8s
- TestJourneyCaravanFulfilRequest 31.4s -> 1.0s
- TestJourneyOrdersFreePrisoner 17.7s -> 10.6s
- TestJourneyWorldEnterAndRefusedGizmos 8.9s -> 2.1s
- TestJourneyWorldPodFound 6.5s -> 5.7s
- TestCommandTextStaysInItsCell 12.6s -> 8.5s
- TestJourneyWorldTravelAndReturn keeps its real walk.
worldColony loads a once-built wizard save; TestWorldFixtureMatchesTheWizard checks the StateHash.
4b8203c9e docs(adr): 0004 narrowed by measurement (PERF-007)
An ebitenginedebug probe executes about 152 draw commands per z1 frame
after Ebitengine's merging; the Draw CPU is the anti-aliased vector path.
Feathered-triangle AA shapes and in-layer byte-exact fixes come first; the
sort-key list is not built unless a later profile meets its gate.
be3c0d1d8 perf(save): export EncodeSave and add savefmt.Compress (CI-002)
The autosave queue encodes raw gob on the simulation's goroutine and
compresses it on its worker. EncodeSave is a free function (the Game type
is at its method ratchet); Compress writes what Save writes, byte for
byte. BenchmarkSaveEncode500 7.6 ms, BenchmarkSaveCompress500 6.9 ms
(Save500 14.5 ms) on an M2 Max.
1a91eefb6 perf(save): filesave.Queue writes saves on one worker goroutine (CI-002)
Save encodes the colony's raw gob into a buffer sized to the last save on
the caller's goroutine; the worker gzips it and writes it atomically, then
the camera sidecar. One job at a time; a waiting job of the same slot and
kind is repl...
rimworld-go v0.1.31
Unpack the archive for your system and run rimworld-go (rimworld-go.exe on Windows); keep the assets folder next to it.
- macOS: the build is unsigned. The first time, right-click
rimworld-go→ Open, or runxattr -dr com.apple.quarantine <folder>. - Windows: SmartScreen may warn about an unknown publisher → More info → Run anyway.
- Linux: needs OpenGL and ALSA (most desktops have them).
Changelog
New features
- 0706c6a: feat(care): QST-057 offer help: the refugee's pawn order (@arxdsilva)
- 9899918: feat(command): quest command kinds and the free-prisoner order (QST-1) (@arxdsilva)
- c7cdaae: feat(difficulty): quest rewards and quest threats settings, save v15 (QST-033, QST-034) (@arxdsilva)
- e0e4d4f: feat(ebiten): the Update budget is per frame and dropped ticks are counted (GAR E1) (@arxdsilva)
- f8da516: feat(hud): QST-3 quest letter tile opens the quest, lapse suffix, two-line alerts (@arxdsilva)
- e019034: feat(hud): QST-3 quest letters and expiring alert (@arxdsilva)
- 1b9787e: feat(hud): UIS-2a colonist bar names, messages, alerts and letters (@arxdsilva)
- 8a6be3f: feat(hud): UIS-2b tab bar, inspect pane, commands, architect and lower-right stack (@arxdsilva)
- 5f19123: feat(hud): frameless letters with row actions, fixed letter hover card (UIS-073, UIS-032) (@arxdsilva)
- 049a901: feat(map): UIS-2d the map rebases to 48 cells of window height (@arxdsilva)
- a1e672e: feat(maps): a mineral site holds its threat; the raid counts from clear (QST-047, QST-048) (@arxdsilva)
- e0e591e: feat(options): UI scale drop list and window close X (UIS-008, UIS-075) (@arxdsilva)
- 27578b9: feat(options): UIS-2e reference UI steps in the Options screen (@arxdsilva)
- c27bd15: feat(perf): -save-dir, and the probe matrix's autosave cell (GAR C2) (@arxdsilva)
- 64b1ed7: feat(perf): scripts/fpsmatrix.sh and make fps-matrix, the VSync-on GAR probe matrix (@arxdsilva)
- da341bc: feat(perf): the fps probe reports the frame histogram, late and hitch frames, 0.1% low, Updates per Draw and GC (@arxdsilva)
- 22233a8: feat(quest): DevOfferQuest command offers a quest of a kind (journeys, captures) (@arxdsilva)
- 7c3d5e2: feat(quest): QST-1 domain contract (types and signatures) (@arxdsilva)
- 3c8d1f9: feat(quest): QST-1 domain rules and tests (@arxdsilva)
- 6cb638a: feat(quest): QST-1 game glue (@arxdsilva)
- aaea7cd: feat(quest): QST-1 quests root, roles and tests (@arxdsilva)
- 5a3e983: feat(quest): QST-137 a pawn reward's preview carries its look and best skill (@arxdsilva)
- 73f18c1: feat(quest): QST-2a joiner, ore lump, trade request and peace talks (@arxdsilva)
- 7007d21: feat(quest): QST-2b glue: refugee and prisoner join, faction tech, pods land home (@arxdsilva)
- 55b85c8: feat(quest): QST-2b site contract (@arxdsilva)
- f39216d: feat(quest): QST-2c item stash kind (@arxdsilva)
- fccd52e: feat(quest): QST-2d downed refugee kind (@arxdsilva)
- 2b8959f: feat(quest): QST-2e hostile camp kind and layout (@arxdsilva)
- 6bdcceb: feat(quest): QST-2f prisoner rescue, cell camp layout and the free-prisoner order (@arxdsilva)
- 217687f: feat(quest): QST-5 contract: OrderOfferHelp, the refugee's pawn order (@arxdsilva)
- 8efcc2d: feat(quest): QST-5 glue: refugee offer-help role, wounds that do not bleed, reward pods say so (@arxdsilva)
- a3e6816: feat(quest): QST-5 quest sites: the approach roll and the 60-hour reinforcements (QST-017, 051, 056) (@arxdsilva)
- 9263053: feat(quest): QST-5 site rules glue: the approach roll and reinforcements switch on (@arxdsilva)
- 6fe7472: feat(quest): rare goods in the camp, stash and request reward pools (checklist 29.3) (@arxdsilva)
- 3f4efd7: feat(render): the world shaders compile and warm on the boot screen (GAR E9) (@arxdsilva)
- a18a8b5: feat(ui): QST-127/135/137 quest detail colour spans, frameless reward preferences, pawn reward card (@arxdsilva)
- 0d511c0: feat(ui): QST-3 -capture-ui quests scene; the Quests window in the panel invariance check (@arxdsilva)
- dc856c4: feat(ui): QST-3 contract: Quests tab, F7, ShowQuest, window stub, typed detail args (@arxdsilva)
- 1fd95ab: feat(ui): QST-3 quests window: lists, detail, rewards, links, reward preferences (@arxdsilva)
- 2687260: feat(ui): UIS-1 reference UI steps, type scale and HUD metrics (@arxdsilva)
- 729d4f6: feat(ui): UIS-2c main-tab windows, float menu, tooltip and pause menu (@arxdsilva)
- 891cdbf: feat(ui): UIS-3 verification, command label band and message hit order (@arxdsilva)
- 0f0df26: feat(ui): UIS-4 contract (@arxdsilva)
- e3e27c7: feat(visitors): the wanderer asks to join by letter (QST-170..174) (@arxdsilva)
- 98b5d75: feat(windows): work, schedule, wildlife, research and factions sizes (UIS-061, 062, 064, 065, 068) (@arxdsilva)
- b8564a8: feat(world): QST-3 quest site pane uses the game's kind names and Send caravan (@arxdsilva)
- a4093e8: feat(world): QST-3 quest sites on the world map (@arxdsilva)
- 23eec69: feat(world): the inspector counts down to a quest site's reinforcements (QST-017) (@arxdsilva)
Fixes
- 4cdb0a9: fix(arch): the cmd guard ignores import paths; benchmark, rambudget, simulate delisted (@arxdsilva)
- 9e3e97f: fix(hud): command labels stay inside their cells (@arxdsilva)
- 2b605f6: fix(lang): the Options close X glyph is exempt from the translation guard (UIS-075) (@arxdsilva)
- c7fb9e5: fix(perf): -day, the time jump on every dev scene, and the matrix at the camera's real zooms (GAR C3) (@arxdsilva)
- 4c83a61: fix(quest): QST-059 quest sites lie on tiles a caravan can reach and leave (@arxdsilva)
- 2ca49b9: fix(render): walkers move the same distance every frame, on a paced clock (GAR-091) (@arxdsilva)
- d5b1617: fix(ui): DrawPortrait is a windows.Host method (Labels at its 8-method cap) (@arxdsilva)
Performance
- f34ce45: perf(render): the LOD tiers follow the cells in view, not physical pixels (GAR-155) (@arxdsilva)
Documentation
- 99b9981: docs(agents): AI-002 commit (@arxdsilva)
- 5b0881e: docs(arch): ARCH-008 commit (@arxdsilva)
- 1cd1139: docs(arch): GAR gap analysis, ADRs 0001-0004, rule amendments and diagrams (@arxdsilva)
- 509bf66: docs(clean-room): game architecture research row (GAR) (@arxdsilva)
- 06f76fc: docs(gaps): GAR gap analysis skeleton with the decision record (@arxdsilva)
- 3fbacfd: docs(gaps): QST quests gap analysis (@arxdsilva)
- bd8480c: docs(gaps): UIS gameplay UI size and scale gap analysis (@arxdsilva)
- dd6e527: docs(handoffs): QST-2b quest sites ledger section (@arxdsilva)
- 9a625d0: docs(handoffs): QST-3, QST-4 and QST-5 ledger sections (@arxdsilva)
- 769e8d6: docs(handoffs): UIS-4 options, letters and window sizes (@arxdsilva)
- 3abcd70: docs(handoffs): UIS-implementation commit ref (@arxdsilva)
- 24d79fa: docs(handoffs): UIS-label-fit commit ref (@arxdsilva)
- 08a3411: docs(perf): PERF-004, the GAR probe-matrix baseline (@arxdsilva)
- 291aba9: docs(perf): PERF-005, the LOD tiers by cells in view (@arxdsilva)
- eedae22: docs(perf): PERF-006, the paced animation clock (@arxdsilva)
- c7a7b18: docs(ports): OpenWorld names the quest: selection (@arxdsilva)
- 791f2e6: docs(quest): QST-1 gap rows and ledger (@arxdsilva)
- 4c07091: docs(quest): QST-153 done; the ship-ending rows kept (decision 3) (@arxdsilva)
- b34b708: docs(quest): QST-2a ledger (@arxdsilva)
- 192a08e: docs(quest): QST-3 world rows done (113, 114, 118, 119, 136) (@arxdsilva)
- 4b89dab: docs(quest): QST-3/5 gap rows settled; Phase 29 ticked; MAIN_UI Quest checkbox; UIS-066 done; windows AGENTS.md lists Quests (@arxdsilva)
- d24bb6e: docs(quest): QST-4 rows settled; MAIN_UI §31 three tabs; MULTIMAP and RHUD-310 quest notes (@arxdsilva)
- b96e0e7: docs(world): QST-3 widget ids (@arxdsilva)
- 17b8328: docs: UIS gap analysis handoff (@arxdsilva)
Everything else
- 2dd27b5: art(ui): UIS-2f History, Factions and Menu tab icons (@arxdsilva)
- 17c674b: chore(agents): agent files live only in .agents/, no tool folders (@arxdsilva)
- 49465e3: chore(arch): cmd is wiring only everywhere; the App reads the monitor through compose (ARCH-007) (@arxdsilva)
- 59c5c17: chore(arch): delist atlasgen, audiogen, normalgen and sfxgen from cmdTODO (@arxdsilva)
- 12bb196: chore(arch): delist mapgen from cmdTODO (@arxdsilva)
- 6d3baa2: chore(arch): game package line ceiling 52063 -> 51873 after the QST-5 relief (@arxdsilva)
- 70ff97e: chore(lang): en.json gains the quest texts; worldview's quest kind word is a selection key (@arxdsilva)
- f231d44: chore(licenses): list jfreymuth/pulse and srwiley/rasterx from the Ebitengine v2.10.6 upgrade (@arxdsilva)
- 6cbd9b6: refactor(arch): cmd is wiring only (@arxdsilva)
- 4c2edf4: refactor(cmd): cut cmd/atlasgen to wiring; logic to cli/atlasgen (@arxdsilva)
- 1ad04e7: refactor(cmd): cut cmd/audiogen to wiring; logic to cli/audiogen (@arxdsilva)
- b890619: refactor(cmd): cut cmd/benchmark, cmd/rambudget, cmd/simulate to wiring; logic to cli/ (@arxdsilva)
- 3281264: refactor(cmd): cut cmd/game to wiring; logic to cli/game, compose/game, devscene, platform (@arxdsilva)
- 2eb2504: refactor(cmd): cut cmd/mapgen to wiring; logic to cli/mapgen (@arxdsilva)
- 442d63b: refactor(cmd): cut cmd/normalgen to wiring; logic to cli/normalgen (@arxdsilva)
- eec7951: refactor(cmd): cut cmd/sfxgen to wiring; logic to cli/sfxgen, client to sfxapi, MOSS runner to assets/source/tools/moss (@arxdsilva)
- 509620c: refactor(game): chunk buckets, id slots, action words and grass rings move to sub-packages (@arxdsilva)
- 1a845bb: refactor(game): frame status, ground and zone labels, social log words and setup helpers move to sub-packages (@arxdsilva)
- f1968a3: refactor(game): letters move to game/letters (QST-1 step 0) (@arxdsilva)
- cfa469b: refactor(game): map, setup, wildlife and buildable read models move to view sub-packages (@arxdsilva)
- 271e4af: refactor(game): tab, trade and animal read models move to game/tabview, game/tradeview and game/animalview (@arxdsilva)
- 5cf2c60: refactor(game): the faction rows move to game/factionview (@arxdsilva)
- 961ae...
rimworld-go v0.1.30
Unpack the archive for your system and run rimworld-go (rimworld-go.exe on Windows); keep the assets folder next to it.
- macOS: the build is unsigned. The first time, right-click
rimworld-go→ Open, or runxattr -dr com.apple.quarantine <folder>. - Windows: SmartScreen may warn about an unknown publisher → More info → Run anyway.
- Linux: needs OpenGL and ALSA (most desktops have them).
Changelog
New features
- f76d175: feat(fuel): auto refuel can be switched off (@arxdsilva)
- 436e5e5: feat(fuel): contract for ordered refuels and the auto-refuel switch (@arxdsilva)
- 5f7b066: feat(fuel): industry.Controllable names the burners a player controls (@arxdsilva)
- be72599: feat(inspector): burners get an Auto refuel switch (@arxdsilva)
- 9248d95: feat(orders): colonists can be ordered to refuel a burner (@arxdsilva)
Fixes
- 04e1b9d: fix(inspector): the Auto refuel switch sends its command (@arxdsilva)
Documentation
- 4e6c43a: docs(agents): handoff ledger and package templates (@arxdsilva)
- f7ca513: docs(agents): one index for every agent document (@arxdsilva)
- bd8da85: docs(agents): root AGENTS.md down to 5 KB; clean room and releases get their own specs (@arxdsilva)
- 347acf1: docs(ebiten): remaining 19 sub-package AGENTS.md to the template (@arxdsilva)
- e18e0ec: docs(ebiten): root and first 18 sub-package AGENTS.md to the template (@arxdsilva)
- 13ac762: docs(handoffs): ARCH, PERF and ENG ledgers (@arxdsilva)
- d99cf41: docs(handoffs): ART and SND ledgers (@arxdsilva)
- 1fdcf0c: docs(handoffs): AX and STORAGE ledgers (@arxdsilva)
- 1e5953e: docs(handoffs): FOOD, BASE and WORLD ledgers (@arxdsilva)
- 64aa8b8: docs(handoffs): MOD, OPS, MED, GEAR, DEF, UI and DOS ledgers (@arxdsilva)
- 91907fe: docs(handoffs): NG ledger from the NG1 new-game plan (@arxdsilva)
- 187704d: docs(handoffs): PLAY ledger with the PLAY010-PLAY024 plans (@arxdsilva)
- 9213058: docs(handoffs): SIM ledger (@arxdsilva)
- 1601bd8: docs(handoffs): index of every handoff section (@arxdsilva)
- bb5fca0: docs(handoffs): roll handoffs and plans into family ledgers (@arxdsilva)
- 5660c8f: docs(packages): game sub-package, outbound and platform AGENTS.md to the template (@arxdsilva)
- 9709893: docs(skills): core skills cite spec sections instead of restating them (@arxdsilva)
- 17a9c31: docs(skills): product skills cite spec sections; saves and replay join determinism (@arxdsilva)
- 4dd810a: docs(specs): state each rule once and match the real tree (@arxdsilva)
- 0e5f17c: docs: AI-001 handoff for the .agents overhaul (@arxdsilva)
- 4ae66b0: docs: refuelling gap analysis (REF-*) and the REF-1 handoff (@arxdsilva)
Everything else
- 05e10d5: chore(agents): Claude finds every skill (@arxdsilva)
- 76d605d: chore(agents): move .cursor and .claude content into .agents (@arxdsilva)
- 7f8106f: chore(agents): repoint references to .agents (@arxdsilva)
- a1864de: chore(fuel): save schema lists the auto refuel switch, game budget lowered (@arxdsilva)
- 52be416: refactor(fuel): refuel planning lives in game/industry (@arxdsilva)
- 3293ba5: test(arch): guard the .agents layout (@arxdsilva)
Details
436e5e5d6 feat(fuel): contract for ordered refuels and the auto-refuel switch
REF-1 wave 0, inert: command.OrderRefuel and command.SetAutoRefuel,
Building.NoAutoRefuel (zero keeps auto refuel on, so old saves load
unchanged), BuildingView.Refuelable/AutoRefuel, and the industry.Plan
stub with its RefuelHost role.
be725998b feat(inspector): burners get an Auto refuel switch
REF-1: the building pane of a burner shows an Auto refuel toggle (the
fuel it burns as its icon) that sends SetAutoRefuel, and the fuel line
says "auto refuel off" while haulers are told to leave it alone.
52be416b9 refactor(fuel): refuel planning lives in game/industry
REF-1 wave 1: which fuel a burner takes, how much it has room for and
the trip that brings it move to industry.Plan behind a RefuelHost role,
so haulers and the coming refuel order plan the same way. No behaviour
change: the grown fixture's state hash is identical after 2000 and
30000 ticks, and package game is 16 lines smaller.
f76d1757d feat(fuel): auto refuel can be switched off
REF-1: SetAutoRefuel switches a burner's auto refuel. With it off,
haulers leave the burner alone and only an ordered refuel feeds it; a
delivery under way still finishes. Haulers also stop feeding a hostile
settlement's burners (REF-013). The building view reports Refuelable
and AutoRefuel for the inspector's switch.
9248d9594 feat(orders): colonists can be ordered to refuel a burner
REF-1: right-clicking a burner with a colonist selected offers
"Prioritize refueling ". The colonist fills it to full now,
whatever its auto refuel setting and however full it is. Disabled rows
say why: already full, no free wood or chemfuel, cannot reach, in use
by another colonist, or hauling disabled or incapable. Shift queues it
like any other order.
a1864debf chore(fuel): save schema lists the auto refuel switch, game budget lowered
The burner's NoAutoRefuel is a new gob field: older saves load it as
zero (auto refuel on), so no save version bump. Package game ends REF-1
one line under its old ceiling.
04e1b9de9 fix(inspector): the Auto refuel switch sends its command
The building pane dispatches clicks by button id, and the new toggle
had no case, so clicking it did nothing. Journeys now drive both REF-1
inputs through the real mouse: the right-click refuel order, the switch,
and a refuel row disabled for want of wood.
4ae66b0ce docs: refuelling gap analysis (REF-*) and the REF-1 handoff
How vanilla feeds fuel to burners against ours: REF-1's order and
switch are done; target fuel level, eject fuel, an out-of-fuel map mark
and the switch on a group are REF-2; rain burn, the chemfuel generator's
explosion and fuelling a stove mid-cook belong to other scopes. The
checklists and the screens spec record the order and the switch.
76d605d04 chore(agents): move .cursor and .claude content into .agents
Specs, checklists, gap analyses, plans, handoffs, skills, templates and
the Claude hooks now live in one tool-neutral folder, .agents/. Files are
moved unchanged and .claude/settings.json runs the hooks from their new
place; the next commits repoint references and condense the docs. The
Cursor .mdc rule stubs, the Claude parallel-work pointer skill and the
skill manifest are removed: AGENTS.md and the skills say the same.
7f8106f69 chore(agents): repoint references to .agents
Every path into the old .cursor/ and .claude/hooks/ folders now names its
place under .agents/: specs/, backlog/, gaps/, handoffs/, skills/,
templates/ and hooks/. The three tests that parse gap analyses and the
token report script read the new paths.
05e10d5f2 chore(agents): Claude finds every skill
.claude/skills/ links to .agents/skills/, so Claude Code lists
all project skills; before, it only saw the parallel-work pointer.
4e6c43a09 docs(agents): handoff ledger and package templates
A handoff is now one section of at most 25 lines appended to its family's
ledger in .agents/handoffs/, keeping behaviour, decisions, limits and
follow-ups and leaving file and test lists to git. Package AGENTS.md
files follow one template that says only what is local to the package.
f7ca51359 docs(agents): one index for every agent document
.agents/README.md now lists every spec, checklist, gap analysis, ledger,
skill, template and hook, with when to load each. The router skill keeps
only its task-to-skill table and stop conditions; skills/README.md is gone.
4dd810ad1 docs(specs): state each rule once and match the real tree
MASTER_SPEC drops the greenfield layout, backlog and branching plan and
points to the templates, PARALLEL_WORK and CLEAN_ROOM. HEXAGONAL shows the
real package tree and entry points. AI_TOKEN no longer describes tools that
were never built. PARALLEL_WORK drops the worktree advice and gains the
shared-index commit rule; SOLID_GO gains the game sub-package recipe. The
ART, MAIN_UI and SOCIAL headers stop restating the root rules.
9709893c3 docs(skills): core skills cite spec sections instead of restating them
Each of the eight core skills has a one-line description and a Load list
of spec sections. ai-jobs gains the animal bucket rules, testing gains
the -race CI tips, hexagonal gains the SOLID size checklist.
91907fe8f docs(handoffs): NG ledger from the NG1 new-game plan
The 147 KB plan becomes one section with its decisions and numbers, plus
the parts still owning an open NG checklist row, kept verbatim.
5660c8f38 docs(packages): game sub-package, outbound and platform AGENTS.md to the template
Each file keeps only what is local to its package, in the shared section
order; rules the root AGENTS.md states are gone. assets/AGENTS.md notes
that make art-check needs the Pillow-equipped python3 in /usr/local/bin.
17a9c31af docs(skills): product skills cite spec sections; saves and replay join determinism
The persistence-replay skill is merged into rimworld-go-d...
rimworld-go v0.1.29
Unpack the archive for your system and run rimworld-go (rimworld-go.exe on Windows); keep the assets folder next to it.
- macOS: the build is unsigned. The first time, right-click
rimworld-go→ Open, or runxattr -dr com.apple.quarantine <folder>. - Windows: SmartScreen may warn about an unknown publisher → More info → Run anyway.
- Linux: needs OpenGL and ALSA (most desktops have them).
Changelog
New features
- 794a66c: feat(art): Gear tab buttons and the game's own mouse pointer (@arxdsilva)
- dc7fcb0: feat(audio): every sound can now be shared openly (@arxdsilva)
- 4b37cb9: feat(gear): apparel policies decide what colonists wear (@arxdsilva)
- 59bc5ac: feat(gear): armour slows its wearer, and the gear tab's numbers are filled (@arxdsilva)
- 1f8f4b4: feat(gear): drop, eat and lock gear from a colonist's gear (@arxdsilva)
- ce6e4e5: feat(gear): the Gear tab shows and acts on every item a colonist carries (@arxdsilva)
- e3bcaac: feat(hud): wall clock, 12-hour time, bar weapons and mood fill options (@arxdsilva)
- 39ffa0e: feat(lang): architect and orders text goes through the catalog (@arxdsilva)
- a261ab0: feat(lang): callers use the translated helpers (@arxdsilva)
- 07af96c: feat(lang): colonist card text goes through the catalog (@arxdsilva)
- d26c2a9: feat(lang): colony windows text goes through the catalog (@arxdsilva)
- 9c26fcd: feat(lang): every UI string goes through the catalog (@arxdsilva)
- ac37bb2: feat(lang): hud, learn and dialogs text goes through the catalog (@arxdsilva)
- 8df18ed: feat(lang): inspector command text reads English on a bare pane and uses the translated helpers (@arxdsilva)
- 1c1b7ae: feat(lang): inspector pane, buildings, bills, health and gear text goes through the catalog (@arxdsilva)
- b2ae92e: feat(lang): messages and letters are drawn through the catalog (@arxdsilva)
- d560d85: feat(lang): options, pause, zone commands and widget kit text goes through the catalog (@arxdsilva)
- f53286c: feat(lang): story captions, difficulty notes and version line use the catalog (@arxdsilva)
- f7d4779: feat(lang): the Info card text goes through the catalog (@arxdsilva)
- 80ffbf6: feat(lang): the catalog holds the simulation's message and letter keys (@arxdsilva)
- 0d532ff: feat(lang): the inspector shell serves texts (@arxdsilva)
- 4039edf: feat(lang): the inspector's panes, groups, storage, pens and prisoners go through the catalog (@arxdsilva)
- 61368f1: feat(lang): the last root labels go through the catalog; Wave 3 exemptions (@arxdsilva)
- 7a1981c: feat(lang): the simulation's messages and letters carry their format (@arxdsilva)
- f7edf8d: feat(lang): translation catalogs and the checks that keep them complete (@arxdsilva)
- 1601ba9: feat(lang): wizard, main menu and world view text goes through the catalog (@arxdsilva)
- 44ec941: feat(options): Custom cursor now draws the game's own pointer (@arxdsilva)
- 809be19: feat(options): General, Interface and Developer tabs with every new option row (@arxdsilva)
- 02beaf8: feat(options): animal name modes, plant sway toggle and far-zoom pawn markers (@arxdsilva)
- f073198: feat(options): camera, pause and window options take effect (@arxdsilva)
- f721318: feat(options): colour-blind palettes for danger, warning and good (@arxdsilva)
- a169b31: feat(options): hats only on the map leaves hats off the colonist bar portraits (@arxdsilva)
- ec19e3e: feat(options): preferred names, test map sizes, menu background, remembered draw styles and developer log options (@arxdsilva)
- a5e907b: feat(options): the Language option loads its catalog, and Esc closes the developer log (@arxdsilva)
- 870437c: feat(options): the game writes a log file for Open log folder (@arxdsilva)
- 3a71595: feat(options): tooltip delay, colour-vision palette, larger small text and confirmations (@arxdsilva)
- 940237f: feat(options): window size presets and borderless window hook (@arxdsilva)
- b29aec2: feat(sfxgen): make approved sounds again by backend (@arxdsilva)
- e90c661: feat(sfxgen): record diffusion steps per take (@arxdsilva)
- c7fea7a: feat(ui): Info window for one item (@arxdsilva)
- 7ce3e33: feat(ui): apparel policies in the Assign window (@arxdsilva)
- eaec4a7: feat(ui): open the Info window from the shell (@arxdsilva)
Fixes
- 5cd3639: fix(gear): a colonist in a mental break takes no gear orders (@arxdsilva)
- 0e753dc: fix(health): colonists downed by heatstroke or hypothermia get moved to air that heals them (@arxdsilva)
- 5452185: fix(health): heatstroke victims are carried into cool night air (@arxdsilva)
- 9661ed5: fix(lang): fold the inspector's texts into Words to stay under the shell limit (@arxdsilva)
- 2bb5d18: fix(lang): the orders feature's labels come from the shell (@arxdsilva)
- e04b7e3: fix(options): plants sway unless the option turns it off (@arxdsilva)
- ecb5e46: fix(options): the colour-vision palettes are in the UI token table (@arxdsilva)
- ba1235c: fix(sfxgen): short MOSS sounds that start late are no longer silent (@arxdsilva)
Documentation
- 242af2d: docs(gear): tick timings for the armour speed change (@arxdsilva)
- 3d6bc87: docs(handoff): OPT-001 Wave 3 integration (@arxdsilva)
- 4b77a8b: docs(inspector): point the Gear tab at its gear/ sub-package (@arxdsilva)
- 4bdaf50: docs: OPT-001 records the simulation's message keys and what stays English (@arxdsilva)
- 970b3b7: docs: a README that shows the game first (@arxdsilva)
- 84f1acb: docs: gap analyses of shooting, mining and rescue (@arxdsilva)
- 1f53160: docs: gap analyses of the gear tab, options and ailments (@arxdsilva)
- bfd20cb: docs: gear, outfit and options gap analyses and spec rows reflect what shipped (@arxdsilva)
- 317f3a5: docs: tick the gear, outfit and options rows in the checklists (@arxdsilva)
Everything else
- 599e209: chore(arch): drop the Renderer field budget line (@arxdsilva)
- a94ad78: chore(arch): lower the game package ceilings to what the outfit move freed (@arxdsilva)
- 0cb6b27: chore(lang): contract for translated messages and letters (@arxdsilva)
- b27d4d6: chore(options): drop two settings nothing read (@arxdsilva)
- 5602124: chore: contract for gear refusal reasons (@arxdsilva)
- 8140ec8: chore: contract for gear, outfits, options and ailments (@arxdsilva)
- e01a38e: chore: contract for the exposure recovery note (@arxdsilva)
- 160cb60: chore: contract for the map-side option rows (@arxdsilva)
- f7c8114: refactor(game): move dressing into game/outfit (@arxdsilva)
- a240d28: test(art): the orphan check finds the cursor sprites where they are (@arxdsilva)
- cbab02b: test(ebiten): drop a dead check from the outfit journey (@arxdsilva)
- 02cc6d7: test(ebiten): journeys fast-forward the colony between Updates (@arxdsilva)
- ffc523a: test(ebiten): journeys for the options and camera settings (@arxdsilva)
- 2c2fe6b: test(ebiten): research bench journey fast-forwards the build; CI-004 handoff (@arxdsilva)
- cb93a59: test(ebiten): the Info window journey clicks the colonist; the cursor check is not a journey (@arxdsilva)
- 7e7f1a8: test(ebiten): the drop-pod raid journey resumes after a mid-raid pause (@arxdsilva)
- 0322b69: test(game): give each world test its own hop scratch (@arxdsilva)
- ab7bb71: test(game): haul self-checks use the per-game counter too (@arxdsilva)
- 0d6286a: test(game): sample index self-checks per game, not through a shared atomic (@arxdsilva)
- 0aea890: test(game): share grown fixtures and stop slow tests at their event (@arxdsilva)
- 7a277b3: test(options): follow the automatic pause and temperature unit rows to their new tabs (@arxdsilva)
- 7f93c0f: test(scenario): re-pin the grown golden for saved message keys (@arxdsilva)
Details
970b3b796 docs: a README that shows the game first
The README was 252 lines, with the download link at line 161 and 36
animated images ahead of the first word about features. It is now 84
lines: the pitch, the download, a clip, six feature cards, how to start,
the first keys to learn, and what data release builds send.
Nothing was dropped. The full feature list, every clip and still, all
controls and system requirements, developer notes and the data section
moved to docs/FEATURES.md, GALLERY.md, PLAYING.md, DEVELOPING.md and
PRIVACY.md.
Corrected while moving: research has 75 projects, not seven; there are
41 traits, not 19; Go 1.26.10, not 1.26.5. The YouTube claim is gone.
84f1acb97 docs: gap analyses of shooting, mining and rescue
Compares each with the published wiki, and lists what we can use.
Mining is the largest gap: mined-out ceilings never fall, every tile
takes the same work, and ore yields, chunk rate and the skill curves all
differ. Shooting's base works, but a hurt arm doesn't change a shot,
trait bonuses apply flat instead of on the accuracy curve, and allies
can intercept at any range. Rescue is nearly there, but no event brings
a stranger to rescue, and downed animals stay where they fell.
Also corrects rows in the combat, defence and pawn-interaction analyses
that were out of date, and extends ENG-003 to these three by the user's
decision. No gameplay changes.
b29aec2b2 feat(sfxgen): make approved sounds again by backend
-supersede elevenlabs queues every sound whose approved take came from that backend, so a whole set can be replaced without touching the ones already made locally.
e90c661ac feat(sfxgen): record diffusion steps per take
MOSS takes made with -moss-steps 50 match 100-step takes of the same seed almost exactly (waveform correlation 0.97 to 1.00 on three test prompts) in half the time, so the ledger now records the step count and the time estimate scales with it. A shorter denoising window is not a shortcut: below 30 s the model's output turns to noise or silence.
ba1235c76 ...
rimworld-go v0.1.27
Unpack the archive for your system and run rimworld-go (rimworld-go.exe on Windows); keep the assets folder next to it.
- macOS: the build is unsigned. The first time, right-click
rimworld-go→ Open, or runxattr -dr com.apple.quarantine <folder>. - Windows: SmartScreen may warn about an unknown publisher → More info → Run anyway.
- Linux: needs OpenGL and ALSA (most desktops have them).
Changelog
New features
- 3cab5a7: feat(sim): a colonist clears the field before hauling its piles (@arxdsilva)
- d707f61: feat(sim): colonists work in the wiki's order and finish the field first (@arxdsilva)
- 28968d6: feat(sim): the colonist bar keeps the order you give it (@arxdsilva)
- 5cd19f1: feat(ui): double click takes the same furniture on screen, and actions reach them all (@arxdsilva)
- c72269f: feat(ui): right click and drag where the mouse should work (@arxdsilva)
- a98098f: feat(ui): the Work tab's columns follow the order colonists work in (@arxdsilva)
- 12f9913: feat(ui): the colonist card fits in 30 % of the screen, VSync on by default (@arxdsilva)
Fixes
- 72e53d6: fix(art): the boot prewarm deflates on one core, not four (@arxdsilva)
- 3ceb9ed: fix(ui): never draw more than a 5K frame, on any screen (@arxdsilva)
Documentation
- 9542d97: docs(handoff): PERF-003 outcome and the DOS-10 captures (@arxdsilva)
- 7d29b91: docs: gap analyses of work priorities and harvesting (@arxdsilva)
- 6e6a320: docs: gap analysis of mouse controls (@arxdsilva)
Everything else
- e0643db: chore: up to 30 agents at once, and a scope block per agent in plans (@arxdsilva)
Details
3ceb9ed13 fix(ui): never draw more than a 5K frame, on any screen
Two kernel panics on 2026-11-04 came from the Mac's memory controller a
few seconds after launch, after the display was switched to a mode above
its panel's native size ("looks like 3360x1890" at 2x: 6720x3780 backing,
25 M pixels a frame). The menu drew that frame as fast as the GPU could
(frame cap Off, VSync off) while four cores deflated the sprite art.
- A frame never holds more than 5120x2880 physical pixels (a 5K screen at
2x, the biggest frame that has run here for months) nor a side above
8192: above either, the device scale shrinks (below 1 if it must) and the
window system scales the frame up. The UI is laid out in points, so
nothing changes size; only the map's sharpness above the cap. - Off the colony (menu, wizard, loading, prewarm) draws never exceed 60
fps, whatever the frame cap. Off still means uncapped on the colony. - Options: "Sharp on high-density screens" reads "On, limited to WxH"
while the cap holds the frame, with a tooltip saying why; the Frame cap
tooltip says the menu and loading stay at 60.
Tests: ten screens from 720p to 8K and a 16384-wide ultrawide hold the
cap, keep the 1280x720 logical minimum and map the cursor both ways; the
panic's screen draws exactly 5120x2880; the menu's 60 fps floor; the
Options row text. Handoff: .cursor/handoffs/PERF-003-render-cap.md.
72e53d614 fix(art): the boot prewarm deflates on one core, not four
A third kernel panic of the Mac's memory controller came five seconds
into the game, with the render cap already in place. What the three
panics share is not the frame but the boot prewarm: four goroutines
deflating ~765 MiB of freshly decoded sprites while an external display
in a scaled mode scanned its framebuffer, and the error names the
display clients. The prewarm is background work, so it now runs on one
goroutine (~2 s instead of ~0.5 s) and leaves the memory bus alone.
3cab5a707 feat(sim): a colonist clears the field before hauling its piles
A grower who finishes a harvest now picks every ripe marked plant within
eight tiles of where they stand before carrying anything, the way the
hauler already gathers nearby piles into one load. Once nothing ripe is
near, the piles go; a plant that ripens during the haul does not pull
the colonist back. Eating, sleeping, fire, drafting and forced orders
still come first, as do firefighting, doctoring and warden work at the
same priority.
The sweep lives in game/haul with the harvest assignment, which moved
out of the game package to pay for it. Mid-sweep saves keep the marks;
older saves load without them, no version bump. Pinned hashes are
unchanged on arm64 and amd64. Handoff: .cursor/handoffs/HAUL-003-harvest-sweep.md.
12f9913bc feat(ui): the colonist card fits in 30 % of the screen, VSync on by default
The docked colonist and animal card took half the screen. It now keeps
everything it showed, never scrolls, and with its tabs takes at most 30 %
of the screen's height: 168 + 24 px at 720, 252 + 24 at 1080, 336 + 24 at
1440. Its sizes are set for a 720-tall screen and scale with the real one;
below 720 the text shrinks to 9 pt before the pane grows. The card is two
lines, a rule and a four-column strip: bars; area, hour, diet, doing, next,
in hand, keeper; two columns of skills; training for animals. The gear
moved to the card's upper-right corner, the pane leaves the command grid
its room, and a saved layout too tall for the card says so once instead
of hiding rows. Settings from before take the new sizes unless the layout
was the player's own; the built-in presets all fit their height.
VSync is on by default (presets and older settings follow, unless the
player turned it off): with the client pacing the frames, an external
display in a scaled mode panicked the Mac. The frame cap still rules with
VSync off.
Handoffs: .cursor/handoffs/DOS-10-compact.md, PERF-003-render-cap.md.
9542d97a0 docs(handoff): PERF-003 outcome and the DOS-10 captures
The display's native mode is stable with the render cap, the one-core
prewarm and VSync on; the scaled "looks like 3360x1890" mode stays the
trigger. The compact card's captures (colonist, animal, setup, 150 %)
were read: nothing cut, the commands clear of the pane, the animal's
tabs right-aligned by design.
7d29b91a2 docs: gap analyses of work priorities and harvesting
Compares the Work tab, the tie-break between work types and harvesting
with the published wiki. Haul came 4th where the wiki has it 18th of 20,
the tab's columns did not follow the tie-break, and a harvest's yield,
speed and waste did not match. ENG-003 now covers both areas.
d707f6131 feat(sim): colonists work in the wiki's order and finish the field first
With equal priorities a colonist now follows the wiki's order: Firefight,
Doctor, Warden, Handle, Cook, Hunt, Construct, Grow, Mine, Plant cut, Craft,
Haul, Clean, Research. Haul used to come 4th and is now near the end, so
with everything at 3 piles wait until the other work is done; set Haul to 2
to move it up. Builders now bring their own materials, so sites keep moving.
A colonist who starts harvesting clears the plants around it before anything
but a fire or a patient, even with Cook more urgent than Haul. A plant outside
its allowed area no longer ends the sweep. A cook can still take a fresh pile
for a bill, and another free colonist can still haul it, as in vanilla.
Filling hoppers is now Haul work only: a cook with Haul off leaves them empty.
Inside each work type, tasks follow the wiki's order too: snow before filth,
slaughter and collecting before taming and training.
Wild plants are Plant cutting work, crops are Growing. Harvests use the wiki's
numbers: unskilled colonists are much slower (10 % speed at level 0, 238 % at
20) and can lose a whole harvest, with no straw from a lost one; injured hands
and poor sight lower the yield; a damaged plant loses at most half its yield.
The waste chance, 100 minus the yield, is our own: the wiki publishes no formula.
A year's colony still feeds itself: no deaths, no malnutrition, same meals.
a98098f22 feat(ui): the Work tab's columns follow the order colonists work in
Left to right is now what a colonist does when priorities tie, and the header
says so ("ties: left first"). The columns used to follow a different order than
the colonists did, so the tab read Growing before Hauling while they hauled
first. The tooltips for Growing, Plant cutting, Building and Hauling now describe
the work each one covers. Your priorities keep their meaning: saves are unaffected.
e0643db08 chore: up to 30 agents at once, and a scope block per agent in plans
The user raised the parallel limit from 15 to 30: rambudget's ceiling, the rules and the Claude Code setting all follow. It stays a ceiling: the budget still bounds it and 12 cores crawl with 30 compiles.
Plans now give each agent a short block (goal, entry points, behaviour, done when, out), with every line earning its place.
6e6a3205c docs: gap analysis of mouse controls
Double click, Shift, the box, group actions, right clicks, drag painting and multipliers against the wiki, the game's own tips and player reports, with who groups and why.
28968d6ce feat(sim): the colonist bar keeps the order you give it
A new SetColonistOrder command moves a colonist to a place on the bar, and
the order is saved with the game. It is only a view: the colony's own lists
do not move, so AI and work never see it. A colony that never reorders saves
nothing new and keeps its state hash, and old saves load unchanged. A new
colonist joins at the end; one away keeps their slot once an order exists.
5cd19f12a feat(ui): double click takes the same furniture on scree...
rimworld-go v0.1.25
Unpack the archive for your system and run rimworld-go (rimworld-go.exe on Windows); keep the assets folder next to it.
- macOS: the build is unsigned. The first time, right-click
rimworld-go→ Open, or runxattr -dr com.apple.quarantine <folder>. - Windows: SmartScreen may warn about an unknown publisher → More info → Run anyway.
- Linux: needs OpenGL and ALSA (most desktops have them).
Changelog
New features
- e924244: feat(art): meat is steaks now (@arxdsilva)
- b4830ea: feat(mods): colonists use common sense, new storage in the Architect, the colonist card (@arxdsilva)
- f7631b7: feat(mods): groundwork for the colonist card, habits and new storage (@arxdsilva)
- c1b2523: feat(mods): the colonist card is finished and on by default (@arxdsilva)
Fixes
- 604628c: fix(art): the tint shader is ready before anything can share it (@arxdsilva)
- 6837041: fix(sim): Macs and release builds keep the same weather (@arxdsilva)
Everything else
- c751a6e: ci: run the tests again, GitHub lost the last push event (@arxdsilva)
- c68d521: ci: test failures can be read without logging in (@arxdsilva)
- 2656774: test(ui): allow the tint shader's setup draw (@arxdsilva)
Details
e924244d3 feat(art): meat is steaks now
Meat, human meat and insect meat lay on the ground as a shapeless lump.
They now read as a pile of steaks with a fat rim and marbling, each with its
own colours. The butcher table's cuts and the fine meal show the same steaks.
f7631b72a feat(mods): groundwork for the colonist card, habits and new storage
Nothing here changes how a running colony plays yet: same seeds still give the same state hashes.
Neat Storage: 27 pieces exist as buildings with their own art, slots and hauling rules, drawn with what they hold, and display pieces can be admired. They reach the Architect in a later commit.
Options has a new Habits tab. It lists the colony's rules and saves them with the colony; most of them take effect in later commits.
Colonists have a pack that is saved and never loses its contents when the pawn leaves play, and it shows on the Gear tab. Colonists and tame animals can be given a name by command; the button comes later.
Saves move to version 13. Older saves still load.
The Architect's category buttons are 2 px shorter so seven rows fit on a small screen.
Package game gave up about 1,100 lines to game/sense, game/dose, game/roster and game/mapfields with no change in behaviour.
b4830ea8d feat(mods): colonists use common sense, new storage in the Architect, the colonist card
Common Sense habits, each one switchable in Options > Habits. On by default:
colonists sweep a dirty workplace before a job or a bill, carry every
ingredient to the bench in one trip, take spoiling ingredients first, keep
meals with bad ingredients apart, pick up after themselves, carry a spare
meal, and wait for a clear sky before shovelling snow.
Balance change: a colonist whose recreation is nearly full now goes to work
during a Recreation hour, then goes back to fun when it drops. Turn it off
with the recreation top-off habit.
Colonists now have a pack, with Unload buttons in the Gear tab. Benches can
opt out of tidying. Drinks and gifts follow the new rules, and there's an
opt-in "mood lift" drug preset.
Neat Storage: a new Storage category in the Architect with 27 pieces, plus
shelves, bookcases and the egg box moved there. Colonists admire a stocked
display case for recreation.
The colonist card now draws in the inspect pane and as a floating window, with
rename, a stat sheet and selectors for food, area and schedule. It stays off
until its settings screen lands.
c1b25230f feat(mods): the colonist card is finished and on by default
Selecting a colonist or an animal now shows the colonist card in the
inspector pane: needs, skills, health and standing at a glance, each with a
tooltip, and selectors for food policy, allowed area and the current hour.
Existing players get it too. Options > Accessibility turns it off, moves it
over the map, and sets the pane's height.
The card's gear opens its setup: sizes and text on Look, what it shows and
where on Sections, saved looks on Presets (kept as files, with a button that
opens their folder) and every colour on Colours. Back to defaults restores
the look and leaves your saved presets alone.
Hovering a row of the card's area menu draws that area on the map. The hour
menu has a Manage row that opens the Schedule window. Letters move clear of a
floating card. The learning helper has five new lessons, offered only while
the card is on. A saved layout the game cannot use warns you once and falls
back to the default.
Fixes found on the way:
- Tab opens the Architect again with a colonist selected.
- The expanded panel no longer overlaps the Global panel on small windows.
- Bodies on a corpse dump spot sit on the spot instead of beside it.
Known limit: the map's extreme lower-left corner stays behind the docked
card. Float the card or turn it off to reach those tiles.
604628c61 fix(art): the tint shader is ready before anything can share it
The test suite could fail on a data race in the tinting code, which stopped
v0.1.24's build and published no downloads. The engine finishes setting up a
shader on its first draw, and two tests drawing at once could both do that
step. The shader now draws once when it is compiled. Players were never
affected, because the game draws from a single thread.
2656774a2 test(ui): allow the tint shader's setup draw
Lets the test suite pass again after the previous fix: the guard that keeps UI
drawing in one place now knows this one offscreen pixel is not UI. Nothing
changes in the game.
c68d521f5 ci: test failures can be read without logging in
The test step now runs from scripts/ci_test.sh, in both workflows. It publishes
as annotations what failed and how long the slowest test binaries took, since
job logs need a login to read.
6837041ac fix(sim): Macs and release builds keep the same weather
On Apple Silicon the weather could round differently from the Windows and Linux
builds, so a colony drifted apart between them after enough days. Every per-tick
sum that arm64 fused into one instruction now rounds the same way everywhere.
Windows and Linux results don't change.
Release notes now start at the last tag with a published release, so v0.1.24,
which published nothing, loses none of its changes.
rimworld-go v0.1.23
Unpack the archive for your system and run rimworld-go (rimworld-go.exe on Windows); keep the assets folder next to it.
- macOS: the build is unsigned. The first time, right-click
rimworld-go→ Open, or runxattr -dr com.apple.quarantine <folder>. - Windows: SmartScreen may warn about an unknown publisher → More info → Run anyway.
- Linux: needs OpenGL and ALSA (most desktops have them).
Changelog
Fixes
- 0f7bb31: fix(deps): security fixes from Go 1.26.10, libraries for IDs and versions (@arxdsilva)
- 0527123: fix(save): files survive a crash mid-write, and saves can't lose a field quietly (@arxdsilva)
Documentation
- bd54c2a: docs(rules): libraries at the edge, saves as they really are (@arxdsilva)
Everything else
- 359f99d: chore(lint): staticcheck clean and required in CI (@arxdsilva)
- 3efc68a: refactor(art): one reader for sprite metadata, about twice as fast (@arxdsilva)
- 9dcdeb9: refactor: one Abs, Clamp and splitmix64 instead of 60 copies (@arxdsilva)
Details
bd54c2a0c docs(rules): libraries at the edge, saves as they really are
A new rule sets the order for any capability: the standard library when it
has the thing ready to call, then a well-known maintained library, then our
own code with the reason written down. Libraries are allowed in cmd, adapters
and platform. A new internal/arch guard rejects them in domain, application
and pkg, which were free of them only by habit.
The specs asked for Protobuf saves and forbade gob, while the game has always
saved gob + gzip with versioned migrations. The specs now describe that.
Removes 10 packages that held only a doc comment and had no importers:
pkg/{bitset,collections,fixed,geom}, outbound/{protobufsave,pathworker,
filesystem} and platform/{logging,buildinfo,profiling}.
0f7bb3162 fix(deps): security fixes from Go 1.26.10, libraries for IDs and versions
Builds move from Go 1.26.5 to 1.26.10. The new govulncheck step found 12 known
vulnerabilities in standard library code the game reaches, including TLS
certificate checks on the requests it makes. CI now runs that check on every
push (make vuln).
Install IDs now come from google/uuid, update checks compare versions with
x/mod/semver, and the download page opens through cli/browser. Existing install
IDs stay valid. Opening the page no longer holds up the game loop.
Release archives now carry the license of every Go module the game links, in
third_party/go-modules, listed in THIRD_PARTY_NOTICES.md. A test fails when a
module is missing from that list, and the import guard now covers pkg/.
0527123ae fix(save): files survive a crash mid-write, and saves can't lose a field quietly
Settings, screen layouts and generated scenarios now reach the disk the same
safe way saves do: written to a temporary file, flushed, then swapped in. A
crash or power cut leaves the old file intact instead of a damaged one.
Saves match fields by name, so renaming one used to drop its data without an
error. A new test lists all 2,790 saved fields and fails on any rename,
removal or type change, telling the developer to bump the save version and
migrate. A reference save at version 12 must keep loading to the same state.
The new helper is our own because renameio exports nothing on Windows. Parse
benchmarks over the real sprite metadata are added too.
3efc68a7d refactor(art): one reader for sprite metadata, about twice as fast
Six hand-written readers of the same YAML subset became one package,
pkg/flatyaml, used by the game and by the atlas and normal-map tools. It reads
every real file exactly as before, and the generated atlas doesn't change.
Reading the 6,893 sprite files dropped from 8.6 ms to 4.6 ms, with a fifth of
the allocations.
We measured go.yaml.in/yaml/v3 first. It read all 7,236 files the same, but
would add 115 ms (79%) to the art index at boot, past the 100 ms and 20% we
set before measuring. The numbers are in pkg/flatyaml/AGENTS.md.
9dcdeb9ad refactor: one Abs, Clamp and splitmix64 instead of 60 copies
The same four small functions had been written again in package after package:
absolute value 38 times, clamp 4 times, and the splitmix64 mixer in two forms
about 20 times. They now live in pkg/mathx and pkg/randx.
Nothing changes for players. Generated worlds, saves and sounds stay the same:
every replaced body was compared with the shared one over 200,000 inputs, and
no golden or hash was re-pinned. Frame times stayed within noise.
359f99d0f chore(lint): staticcheck clean and required in CI
make lint now runs on every push, next to make vuln. It uses a pinned
staticcheck, so it no longer depends on the version on each machine.
Fixing the 109 findings removed dead code and made a few tests stronger. A
journey test that meant to double-click only clicked once; it now clicks twice
and still passes. Checks like f(x) != f(x) now store both results before
comparing them. No golden or simulation output changed.
rimworld-go v0.1.22
Unpack the archive for your system and run rimworld-go (rimworld-go.exe on Windows); keep the assets folder next to it.
- macOS: the build is unsigned. The first time, right-click
rimworld-go→ Open, or runxattr -dr com.apple.quarantine <folder>. - Windows: SmartScreen may warn about an unknown publisher → More info → Run anyway.
- Linux: needs OpenGL and ALSA (most desktops have them).
Changelog
New features
- fb8caf3: feat(menu): show the running version and offer newer releases (@arxdsilva)
- 4fa472e: feat(power): visible wires from devices to the grid, and a Reconnect button (@arxdsilva)
- 8aeca64: feat(turrets): claim a defeated base's turrets, and turrets now spark before they blow (MAP-21) (@arxdsilva)
- 61d0c2c: feat(usage): send usage data to the project's website (@arxdsilva)
- 796190f: feat(visitors): arresting a guest turns their faction, and leavers carry their wounded (MAP-23) (@arxdsilva)
- 4552053: feat(wanderers): new wanderers after a launch, and a wanderer event can restart a lost colony (MAP-22) (@arxdsilva)
Documentation
- 86dd239: docs(maps): gap analysis of the four deferred items (MAP-6) (@arxdsilva)
- 487b75d: docs(power): gap analysis of wires, connecting and disconnecting (PWR) (@arxdsilva)
- 506b7d1: docs(power): power wiring may use published wiki numbers (ENG-003) (@arxdsilva)
Everything else
- a540dd8: chore(art): refresh 61 animal icons and the lamp icon from their sprites (@arxdsilva)
- 81a280b: chore(power): contract for wires and Reconnect (PWR-0) (@arxdsilva)
Details
8aeca640e feat(turrets): claim a defeated base's turrets, and turrets now spark before they blow (MAP-21)
Once no defender stands, a settlement's turret can be claimed. It then fires
for you with no power grid, takes steel from a hauler when it runs dry, and a
mini-turret can be uninstalled and brought home, where it needs power like any
other. While defenders stand, Claim says "Defeat the defenders first."
Every turret hurt below 20 % now has a 50 % chance to spark for 4 seconds and
blow up, with a warning message and a line in its panel. Destroyed before that,
it blows at once. Autocannons and uranium slug turrets used to never explode:
they now do, in a wider blast, and they can no longer be moved or uninstalled.
A settlement's turrets also shoot manhunting animals.
796190fa0 feat(visitors): arresting a guest turns their faction, and leavers carry their wounded (MAP-23)
Trying to arrest a visitor now costs what it should: as soon as your colonist
reaches them, whether the arrest works or not, their faction drops to -75 and
turns hostile, and everyone of theirs on the map leaves as an enemy. The
order's description warns you first. It used to cost 25 goodwill, and only if
it worked.
Visitors leaving on good terms now pick up wounded friends the colony isn't
looking after and carry them off the map. If a friend can't be reached they
give up and go alone. Visitors who turned hostile walk out without them.
455205318 feat(wanderers): new wanderers after a launch, and a wanderer event can restart a lost colony (MAP-22)
Leaving the planet with everyone aboard now counts as nobody left. The ship's
ending opens first and offers New wanderers, without a second screen on top.
With someone left behind the colony simply goes on.
A storyteller's wanderer event can now arrive when nobody is left, and whoever
comes ends the game over. The New wanderers picker shows each person's portrait
and marks the skills they're passionate about.
86dd23904 docs(maps): gap analysis of the four deferred items (MAP-6)
Sources for each row of the second pass, what rests on memory, what was kept
and why, and the two earlier claims it corrects. Checklists and the MAP-5
handoff follow, and the game package's line budget comes down.
81a280b75 chore(power): contract for wires and Reconnect (PWR-0)
Nothing changes in play yet: the command, the pin and next-grid fields, the
read-model flag, the save field and the wire's palette colour.
4fa472ea6 feat(power): visible wires from devices to the grid, and a Reconnect button
Lamps, heaters, coolers, benches and other powered things now show a thin
wire to what powers them, all the time and not only in the power overlay. It
stays visible over walls, so a cooler set in a wall or a conduit run under
one still shows its connection, and a faint pale rim keeps it readable on
dark floors. A placed blueprint shows the wire it will make.
Devices connect from up to 6 tiles away instead of 3. Generators and batteries
now carry power, so a lamp can wire straight to a generator with no conduit,
and ones that touch join up with no wire. A generator or battery with nothing
touching or wired to it still says "Not connected".
The new Reconnect button in a device's pane moves its wire to the next grid in
range at once, and says why when it can't. The choice is kept in saves. To cut
power, use a power switch or the Power toggle, as before.
Existing saves: devices 4 to 6 tiles from a conduit connect when loaded, which
can raise a grid's demand, and generators and batteries that touch now join.
487b75d35 docs(power): gap analysis of wires, connecting and disconnecting (PWR)
What the wiki says about wires, range, Reconnect and disconnecting, what was
missing here, what shipped, which rules are our own because no page publishes
them, and the known behaviours left as they are.
506b7d185 docs(power): power wiring may use published wiki numbers (ENG-003)
The 6-tile connection range and the list of what carries power come from the
RimWorld wiki, by decision of 2026-11-03. Names and prose stay original.
a540dd827 chore(art): refresh 61 animal icons and the lamp icon from their sprites
These icons are cut from the world sprites, and a rebuild made them match the
current ones. The change is visible: the animal icons look different, and the
standing lamp's icon now shows a pale unlit bulb in place of a warm yellow one.
61d0c2cd0 feat(usage): send usage data to the project's website
Release builds now report how many people play, on what, and how far they get,
so the project can see what to work on. Basic data is always sent: a game
started, a heartbeat every 5 minutes, the game closed, the version, OS and CPU
architecture, and random IDs for the install and the launch.
Detailed data is on by default and has a switch in Options > Gameplay > Share
detailed usage data: total RAM, screen size, graphics quality, the storyteller,
difficulty, biome and map size of each colony, and every 10 minutes the in-game
day, colonist count and frame rate. Colony, colonist and scenario names, file
paths, seeds and save files are never sent. The README's "What data the game
sends" section lists all of it and how to have your data deleted.
Sending never slows or interrupts the game. A request that fails is silent, and
its events wait for the next attempt that works. Builds you make yourself send
nothing.
fb8caf31b feat(menu): show the running version and offer newer releases
The game now tells you when there is a newer version to download. When GitHub
has a newer release, a card under the version on the main menu names it, with
the address to get it from. Download opens the page in your browser, and Later
hides the card until the next launch. The game never downloads or installs
anything by itself.
The pause menu now shows the version too, along with the newer one once it is
known.
Release builds ask GitHub once per launch. The request carries only the game
version, and a check that fails shows nothing.
rimworld-go v0.1.21
Unpack the archive for your system and run rimworld-go (rimworld-go.exe on Windows); keep the assets folder next to it.
- macOS: the build is unsigned. The first time, right-click
rimworld-go→ Open, or runxattr -dr com.apple.quarantine <folder>. - Windows: SmartScreen may warn about an unknown publisher → More info → Run anyway.
- Linux: needs OpenGL and ALSA (most desktops have them).
Changelog
New features
- e6f921d: feat(fish): farm fish in powered tanks (FISH) (@arxdsilva)
- 5d760d5: feat(maps): shut enemy doors, hostile visitors and new wanderers (MAP-5) (@arxdsilva)
Fixes
- c3d3abe: fix(allow): stop sending colonists after a predator's kill (@arxdsilva)
Everything else
- a4ef141: refactor(game): move snow into its own package (@arxdsilva)
Details
a4ef141ec refactor(game): move snow into its own package
Lying snow and the clear-snow area now live in game/snow behind a small host, which leaves room in the game package for new features. Nothing changes in play: the state hashes are identical.
c3d3abeec fix(allow): stop sending colonists after a predator's kill
A corpse left by a wild animal now follows the same rule as any other death: forbidden outside the home area, and only a colonist's or a tame animal's own hunt keeps its kill allowed. While a wild predator eats, it holds the carcass, so nobody is sent for it, in the home area too. If a stack vanishes while someone is walking to it, that job ends at once rather than at the empty spot. Wild eggs also follow the home-area rule now.
5d760d5bf feat(maps): shut enemy doors, hostile visitors and new wanderers (MAP-5)
Enemy doors: a settlement's doors are now shut to colonists and open to its defenders. A drafted colonist can break one, and it can be claimed once no defender stands. Defenders come out when the compound is hit.
Hostile visitors: when a visiting faction turns hostile, its visitors, traders and allies leave as enemies and shoot back. A letter says so and trade closes. A guest still recovering in bed leaves hostile once well.
New wanderers: eight in-game hours after everyone is gone, the game-over screen offers a new group, up to seven groups, with a picker and a reroll per person. A "Nobody left" alert keeps the way back open after Keep watching.
Drops: loot and meals found in a settlement or a siege camp start forbidden, as do spare weapons dropped outside the home area, and shoved stacks stay whole. A settlement turret out of ammo stays silent and its panel says "Out of ammo".
e6f921d82 feat(fish): farm fish in powered tanks (FISH)
Research Aquaculture after Hydroponics to build a fish tank: 1x4 and powered day and night, built like a hydroponics basin. Pick a stock in its panel: tilapia, carp or trout each have their own growth time, yield, comfortable temperature and Animals skill. Haulers fill the feeder with hay, kibble or raw plant food, and handlers stock the tank and net it when ripe.
The stock suffers if the power goes out, the air leaves its band or the feeder runs dry, and it dies if nobody fixes it, with a "Fish dying" alert. Netted fish is raw meat in every recipe and pile. The tank restocks by itself, and the fish grow visibly in the tank.
Vanilla has no fish farming, so the building's numbers come from the basin and the stock numbers are original.