Demo 0.3.5: Clearer, Fairer, and Still on Course for November
How world event pricing, crafting returns, bulk buyers, floor clutter and save loading now work in the Dark Workshop Simulator demo, with the full game on schedule for November.
- demo
- update
- release
- economy
- crafting
- ai
- save system
- fixes
Two pieces of news today. The Dark Workshop Simulator demo has a big new update, and the full game is still on course to release this November, as scheduled.
Since Steam Next Fest I have been working through everything people told me after playing and watching the game, along with a code audit of the full game ahead of launch. This post covers what changed and how the systems work now. Play the free demo on Steam.
On the way to release
Work on the full game is moving forward as planned. The demo and the full game are developed side by side, and fixes made for the demo are merged into the full game, so everything below also makes the launch build better. These last weeks are about polish, balance and stability.
If you want to support the game, wishlisting it on Steam is still the single biggest help you can give before launch.
World events no longer touch your prices
This was the biggest rule change in the update, and it started as a bug report: during an event, I typed one price and the Price Book showed another. Typing 50 could show 75.
The cause was that events multiplied the player's sell price directly. Retyping the price multiplied it again, so the number compounded, and the boost could push a fair price into the overpriced band.
Events no longer modify the price at all. The price you type is the price customers pay. Instead, an event changes two other values:
- Demand for the affected items, which now has two new levels at the extremes: Extreme and Crashed.
- The markup allowance, which is how far above the supplier price customers will go before they object. An event adds or subtracts a share of the supplier price from that allowance, so the bands in the Price Book move while your typed number stays still.
The Price Book shows a banner while an event is active, along with the exact change in accepted markup, and you get a notice when the event ends. Event effects were also cleaned up into simple steps, and the event texts were rewritten in all seven languages: a short in-character line, then a plain summary of what changes, for how long and what to do about it.
Reading the Price Book
The Price Book had a colour problem. High demand was painted green, the same colour as a good price band, so players read it as a pricing instruction. Demand now uses one neutral colour and a line saying what it does to price.
The price bands are named by meaning: Loss, Bargain, Fair, Pricey and Too much. Every number in the detail pane has a gold unit, and "Supplier pays" became "Supplier price", because some translations read as if the supplier was paying you.
The allowance itself also changed. Mid-range goods carried a smaller flat allowance than some of the cheapest stock, which made the step up from herbs to goblin gear a capital wall. The allowance now scales with the supplier price and has a minimum, and no item's allowance went down.
Why crafting felt pointless
A crafted item sells for the same price as a bought one, because its price bands are based on the supplier price of the finished item. Crafting only changes your cost per unit.
On paper it was already more profitable per item than buying and reselling. It did not feel that way, because the gain was invisible and a station only produced one item per cook. So:
- Starter recipes now output two items per cook, which makes the difference obvious at the output table.
- Yield skills roll for another full batch rather than one extra item, so they keep their value now that batches are larger.
- Crafters use the same code path. Their orders count cooks, so a crafter working a starter recipe produces twice the ordered number.
- Iron recipes were rebalanced. The Iron Sword was the outlier, with ingredient costs close to its own price. It now builds on a Goblin Sword and a bone, and the Iron Axe builds on a Goblin Axe and bones.
The alchemy table also gained a slower animation cycle, a pour loop while the bowl cooks, and a chime when a batch finishes (but not when you cancel one).
Bulk buyers actually arrive
Bulk buyers are special customers tied to world events, and two bugs were undermining them.
They could not find the shop. Their walking routes were references in the prefab, but a Unity prefab cannot reference objects in a scene, so the slots were empty at runtime. One of them also had no item categories set, so he had nothing to shop for even if he arrived. They now read their route from a waypoint folder next to their spawn point when they spawn, which leaves nothing to wire by hand.
They barely bought anything. The order builder added one entry per shelf slot, so two stocked slots meant two items whatever the buyer's target was. It now counts units and fills from the first matching slot. The target doubles with each daily visit.
These buyers also skip the normal per-item willingness roll, so they pay any price below the top band and refuse anything in it.
Clutter and dirt
Crates left on the shop floor now have a cost. A monitor tracks crates resting on the floor, and once one has been there for a while it gets a red marker. Nearby customers complain and each costs you a little popularity, once per customer.
Thieves now prefer floor crates and take them whole, and hitting the thief drops the crate back. A crate left for long enough can summon a thief if none is already active. This gives the empty-your-crates habit a real reason to exist.
Dirt got a reminder system. Any unlocked floor sector with no dirt, or with a mark that has worn low, gets a red marker. The compost barrel gets one too (hidden while you are carrying a bucket), and if no flagged sector is on screen, a single pointer at the screen edge leads to the nearest one. The system stays off until you finish or skip the tutorial's pouring step.
Smoother moment-to-moment play
- Ordering: the Order button used to grey out, with no explanation, until the delivery portal closed. The delivery system already handled several orders in flight, so I removed the restriction.
- Storage: the view stays open after a retrieval, and crates queue up to fly out onto several landing spots. If every spot is taken, the retrieval is refused with a notice, so items never sit removed from storage waiting for room. Deposits run in parallel and no longer lock the portal, with capacity counting crates still in flight.
- Tills: a till now records which employee reserved it. You can keep serving while your zombie cashier walks over, and it only locks when the owner arrives.
- Fast Hands: the skill now applies a shared hand-speed scale to shelf handling, crate unloading, gathering, containers, loot and furniture pickup.
- Furniture placement: the build ghost now marks where customers will stand, with an arrow pointing at the furniture.
- Interaction prompts: they now have two rows, action first and object second, and each outcome uses one consistent verb in every language. A stocked shelf slot also stops offering to pick up while you are holding a crate.
- Tutorial: orders must now match the Skull's list exactly, furniture and stock are ordered in separate steps, and the end of the tutorial is announced clearly.
- Scaling: menus are larger by default, with a new UI Scale setting, and tooltips now scale with resolution rather than shrinking at 1440p and 4K.
- Controls: the Controls tab now lists every key, reading the key names from the input bindings.
- Fame: the later levels take less of a grind to reach, and levelling up has its own sound and banner.
Breaking up repeating textures
The shop is built from modular pieces that all map the same texture tile, so roofs, walls and floors visibly repeated module by module.
I added a grime shader based on the standard URP Lit shader, which projects stains in world space so that neighbouring pieces no longer match. It is deliberately cheap, with one texture read and one octave of noise, and it stays compatible with the SRP Batcher. My first version read as a regular cow-hide pattern, so the noise now warps the stain coordinates and thins the stains out by area, with no extra texture reads.
Materials are swapped once at load, behind the loading screen, so there is no per-frame swapping cost.
Save and load fixes
The audit turned up several bugs in how a save is restored:
- Zero gold: the new-game reset passes in blank save data, so the game treated a real balance of zero as a fresh start and gave you starting gold. Blank data now carries a sentinel value, and a real zero loads as zero.
- False level-ups: restoring fame could run before the progression system had restored its level. Every Continue played the level-up banner, and a level 1 save earned a free skill point. The level is now recorded silently during loading.
- Lost crates: six separate item-by-id lookups used three different strategies, and some could not find crafted items, so crafted crates on the floor could be lost on reload. There is now one cached lookup.
- Loading screen: it could fade out before the delayed save load ran, flashing starting values. It now waits until the save has been applied, with a time limit as a safety net.
- Journal and billboard: restoring objectives went through the same path as announcing them, which marked everything as new. Restores no longer announce, and the billboard's read state is now saved.
Your existing demo save carries over, so there is no need to start again.
Other fixes
- Music: the music loop could restart a track that a crossfade had already started, and clicking Continue during a fade-in could hand playback back to the menu track. Crossfades now run through one cancellable coroutine where the latest request wins.
- Hitches: the Swamp and rain tracks decompressed fully on the main thread the first time they played, blocking for around 300 ms. They now stream, like the Cave and Graveyard tracks. The Price Book was also destroying and rebuilding every row on day and event changes while closed, so it now rebuilds only when opened. Some of the hitch at the start of an event may remain, and I am still tracking that down.
- Escape key: build mode and the pause menu both listened for it. The pause manager is now the only owner and asks build mode first: cancel placement, then exit build mode, then pause.
- Customers stopping: destroyed customers could still count against the active cap, so after a skipped tutorial only a few would ever come. Dead entries are now removed, and the game logs a warning if the shop stays open for a long time with no spawn.
- Stuck prompts: self-destroying pickups left their prompt on screen, because Unity's overloaded null check treats a destroyed object as null, so the look-away event never fired. The code now checks the raw reference.
- Narrow screens: the canvas now keeps its 16:9 width below that ratio and gains height, so 16:10 lays out like 16:9, and the ordering grid scales its cards down to fit.
- Game icon: the build could not read the icon texture at build time, so the executable showed the default Unity icon. It now shows the right one.
Thank you
To everyone who played the demo, streamed it, wrote to me or left feedback: thank you. A lot of this update exists because you took the time to say what confused you, what annoyed you and what you enjoyed.
See you in November.
Grab the free demo on Steam, and if something breaks or feels wrong, come and tell me about it in the Dark Workshop Discord.
