Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,19 @@ posted on the Steam Workshop for that version, sorted into Added, Changed, Remov

## [Unreleased]

## [1.5.5] - 2026-11-06

### Fixed

- A crafter on shift at a radius or area stand changed out of uniform to store each bill's product,
even with the stockpile inside the ring or the area. They left the product at the bench, walked
to the stand, came back for it in their own clothes and dressed again for the next bill. They now
carry it to that stockpile in uniform, whether or not Hauling is ticked. Reported by a player.

Unchanged: a stockpile past the edge of the ring or the area still changes them back first, and
they leave the product at the bench to do it. Bills set to drop on the floor work as before, and
so do room stands.

## [1.5.4] - 2026-10-29

### Added
Expand Down Expand Up @@ -741,7 +754,8 @@ The first release. It needs Odyssey, for the outfit stand, and Harmony.
- A Change back button on any colonist in uniform takes them out of it at once.
- One setting, Unassigned stands are shared, on by default.

[Unreleased]: https://github.com/beverage/shift-change/compare/v1.5.4...HEAD
[Unreleased]: https://github.com/beverage/shift-change/compare/v1.5.5...HEAD
[1.5.5]: https://github.com/beverage/shift-change/compare/v1.5.4...v1.5.5
[1.5.4]: https://github.com/beverage/shift-change/compare/v1.5.3...v1.5.4
[1.5.3]: https://github.com/beverage/shift-change/compare/v1.5.2...v1.5.3
[1.5.2]: https://github.com/beverage/shift-change/compare/v1.5.1...v1.5.2
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,11 @@ either, a colonist keeps the outfit on only for:
heat or cold;
- at a work stand, hauling, cleaning and building, provided every place the job
names is inside the ring or the area. A haul out to a freezer past its edge
changes them back before they leave, while the stand is still close.
changes them back before they leave, while the stand is still close;
- at a work stand, carrying a finished bill's product to its stockpile, provided
the stand serves that bill's work and the stockpile is inside the ring or the
area. Hauling does not have to be ticked. A stockpile past the edge changes
them back first, and they leave the stack at the bench to do it.

Most other jobs send them back to change first: a sit-down meal, bed,
recreation at a work stand, work the stand does not serve. A sleep stand keeps pyjamas on only
Expand Down
40 changes: 40 additions & 0 deletions Source/ShiftChange/Harness/DebugTools_LifecycleHarness.cs
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,46 @@ internal static bool Run(Map map, IntVec3 origin, bool toast)
Case(map, pad, "pass-through work is judged at both ends, and an errand ahead of the stand's work rides along",
(m, p) => Stage(m, p, StageKit.Displacing, enclose: true),
PassThroughWorkIsJudgedAtBothEnds);
WorkTypeDef crafting = DefDatabase<WorkTypeDef>.GetNamedSilentFail("Crafting");
Case(map, pad, "a bill's product hauled to a stockpile in the area keeps the uniform on",
(m, p) => StageWithDoorway(m, p, crafting),
f => BillProductHaul(f, CatchmentKind.Area, true, true, true));
Case(map, pad, "a bill's product hauled to a stockpile in the ring keeps the uniform on",
(m, p) => StageWithDoorway(m, p, crafting),
f => BillProductHaul(f, CatchmentKind.Radius, true, true, true));
Case(map, pad, "the same with Hauling not ticked, because the bill's work is what the stand serves",
(m, p) => StageWithDoorway(m, p, crafting),
f => BillProductHaul(f, CatchmentKind.Area, false, true, true));
Case(map, pad, "a bill's product bound for a stockpile past the area changes them back first",
(m, p) => StageWithDoorway(m, p, crafting),
f => BillProductHaul(f, CatchmentKind.Area, true, false, false));
Case(map, pad, "a bill's product bound for a stockpile past the ring changes them back first",
(m, p) => StageWithDoorway(m, p, crafting),
f => BillProductHaul(f, CatchmentKind.Radius, true, false, false));
Case(map, pad, "the same with Hauling not ticked",
(m, p) => StageWithDoorway(m, p, crafting),
f => BillProductHaul(f, CatchmentKind.Area, false, false, false));
Case(map, pad, "a room stand keeps the uniform on for a bill's product bound for a stockpile in the room",
(m, p) => StageWithDoorway(m, p, crafting),
f => BillProductHaul(f, CatchmentKind.Room, true, true, true));
Case(map, pad, "and for one bound past its door, as it always has",
(m, p) => StageWithDoorway(m, p, crafting),
f => BillProductHaul(f, CatchmentKind.Room, true, false, true));
Case(map, pad, "a bill's product is judged at the stockpile, not the crafter's unpainted cell",
(m, p) => StageWithDoorway(m, p, crafting),
BillProductIsJudgedAtTheStockpile);
Case(map, pad, "a bill's product goes by the ordinary rule once the stand stops serving the bill",
(m, p) => StageWithDoorway(m, p, crafting),
BillProductOfUnservedWorkChangesThemBack);
Case(map, pad, "a haul that starts with the stack on the ground is no bill's product",
(m, p) => StageWithDoorway(m, p, crafting),
BillProductMustBeInHand);
Case(map, pad, "the same stack in hand after other served work is no bill's product",
(m, p) => StageWithDoorway(m, p, crafting),
BillProductMustComeFromABill);
Case(map, pad, "a crafter off shift is not dressed to store what they made",
(m, p) => StageWithDoorway(m, p, crafting),
BillProductDressesNobody);
Case(map, pad, "a radius sleep stand changes them back on the first job out of bed",
(m, p) => Stage(m, p, StageKit.Displacing, enclose: true),
RadiusSleepStandKeepsItOnlyForBed);
Expand Down
Loading
Loading