MicroTown - Rudy (Snowy Ash Games)
This smaller update tweaks resource mining by adding early-game mineable deposits and adjusts late-game quarrying. The update also adds more depth to food items.

Quarrying

The major change in this update is the addition of free-standing deposits around (a newly-generated) map:



The start of the game now has a Stonecutter building instead of a Quarry:



These operate basically like Lumberjacks - the workers go out and harvest the nearby deposits:



Each full-size deposit can be mined 6 times, so these patches last for a while, but not indefinitely. This makes initial stone resources much less a "build-and-forget", but something you have to keep an eye on, mine from several sites (some possibly far), and eventually transition to quarrying.

Quarry is now unlocked by Quarrying tech and each resource type has its own mine type:



Sand and Clay quarry are now also separate buildings and Sand/Clay Pits are no longer part of the Quarry:



I haven't decided exactly what I'm going to do about clay and sand mines since they have similar issues to the quarry. But they are okay as is for now, so I'll leave this for later.

Quarries can now use Mining Tools (which is what I renamed Tools). Every Mining Tool delivery will last for 6 excavations at a mine:



Mining with tools is significantly faster, but not required. Mining in general is slower now, so having tools would likely be preferable to having lots of villagers.

Besides various opportunities for balance and progression, I mainly like deposits for the visual variety and the "verticality" they add to the map. Any feature that adds new props and interactions with the world is a big plus in my book. I love the idea of each deposit slowly depleting visually watching the villagers go hit the rocks. As for balance, this changes a fundamental part of the initial gameplay, so I'll have to see how it goes.

I originally wanted quarries to be way more involved instead of just mining deposits, but I never got around to it, so it all stayed very "flat". I feel like this being literally on of the first things the player learns about, it should be significantly cooler.

What I still haven't added are rock tiles that have specific underground resources, so that the player would have to build mines in certain locations. But this requires me to make substantial changes to the level generation, which I cannot easily do with the current/old generator. Even the deposit generation needed code that is more hacks than logic. (For example, I couldn't even add deposits outside stone areas.) So I'm holding off on that for now, but will probably revisit things later. I also haven't added any sort of ore processing, which would make long-term production a bit more involved.

And stone is still not use for anything late-game, so there's that to address at some point.

Food values

Food now has several new "properties" to make food production and use feel more meaningful.

For example, a simple food item:



Versus a complex item:



This makes me want to aim for the fancy foods instead of potato quality.

First of all, food now belongs one or more categories, like Produce or Meats:



Each food item has a set quality:



Quality is the average quality of the best 4 items. In other words, as long as there are enough high quality items, the overall score will be high.

Each food item provides variety (for each of its category):



Variety is the sum of all the varieties in each category with a limit of 3 per category (so you cannot "stack" the same category).

You'll note that Pickles are really the only item that stands out at the moment because I didn't have any such items before. In fact, it's the addition of Pickles that prompted such questions as - how is it any better than just stacking potatoes.

Villagers in Houses will now consider both food quality and variety for their Diet need (score):



To sum up, all of this mean that items like Pickles actually provide as much food variety as 3 individual vegetables and still boost "fancy" quality score. So you could start with basic food supply, but transition to better mixed foods (and stop selling "cheap" food). Now I "just" need to add a bunch of new food items to fully utilize this new stuff. (And somehow allow houses to cram all these items...)

This feature is one of those where it's not obvious just how much extra stuff needs to be added to make it work. But this does allow me to handle "better food" in a way that can be balanced and explained reasonably well. Admittedly, about 80% of this work is UI-related, but that's how some features are.

Ant trails

One feature I have wanted to add for a long time but never got around to are so-called "ant trails" - on-the-ground virtual paths between locations. Currently, I am using these for export/import station routes:



If you mouseover a route in the selection UI, it will also highlight the relevant trail.

These use the same logic as regular in-game path-finding, so they actually follow the paths that couriers would take along the routes (and I think that's really neat):



There is a lot of potential for these in various locations, although none are really a priority right now. It was the export routes that felt more like a bug or at least a glaringly-unfinished feature since it didn't indicate where routes go. (There are the building markers, but you have to actually scroll around to find them and they didn't specify which route it is.)

It doesn't sound like a complex feature, but as always with these, it's the little things that get you. For example, I discovered some non-aligning sprites:



I won't go through a lot of detail, but I talked about path-finding and where path "nodes" are in a previous update post: https://steamcommunity.com/games/931270/announcements/detail/4748472700555436873 In short, path-finding is not just between tiles, but also between every corner of the tile. And the exact pixel distances for hex tiles the way I have them aligned means that even seemingly-identical transitions are actually 1 pixel shorter or taller depending on the exact location. Which means I ended up with a silly amount of sprites for this:



All this took a few days to do, but I think it's a nice "nice-to-have" feature.

Other

One requested feature is that export stations can now toggle items per route:



This allows some more complex exporting rules. Honestly, export/import stations are now way more complicated (and versatile) than I ever originally expected them to be.

Future plans

Another update so soon? What is this, Christmas?

I think I will continue to do some smaller updates for now. I have no idea what I will work on short-term since I don't want to do anything huge or overly complicated over the holidays. There are some high impact features I am looking into, but I have no idea whether they are huge changes or something I can get partly done and playable until I try. So I don't want to commit to anything. But I would really like to add technology tiers and rework scholar and library knowledge gathering. If not that, then something to do with late game, objectives and/or more involved monument construction.

Long-term, I am still aiming at a better level generator and all the features that come with it. As I mentioned before, I will try to make some updates that are "part of" level generation, like this deposit update, but does not require it. Even so, I was limited in how I could place and distribute deposits, so that's the sort of difficulty of not having supporting features.

Full changelog

Changes

• Generic Quarry Mines have been replaced by Stone Mine, Coal Mine and Iron Ore Mine
• Sand Quarry and Clay Quarry are now separate buildings
• Add Stone Deposit, Coal Deposit and Iron Ore Deposit props
• Add Stonecutter building
• Add Deposit concept
• Deposits will generate in new worlds on Rocks areas - a guaranteed number around spawn, proportional further away, and then randomly
• Add Quarrying tech unlockable after Mining
• Quarry is now unlocked by Quarrying
• Sand and Clay are now mined at Sand Quarry and Clay Quarry instead of Quarry, which is now only for Stone, Coal and Iron Ore
• Quarry now toggles production by item instead of by auxiliary
• Quarry now has separate mine buildings for each resource - Stone Mine, Coal Mine and Iron Ore Mine, which cannot toggle their production
• Quarry Mines now have to prepare area from Rocks to Excavated Rocks
• "Tools" have been renamed to Mining Tools; change icon
• Quarry Mines now can use Mining Tools for 6 operations; they can still work without, but much slower
• Mine building inspection UI to show Mining Tools use
• Mining Tools now require Quarrying for unlocking
• Add goal for Quarrying
• Food items now have a Food Quality values - 1 to 3 "points" (for example, Carrot is 1 point and Pickles is 3 points)
• Food items now belong to one or more Food Categories - Produce (e.g. Carrot), Dairy (Cheese), Meats (e.g. Roast), Pastry (Bread) and Preserves (Pickles).
• Food items now have Food Variety values for each Food Categories.
• Villager Diet need now uses Food Variety instead of counting items, however each Food Categories is limited to max 3 variety "points"
• Villager Diet need now uses Food Quality as additional criteria, which is based on best available item average quality (currently, best 4 items)
• Export Station can now toggle items on a per-route basis
• Items now show a reserve infoline (in tooltips and Micropedia); Food items also show their food-related values - quality, categories, variety
• Shack (former House) building has been removed
• Building inspection HUD route removal button now requires confirmation - second click (unless Shift is held)
• Selecting Export Station and Import Station will now show a visual trail to the route-connected stations along the tile path; and mousing over a route in HUD inspection will highlight the respective trail
• Better infoline sorting rules (notably, production recipe is listed before usage recipes)
• Minor Micropedia and UI improvements
• Micropedia reserve entries to show item's recipe infoline

Fixes

• Fix empty tooltips in Micropedia when trying to display locked entities in current game
• Building inspection auxiliary construction button tooltips not showing construction costs
• Victory window social link icons misaligned
• Main menu background image to not unnecessarily upscale if UI is set to upscale
• Unlocking a tech would deselect an active construction tab button
• Some props having empty tooltips
• Pickles not being delivered
• Grocery Shop not being unlocked with (only) Pickling
• Micropedia Pickling entry failing to load due to exceeding entry limit
• Fix possible crash when trying to save/load the game

Balancing

• Initial easily-mineable stone supply will now run out, requiring expanding via Quarrying and using Mining Tools
• Food Variety now allows items like Pickles to provides greater variety
• Longer mining times at the Quarries
• Less Sand and fewer inland Sand/Clay areas will spawn
• Medicine and Furniture as Reserves will last longer

Rudy
Snowy Ash Games
MicroTown - Rudy (Snowy Ash Games)
In this small update, I'm adding a Pickles food item and a bunch of various small changes and fixes. Most of these are fixes and adjustments since the previous update post.

Pickles

The main addition is the new Pickles food item:



First off, I've added a new produce food item - Cucumber:





These are basically identical to carrots and tomatoes, but introduce some more variety. Now, I didn't actually want Pickles to only require Cucumbers. In fact, I wanted Pickles to be made from more than 2 veggies, which just seemed a bit too simple. So they actually need all three veggies and the new Cucumber is the third.

I've also added a new farm building - Paddy Farm, which is for semi-aquatic crops. The new crop for now is Sugarcane:





Currently, paddies don't require any special tiles or preparation. This would have been one of the things included with the future level generation. For now, they act pretty much like regular Farms or Gardeners.

Sugarcane isn't used directly, but is used to produce Sugar at the new Sugar Mill:



Glassblower can now make Glass Jars ("Glass" in now called "Glass Pane"):



This means there is now a secondary use for the Glassblower, so they aren't totally useless after the monument.

From Sugar and Water, you can make Vinegar with a Glass Jar:



And finally, with Vinegar and all three veggies, you can make Pickles:



Pickles (and cucumbers) are residential food items. Pickles can be sold at the Grocery Shop. They also last significantly longer than "raw" veggies and longer than other prepared foods.

So, yes, this is a long and involved production chain, which I think is cool for endgame food items. Here are just the minimum required buildings for it:



In the future, I want this to serve as a trade item. It's difficult to produce, takes a lot of resources and is in some ways inefficient when you can just "feed" people raw vegetables. So its value would be in being able to trade it and acquire some resource you cannot otherwise. Pickles also theoretically won't spoil, although I haven't added any proper food spoiling mechanics (yet).

Infolines

One big decision I made is to remove textual descriptions from all items, buildings, etc. where this description simply describes what the entity does as part of its "recipe line" or (internally-called) "infoline". For example, Plank describes how it's made at a Saw Horse at the Sawmill. And Sawmill describes how it makes Planks via Saw Horse. And Saw Horse describes how it makes Plank at Sawmill. This is a lot to write, maintain, and read. And it is also very much redundant to the infolines that can visually and consistently show this using the same design language. For example, Flour item would only show these infolines without any description:



It feels like something is missing, but there really is nothing else to say about Flour. I could add some flavor text about Medieval flour use or something. But there is nothing gameplay-related to write here - no information I actually need to convey.

So Instead of text, I make sure to show infolines wherever it is useful to know about the entity in question. This mostly means most of the selection/toggle/etc. buttons now have a tooltip with an infoline now:



It should also be noted that any potential translation work would be much easier when every single entity doesn't need to have 3 redundant sentences translated. I would generally want to rely as much as possible on non-textual ways to present information - icons, symbols, recognizable layouts, etc.

One non-obvious difficulty is to choose which infoline needs to be shown here. After all, I can show how Flour is used or how Flour is made. So infolines have some priorities - for example, how to produce something is almost always what they show. (I should note that this is all extremely finicky to implement - in order to make it look simple and clean, it requires an inversely complex and messy implementation.)

I made a lot of small changes to Micropedia, but among them is having lists use the infolines instead of text:



I also added a few more infoline types to show some important information and to have entities show something where they otherwise didn't: For example, resident capacity:



Or knowledge production:



Various

Shops now can toggle their sold items:



There's a few scenarios when this could be useful. None were critical before, but now I'm considering when you wouldn't want to sell veggies that are used for pickling.

Future plans

I am still working on the new level generator and related changes. That remains the main goal for now. Unfortunately, it's a huge task that integrates with every part of the game, which basically means I've not posted any updates for a while to the point where people are concerned.

So the plan is now to split the work between smaller updates and the future level generation update. I will try to make separate earlier updates for some changes I planned together with level generation. On one hand, this means I'll likely post more smaller updates instead of disappearing for half a year. Bu-u-ut on the other hand, this means level generation update will take longer as I package and expand updates that would otherwise be too small or too broken to publish on their own. In the end, it's roughly the same amount of content, just differently spaced-out.

I personally wanted to just get the big update out of the way. But I think I should just accept that it just never works out that way. I think I have a tendency to always want to add just a bit more stuff. And then it's suddenly 3 months later and I'm still adding "just one more thing". It's the developer's equivalent of "just one more turn". And it always feels like any updates are not large enough anyway, this one included.

I think for now I will just get a few small updates out. I'll try to mix some new content with some mechanics additions. But I'll also try to work in the direction of level generation. Which is very broad and very vague but basically means "anything related to tiles, terrain and layout". So I will probably do some mining rework features next. I've been forever meaning to change the "3 mines can support the whole village" into something more involved mid-to-late game.

Full changelog

Changes

