This week I’ve been trying to get through some of the Banished gameplay bugs that are the most annoying.
I hope to have a patch up for testing sometime next week. If no terrible game breaking items get reported for the patch, I’ll set the build live to everyone after a week or so and build new installers for non-steam builds.
Here’s a preview of the change list for the patch so far:
- * Mouse buttons now obey system setting for flipped left/right buttons.
- * Input options now allow binding of mouse actions.
- * Input settings can now be bound to any of eight mouse buttons.
- * Fixed a bug that cause meat and other resources to show up in the corner of the map.
- * Fixed being able to pop a building back into existence after being damaged by using the cancel removal tool or reclaim button.
- * Fixed grave count on cemeteries when it is marked for removal then reclaimed.
- * Fixed crash at trading post when trading, dismissing trader, and then selecting a custom order.
- * Fixed a bug that allowed auto purchase to over fill the trading post.
- * Fixed a bug that caused cycling through laborers to show children and students.
- * Foresters no longer cut down orchards.
- * Fixed water showing inside merchant boat.
- * Builders will no longer walk the long way around to the other side of a bridge or tunnel when constructing it if it’s more than twice the distance to the closer side.
- * Fixed building pause icon staying up when a building completes construction after pausing construction.
- * Fixed a bug that caused starving or freezing people to get stuck in a loop doing the same job over and over if no food or warmth was available to resolve the starving or freezing issue.
- * Fixed a bug that caused pending roads to not be cancelable if they were under a tree, rock, ore, etc.
- * Fixed a bug that caused roads to be unremovable.
- * Fixed a bug that caused areas to be unusable after roads were removed in certain cases.
- * Dirt roads can no longer be quick removed by zoning over them with stone roads and then removing them. They now revert back to dirt roads and work has to be performed to remove them.
- * Placing stone roads over pending dirt roads no longer cause unusable areas.
- * Disasters are now disabled in tutorials.
- * Fixed several spelling and grammatical errors.
- * Fixed crash in audio streamer due to missing thread synchronization.
- * Fixed a crash that occurred if a video card doesn’t support sampling from a depth texture.
- * Windowed mode now allows resizing of the window.
- * Window position is now remembered and restored on game shutdown/startup.
- * Graphics initialization now has better error handling and exception recovery.
- * Added a game launcher that allows changing video settings if the game doesn’t display properly on startup.
- * The game launcher only shows if an error occurred, on first time startup, ctrl is held on startup, or /launcher is on the command line.
- * Added selection of refresh rate to graphics settings
- * Added selection of graphics adapter to graphics settings.
- * Save games now check for truncation and crc validation to make sure save games haven’t been corrupted.
- * The scene shown on the background of the main menu now has better error checking in case the file has become corrupt. If the file is corrupt it will show the original scene that the game shows on first time startup.
- * Files are now created in a temp directory and are moved after writes complete. This stops partial files from being created if a thread crashes while a background thread is performing file I/O.
The last major issue I’m currently looking at before the patch is the ‘March of Death’ problem on really large maps. General laborers end up walking a really long way to do an odd job and starve to death on the walk back.
Computing a perfect solution of who should do what takes too much CPU time, so I’m playing with some other heuristics.
What I’m trying to do is prioritize what citizen gets assigned a job based on how far away it is. However there’s a problem with a simple distance limit. It’s possible that something won’t ever get done if the people are far away. So I’m trying to set the distance limit based on how long the job has been pending. That way only citizens within range of a job will do it when it’s newly created, but once a certain amount of time passes without the job getting done, the range will expand allowing someone across the map to try to get it done instead.
Another issue with the limit is that if a player marks a bunch of trees to be removed that are far away, the people won’t head out across the map for a while – until the distance limit increases. So an additional heuristic needs to be checked, such as if no laborers have been assigned the task because of distance limits, then the distance limit should be increased early so that the nearest worker will do it sooner.
I’m hoping this won’t unintentionally break the simulation – it should actually make cities run more efficiently – but more than once I’ve made simulation changes that acted against expected behavior. I suppose that’s what testing is for.