• Add Cucumber item produced at Gardener
• Add Paddy Farm with Paddy Plot buildings
• Add Sugarcane item grown from Sugarcane at Paddy Farm
• Add Sugar Mill with Sugar Press, Syrup Mixer and Sugar Dryer buildings
• Add Sugar item produced at the Sugar Mill from Sugarcane
• Rename Glass to Glass Pane
• Add Glass Jar produced at Glassblower, which can now choose production for Glass Kiln
• Add Vinegar Brewer with Alcohol Vat and Fermentation Vat buildings
• Add Vinegar item production at the Vinegar Brewer from Sugar, Glass Jar (and Water)
• Add Pickler with Packing Table and Pickling Box
• Add Pickles item produced at Pickler with Carrot, Tomato, Cucumber and Vinegar
• Add a new construction menu tab "Food processing" and move various buildings there from the "Food" tab, add most new ones here
• Cucumbers and Pickles are now Reserve items. Cucumbers provide the same amount as other Produce, but Pickles last much longer
• Items can now have distribution values for Shop target deliveries, i.e. veggies shared between Pickler and Produce Shop
• Add Pickling tech that requires Brewing and Glassblowing
• Produce Shop now sells Cucumbers
• Grocery Shop now sells Pickles
• Add "Pickling" goal to make Pickles
• Shops can now toggle/disable the items that they sell
• Rearrange tech tree slightly to accommodate the new tech and dependency arrow layout
• Food tooltip now shows "processing" food counts for those as inputs, i.e. Pickler
• Starting Food Stockpiles will now randomly pick two of the three available from Carrot, Tomato and Cucumber
• Gardening goal now requires any Produce items instead of specific items
• Remove most description texts from items, buildings, props, etc. that repeat what the icon- and label-based lines explain, i.e. "recipe lines"
• Many tooltips will now show the primary/significant "recipe line" for related entity
• Micropedia will now show the primary/significant "recipe line" instead of a description when listing various entities
• Various Micropedia changes - layout, details, relations, etc.
• Achievement panel to fit more items to account for new food items
• Add Scholar and Library "recipe lines" for Knowledge production
• Add House resident amount "recipe line"
• Adjust names for grass tiles, i.e. Thick Grassland and others
• Change some tooltip labels for bonus-affected values to use clearer wording "faster"/"slower" rather than ambiguous "rate"
• Add various new concepts for Micropedia - Produce, Crop, Aquatic Crop, Felled Tree, Building Material, Produce, Storage
• Various sprite and UI layout fixes
• Some tutorial text improvements; make sprites more readable and pronounced, add some detail; adjust timing to switch steps faster
• Split first construction Lumberjack tutorial into step-by-step parts and allow returning to previous step
• Distribution panel to auto-size based on resolution to fit all the entries; otherwise show scrollable area
• Shops can now have up to 10 dedicated sellers (worker slots) that will serve houses in 24 tile "radius"
• Constructing Shops or Residences will show in-range or out-of-range basket icons and range indicator
• Constructing Taverns will show Residence influence icons (like already shown vice versa)
• Change Tavern's "work range" label to "service range" for clarity
• Change Residence "influence range" label to "neighbour range" for clarity
• Constructing Scholar will also show out-of-range knoweldge-observable icons
• Crop growth tooltips to show potential stage speed variation % (e.g. seasonal growth speed)
• Residence reserve item tooltips to show item/delivery demand/priority
• Instead of random villagers starving, homeless villagers will starve first followed by villagers with no food reserves in their residences
• Shops will warn when there are no Residences in range if worker slots are enabled
• Add operation and auxiliary building range indicator/label to building inspection HUD window
• Add timer to achievements in achievement progress window that need it (currently, Happy Place)

Fixes

• Fix building workers swapping tasks with other workers for auxiliary tasks (including when it may be more efficient, but not intuitive/logical)
• Reduce delay between a building worker finishing a task and the follow-up task being available
• Add missing tooltips for entities in lists in Micropedia
• Fix "recipe line" prop entity position and vertical offset
• "Recipe lines" would show locked props
• Outside delivery toggle button not being green when selected
• Possible error/crash in some pausing interactions
• Fix some very long tooltips going off-screen
• Fix some singular/plural spelling/grammar issues
• Remove some redundant font assets from build
• Fix Export Station error when choosing shipment items while it's being constructed
• Forester attempting to choose tiles with incompatible objects and then failing to plant at all
• Forester placing saplings without removing existing object(s) in tiles with incompatible objects
• Forester not attempting to preserve felled trees when considering what props to remove
• Selection HUD for Quarry overlapping self-delivery toggles with efficiency display
• Export Station over- or not delivering items in second and later "slots" based on the first slot
• Export Station reporting shipment items source issue incorrectly with several selected items
• Changing or removing Export Station's items in second and later "slots" would incorrectly record available space for items
• Fix issue where a tile would disappear due to construction work attempting to prepare a tile that then transitioned (e.g. dirt regrowing or moss decaying), subsequently causing any interaction with that tile (location) to fail, including saving the game
• Some tasks not counted for task counter totals
• Removing a shipment item "slot" from Export Station could lead to delivery of incorrect number of items and broken inspection display under certain circumstances
• UI elements reacting to default navigation events (arrows, enter, escape) and conflicting with custom actions; in particular, technology unlock screen would open repeat purchase confirmation dialogues, each able to spend knowledge
• Fix Export Station sometimes not delivering items on "full only" setting when there are multiple items and/on targets
• Fix exceptions on moving the mouse outside the playable area when constructing certain buildings
• Charcoal Burner not observable by Scholar
• Not showing meaningless residence empty reserve consumption info in tooltip
• Crop growth tooltips showing stage time and progress without accounting for possible variation (e.g. seasonal growth speed)
• Fix Mead brewing goal appearing before Beekeeping is unlocked
• Villager's carried item occasionally improperly offset
• Reword various incorrect and imprecise descriptions
• Delivery markers for Houses will appear nearer to actual delivery location to avoid overlapping sentiment info icon
• Fix periodically-updatable tooltips not updating upon moving between different elements
• Residences not deducting score from Housing need with no other nearby residences
• Planting Birch Sapling would not count towards "Trees Planted" goal
• Top overview food tooltip not showing the correct consumption number
• Villagers will resume starving and consuming Food when they have no immediate access to food (i.e. houses with no food reserves or homeless)
• Micropedia infoline elements (like building icon and label) to have proper interaction/mouseover area for clicks and tooltips
• Buildings with worker item delivery (Export, Large Storage) would not deliver items when the target building's capacity is close to full and would cancel pending incoming tasks at other times
• Fix Charcoal not being producable with only Fishing unlocked
• Herbalist would continue infinitely crafting Medicine even when the output is full
• Fix Monument construction achievement not triggering
• Fix achievement window not tracking achievements previously unlocked in Steam
• Balanced Diet achievement not working
• Balanced Diet achievement not including Cooked Fish
• Populous achievement not working
• Fix achievement individual sentiment checkmarks not lighting up
• Happy Place achievement not working because it requires unattainable Awesome Sentiment

Balancing

• Charcoal Burner now produces 3 Charcoal per Log
• Residence (House) reserves will last ~30% longer
• Increase Shop building space for each item from 24 to 48
• Change Tavern operation range from 8 to 12, which is the same as "amenity" range for Residences
• Farm Crops (Wheat, Barley, Hemp) now grow about 30% faster
• Crop growth is further normalized across Seasons (i.e. growth slows down or catches up to match the season), making crops ready roughly at the start of Autumn
• Crops decay 50% slower allowing them to survive into Winter
• Crops won't instantly decay in the first half of Winter allowing more time for harvest
• Potato now follows similar growth rules as crops
• Wasted Dirt tile repairing is about 50% faster in total and twice as fast late Winter
• Adjust Residence reserve demand to prioritize houses with fewer items
• Starving villagers will consume Food at a rate comparable to the rate of villagers in houses with food reserves
• Villagers will die quicker upon reaching the point of starvation
• Villagers have a small chance of dying (5%) when forced to consume a random item due to not having immediate access to food (i.e. houses with no food reserves or homeless)
• Residences require 2 neighbours (other residences) for +1 Housing need bonus down from 5

Rudy
Snowy Ash Games
Jun 28, 2022
MicroTown - Rudy (Snowy Ash Games)
In this smaller update, I'm adding a bunch of wood-related changes, additions and tweaks.

Timber

The major change is that I "split" Planks item into Timber and Planks items, both produced at the Sawmill:



Timbers are now exclusively a construction material:



While Planks are exclusively a production input (currently, only Carpenter):



The reason for this is basically design simplicity - I want to keep long-term construction and input processing separate. I don't want one input to mess with the other input in weird ways. It's just more straight-forward to have these as different items with different proportions. Over time, I observed a few issues that would take disproportionately longer to fix "properly" than to just eliminate the cause altogether.

Trees

I added a new tree type/species - Birch. Functionally, all trees are still the same. But a new type adds some nice visual variety:



Trees will now produce 2 logs per tree. Chopping a tree will leave behind a felled tree, which can be chopped for another log:



This makes tree areas last longer, which is most important early game, especially if you lose track of it.

Saplings

Saplings are now tree species specific, that is, there are now Maple Saplings, Spruce Sapling and Birch Saplings:



Each can be grown at the Arborist's Tree Nurseries:





And the Forester will plant them independently by selection:



All three tree types can now be seen growing from sapling to full tree:



Charcoal

The other major change impacting production is that I "split" Coal into Coal and Charcoal. Charcoal is produced in a new Charcoal Burner building:



Coal is now used as industrial fuel:



While Charcoal (and not Firewood) is used for cooking and similar "light" production:



The main reason is that I did not want Firewood to be shared between residences and production buildings. Same as with planks - the issues I saw are easier to "dismiss" than fix. The other reason is that too many building are using (or should be using) coal, but I did not want the same item to be used everywhere. So now there's a hefty list for both. Adding fuel ingredient makes food production more involved, which is one of the goals. And it also requires more log production and thus bigger forestry areas.

Moss

I added a new tile type - Moss. Moss appears "under" forests and makes them look more distinct (here, cleared from trees to showcase):



Moss will decay into grass if nearby trees are cut down and no new trees are planted. Grass will also overgrow into moss after being surrounded by trees for a while.

Various

Export station now supports up to 4 exportable items. This was one of the more requested features for logistics.



I probably should have made it this way to begin with, but there's a bunch of extra complexity I did not have time to add at the time. (I think I spent a third of the time on it for this update.) Notably, there was no way to control which items are fetched or exported internally. And random selection did not work well, so I had to consider all these things.

I also added a simple cleanup tool, which marks items in a tile for prioritized removal. So these will get chosen over other items next time an item is needed.



Building and selecting houses will now properly show the range at which things affect it:



I also (finally) added an automatic deadlock resolution if there aren't enough available building materials to (directly) construct the material production buildings (i.e. Lumberjack, Sawmill, Saw Horse, Quarry, Mine, Mason). I thought a lot about how to best fix this, but I think the most obvious solution is best right now - I just spawn the missing items for the building in question. There are other concerns and issues with starting materials, but at least this fixes the main problem of getting stuck.

Future plans

My next large goal is to add a proper terrain generator to the game and I am slowly working on it in parallel. Depending on how it goes, I might make another smaller update or go straight for the generator. I still need to revamp and expand quarrying and mining logic and related production.

Full changelog

Changes

• Rename "Plank" to Timber, which is now used only for construction
• Add "new" Plank item, which is now used only in crafting/production
• Carpenter now uses "new" Planks
• Sawmill can now produce Planks
• Add Planer auxiliary building for Sawmill for Plank production
• Sawmill can now toggle produced item(s)
• Add Charcoal item
• Add Charcoal Burner and Charcoal Kiln buildings
• Bakery (and Oven) now also requires Charcoal
• Brewery (and Brewing Vat) now also requires Charcoal
• Smokehouse (and Drying Rack) now requires Charcoal instead of Coal
• Firewood is now only used for Residence supplies via Supplies Shop
• Add Birch tree variant
• Rename item "Sapling" to Birch Sapling
• Add Spruce Sapling and Maple Sapling items
• Rename planted "Sapling" to Maple Sapling
• Add planted Spruce Sapling and Birch Sapling objects
• Tree Nursery can now select whether to produce Birch Sapling, Spruce Sapling or Maple Sapling
• Forester now also accepts Spruce Sapling and Maple Sapling and can toggle used item(s)
• Planted Spruce Saplings become Spruce trees
• Planted Maple Saplings become Birch trees
• Add Sapling concept to refer to any kind of sapling
• Trees now produce 2 Logs each by leaving behind a Felled Maple, Felled Spruce or Felled Birch that can be harvested again for another Log
• Rename object "Stump" to Maple Stump
• Add Spruce Stump and Birch Stump objects
• Add Stump concept
• Chopped-down Trees now leave their species-specific stump behind
• Stumps now have a shadow
• Add Moss tile for forests
• Grasslands and its variants will turn to Moss if there are Trees and vegetation around it
• Moss will revert to Grasslands or its variants if there are few or no Trees or vegetation around it
• Export Station can now export up to 4 different items
• Export Station's HUD inspection shipment items can now be changed, added or removed individually
• Export Station will collect and ship items and Import Station will distribute items proportionally (using global item distribution weights)
• Add new "Cleanup" tool to construction tools menu that can be used to tag items lying on the ground for cleanup, which prioritizes them for deliveries
• Additional crafting recipe tooltip/Micropedia lines will now display as combined (like for Brewery)
• Selected building to not have blue tile overlay instead of green, which was intended for highlighting similar buildings
• Similar building highlight will have an "invalid" overlay texture for buildings that do not match production
• Adjust various sprites and descriptions to fit the new changes
• Houses needs with range (Socialization, Housing) with show the value in tooltips and Micropedia
• Houses will show need influence range tile "circle" and buildings that affect it will show an arrow icon (positive or negative, in range or out of range)
• Building issue indicators will hide if some other temporary/conditional icons need to be shown for the current interaction
• If there are no usable material production buildings (i.e. Lumberjack, Sawmill, Saw Horse, Quarry, Mine, Mason) and no usable material items (i.e. Timber or Stone Slab) that can be delivered to them, the game will gradually spawn in missing items at the construction site, thus preventing a "soft-lock" situation.

Fixes

• Buildings with multiple auxiliaries like Brickyard would always pick the first auxiliary from its internal list
• Rare case when an invalid entity would be selected when something would look for a closest entity matching specific criteria
• Some buildings and items were not listed in various tech unlock lists
• Selecting a building to construct would not switch UI to non-selection mode showing some incorrect UI/feedback elements
• Minor fixes to various descriptions
• Auxiliary building world sprites in various UI locations to have better vertical offset/centering
• Buildings listing missing auxiliaries before they are unlocked
• Tooltips with inner dynamic elements not correctly sizing
• Worker slot for not-yet-constructed building saying that no workers are available
• Change Smelting-based goal asking to deliver Tools (which cannot be delivered anymore) to Iron Ingots instead (for now)
• Fix a couple invalid labels
• Operation location selection not highlighting tiles out of range
• Tavern not consuming its stock (for new Houses)
• Adjust Tavern stock entry tooltip label

Balancing

• Brewery and Bakery now have 3 worker slots up from 1 and 2 slots respectively
• Charcoal extends processed food production chains
• Trees now grow twice as slow (but produce twice the Logs)
• Stumps remain for longer

Rudy
Snowy Ash Games
MicroTown - Rudy (Snowy Ash Games)
In this update villager needs and residence reserves have been fundamentally reworked. Although most of the changes are internal and organizational, this still results in a fundamental gameplay presentation change. I say "presentation" because the actual gameplay doesn't really change if you consider the main player actions - supply houses with goods. It is however presented (and hopefully perceived) differently, more in line with the way I originally intended.

Ex-happiness

I removed happiness from the game. The main reason is that it was a big simplification of how villagers "feel". It was the first version that worked decently and games have done a number-based happiness value before, but it's all very abstract and very simplistic, and I simply don't like it. A single total happiness number does not really represent villager happiness. For example, 20 happy villagers making +20 total happiness just doesn't make much sense when this number isn't capped to anything. And even if I average the happiness numbers, it still does not represent anything - 10 happy and 10 unhappy villagers does not really make 0 "neutral" village happiness in the same way as 20 content villagers would.

Then there's the question of what is "happiness" itself. Philosophy aside, what does a happiness "number" represent? Is a villager with a good diet but bad health really feeling "neutral"? In other words, how much information does representing villager's happiness only as a single number lose and is such simplification useful and fun to achieve? So, again, I just don't like doing it that way. I am simulating so many things for each house and villager, but then I just sum it up to a single number. This just feels like too many "lost" details.

Needs

So the big change is that I added several discrete "needs" - Diet, Housing, Health, Comfort and Socialization. This lets me separate villager "feelings" into independent categories. Each need is based on different factors that only apply to that need, so it's intuitively clearer what cause and effect each would have. For example, when a player is providing medicine, they know this will affect health. I will discuss these factors a little bit later; for now I want to focus on the big picture first.

Sentiment

Each need is separately assigned a "sentiment" value. I settled for 4 values as for now: Awesome, Good, Neutral and Bad. They get appropriate icons, colors and labels. And I only added just enough values to establish a sort of scale of opinions. I think keeping it simple is preferable to having a lot of values.

Sentiment totals

So now I can think about expressing the total sentiment, for example, how do all villagers feel about their health? Of course, this leads back to the same problem as happiness - what is an average anyway, when opinions can vary so much? So I have to be careful trying to naively conclude the mathematical "average". Instead I need to consider sentiment level percentages of the population and how common each value is while also keeping it understandable for the player. Let's just say, this is a difficult design problem.

The system I came up with tries its best to determine the dominant sentiment, but falls back to various descriptive alternatives. These variants are:

• One sentiment is totally dominant, e.g. Good
• One sentiment is mostly dominant, but there is a significant portion of "neighbouring" sentiment, e.g. Good, leaning Awesome
• One sentiment is prominent, and there are significant portions of "neighbouring" sentiments, e.g. Good, but disparate (i.e. "Good, but spread towards both Awesome and Neutral")
• No sentiment can be said to be dominant, i.e. Mixed

This lets me fairly accurately describe the majority's opinion. And while there are a lot of ways that sentiments can arrange, in practice the whole village usually runs a certain way. For example, if there is food shortage, then it's unlikely that there are many villagers thinking Diet is "Awesome" and it is much more likely everyone shares a similar sentiment.

In fact, the above summary was my requirement for the feature. The player must be able to read the description in a sentence or less. A lot of details could or couldn't be implemented to support this result. From there, I can add all the UIs and explanations and breakdowns, but there must be this one high-level at-a-glance summary.

(A question you might ask: couldn't I summarize my sentiment totals into a single happiness value for the whole village the same way? The answer is: yes, I could. But this would actually be summarizing the wrong values in a subtle way. What I would want to first determine is the happiness for each villager and then summarize those happiness values for a total. But this creates another "meta-need" that runs parallel to the existing needs. In other words, I now have Diet, Housing, etc., and Happiness. And this just doesn't feel right to me. If happiness is the summary of needs, then why do I even need to list the other needs anymore? And this just returns back to the very start of having just one total value.)

Need factors

Each sentiment is based on the fulfillment of its need. What this means in practice is that each need has a list of factors that increase or decrease the "score" of that need resulting in a higher or lower sentiment. For example, not having a house would decrease the Housing sentiment while having Medicine reserves would increase the Health sentiment.

Now, I admit that this gets complicated fast when I start explaining the details, even though it's relatively easy to summarize. For example, it's simple to state what a need is for:



But the actual logic to determine the score needs a very rigorous and methodical explanation:



And only then the "real" sentiment value can be concluded:



This is complicated, for sure. But I technically was doing very similar logic before with happiness, I just never really explained it. Thinking about how to explain this to the player forces me to both simplify things and also keep them well-defined.

Sentiment UI

The major challenge is to actually show all the needs and sentiment in-game. For presentation and gameplay purposes, I am still keeping needs and their sentiments primarily as part of houses:



This does mean that all residents in the same house have the same sentiment.

Meanwhile the top HUD overview icons now show all the summary sentiments:



A tooltip breaks them down and explains them in more detail:



In addition, a new window is available that expand a little bit more about the sentiments.



So if I need to add additional UI explanation to needs and their factors, this will likely be the place.

Overall, I think the UI is doing a decent job of summarizing and explaining things. It's definitely much more intuitive than I could ever explain in text.

Reserves

Happiness was previously based on house reserves. In short, more reserves = better happiness. I had a lot more hidden rules here, but that's the essence of it. As I mentioned at the start, these changes don't really affect the core gameplay - houses still want all the reserves from shops. Except now each reserve contributes to different sentiments in different ways that I can define and control precisely.

So the big change is that now I can add more items as house reserves easily, i.e. without disrupting anything. At its simplest, adding a new reserve simply won't change anything. But I can then integrate it in one of several ways. As an example, I added Cooked Fish as a new item and reserve for houses. It now functions like other (prepared) foods.



I definitely want to add more reserves and more items and production chains. Half the reason for reworking the reserve system was to allow more and varied items.

No hidden numbers

I previously had something like 30 parameters used for happiness calculations. In-game, I explained may be 5 of those. Let me just say that this is definitely not how I personally would want to play any game. Hidden numbers suck. The more you play, the more they suck. So my design philosophy is to avoid hidden numbers. Of course, I cannot explain everything, so there will always be endless hidden numbers and values. But I will try to explain anything that significantly impacts gameplay and could also vary significantly.

There are two locations where most explanation would take place. Any current values would appear in tooltips. And any potential rules would be in Micropedia. Now, this isn't exactly revolutionary - I have already been doing this since the start.

(Going on a slight tangent, I know this sounds a bit silly, but this is technically gameplay. Reading tooltips and reading Micropedia is technically playing the game even though you wouldn't immediately describe it that way. In fact, most players would say that they prefer to "play the game" and not "read the wiki". But, as a player reading a tooltip, you are acquiring information and making decisions based on it. And that's the same thing as looking at the map and placing a building. This is a matter of presentation. When you think about it this way, it's easier to see why some games may feel bad when they have a bad UI, poor explanations or hidden numbers. Even though it's not actually "real" gameplay, it makes "real" gameplay worse.)

Efficiency removal

There are two big feature sets I removed: tools and happiness productivity bonus.

I removed both for the same primary reason: hidden numbers that modify values too much and are hard to explain in UI. I just don't like the direction these are taking.

Happiness productivity also has the problem of cascading into failure. In short, losing happiness reduces productivity, which lowers produced item amounts, which lowers house reserve supply, which in turn reduces happiness again. So it turns into a viscious circle. This is exacerbated by seasonal changes and harvest timing.

Tools suffer from delivery and logistics issues. It's not too bad, but there isn't any nice way to distribute tools with export/import stations. So anyone trying to maximize tool bonus will inevitably be at the mercy of logistics and item delivery priorities. Internally, tool delivery is another "layer" of deliveries that causes additional issues. I thought the feature is cool and I still do, but I don't think my current implementation is good enough without a large rework (such as, dedicated tool stations or repair workshops).

I am also removing the difficulty option for now, which was basically whether not having items in houses results in negative happiness. This was always a temporary solution to the game being too hard when happiness goes negative and efficiency drops a lot, causing everything to spiral out of control. There are no longer any efficiency penalties, so the "difficulty" like I had it doesn't affect anything. I will revisit "difficulty" options later in some form.

Residences

MicroTown at its core currently is mostly about production chains and supplying the houses, which are--simply put--just a place to dump the final goods. And that's the core problem here. Houses don't really feel like a residential area. They are fine from a pure gameplay loop perspective, but not in their presentation.

So, as part of house redesign, I converted houses into 7-tile buildings so I have a lot more "space" to work with:



Houses now intentionally take up a lot more space. I have always wanted the residential sector to feel larger and more prominent. Logically, villagers should want a living space that isn't the size of a workshop. In this sense, having to settle the villagers is an "obstacle" for the player to overcome. So a larger house size is one of the steps in the direction of a more involved residential area.

Secondly, I added a bunch of visual variation to houses:



As much as I primarily focus on the functional aspects of features, there are certain features that benefit greatly from visuals. And I think houses are one of those. Visual variation makes them feel more organic as opposed to strictly functional work buildings.

Now, I only wanted to expand houses as far as villager housing needs are concerned, mostly to do with nearby infrastructure. Notably, I needed them to be the "final design size" of 7 tiles so that I can adjust and balance all the related distances. But once I started changing things, a lot more problems cropped up. For one, they looked all the same and so extremely boring. So I had to add visuals at the minimum. And so on. There are a lot of ideas I still have for houses, but they are all so interconnected that it would require a whole lot more changes, which this update wasn't really about. I will work on stuff like civic amenities at some point.

The one significant factor is that this drastically reduces how many "villager per tile" can be "produced" by houses. So I increased the house resident total number from 8 to 16 and also doubled the storable reserve amount:



Previously-constructed houses will remain as 1-tile shacks with the same number of residents, but with only 2 reserve items and no new reserve items (currently, cooked fish). They will also never fulfill the housing need. These will likely get removed at some point.

Various changes

As always, there are a lot of tiny miscellaneous changes I won't cover in detail.

Although one new UI window worth a mention is the achievement progress panel:



Since I intend some of the achievements to be more like challenges and goals, then this will track the current progress. Everything is very simple here for now, but it does let you see the progress even if Steam has already unlocked these.

Future plans

The good part is that I can extend the need logic. I can add more needs, more factors, more evaluations, even more sentiment values. I do have to be careful though. For example, I could break down needs even further, but then I would reach the other end of the complexity spectrum - too many values that become just noise, impossible to follow and generally unfun to care about. At the end of the day, as a player, I just want to know if I'm doing good and is the number is green. So I am breaking this up into something that could generally be seen as a "single high-level need".)

I apologize for this update taking so long. Long story short, I had to take care of some real-life things. Not to say I didn't make this update way too big again by mixing a lot of different features.

I think I will focus on some smaller updates for now. I have to rework plank production and use, especially for the start of the game balance. I also want to look into mining resource changes and long-term endgame production. I can now add new house resource items, so I will think about various options there. I also have a long list of bugs and tweaks to do and I will probably look into some of the more needed ones.

Full changelog

Changes

• Replaced Happiness with Sentiment
• Market squares and Stalls are now fully removed
• Houses are now 7-tile buildings
• Removed Happiness efficiency bonus
• Removed Tools use in production buildings
• Carpenter now requires Nails
• Old "House" is now Shack and can only be deconstructed
• Add House as a 7-tile residential building
• Residential buildings are now all part of Residences logic
• Reserves in Residences are now "real" items and are kept track of and shown in the inspection UI similar to other building items
• Residences reserve item usage is now a timer before the next item is consumed, also shown in the inspection UI
• Shack accepts up to 2 reserve items as before, but does not accept any new or future items
• House accepts 4 reserve items
• Firewood now lasts longer in Summer and less time in Winter
• Medicine now lasts less time in Autumn
• Wool Clothing now lasts less time in Winter
• Add villager needs - Diet, Housing, Health, Comfort and Socialization
• Remove Happiness and replace with Sentiment separate for each Need
• Each villager's Sentiment is now based on the fulfillment of their Needs (rather than directly from reserves in Residences)
• Villager Needs are now evaluated based on various factors specific to each need
• Add information about Need and its Sentiment-affecting factors in the tooltip for building inspection
• Food in Residences forms a "Food" reserve group and consumption is reduced for multiple food items
• Linen Clothing and Wool Clothing form an "Apparel" reserve group and consumption is reduced when both are available
• Residences total Sentiment is now an approximation of all the individual Sentiments in that Residence
• Village total Sentiment is now an approximation of all the individual Sentiments of all the villagers
• Total Sentiment represents the dominant Sentiment (e.g. "Good"), can shift towards a different sentiment (e.g. "Good, leaning Awesome"), can vary either way (e.g. "Good, but disparate"), or can remain "Mixed" if the opinions vary greatly and no single sentiment applies
• Add Needs list to Micropedia where each is explained, including the factors that change the Sentiment
• Add Reserves list to Micropedia where their use, duration and bonuses are explained
• Additional information in Reserves tooltip for building inspection
• Homeless villagers to only have Sentiment about Diet and Housing needs
• Villagers to not have any Sentiment at the very start of the game until Residences are built and first population increase
• HUD top overview now shows the summary of the 5 Sentiments instead of a single happiness value and the tooltip explains the breakdown
• Add Sentiment report window with a full breakdown of Sentiments for each Need
• Remove global productivity bonus (since there is no longer a single global happiness value)
• Monument no longer provides happiness
• Tools are no longer used as "Supplies" by work buildings and do not provide productivity bonuses to buildings
• Remove villager needs difficulty option
• Remove difficulty setting UI for now since the only option it had is no longer applicable
• Add achievement progress panel that shows all the per-village achievements and a simple checklist of the necessary steps to complete them
• Add Nails item made at the Smith from Iron Ingot
• Forge now has to select if it is crafting Tools or Nails
• Furniture now also requires Nails
• Carpentry now requires Smelting (and Logging instead of Forestry)
• Add Cooked Fish item smoked from Raw Fish at the Smokehouse (instead of Roast)
• Meat Shop now sells Cooked Fish
• Houses now accepts Cooked Fish as a Reserve of Food
• Add various concepts like Need and Sentiment
• Add many new icons, like Needs and their Sentiments
• Micropedia now shows what Technology unlocks each entity, as well as what entities are unlocked by each Technology; also add to some tooltips
• Add "back" and "forward" buttons to Micropedia for quick navigation between visited entries
• A lot of description and label changes to reflect the new and changed features
• Adjust tutorial explanation text and steps slightly to reflect the new changes
• Unpausing returns the game to previous speed
• Ranch auxiliary building order to match related item order
• Buildings with adjustable operation location will now draw a max range tile border
• Selected buildings and potential construction buildings will highlight in- and out- of range tile overlays for their compatible auxiliaries and parents as well as other buildings of the same type
• Constructing Scholar will show production building knowledge icons

Fixes

• Fix some building spawn/delivery positions
• Adjust construction sprites for some buildings
• Adjust item pickup/drop-off location for shops
• Fix Monument construction Glass delivery location
• Clicking fast speed UI button when paused would return the game to regular speed instead of fast
• Fix tile validation overlay not changing when switching between construction of entities that have different placement rules (e.g. Stone road vs Boardwalk)
• Fix tile validation overlay not updating when constructing multiple buildings/roads
• Fix incorrect farm animal harvest duration and subsequent item pickup duration
• Stop workers from most self-deliveries when there is work available
• Fix various descriptions/tooltips with outdated or incorrect information

Optimizations

• Various formatted text rendering is slightly faster

Rudy
Snowy Ash Games
MicroTown - Rudy (Snowy Ash Games)
In this update, I am adding weather to the game, specifically weather effects for rain and snow. This isn't something that affects gameplay (yet), so it's purely a visual update to make the game look nicer and have some visual variety. And weather is great for this type of goal.

Weather effects

I'll start with the end result of the two effects I implemented, because it's simpler to discuss the steps that way. The two effects are rain:



and snow:



This looks relatively simple, but actually has a lot of internal considerations both from technical and design perspective. I am usually prepared that features end up more complex than they seem to be, but this one really surprised me.

Sprites

Keeping with pixel art aesthetic, I would want to draw rain droplets and snowflakes. But for performance reason, I cannot draw separate sprites for every particle (this would be many thousands of particles). So I use bigger sprites with multiple droplets that look more or less random:



I call these "slides". The trick is to spawn and overlap, and quickly move many of these slides, so the viewer cannot easily track individual slides and they look like individual droplets.

This seems simple enough... until you try it out and it looks bad. The reason is that the sprite size and the spacing between the particles on the slide is very important. It has to fulfill 2 opposing criteria - it has to be both regular and random. If I make it too big and regular, it will look like a grid moving across the screen. But if I make it too small and random, it will have many unnatural distracting "gaps" and "clumps" of particles. In short, this required a lot of trial and error and even then the result is a compromise.

Animating

Individual slides animate by moving downwards and a little to the side:



From there I add a little bit of speed variation to each slide and a corresponding color variation (slower - dimmer, darker). This way, it instantly looks like there are depth layers of particles:



This is probably the biggest visual impact of the whole feature. This variation is fairly subtle in the actual game, otherwise it again becomes too obvious that particles are part of bigger slides.

The depth illusion also really comes together with parallax, which I discuss later.

Margins

New slides are spawned above the top of the screen. Then they gradually fall down though their trajectory. Finally, they despawn below the bottom of the screen. Since slides have width and height, then there is an additional margin around the viewport to fit them:



I cannot spawn or despawn slides if they are partially visible; they must have completely left their "visibility area". This means the slides "exist" (simulate, render, animate, etc.) in an area larger than what the camera actually sees. This certainly adds extra complexity and calculations.

Zooming

Camera zooming changes the number of visible slides:



At first, I began implementing this as simply spawning extra or despawning excess slides at the edges. But I quickly ran into 2 problems.

Firstly, I don't know exactly where to spawn new slides. If I do this randomly, it looks wrong. Weather slides normally gradually fall down though their trajectory. This is theoretically a deterministic process, but practically it just isn't worth the time to re-simulate and predict sprites like that. Plus, I have to (de)spawn them at the "edges" only, which is a lot of additional math to determine the area that does or doesn't need slides.

And secondly, if you zoom in and out quickly, it is very obvious that the weather is not in the same location as before. It might not seem like a big deal, but in practice it's annoyingly way too noticeable.

So what I do instead is I always have a fixed number of slides for the entire most zoomed out view and I simulate them all as if the camera could see them. Of course, I don't render them visually. This might seem like a waste of performance to simulate them, but counter-intuitively at medium zoom, the camera can actually see about 2 out of 3 of the total number of total slides:



So this isn't at all that wasteful and the simple simulation math is fast anyway. Plus, my new rendering logic lets me process this very quickly anyway.

Camera panning

It's a little bit difficult to think about how slides move when the camera is moved/panned. Intuitively, it seems like moving the camera would "move" everything. It's a bit easier to visualize if one thinks about the visible portion of the world changing instead:



From this perspective, the slides form a "box" around the visible world area and this box moves together with the camera viewport. In fact, without animation or parallax it becomes obvious that slides don't actually move at all in respect to the camera:



So there isn't actually anything special that needs to be done for this by itself. Of course, without animation or some movement, it looks completely flat.

Parallax

Since camera panning is a constant player interaction, then it is very important that this preserves the weather effect depth illusion. I do this with a subtle parallax:



All slides are moved proportionally to the camera pan. Further (dimmer, slower) particles are panned a little bit less than closer (brighter, faster) particles. Thus variable speed, color and movement together form a rather convincing illusion of depth and volume.

Boundary

So there are 2 ways in which slides can "escape" their box around the world - animation and parallax. Animating slides fall down and right, thus going off the screen. Parallax while panning moves the slides in any of the four directions, also moving them off the screen. Both cases are essentially identical in that theoretically I need to either add or remove slides.

And the solution is actually super simple - I just teleport the slide to the other edge of the camera viewport. For example, if a slide moves too far right, then I teleport it to the left side of the screen across the width of the viewport. Thus, the number of slides remains constant and they preserve the "density" on the screen.



In practice this works like an infinite repeating plane -- no matter how far and fast the slides move, they just wrap around the screen. And this works great.

Resolution

There is one corner case to this and that's changing resolution (resizing window). This completely messes up all calculations. But I decided to not even bother with this. The visual glitch is not overly horrible and the slides fix themselves eventually. And how often does one change resolutions while playing?

World tint

The final feature is to set the mood of the whole scene, which I do by applying a subtle tint to the game world and modifying shadow intensity. It's easiest to visualize by comparing them one after the other in an animation:



Because of color constancy of human vision (and the method I use to blend the colors) it's counterintuitively hard to perceive the change unless you focus on a specific point or the whole image at once. It's more obvious when the game is full screen and the player happens to "unfocus" and notice the difference.

It's more obvious with individual pixels (the eye can pick out warmer and cooler):



What I use for tinting are two "temperature" colors with orange for warm and light blue for cool:



I deliberately only define "cool" and "warm" colors so I can tint the whole scene either one way or the other. While technically I could tint the scene in any mix of colors, multiple colors would end up "fighting" each other and it would be a mess.

Seasons and weather presets define how they affect the world tint and shadows:



Individually, it's basically: summer is warm and winter is cool; sunny sky is warm and rain is cool.

Combining, I get combinations like: sunny summer is hot and snowy winter is cold while cloudy spring is neutral. Moreover, rainy summer or sunny winter is also close to neutral as they "cancel each other out".

Mathematically, this gives me a single "temperature" value between cool and warm, which corresponds to some color between blue and orange. Technically, it's between blue and "nothing" and orange - as the colors reach the neutral midpoint, they "fade" to nothing and there is no tint:



And then I blend this color with everything in the scene. For this, I transform the colors using the soft light overlay blend mode. The exact effect is harder to explain than it is to just show it, but it is basically like shining a weak colored light onto everything, which is essentially what I am going for.

If I were to crank up the tinting to 100% of the tint color, it would look like this:



In contrast to simply multiplying colors, overlay blending methods do not "erase" the underlying color. Meanwhile, color constancy allows the eye to perceive the original colors even when the whole scene is overwhelmed by another color. But even these extreme examples still look relatively reasonable. Which just means that the actual subtle tinting looks very convincing (at least, in my opinion).

A "proper" blending method also keeps color values largely unchanged, which is important in distinguishing elements (for example, tinting doesn't negatively affect people with color blindness):



Final words

At first I was going to do more effects like thunder or blizzard. But the problem is that they just become so prominent as to be annoying. So I settled with fewer "gentler" effects for now.

I want to remark that a feature like this is very easy to do badly. And what is "bad" is also highly subjective. It would be much easier to make an easy (fast and dirty) version of effects and shading. But like many video game elements (such as screen shake or full-screen damage effects), it would be very obvious when done badly, with glitches and/or obtrusively. This can make the whole feature very distracting and eventually annoying.

These effects of course have a performance impact. I am drawing large overlapping sprites all over the screen. In fact, before the last rendering revamp update, I couldn't implement these effects without slowing everything down too much.

Both weather effects and tinting can be disabled in the options as well if this is not your thing.

Future plans

As before, I'm working on housing and civilian needs. I have been working on weather effects in parallel for a while. So I released this update in the meantime just to have an update while I continue with the bulk of the work.

Full changelog

Changes

• Add Weather to the game, which includes Cloudy, Sunny, Rain and Snow
• Weather gradually transitions between clear, cloudy and precipitating (either rain or snow, depending on the Season)
• Rain does not occur at the very start of the world (and older loaded saves)
• Add full-screen particle overlay effects during Rain and Snow weather with varied falling animation, parallax and "depth"-based coloring
• Weather particles shift and scale based on camera movement and zoom
• Add ambient sound during Rain weather
• Add HUD current weather icon and tooltip, add weather icons and descriptions
• Add world tint "temperature" color based on current weather and season, ranging from cool (blueish tint) to warm (orangish tint), as well as shadow intensity multiplier based on the same criteria
• Add audio options toggle for ambient sound (currently, only weather) and volume slider
• Add graphics options toggles for weather and world tinting
• Add "no habitats in range" issue for Game Warden's Lodges
• Custom icons for the Monument techs
• Add internal world weather stat tracking
• Shift-selecting a building or road to build will also "copy" its construction priority
• Animal Habitat selection panel tending label to also show time since last tended

Fixes

• Town Hall no longer requires Bricks for construction
• Bricklaying tech is no longer required for Town Hall tech
• When construction Beehive as auxiliary building, the work range is now shown (with the appropriate label)
• Animals (specifically, Fish) spawning on land
• Occasional internal error due to lag when playing visual effects
• Housing and Firewood goals requiring Market Square and Supply Stall instead of Produce Shop and Supplies Shop respectively
• "Wildlife Conservationist" achievement triggering incorrectly
• "Balanced Diet" achievement triggering incorrectly due to "Cooked Fish" being required for it, but unobtainable
• Deprecated or unimplemented items like "Cooked Fish" appearing in storage selection popup

Optimizations

• Full-screen weather effects can affect performance somewhat

Rudy
Snowy Ash Games
Dec 13, 2021
MicroTown - Rudy (Snowy Ash Games)
This update replaces Markets with Shops and adds significant rendering optimizations. And I might as well call this "Rendering Update", because I spent most of the time working on optimizing sprite drawing.

Shops

Shops are new buildings that are set to replace Markets and Market Stalls.



They essentially do the same thing that Stalls do, except each shop can store and distribute several item types. For example, a Produce shop would sell Tomatoes, Carrots and Potatoes at the same time:



Shops allow me to add more items without adding a lot of micromanagement to Markets and Stalls. I can instead focus on logical item "groups", such as foods, supplies, clothing, well-being, luxuries, etc. The gameplay would then not be so much about having exact items, but a decent variety of items and an overall satisfaction for that item group. It's also much easier for me to design for and players to work with fewer categories.

For now, Markets and Stalls will still work, but they are tagged as obsolete and will be removed (probably) in the next update. Basically, I'm leaving them working so anyone who wants to update their world can do so. Unfortunately, I cannot maintain two versions of item distribution, so I will have to completely remove Stalls later. I also cannot automatically replace them in-game with shops, because shops are 7-tile buildings.

Miscellaneous changes

There are now 2 more larger world size options. Thanks to the optimizations, I am finally able to create bigger islands without lagging everything. These won't have better terrain generation yet and the camp still spawns in the middle, but at least they are an option now.

Animal habitats now have to be selected to see their information:



This is mostly because I could not easily re-implement in-world tooltips following the rendering changes. But I also had this planned regardless, so I just went with it. There isn't any new information yet (notably, about quality factors).

Rendering optimization

So the problem is: MicroTown's rendering is fairly slow because there are a lot of things to draw. I should note that MicroTown being "just" pixel art is rather deceptive. The game needs to render more geometry than many 3D games and, for various reasons related to how GPUs work, it's not much cheaper to send "just" sprites to render than it is to send 3D models.

Game world renderers

Optimization should generally be done based on profiling, i.e. evidence. So, most importantly, I need to count the number of sprites that are required to draw everything in the game world. For my test case, I am "looking" at a 1440p resolution zoomed-out 160-size world with 2000 villagers. These are the numbers of in-world entities that exist in the world:



This is a rough indicator of how much "stuff" needs to be drawn, but it's inaccurate because each entity does not correspond to a single sprite. There could be zero to a dozen of sprites needed for an entity, depending on many factors. This also does not account for many extra things, like effects, tile overlays and outlines, markers, building icons, etc.

So here are the numbers of individual sprites:



These can be further broken down into broader categories:



The numbers I am most interested in are the 25k/54k renderers. This is how many sprites need to actually be drawn out of the total sprites that exist. Importantly, there are 5k updates per frame, which means that that many sprites were changed, added or removed.

Which means there are two main focuses for entity processing optimization - knowing what to render and processing changes quickly. Subsequently, the main rendering optimization focus is to render the visible sprites as fast as possible. And these two sentences are so much easier said than done.

CPU rendering bottleneck

The main bottleneck is the CPU time it takes to render the game world. Unity works with "game objects" to do things, broadly speaking. For the game world, I only use game objects exclusively for sprite rendering (no data or logic there). Each sprite renderer requires a separate game object. So every sprite I mentioned above requires a game object, which is easily 50k objects. Meanwhile, for Unity, general consensus is that 10k objects is too many.

I basically have these long long lists of objects:



Unfortunately, there is only so much I can do before Unity itself bottlenecks like this. I've squeezed out as much performance as I could with this setup. Without going into too much detail, there are too many engine-dependent things happening that I cannot change in any way like sorting, culling and communication with the GPU. Unity simply isn't built to support so many objects via its "conventional" game object means. It doesn't matter that the GPU renders everything in 0.5 ms when it takes 25 ms for Unity to prepare and send the data. It still has the overhead of all those universal game objects regardless how many are visible and how cleverly they are optimized for rendering.

So here comes the technical and difficult part...

Custom rendering pipeline

After lots of research and experiments, I decided that I would need to bypass almost all of Unity's "standard" rendering overhead and send sprites to the GPU more-or-less directly. This is essentially how most GPU-based 2D games have always done this. Simply put, "draw sprite S at X, Y" for every sprite. Unfortunately, this is much easier said than done nor does it capture the many complexities. Unity isn't a 2D game engine and all its features have many layers of expensive abstraction. But thankfully Unity does provide rough access to lowish-level graphics logic.

In short, I can send a mesh to render directly to the GPU. A mesh is just a bunch of triangles connected at their vertices. In my case, to show a sprite, I only need a quad -- a rectangular mesh that is 4 vertices and 2 triangles.(This is also what Unity uses by default for sprite renderers, except with a lot more stuff.)



I can not only send a mesh once, but "send" the same mesh again and again, which is called GPU instancing and which saves the day. Technically, I am not even sending multiple meshes - just the one quad, but I am telling the GPU where to draw copies of it. So each quad mesh would correspond to one sprite and I would send a batch of such sprite data to the GPU to get them all rendered at once really, really fast. This lets me render any arbitrary layout:



Fortunately, I have built the game in a way that allows me to fairly easily "collect" all the sprites I need to render (which still massively downplays the difficulty of this conversion). As I described, I have game objects that correspond somewhat to game world entities. I know where they are located and roughly in what order. So I "just" need to pass these to the GPU myself. It would look something like this (with a colorful test texture):



Except, there are no "sprites" on a GPU, there are definitely no sprite atlases. All the "sprites" here look the same. Because a "sprite" is a high-level engine abstraction done through custom assets, custom shaders and lots of engine code. All I get at low-level is a texture and raw vertices and pixels. What I really need to do it specify locations on the final atlas texture, so I can draw specific sprites that would be arranged there (these are 16x16 "squares" from the same 2048x2048 test texture):



The next step is to somehow combine individual meshes and send things to the GPU in batches. The problem is communicating what data I need to send per mesh, that is, per sprite. Naively, I can only set one property per communication, which basically results in every sprite in a batch being the same:



The solution is that modernish GPU shaders can be compute shaders, which can receive and process large chunks of arbitrary data and run (parallel) processing on the GPU. This means I can actually pass all the sprite information to the shader in one big batch very efficiently. This data can then be sampled to select the correct region from the atlas texture from the sprite's location data for each mesh/quad.

And this provides the starting basic functionality of rendering sprites directly to the GPU almost the same as game object sprite renderers, but for a tiny fraction of the cost. Here is the pipeline itself working correctly if not the logic of drawing everything:



This does unfortunately come with a bunch of significant drawbacks that can be summarized as "additional complexity" and whatever is the opposite of "ease of use". But I can live with these considering the speed benefits.

The new problem is that now everything that Unity did -- sort, cull, toggle, offset, scale, etc. -- is gone. I now need to make it all myself.

Sorting

Most importantly, I can't just "render all sprites" in whatever order they are (unintentionally) stored. I can technically do that for tiles, roads, and tile overlays, because they never overlap and are exactly spaced. But every other entity must obey visual depth sorting. Simply put, a unit can walk in front and behind a building while still being in the same tile. But sending sprites to the GPU is fast precisely because it ignores such pre-processing details and just draws things sequentially. Just rendering naively would result in this:



Thankfully, my job is simpler than it could have been trying to sort 50k entities -- I already have a game tile hex grid. Every entity has a whole tile coordinate and I can hugely optimize sorting by looping through the tile coordinates in "visual order".

Entities also have in-tile fractional coordinates. So I have to loop through the entities in a tile back to front. For optimization purposes, I have to keep the entity list pre-sorted and add and update entities as their coordinates change. And this basically correctly sorts 90% of sprites.

The final consideration is that for entities at the same coordinate (like parts of the same building), I need an extra hard-coded depth-sorting value so they appear in the right order even though they are technically at the same location.

Sorting is probably the most time-consuming part to implement because I have to change and adjust so much code. Every one of these "considerations" is another layer of complexity and difficulty. And with all that, I am only now approaching the same visual results as I had at the beginning:



Culling

Another important consideration is to cull anything that is not visible, that is, literally not render sprites that are not on screen. It's a simple problem to explain, but deceptively difficult to implement efficiently. I cannot just check 50k items every frame. So I keep a list of entities per-coordinate, update the lists when entity coordinates change, and loop only through visible coordinates when rendering:



The biggest consideration is that whatever code logic I do, I will be CPU bottle-necked and I cannot offload this work to GPU in any reasonable way.

Effects

All the small effects in the game were provided by Unity's particle system -- smoke, dirt, chips, sawdust, etc. It was all relatively easy to set up. And none of this works anymore with the custom rendering pipeline. Unity's particle system wasn't compatible with how I rendered regular sprites. So I had to recreate the effects myself -- all the logic, animation, sprites, visuals, previews, etc.

There are now some new optimization considerations. For example, various effects like digging dirt used the same basic logic where a 1-pixel particle would fly out. There would be some 12 particles, which equates to 12 sprites. This is actually quite a lot when you consider they have to follow all the new rendering/sorting logic I implemented. I now have to design effects paying attention to the number of sprites they produce and optimize when I can. For example, I can use only 4 sprites if I make an "animation" of the particles splitting up as they spread over time:



My favorite effect -- smoke, which I painstakingly recreated -- takes up 8 sprites:



Here, there's nothing I can do to reduce the number of sprites, and it will be slower than Unity's particles were originally. Of course, I am considering the big picture performance and presentation, and nice effects are definitely a worthy "expense".

Shadows

There is so much to talk about, because I am now revisiting 3 years worth of various visual features. But one of the cool easy-to-add changes was adding shadows for units:



These are very subtle and usually get lost in the "noise". But they subconsciously feel good. I couldn't add these before because they would get incorrectly rendered on top of other things - buildings, other units, etc. - because units would run all over the place and cause depth-sorting issues. However, now that I am "sending" sprites into layers for rendering, I converted all shadows into a "shadow layer", so they get drawn on the ground before any sortable objects, thus they are always on the bottom. This fixes a lot of shadow glitches I had, as well as lets me add shadows without worrying about problems like this.

In fact, I have a lot of new debug tools I had to make to visualize and find all the different parts. For example, a shadows-only preview:



Fallback rendering

All this fancy shader stuff is great and all... except many older systems don't actually support it. The whole GPU-based compute shader processing is a relatively new concept. In fact, systems older than 3 years are increasingly unlikely to support it. Whereas even 15-year old machines could run the game before. Virtual machines also don't support advanced 3D accelerated graphics, which means I cannot test the game on macOS and Linux with the new rendering logic. This is also not something I can afford.

I did not enable analytics in the game, so I have no idea what systems MicroTown's players have. But the game has a strong retro vibe and I would not be surprised nor could I fault any players for trying it on an older system. So I have to support them. Which means implementing a fallback method for rendering everything.

(Un)fortunately, I cannot just fall back to my original Unity-based rendering, as I have essentially changed and rewritten everything. Thankfully, I have about 90% of actual logic reusable, because it's only the communication with the GPU that cannot utilize fancy data transfer logic. I have my list of sprites, their location, atlas information, etc. So "all" I need to do is replace the fancy shader stuff with a dumber, slower version.

Naively, I would basically have to send a mesh per sprite to the GPU one at a time. This is too slow (even with native batching), but I can also combine these meshes together. Which is also too slow with Unity's tools (but comparable to how fast the game ran before). So in the end, I am manually re-constructing meshes vertex-by-vertex to match the expected "sprite layout". It still makes things very CPU-bound, but it's still better than before. The biggest problem is just the human time it takes to get everything implemented and running smoothly.

Final words

Most of the time I was looking either at a complete mess like this:



or this:



Or trying to fix one of the 100 different things that were glitchy:



I even discovered 2D MicroTown:



As a final thought, I only summarized the "correct" path to implement this. I spent a lot of time experimenting, agonizing why something doesn't work and getting exhausted by debugging. And this is besides Unity crashing every time it doesn't like something. The power of working directly with shaders is great and the results below speak for themselves, but it's also equally mind-numbingly tedious and disproportionately time-consuming. As a one-man team, I can't detour through such rabbit holes unless it's absolutely necessary.

So I'll end this with some benchmark comparisons. (I am not comparing FPS, because this isn't an accurate measure for games like MicroTown. The game doesn't have a fixed time step and fewer updates just means it has to process more changes.) These benchmarks are done on a 1440p resolution zoomed-out 160-size world with 2000 villagers drawing 25k entities (same as in the section on entities above) on 4-year old high-end hardware:

Method
Frame time
Render time
New
34 ms
6 ms
Fallback
54 ms
25 ms
Old
63 ms
35 ms

A full frame now takes 34 ms instead of 63 ms, which is almost twice as fast. Notably, specifically rendering now takes 6 ms instead of 35 ms before, which is more than 5x times faster! Even the fallback method takes "only" 25 ms. It's still only 30 FPS, but this is also an extreme case. I think I have squeezed out as much performance as I will be able to from rendering. But I could also easily add more entities and sprites without a significant performance hit. (In fact, I imagine most of the future optimization will be to the world update logic. In these examples, world update takes around 20 ms.) Of course, this will vary system by system, but there should be a significant improvement for all systems because the game is CPU-bound.

Future plans

I originally planned for "Shops and Houses" to be the next update (i.e. this update). This would have allowed Houses to use more items so that Shops can sell more items and then I could add more production chains and variety. But I only managed to get the Shops working, so the next main goal is getting Houses working. This will likely be a smaller update, but with bigger breaking changes. The Houses will likely also become 7-tile buildings.

Full changelog

Changes

• Market Square, Food Stall and Supply Stall are scheduled to be deprecated; they will remain functional for the current version, but will need to be replaced by Shops
• Optimized rendering requires compute shader support: at least DirectX 11, OpenGL 4.3, OpenGL ES 3.1, Vulkan or Metal
• Older system will fall back to a slower rendering method
• Add shop buildings: Grocery Shop, Produce Shop, Meat Shop, Clothes Shop, Supplies Shop, Medicine Shop with corresponding sold items
• Shop building HUD inspection to show full item "progress" (unlike market stalls)
• Add Shop concept
• Tooltips to show sold items at shops (similar to storage building tooltip)
• Export Station and large storage buildings will distribute items directly to nearby shops
• Market Square, Food Stall and Supply Stall are no longer constructible but will remain functioning as before in the world
• Rename "Fish Steaks" to Raw Fish
• Rename new game world size options from "small", "medium" and "large" to "tiny", "small" and "medium"
• Add "large" and "huge" new game world size options
• Fish Animal Habitats will no longer spawn far away from coast
• Remove tutorial steps for Market Square and Food Stall construction and replace with Produce Shop construction
• Adjust tooltips and explanations mentioning Market Square logic to instead describe Shops
• Animal Habitats no longer show tooltips on mouseover; instead Habitats can be selected in-world and show an inspection panel with the same information and changed display
• Add in-world markers for Animal Habitats animals
• Shadows now appear on the "tile layer" and don't overlap other objects
• Tile outlines, selection indicators and other tile overlays appear above roads
• Markers and various indicators now appear above in-world objects
• Mine, Sand Pit and Clay Pit prepared ground sprite now appears on the tile "layer"; adjust worker position and mining effect offset
• Villagers and animals now have shadows
• Add water splash effect to fisher casting and reeling animation
• Micropedia now has "Tutorials" section/list
• Item tooltips and Micropedia descriptions now combine storage entries to multiple buildings
• Add tooltip and description for Beer and Mead usage at Brewery
• Add amount label to (de)construction item progress for building and road inspection
• Add warning in main menu if compute shaders are not supported and the game will run a slower fallback rendering method
• Path-finding will discourage walking between buildings as much
• Units will no longer stick to exact hex tile centers when path-finding and choose straighter paths
• Workers with carts entering and exiting Export Station and Import Station will now move at a non-slowed down speed
• Hunting goal now counts skinned (but not shot/hunted) animals as part of the completion number
• Add internal "animals skinned" stat
• Roads to have separate sprites for vertically-mirrored bits and new dedicated sprites for the straight segments
• Add a more-expensive Boardwalk type of Roads that can built on otherwise unbuildable land tiles (Sand, Rocks, Clay)
• Add Boardwalks tech
• Add Boardwalk construction Goal
• Roads to have a new dedicated sprites for the three-way segments
• Animals now walk instead of running (internally, since visually these are the same speed and animation currently)
• Fish move faster to bait/hook
• Idle villagers will walk more instead of running, especially for short distance
• Adjust Import Stations item positioning so all stacks fit on the same tile
• Import Stations will also distribute their items to Food Stalls and Supply Stalls
• Large Warehouses and Large Granaries will also distribute their items to Food Stalls and Supply Stalls
• Add issue warning for large storage buildings that have dedicated workers but no compatible item sources or targets
• Large storage buildings to mention how workers operate in the description and change range explanation label for construction

Fixes

• Micropedia search bar results would disappear when clicked before the click is processed and would not navigate to the clicked entry
• Raw Fish item distribution proportion unintentionally defaulting to weight of 1 instead of 3
• Oven operation progress not showing correctly when the worker is activating the cooking process
• Export Station and Import Station not showing all item delivery marker icons
• Florist missing tooltip/Micropedia information line about Flower "production" from Seedlings
• Brewing Vat not showing cooking sprite and smoke
• Building workers still accepting tasks from far away blocking other workers from and choosing them until they arrive
• Building worker with no task going to the building from far away even when the slot is disabled
• Building construction and deconstruction markers now appear on the tile "layer" and don't overlap other objects
• Mouseover tile would occasionally be momentarily incorrectly calculated
• Various sprite fixes
• Path-finding will avoid leading units through single-tile buildings
• Fix path-finding not considering "exiting" a building tile in a proper direction
• Path-finding will prioritize "front" tiles for multi-tile buildings and avoid going through "occupied" building tiles
• Path-finding will again avoid leading units through fields/plots/pens, but take corners instead
• Animals will properly ignore pathing restrictions and walk in pens as desired
• Fix path-finding choosing sub-optimal shortcuts
• Fix villager slowdowns when running between certain road tiles, most noticeable with carts
• Animal Habitats not spawning
• Graph window not working when loading previous version saves
• Acquiring items not present in loaded saves causing an exception in internal graph logic
• Export Stations sometimes not delivering items when one of its target Import Stations has a full stack of that item
• Technology panel buttons having mouseover detection region larger than the button itself
• Skinned animal stat not being recorded in saves
• Animal Habitats not despawning when reaching a low score
• Fix large storage building worker incorrect waiting locations
• Import Stations and large storage buildings would not fill up compatible building items fully
• Fix exception when loaded saves would fail to assign unit idle locations
• Remaining items not appearing in the world when extracted from stacks
• Internal ID conflicts between units (namely Pigs that are led to Butcher) and items would cause one or the other to be excluded from future deliveries for the ongoing session
• Import Station issue verification causing internal exceptions while it's constructing
• Large storage building issue verification incorrectly triggering when there are compatible item source buildings in range
• Building issue verification for required auxiliaries would incorrectly show double-issue for buildings with multiple auxiliaries
• Building issue verification for issues that have a building of item list to report would not update the tooltip if these lists changed

Balancing

• Garden Plots, Crop Fields, Tree Nurseries and Animal Pens now cost 2 Planks instead of 3 (and 1 Stone Slab)
• Import Stations can now distribute up to 6 items to nearby targets
• Large storage buildings can now distribute up to 6 items to nearby targets
• Double Large Barn and Large Granary capacity
• Increase Forester operation range from 3 to 4 to match Lumberjack operation range

Optimizations

• Redo rendering pipeline and significantly reduce CPU usage and overhead
• Most visual-related logic has different performance cost, usually reduced
• Small, emptier worlds run slightly slower, but large worlds run significantly faster
• Increased memory usage
• All particle effects are redone and slightly different due to using a new system
• World entering is slightly faster
• Reduce redundant unit internal animation processing
• Speed up villager idling location lookup
• Entering (generating, loading) and exiting a world is slightly slower due to the pooled objects now having inefficient hierarchy for mass changes
• Processing (pathfinding and delivery processing) threads sleep longer and more frequently when idle freeing CPU usage
• Internal game logic is now capped at 90 FPS, so faster machines do not do needless processing
• Slightly fewer HUD rendering batches
• Building issue periodic checking is faster
• Many minor optimizations

Rudy
Snowy Ash Games
MicroTown - Rudy (Snowy Ash Games)
This smaller update adds fish animals and fishing to the game.

Fishing

Firstly, fish will now spawn in their own water-based habitats:



These work very similarly to land-based habitats, except for the requirement to be in shallow water. There are three types of fish/habitats: Striper, Salmon and Marlin.

After unlocking the Fishing technology, a Fisherman's Hut can be built. The workers will go to the nearest coast with fish and cast a rod and wait for a fish to hook:



This catches the fish corresponding to the animal's species:



(I considered whether a "caught fish" should be the same item or if each species should have its own. There is no functional difference and I doubt there ever will be. But the extra items do take up the extra space in UIs. I don't really mind this too much and I find it cool to have variety. Although I might need to eventually figure out some sort of grouping of similar items, like in the Item Report window.)

The raw fish then has to be taken to the Fishmonger building, where it's prepared into a Fish Steak at a Gutting Table:



From there, Fish Steaks are taken to the Smokehouse, exactly the same as raw Meat:



In fact, this is so exactly like Meat, that the item produced is also a Roast. I guess no one can tell the difference. But, on a serious note, I do not want to add more food or supply items at this time. There are already 12 of them and the way Markets and Houses handle them is rather subpar. Taking each individual item to houses and having houses track each of the 12 items is simply too cumbersome. So this is a compromise until I rework the villager "shopping experience".

Path-finding

No day goes by when I don't discover there is some complex backend code that I need to work on to enable a feature. Of all the things to break, I didn't imagine imagine fishing would break path-finding so badly.

First of all, fish "walk" in water, so I had to create rules and separate tile "swimmability" flags that path-finding can use depending on how a unit moves (i.e. on land or on water). But that's relatively easy.

Instead, I discovered a bug where workers could not find a path to some buildings that were built on the coast (i.e. if grass would touch the water). To explain the problem, I need to quickly explain how path-finding coordinates work in the game.

The game uses hex tiles, and so the coordinate system is not a straight-forward X-Y horizontal-vertical axis. But for that the path-finding is still not too difficult to "solve", I just have to be careful how coordinates are assigned and what directions are allowed for movement:



(If you want to know more technical details on the basics of hex grids, then look no further than the excellent https://www.redblobgames.com/grids/hexagons/ guide.)

The tricky part is that I don't actually want movement just between tile centers. You likely have noticed that workers run between buildings, although it would not be obvious how path-finding does this when you consider the coordinate system it works with. For MicroTown, I only allow movement between the adjacent centers and corners:



In fact, internally, I have 3 times as many path-finding "nodes" as tiles in each axis direction. Here are the node relative "distances" and "missing" nodes from the full path-finding data:



So in fact units cover many more "locations" and "routes" to reach them that just moving between tiles when looking for paths:



Besides walking between structures, another important reason why I am doing this is because units need to access certain buildings from a certain direction. For example, the fisherman has the door pointing South-West, so workers need to use the South-West tile or corner:



And this was where the bug happened. The design-to-implementation question here is: which tile does a corner belong to? And in what directions does each corner enable access to buildings? Because each corner is part of 3 tiles:



This does not matter on land. But I had not carefully debugged what happens near the coast (in fact, I had to implement the above visual debugging to see what was going on). Depending on direction, corners would use the water tile to decide if they can be traversed, thus making buildings inaccessible.

So to do this properly, when I update path-finding data for a tile, I am also updating corner path-finding data. I need to check all the adjacent tiles, because every corner has a combination of 3 different tiles. For land-based path-finding, this means allowing corner movement if any "connected" tile is a land tile. So, in essence, every coastal tile is fully walkable:



Of course, this is just one aspect of what is needed and there is much more happening, like road priorities, multi-tile building avoidance, full-tile movement preference, direction-dependent movement validation, preferred route distance estimation, etc. Much of the difficulty of changing such a fundamental system is all these additional factors that have to keep working.

Other changes

One of bigger UI changed is that all technologies are now in the same window and tab:



I basically removed technology branches, because they served no real purpose other than to have empty unfinished-looking tabs in the tech window. It also seems like most technologies are some sort of production ones anyway.

Future plans

In the future, for the fishing specifically, I can imagine adding something like fish oil item for... some purpose. I can also imagine more fancy foods, like crabs, or specific items, like pearls that could be acquired. I originally thought that fishing would be done in boats, but decided not to over-complicate the matters at this point.

I also think Hunters would eventually have a dedicated skinning/preparation building where additional items are produced, such as furs. Then I would have individually-itemed animal carcasses similar to fish species.

However, the big plan is to improve the Market logic. I am more than happy that many long production chains culminate in arrival at the market. But I am rather unhappy with how individual per-item market stalls have to then distribute the items to individual House slots. I think this is boring linear micro-management. Basically, the market may as well have come with the stalls "pre-installed" for all the use their exact layout does.

So I will likely "convert" stalls into shops of sorts, like a Meat shop or a Produce shop or a Clothes shop. That way, I can have a similar number of shops as stalls, but they can "sell" several items and thus overall, it would be a much larger variety of items. This would gradually enable me to add currency as well. Then the central Market "authority" would be responsible for taxing the shops or some such. This is very likely what I will work on next.

Full changelog

Changes

• Add Fisherman's Hut building
• Add Striper, Salmon and Marlin as "wild Animals"
• Add Striper, Salmon and Marlin items fished from respective fish animals
• Add Fishmonger building with Gutting Table
• Add Fish Steak item produced from fish
• Add water-based Animal Habitats for the new fish species placed along the shore
• Land and water Animal Habitats have separate spawn rules, locations, habitat score calculation rules, visuals and various other properties
• Game Warden's Lodge is now specifically for land-based Animal Habitats only (and mentions this in description)
• Add Fishing tech, unlockable from start
• Add fishing Goal to catch fish
• Add "Animals hunted" and "Fish caught" (internal) statistics
• Smokehouse and Drying Rack can now also cook Fish Steaks into Roast (for now)
• Adjust building worker idling locations
• Idle building workers will now occasionally rotate
• Add concepts: Livestock, Game, Fish
• Not showing icons anymore for in-text concepts
• Canceling building deconstruction before it begins will "suck back up" building's compatible items
• Import Station to show item stacks separated
• Remove technology branches -- all technologies are now on the same page
• Technology window entries no longer show their name labels
• Technology window will resize to fit more of the screen vertically and can now scroll its content vertically
• Mr. Piggles' portrait is now the game's icon
• Newly-available building output and stored items now have a short delay during which they won't get assigned to regular deliveries, but can still be picked up by large storage building and Export Stations workers thus prioritizing them over carriers
• Building workers can now discard the resulting item of an operation if this item is no longer compatible, this applies to Brewing Vat and Loom
• Import Station can now accept and store up to 6 types of items independently; it will no longer get "clogged" by one type of item when receiving multiple types of items
• Up to 3 types of incoming items to Import Station are now shown in building inspection HUD with "progress" bars
• Loading saves where Export Station or Import Station has to be reset will preserve previous shipping routes (although active deliveries will be cancelled)
• Shipping routes can now only be set to Import Stations that are complete or under construction (but not deconstructing)
• Export Station inspection shipping routes selection will only show if it is complete or under construction (but not deconstructing)

Fixes

• Add missing Hunting Goal to hunt animals
• Some valid coordinates were not considered for Animal Habitat placement
• Fix some minor animal animation issues
• Pathfinding would not check coastal corners of tiles and workers could not go to buildings placed adjacent to coasts
• Fix profession distribution panel builder increase button decreasing the value instead; fix tooltips on all buttons being on the wrong buttons
• MacOS builds are now Intel only until Steam-injected libraries support Universal (i.e. ARM) builds and work on M1 chip systems
• Tooltips getting stuck when showing entries that check game progression while not in a game (i.e. main menu)
• Internal exception when removing a shipping route at a Export Station and cancelling tasks involved with the route due to not accounting for certain tasks failing to cancel remaining tasks and corrupting the internal route state
• Import Station clearing its incoming routes after construction
• Export Station not clearing its outgoing routes when deconstructing
• Some rare issues adding/removing shipping routes during building construction
• Import Station workers would only distribute the (internally) first stack of items

Balancing

• Smokehouse can now hire 3 instead of just 1 workers
• Drying Rack takes longer to "cook" meat

Optimizations

• Pathfinding internal checks are significantly faster

Rudy
Snowy Ash Games
MicroTown - Rudy (Snowy Ash Games)
This update improves item logistics and long-range deliveries.

My goal is to give the players much more control over item deliveries. Instead of relying on the game to successfully figure out what needs to be taken where and making assumptions that may not be correct, this would allow the players to direct items with more precision and have a consistent way of having long-distance deliveries.

Courier stations

The biggest addition are the courier stations – export station (left) and import station (right):



To summarize: An export station delivers specified items to one or more import stations. Export station has dedicated workers for collecting items from nearby processing and storage buildings, as well as dedicated couriers to handle the deliveries. Import stations have dedicated workers to distribute the delivered items to nearby processing and storage buildings.

You can think of these as active item "hubs" in an area (a "passive" hub would be storage buildings). They will promptly collect nearby items and efficiently send them away to a different hub, where they can be distributed again.

Just to be clear, all the existing delivery logic still exists. The game can be played without building any courier stations. Free carriers will still grab whatever items they can deliver (although they won't
"interfere" with courier stations themselves). In contrast, courier stations is a way for the player to "force" consistent deliveries, especially across longer distances.

Most of the setup happens at the export station:



Here, you can specify the item to deliver, the number of workers for collecting, the number of workers for deliveries, and the destination import stations (and their priorities).

The items will be delivered by a worker pulling a cart with up to 12 items. These carts are efficient compared to regular carriers, however will slow down immensely outside roads. This makes planning and building roads increasingly useful if you use couriers.



The items will end up at the import station:



From here, workers can distribute them to relevant storage.

With this, I also removed storage-to-storage delivery logic, so storage building can now only collect and distribute items to and from processing buildings. Courier stations will be needed to take items "directly" to a different storage location.



Better storage

The storage buildings can now store almost every item in the game. There are still separate warehouse/barn/granary variants and the buildings and items will show in the tooltip where they get to be stored.

The HUD has changed a little for these:



They also do not list all the items you can select, because since every item in the game can now be stored and there would be too many to show. Instead, upon clicking the selection button, an item selection menu will pop up:



This selection is now used everywhere where an item needs to be specified, including the export station.

Large storage

The other big change are the large storage buildings:



Besides larger item capacity, the big advantage and important feature of these are the dedicated workers that will collect and distribute items from nearby processing buildings:



These workers will only ever collect and deliver items for their storage building, making these essentially dedicated couriers.

All the existing and new storage and logistics buildings are now in the logistics construction tab:



Other stuff

There is now the option to limit the regular carrier item delivery distance:



This works best when the village has courier stations set up for far deliveries. This way, couriers can be "told" to not bother with long-range deliveries and focus on short-range.

Builders will now also follow a proportional value rather than an absolute:



This means the players don't have to constantly change (or even be aware of) the maximum builder value.

I also added a few achievements and tweaked some of the existing ones.

In retrospect

This update is not perfect by any means. Item logistics is a massive feature set and for every feature that works, there are ten things that could go wrong. It's a relatively simple concept to explain, but a notoriously difficult one to implement. I am writing this and it feels like I just started adding the long-distance routes, but somehow it's been over three months already.

I built the game around the concept "carriers deliver everything". I eventually added worker self-deliveries, and this already complicated matters a lot (in fact, I only now fixed some long-standing bugs relating to that). But now I am adding logic where items that were previously exclusively delivered by carriers can also be freely delivered by building workers – collected from outputs and storage and distributed to inputs and storage. Suddenly, internal logic has become much more complex and difficult to follow.

And this also means that I could not split the update into multiple smaller ones (i.e. Storage update & Hauling update like I originally planned). The underlying delivery logic is just too "spread out" through everything. I also don't have a stable build at any point due to the number of changes. Nor do some of these additions make a notable difference without the whole package, like large storage without dedicated workers.

I also spent a very long time hunting and fixing some of the rare bugs. These were ranging from self-fixing and annoying to actually crashing the game. Despite their rarity and inconsistency, they eventually happen if one plays long enough. Unfortunately, this also means that tracing and debugging them is very time-consuming.

Future plans

Foremost, I want to add more content. By which I mean "immediate" features like production chains and such. I have not really decided on exactly what is most impactful or interesting at the moment. I know I want to make larger maps and more diverse resources and I will probably begin implementing some of that. Namely, long-range deliveries would allow me to spread out the resources more and larger maps won't have as many logistics issues.

On the backend side of things, I need to rework how markets work. Houses currently need 12 items and that's 12 different market stalls, each needing collection and distribution. I can't realistically keep adding more items that I want without making this whole gameplay part overly tedious. This also isn't really how I envisioned markets.

I will of course be on the lookout for how well these new changes work and will adjust things based on feedback.

Full changelog

Changes

• Add Export Station and Import Station buildings for bulk item delivery Routes
• Add item selection popup window for selecting among many items, use for shipment item selection for Export Station and storage buildings
• Implement Export Station item retrieval from nearby processing and storage buildings
• Implement Export Station item delivery via "couriers" following specified Routes, add route priority adjuster
• Add Routes creation/selection HUD for Export Station
• Implement Import Station item distribution to nearby processing and storage buildings
• Add markers for shipment target and destination (and active transfers)
• Couriers don't carry items, but load them into a cart and pull it instead
• Couriers with a cart don't experience slower base movement speed regardless of the number of items in the cart
• Couriers pulling carts outside Roads move much slower
• Add several issue checks for the new buildings (shipment item not set, no source or target in range, no shipment routes set)
• Add Hauling technology that unlocks the courier buildings with Roads and Storage being prerequisites
• Add max delivery range for carriers that can limit how far items are delivered by regular carriers (excluding couriers and self-deliveries); add UI slider next to carrier slider at the profession distribution window
• Max builder value is now a proportion of total worker population (like carriers); adjust UI and controls to match
• Rename "Roads" construction tab to "Logistics" and place Export Station and Import Station there
• Storage buildings (Warehouse, Granary and Barn) no longer transfer goods between other storage buildings (they can still toggle regular input/output deliveries)
• All items can now be stored (except Corpses) in storage; set up lists of items for each storage building "type"
• Storage building stored item selection now uses a popup to show all items and a separate section to show stored quantity
• Change storage building description to describe what they store better and remove explicit mentions of storage from individual items
• Changing storage building's stored item now "drops" all items and "collects" any compatible items already on location
• Move storage building construction entries to the (new) "Logistics" tab
• Add large Large Warehouse, Large Granary and Large Barn with increased capacity
• Large storage can employ dedicated workers that retrieve/collect outputs and distribute inputs to nearby processing buildings
• Storage workers will also obey storage item transit input/output toggles
• Add Large Storage technology to unlock large storage buildings with "regular" Storage tech as prerequisite
• Add Goals for Hauling and Large Storage, adjust requirements for Storage
• Shift+copying buildings also copies Export Station shipment item selection
• Building workers will run to the building instead of walking if they are far away
• Buildings can have 2 worker "rows" with different tasks, namely Export Station's collectors vs. couriers
• Buildings can have different worker "names" for building inspection, such as "Collectors" and "Couriers" and optional description tooltips for their labels and buttons
• Shift-clicking worker slot buttons in building inspection toggles multiple slots - clicking an enabled slot disables it and all slots to the right while clicking a disabled slot enables it and all slots to the left
• Add icons for Animals and display them in all HUD locations - inspection, buttons, tooltips, etc.
• Add Animal conservation (by Game Warden's Lodge) tooltip information entries
• Builders will remain at their construction site if there are tasks pending or incoming items rather than walking off early
• Building and road construction sites to show a marker for their builders
• Technology window now uses large icons (that match items)
• Add additional vertical space to the Technology window to fit the new technologies
• Add "Monumental" achievement to construct the Monument
• Add "Wildlife Conservationist" achievement to establish a Game Warden's Lodge for every species of wild Animal while not hunting at these Animal Habitats
• Add "Populous" achievement to reach 2000 Population
• Add "Rocky Road" achievement to have 1000 tiles with stone or better Roads
• Construction menu will highlight newly-unlocked buildings
• Make invalid tile overlay indicator more obvious
• When placing multi-tile buildings, only invalid tiles will turn red instead of also valid tiles where the building wouldn't fit due to being multi-tile
• Roads and techs to show icons in Micropedia along other icon fixes
• Remove item delivery distance grace period during which newly-available items would be prioritized to closer destinations
• Add building marker/indicator for non-idle workers
• Add building marker/indicator for outgoing item delivery target buildings
• Building marker incoming icons are now more cyan than blue
• Add Marker concept and Micropedia entry explaining the individual icons
• Building efficiency value now counts missing workers as being inefficient
• Clicking construction tabs will not cancel the current selection
• Building's selection HUD will not hide when building auxiliaries or selecting its operating location
• Add next happiness level note to the top HUD happiness segment tooltip
• Building sites do not affect Animal Habitats score until construction starts
• Cut-down Trees during construction will leave a Log item behind
• Shift-selecting an auxiliary building while a compatible parent is selected will leave the parent's selection HUD active

Fixes

• Fix workers delivering items to other buildings sometimes incorrectly counting/reserving the items potentially either over-delivering items or getting stuck never receiving more deliveries
• Fix rare bug where cancelling deconstruction of a partly constructed building or road would result in it never being completed due to incorrect pending material counter
• Fix rare bug where delivering multiple materials to a road would not count the items correctly and would either complete the road with "incorrect" materials or get stuck with missing material(s)
• Fix rare bug where saving would fail due to an unfinished road construction when multiple material delivery task incorrectly decreased the pending material counter
• Fix rare bug where assigning conflicting tasks would sometimes cause another task to "disappear" and at worst cause a crash
• Fix rare occurrence of food items being used up due to global hunger not properly cancelling tasks involving them potentially causing a crash and "broken" items
• Livestock Animals not wandering in their pens
• Minor discrepancies in counting idle villagers
• Items occasionally incorrectly visually offset in Stockpile when multiple are delivered
• Minor item delivery discrepancies due to using item-to-villager distance rather than item-to-destination
• Minor item distribution discrepancies when reaching internal overdelivery limits
• Add missing button click sound effects for distribution panel
• Redeploy Sewing Desks due to incorrect internal version (that didn't cause issue before, but would cause them now)
• Builders will leave their construction site if there is nothing to do rather than stay idle permanently when there are other construction sites waiting for work
• Builders will actually stay at the construction site (like the tooltip says) if it is set to highest priority (even when builder proportion is exceeded)
• Building workers won't accept and "lock in" tasks before they have actually arrived at their building (potentially delaying processing or item usage by other workers while they are running)
• Fix Hemp description wrongly listing it as deprecated
• Barn being unlocked without Storage tech
• Minor marker display issues, such as with worker self-deliveries
• Fix incorrect (visually missing) Town Hall shadow
• Fix multiple tasks involving same multiple items not verifying that all items do not conflict and potentially causing a crash and "broken" items
• Worker marker constantly removing and readding itself
• Some rare marker glitches
• Fix crash when a villager dies while constructing a building and leaving behind an "invalid" item
• Have higher priority construction sites receive items by not having a delivery distance grace period
• Fix macOS start-up crash
• Cancelling building construction with an active item use by builder leaves it in an invalid state that causes saving to crash
• Clearing selection with Esc not clearing internal selection and markers
• Fix buildings having invalid internal item state upon loading/upgrading from an older save and crashing the game when interacted with
• Fix Mason and Windmill continuing to work and failing to produce items when the output is full
• Fix building efficiency value resetting after loading a game
• Esc occasionally causing an internal exception when building an auxiliary building or selecting building operation location
• Internal exception during selection-based input mode while the selected entity changed state (such as building deconstructing while selecting its operating location)
• Internal exception redrawing tile borders when selected entity's state changes
• Erratic carrier hiring and firing when at 5/6 carriers or occasionally at the exact minimum proportion value
• Profession distribution carrier slider current value indicator not matching up with the slider's handle
• Global self-delivery toggle value not being saved
• Productivity and other "bonuses" not applied to certain auxiliary building operations
• Completing certain auxiliary tasks would not update parent building's task (e.g. Farm not planting produce before continuing to repair Wasted Dirt)
• Rare internal exception drawing tile borders when multiple changes affecting them happen on the same frame
• Shift-selecting a building and then canceling construction would leave last selected entities selection HUD, but it would not update
• Potentially fix cases of "black screen" on launch on macOS
• Fix crash during saving while a worker is trying to plant something in a Dirt tile that has decayed into Wasted Dirt
• Fix crash during saving when a villager dies while having an active pathfinding request queued or being processed
• Fix a rare case of a carrier choosing an incompatible item for multiple item bundling/delivery
• Fix a very rare crash when saving the game exactly when the path-finding process returns a result
• Update game engine to (potentially) fix compatibility with latest macOS versions

Balancing

• Arborist work range is now 4 tiles (from 3)
• Reduce Warehouse and Barn capacity from 64 to 32
• Replace "Utopia" achievement with "Happy Place" which in addition to 3 minutes of Happiness, also requires 500 Population
• Wasted Dirt repair is slightly faster
• Wasted Dirt repair is much faster outside Winter

Rudy
Snowy Ash Games
MicroTown - Rudy (Snowy Ash Games)
This update focuses on the backend features for building construction, broadly speaking. My main eventual design goal is to make construction feel like a larger part of village development. This means things like longer build times, additional construction steps, more required materials, more builders, larger buildings, more builder animations and actions, more visuals, more feedback, etc. As part of it, I also added a lot of smaller features that I wanted to add but couldn't before.

Multi-tile buildings

The biggest change (at least, internally) is the support for multi-tile buildings. Here is the "new" town hall on a 2x2 footprint (or 7 tiles):



I have not yet "converted" any other production buildings, because this would basically remove them without replacing and break any games. Besides, I need new art for them all and this is a out of scope for this update (see also future plans).

And here is the new (unfinished) monument on a 3x3 footprint (or 19 tiles):



With this, I also added support for multiple builders at the same construction site. Larger (future) buildings will require more time to complete, but this will also be offset by more builders working on them. This is probably the primary way in which I can visually "explain" that constructing buildings is a significant endeavor.

Notably on visual side, I added the graphics for construction progress for buildings:



This was one of the visual things that has been bugging me forever, but I was not able to add it due to how the construction and deconstruction progress was stored. It is now self-consistent (and you can no longer cheese the materials by toggling between de/construction).

Buildings can now also support more than 3 materials for construction, notably the monument will now also require planks and iron ingots.

Dirt

I added a new tile type "dirt", which is basically dug-up grass. This will be the "default" tile under all buildings:



Builders will dig up the tile at the start of construction and will now actually convert it to dirt (if it's not already dirt). Previously, only workers at places like farms and ranches would dig up the working tiles, but these were just a variant of grass. They will still do it, but now they will work directly from dirt and further prepare them for use.

This makes the village look more lived in and creates a starker visual contrast between the village and the surrounding nature.

The dirt will also slowly regrow back into grass if there's no building on it:



With dirt tiles being their own "type", I can also add transitions between different tile types. (Before, "fake dirt" was only at the borders of crop fields, animal pens, etc., so it didn't really matter if it had a "sharp edge" with the grass outside the area.)



I numbered the different transitions above and you can see how just such a small location can have transitioning surfaces from everywhich side.

I even had to work on improving my pipeline for transition creation, such as a quick preview so I can tweak any issues:



This change is similarly mostly about the backend. Previously, I would never change the tile after creating it (dirt was just a variant of grass). But this also meant that everything assumed that it can "connect" to tiles safely and the tile would never disappear or change its type. So now I have the ability to transform the tiles as desired, which paves the road for various tile-related features.

Self-delivery toggles

Buildings can now "decide" if the workers will self-deliver items, that is, bring nearby input items and deliver nearby output items to other buildings or storage instead of waiting for a carrier. This behaviour is both a positive and a negative feature and the line is very blurry and based on so many factors. When it works, it's great. When it doesn't, it can ruin production. I thought about this a lot and in the end I decided to allow the players to enable and disable it. This would still be important even after upcoming updates and changes to logistics, so I might as well do it right.

Firstly, each building with workers now has a toggle to either allow or disallow self-deliveries or keep it at the default setting:



Secondly, the item distribution window now offers a building self-delivery toggle tab that lists all the building types and each has its own toggle for all buildings of that type:



There is also a global toggle to simply disallow all self-deliveries by default. This can result in very different layout and carrier requirements. With a small village, it almost always works better with self-deliveries, and this is the default option and this is also part of my "just works" design goal. In the end, I am allowing the players to choose how their workers spend their time and if they want to optimize long-term or react short-term, I'm happy either way.

Markers

Selecting a building, will now show the a small in-world marker above the items that are being delivered/imported to (blue, arrow in) or taken away/exported (orange, arrow out) from the building:



This will also show the villagers performing the delivery before the items is yet picked up:



This should make it much easier to see what items are being delivered without needing to check the tooltip that can only show a list of items and their approximate distances.

I will likely expand this to "mark" other related things as well, like workers themselves. However, this is a finicky feature that takes a lot of time, so I will work on this at a later date. My primary goal was to show the items and carriers since these cause the most confusion, especially for construction. This will also be particularly helpful for the future logistics updates.

Various

Most of the work was in the backend, but here as some notable changes.

All buildings with workers now track their efficiency and show it in the HUD:



This is simply the percentage of time that the workers spent working. In addition, I also show the time spent self-delivering items so it's clear when workers are spending time hauling items versus doing the building's designated tasks, which is not necessarily bad but also not necessarily good. In any case, the player can decide what they want to do with this information and possibly use the self-delivery toggles.

I (finally) changed the minimum carrier value from an absolute number to a proportion and changed the UI to be a percentage slider:



Importantly, I made it so that going under this limit will start dismissing workers from the buildings. For this, I use the most occupied and then least efficient workers.

This now functions more intuitively like "I want X% of villagers to be carriers" rather than the more convoluted "minimum".

I also changed how the UI shows the de/construction material items:



This is an extreme case for the monument, so there a lots of items. But for regular buildings, this should work up nicely. The old "button" was just too unclear and cramped.

I split the top HUD overview and their tooltips into the tradesmen/carrier/builder sections:



I removed trying to show green/red status icons for these, since they are almost always just a little wrong. The end result is that a village working 98% of the time has red icons while a village not doing anything can have green icons (since technically all tasks are fulfilled). I think I was trying to be too smart trying to "tell the player" what the goal should be when it's not actually a goal at all.

Future plans

This update took way longer than anticipated because of a fundamental backend assumption that tiles map 1:1 to buildings and that tiles remain "fixed" throughout. Adding such fundamental features retroactively is never fun. For example, path-finding had no idea how to handle not being able to walk between multi-tile buildings. I think it was worth it just to allow the larger monument. But, of course, there are tons of buildings that could be multi-tile.

The next thing I am working on before anything else is a delivery "caravan" system. There is a lot to discuss about it and I will probably leave it for the next update notes. I didn't do many logistics changes in this update mostly to not delay it any longer. For example, there are still various issues with construction, particularly with priorities and deliveries. But much of it needs logistics "fixed" first.

For the more distant future, the next part of building changes would be making all primary buildings be 3x3 tiles. That is, for example, a farm would be 3x3 while the fields would remain 1x1. However, I will not do this change right now as there's a specific problem I want to focus on.

Of course, there are all the other things I have mentioned here and there before - markets, better civilian needs, happiness overhaul, more production chains, trading, etc. etc.

Full changelog

Changes

• Monument is now 3x3 (19 tiles)
• Town Hall is now 2x2 (7 tiles)
• Multi-tile buildings are now supported by the backend: currently used footprints are 2x2 or 7 tile "circle" and 3x3 or 19 tile "circle"
• Add multi-tile outlines for building selection and construction
• Selecting any tile of a multi-tile building selects both the exact tile and the building itself and with separate outlines
• Add (de)construction markers for multi-tile buildings
• Buildings are now (de)constructed through several visual construction steps; add in-progress sprites for primary and auxiliary buildings
• Update (de)construction item progress UI to be shown as a progress bar with sections for used/delivered/pending/needed items with appropriate icons
• Make (de)construction progress bar advance smoothly and more accurately than before
• Town Hall's footprint is now 2x2 or 7 tiles
• New larger Town Hall sprite
• Monument's footprint is now 3x3 or 19 tiles
• Monument now also requires Iron Ingots and Planks for construction
• Add Iron Ingot to building proportion item distribution window
• New large Monument sprite and its construction steps
• Make Dirt tile a separate tile for "used" tiles, including its previous "variants": Tilled Dirt for farming and Stomped Dirt for animal husbandry
• Builders clearing a tile for construction will now convert it to Dirt
• Dirt tiles will slowly revert back to grass as Regrowing Dirt and Regrowing Dirt if there is no building on top; other dirt types will first turn into "regular" dirt
• Tilled Dirt under Crop Fields and Garden Plots will turn into Wasted Dirt at the arrival of Winter and workers will need to retill it
• Tree Nurseries don't need the tile tilled anymore
• Buildings with workers will show their work efficiency percentage in inspection HUD based on their time spent working
• Building workers will now follow a self-delivery setting and not bring or deliver items to and from their building if self-delivery is disabled
• Add self-delivery toggle (enabled, default, disabled) to building inspection HUD
• Add a "Self-deliveries" tab to item distribution window with a global self-delivery toggle (enabled/disabled) and per-building type (enabled, default, disabled) delivery toggles
• Change profession distribution carrier minimum value from an absolute value to a percentage value
• Workers will now leave their buildings to become carriers to reach the global carrier threshold
• Split top overview work section into individual "Tradework", "Deliveries" and "Construction" sections and simplify the tooltips
• Remove unclear and often incorrect green/red-colored status colors from top overview worker numbers/labels
• When a building is selected, items being delivered as inputs or carried away from outputs and carriers coming to take the items are indicated with in-world markers with appropriate icons (blue - incoming, orange - outgoing)
• Add UI/HUD button pressed variant and change various buttons that are "toggled" to have the pressed version (instead of just color change)
• Add water tile animation
• Update and improve various tile transition sprites
• Remove old save potential upgrade notice from save/load menu

Fixes

• Toggling between construction and deconstruction no longer returns material items randomly, but proportional to what was actually used
• Item distribution UI stuck with previous world's values after load or new game
• Rare exception when moving obstructing items from a construction site when the items are chosen for delivery
• Incorrect partial tile border outline for selected buildings with no auxiliaries
• Rare exception when selecting between buildings that have differing border logic
• Switching between different building construction would not update the invalid tile outlines in some cases
• Butcher producing Meat without Pigs
• Young Deer walking sprite animation mismatch
• Wrong tooltip info for Codex production "recipe"
• Wool Fabric production chain missing from Carding Machine tooltip
• Shift-selecting unbuildable building would change selection but not visuals
• Certain world changes would not be reflected as current selection changes
• Wrong Sapling removal animation
• Worker digging animation not showing particle effects in many cases
• Minor selection change trigger issues
• Occasional tile transition sprite overlap flicker
• Minor tile transition sprite issues
• Brewing Vat to not individually select production, rather parent Brewery to decide what to brew
• Confirmation window to use the Enter/Submit input instead of passing it to window under it
• Saplings to not grow in Winter

Balancing

• Increase various construction costs
• Increase various construction action durations
• Saplings grow faster
• Trees grow slower
• Tree Nursery workers plant and dig up Saplings faster

Optimizations

• Optimize tile updating speed (however, all water tiles need constant updates, so overall the game is slower)
• Improve certain redundant frequent update calls

Rudy
Snowy Ash Games
MicroTown - Rudy (Snowy Ash Games)
This UI-focused update adds Micropedia, a browseable in-game information "encyclopedia". Together with improvements to tooltips and presentation as well as nicer-looking icons for all the important buildings and items.

Icons

Over time, I have been drawing icons for buildings in the main construction menu. I wanted to replace them because of how unrecognizable they are. It's one of the first things a player sees in the game and it remains the primary mechanic, and all new building unlocks appear here. So it sucks when the sprites are so interchangeable and it takes clicking and reading tooltips to find what one is looking for. (And it is unlikely that the in-world sprites could ever not only be distinct enough but also fit in the small buttons.)

Long story short, here's a comparison between an old and new construction menu page:



Even if not immediately obvious, these should be infinitely more memorable and recognizable. You don't even have to play the game to guess most of these. There are still tons of auxiliaries, but these mainly appear under their own parent buildings, so it's not such a big problem.

Originally, I was trying to come up with unique icons only for buildings in the construction menu. I was mostly using their tools (pickaxe for quarry, saw for sawmill, etc.) as icons:



But I very soon ran out of tools, so to speak. Some buildings I could still represent with unique objects (like an anvil for smith), but others I had no idea how to represent (e.g. an icon for paper mill that isn't paper). So I ended up just drawing the primary items produced. And this actually worked out better than tools, so I drew items for most buildings instead.

Before long, I had about 70% of in-game items drawn, so at that point I might as well draw the rest. So now I had icons that I can use in all the HUD/UI elements with items, "automatically" improving these:



Tooltips

The majority of the work was actually for the tooltips. Micropedia is just a consequence of creating a structured easily-browseable repository for "all the tooltips". It has a bunch of extra information, but the data backend is the same.

Now, old tooltips did and still do their job:



Not great, not terrible.

However, my primary goal was to create extremely simple tooltip presentation that is also visually appealing. Like construction menu, this is the first place where a player looks to understand a building or item or anything. For example, the first thing a new player might learn is these:



Lumberjack and sawmill aren't exactly complicated, but a player who has learned this "language" can look at a more complex tooltip and understand what is required:



Then, from there I can use the same formula and expand until I have, for example, cheese inspection:



There's a whole lot of different things I can show. My main design problem was actually limiting which info I show. For example, tooltips are limited to the most important stuff.

Micropedia

And so the Micropedia is a separate in-game window that has an organized list of every entity and concept in the game. (Well, not every every one, but all the main ones anyway and then some.)



I expect that Micropedia would serve two primary use cases - (1) looking up something specific and (2) just browsing.

For the (1) case -- the player likely has a question about something, probably what some entity is or does or needs. If Micropedia can actually answer such question, then the quickest way to the answer is most likely through a search:



Opening Micropedia instantly focuses on the search bar and you can start typing. Hit Enter and it will go to the best result.

Or alternatively for (2) browsing, everything in Micropedia is broken down by categories (items, buildings, animals, techs, etc.) and then each item is listed (mostly, alphabetically). So you can see and browse all entries.

Currently, Micropedia is rather technical and doesn't list many specific values or go into explainations. I will be adding more of these in the future.

Intermediary items

I combined several buildings, and removed all intermediary items (see the full notes for the list). This may or may not break some games, depending on how those building were arranged. The merged building are Brickyard, Paper Mill and Textile Mill:



There are a few items in the game that are "intermediate". For example, Cheesemonger first brews Milk into Curd and then pressed Curd into Cheese. This Curd item is a real in-game item with all the related features. Then there's buildings like Brickworks and Brickyard which not only have intermediate Grout, but also Unfired Bricks delivered between them.

I think it was a cool idea to show these items and to see them carried around. The problem is that these clutter up the UI -- every place that lists items, like item report, also lists these items. (And if I were to just hide them, then what's the point of having them?)

I also adjusted the inspection HUD to better show to the player that there's a "virtual" item that gets transferred between auxiliaries. For example, Brick Moulder:



Future plans

This update was a little more chill in terms of workload. It still took twice as long than I had planned. And the UI work is always tricky. But it was still "holiday reduced workload update". However, I do need to get back to some of the tough changes.

I want to get back to expanding the end goal and making the monument a larger objective. And there are numerous steps along the way. I'm not even sure how large and complex each step would be. For example, I have to make multi-tile buildings. I need to change how construction tasks work and allow multiple builders. Builders need to be able to carry items. I need to rework how construction input items are stored and used/reclaimed/counted. I want to add multi-step construction for the monument. This probably means building upgrading. Likely I need foundation/platform construction. I need to add more and new materials for all of it. Etc. In short, my main goal for "endgame" has a lot of mini-goals that I will likely add one at a time.

Full changelog

Changes

• Remove Brickworks, Grout and Unfired Bricks
• Grout Mixer and Brick Moulder are now part of Brickyard
• Brickyard now directly receives Sand and Clay instead
• Remove Pulp Mill and Paper Pulp
• Pulp Vat is now part of Paper Mill
• Paper Mill now directly receives Hemp and Water instead
• Remove Carding Mill
• Carding Machine and Spinning Mule are now part of Textile Mill
• Textile Mill now directly receives Hemp and Wool instead
• Remove Linen Sliver, Linen Yarn, Wool Sliver and Wool Yarn
• Remove Unfired Pottery
• Remove Clean Fleece
• Remove Curd
• Remove Honeycomb
• Add Micropedia window - an organized information repository - split into categories and their entries
• Add categories for Micropedia - concepts, items, buildings, roads, villagers, animals, props, tiles, technologies and seasons
• Each entry in Micropedia shows its information - description, sprite(s), usage and some hard-wired related info
• Entities and links are clickable in Micropedia, switching to the corresponding entry
• Add unique recognizable icons for all items, roads and most buildings
• Most places in UI/HUD use the new icons for entities
• Expand entity tooltips to include usage/production information and other most-relevant information
• Add various new concepts
• Add and tweak various icons
• Add and tweak various sprites
• Change descriptions for all the changed buildings, items and others
• Remove Water Tower
• Add "Hide UI" button to pause menu that hides UI/HUD in-game (and prevents input for the duration of it)
• Building workers are now more reluctant to carry their own items
• Beehive now shows a warning when no Flowers are in the operating range
• Add a privacy notice and some extra info to save upload window; make toggle for optional Steam ID submission
• Remove the Population count requirement to unlock the Technology Branches
• Add a goal for building Town Hall
• Add wild Animals - Deer, Boars, Foxes, and Wolves
• Wild animals will spawn in Animal Habitats up to a limit
• Animal Habitats spawn and despawn in the world based on surrounding forest "score"
• New worlds and worlds loaded from older saver will have up to the default number of Animal Habitats spawned
• Animal Habitats show an in-world indicator and the mouseover tooltip provides additional information
• Rename Pork to Meat and Ham to Roast
• Add Hunting technology available for research from the start
• Add Hunter's Lodge building unlocked with Hunting
• Wild animals can be hunted - the worker will approach, shoot and harvest the animal for Meat
• Recently deceased wild animals can be skinned - the worker will harvest the animal for Meat
• Hunter's Lodge can individually toggle which animals are hunted
• Wild animals that die leave corpses instead of despawning immediately; the corpses eventually decay
• Add Game Warden's Lodge who will tend nearby habitats
• Herding now requires Hunting instead of Farming
• Smokehouse and Drying Rack now unlock with Hunting instead of Herding
• Add more particle effects to Drying Rack
• Add Animal and Animal Habitat concepts
• Trees no longer grow during Winter
• Forester and Florist no longer plant during Winter
• Various text and sprite adjustments
• Add wild Animal "baby" versions
• Only grown Animals can be hunted or skinned by the Hunter's Lodge
• Animal Habitats in new worlds generate with the appropriate number of Animals

Fixes

• Animal Habitat improved quality score from Game Warden's Lodge not being deducted after the improvement time runs out
• Workers at some buildings with multiple auxiliaries would not complete work at auxiliary but run off to another auxiliary
• Tooltips showing "through" opaque/blocking UI elements
• Mouse scroll wheel no longer zooms in/out when over HUD/UI
• Keyboard numpad +/- zoom keys now have a reasonable delay to zoom in/out one "step" at a time
• Water not being "unlocked" from the start and inspection HUD not showing Well items
• Barn is no longer unlocked if none of the items it stores are unlocked yet
• HUD pause menu button not playing a "click" sound
• Incorrect distance calculation for pending deliveries
• Farm, Gardener and Arborist planting and collecting their production entities on unfinished auxiliary buildings and on untilled tiles
• Transit toggle buttons blocking storage selection in storage building inspection HUD panel
• Fix Water Tower being treated like a Tavern and fulfilling Houses tavern resident sentiment
• Fix rare exception/stall bug when a worker switches a harvest task at the same as the target plant decays
• Fix rare exception bug when an animal regains its product at the same time as dying
• Fix Gardener and Arborist occasionally not tilling a tile just after planting in all other tiles
• Fix wrong Drying Rack meat sprite layer
• Correct Unfired Pottery plural name typo
• Play the correct UI sound for road upgrading via the U shortcut
• Fix a very rare error where a task for livestock animal is assigned right as it is dying
• Fix animal inspection HUD box lingering after animal leaves the selected tile
• Fix Windmill starting milling and creating Flour without any Wheat
• Fix Hunter's Lodge workers sometimes running on the spot when approaching animals
• Fix Farms, Gardeners, Arborists planting things in the wrong Seasons
• Fix building workers occasionally not doing anything (because they had another task planned, which is no longer valid), for example Farm workers not tilling a field
• Animals in new Habitats start aged proportionally (instead all dying at the same time)
• Closing early access intro window with Esc doesn't open patch note or link window with main menu

Balancing

• Wild Animals spawn a bit slower in Animal Habitats

Optimizations

• Faster tile border and indicator re-drawing and minimize the lagspike on swapping/relocating them
• Buildings to not look for tasks for disabled worker slots
• Remove redundant task condition checks when first deciding on a task
• Add delay between buildings failing to assign potential tasks
• Remove expensive periodic task checks that can instead be aborted later
• Check building tasks according to priority to avoid unnecessary checks

Rudy
Snowy Ash Games
...

Search news
Archive
2024
Nov   Oct   Sep   Aug   Jul   Jun  
May   Apr   Mar   Feb   Jan  
Archives By Year
2024   2023   2022   2021   2020  
2019   2018   2017   2016   2015  
2014   2013   2012   2011   2010  
2009   2008   2007   2006   2005  
2004   2003   2002