we're releasing our first of at least two main releases for our 9.7.x Performance Update series. Please note that this update is only the start, laying groundwork for future updates that will contain a lot more optimization than this one. Next to a bunch of optimizations for both client and server we also have a bunch of gameplay changes and bug fixes. Let's jump right into it:
To improve client performance we made several different optimizations:
- We optimized the recycling of unused views. Views are used for data synchronization between client and server, but when specific data is no longer needed on the client these views should be recycled to save memory and avoid useless synchronization. Until now it was possible to have lag spikes during that recycling process, which have now been removed with an improved algorithm.
- We fixed a world object views leak. Views for world objects (like work tables and stockpiles) weren't recycled on the client and kept in memory forever, receiving updates even when out of range or destroyed.
- We simplified tree objects to remove unnecessary elements. When loading chunks, trees contribute significantly to the time it takes to spawn in objects. This change improves the time needed for spawning in trees. This is still work in progress and further optimization on it will follow in the next updates.
- We removed Global Illumination. Global Illumination, which was on by default, led to a very significiant performance decrease due to the implementation used being outdated and by now unmaintained. We can now focus on purely improving our default settings without the impact Global Illumination had while investigating how we can bring back the feature better later on.
Updated Housing System
In preparation to another new system in Eco we are currently working on - Culture - we have reworked the way our housing system works. We'll reveal more about the culture feature once it's time for that, so here we'll only talk about the changes to housing.
The calculation of housing points now got a bit more complex: As before, you still have the diminishing returns feature when stuffing too many of the same objects into a room, but now we have additionally sorted furniture into further categories:
- Primary Furniture, that is bound to a specific room type and designates the room type.
- Support Furniture, split into the categories "Seating", "Decoration" and "Lighting" that can be used in any room.
The amount of housing points Support Furniture can provide is now capped to a specific percentage of the effective amount of housing points you currently get in that room from the primary furniture you placed into it after diminishing returns were taken into account. For Seating and Decoration that is 50% of that value, for Lighting it's 30%.
The idea behind this is to allow players to be more creative without taking a hit on their housing points if they don't cram everything we have into rooms, forfeiting the decorative aspect of decoration. It also allows us to balance the maximum amount of housing points that are achievable much easier, as we only need to focus on the Primary Furniture for that in the future.
For improving server performance we made several improvements for memory allocations which leads to a decrease in lag spikes that could happen at garbage collection:
- Animal Pathfinding was optimized by avoiding repeated calculations, resulting in a 50% decrease of CPU time spent on animals and less memory allocations.
- World Layers were optimized by implementation of a cache for plants based on cells, resulting in a 70% decrease of CPU time spent on world layer calculations and avoidance of memory allocations.
- Localization was optimized by removing the lock that prevented reading localization strings from two different threads, resulting in faster sent client updates.
- Storage (as in Game Saving) was optimized by avoiding the generation of a lot of garbage during the zipping process for the savefile by forking the library we use to do that and making it use ArrayPools, resulting in 50% less garbage created by the process.
- Startup was optimized by improving support of multithreading, resulting in 50% less time needed to start the server for small servers.
Minor Features Bounding Boxes
We know that many of you like to use icons to decorate and totally love seeing that - from cool shop offering signs to such mimicking paintings! In this update we made some changes to how that works. To display an icon on a sign or elsewhere you need to use the <ecoicon item='X'> tag. There are two options you can use that we'll explain with an example:
- To show an icon with the gradient background (if it has one), you need to specifiy the item ID with the correct capitalization: <ecoicon item='IronPlateItem'> will hence create an icon of an iron plate with its background.
- To show an icon without the background you need to specifiy the item ID in all lowercase: <ecoicon item='ironplateitem'> will hence create a icon of an iron plate without its background.
- Added: Glassworks table, created by a potter in the kiln for use by Glassworking.
- Added: Vases with a housing point value of 1.
- Added: Cotton Lint, a new item added into the production chain of cotton thread.
- Added: Copper Plates, made by Mechanics using the Screw Press, similar to Iron Plates.
- Changed: Wooden Fabric Bed housing points increased from 3 to 4.
- Changed: Hewn Nightstand housing points increased from 1,5 to 2,5.
- Changed: Hewn Dresser housing points increased from 0,5 to 1.
- Changed: Lumber Dressers housing points increased from 1,5 to 3.
- Changed: Diminishing return of all dressers decreased from 0,6 to 0,5. (The value of the diminishing return decreasing means the diminishing returns are effectively higher)
- Changed: Cast Iron Bed housing points increased from 3 to 4.
- Changed: Cast Iron Royal Bed housing points increased from 3,5 to 4,5.
- Changed: Nylon Futon Bed housing points increased from 4 to 5.
- Changed: Bookshelves are now considered an object for the living room.
- Changed: Animal Mounts now use Hewn Logs instead of Lumber to craft.
- Changed: Boilers now require additional copper plates to craft.
- Changed: Heat Sinks now use copper plates instead of copper bars.
- Changed: Heat Sinks now require more copper wiring to craft.
- Changed: Portable Steam Engines now require additional copper pipes to craft.
- Changed: Excavators, Skid Steers, Steam Tractors, Steam Trucks and Trucks now require additional Light Bulbs as a static ingredient to craft.
- Changed: Vehicle modules now have durability that is used on tile interactions. The durability for them is 2.500 and they are repaired by using iron. Currently affected modules are: Steam Tractor Sower, Steam Tractor Harvester, Steam Tractor Plow.
- Changed: All items in Glassworking with the exception of Fiber Glass are now crafted at the Glassworks table.
- Changed: The calorie reduction per level in the specialty was changed as follows:
- Level 1: Decreased from 20% to 5%.
- Level 2: Decreased from 25% to 7%.
- Level 3: Decreased from 30% to 10%.
- Level 4: Decreased from 35% to 12%.
- Level 5: Decreased from 40% to 15%.
- Level 6: Decreased from 45% to 17%.
- Level 7: Decreased from 50% to 20%.
- Level 1: Decreased from 20% to 5%.
- Changed: The maximum yield of rice was decreased by 1.
- Changed: Rice now requires a sickle or scythe to harvest.
- Changed: All tools except Hammer, Machete, Drill and Road Tool now use a flat 20 calorie cost per use.
Bug Fixes & Improvements Audio
- Fixed: When switching from a fishing pole in your hotbar to a chainsaw in your hotbar the chainsaw would play the fishing sound effect instead of the one for chainsaws.
- Fixed: Fishing pole sounds were playing for all players regardless of distance to the audio source.
- Fixed: Players couldn't hear the sound of vehicles of other players until they started to move.
- Fixed: Player could still hear the sound of vehicles of other players even though the vehicle had no more fuel and was hence not running.
- Fixed: Logging out underwater and then logging into another world caused ambiance sound effects to no longer function.
- Fixed: The harvesting sound stopped playing after many chunks were loaded and unloaded.
- Improved: The running animation for avatars that do not hold a tool has been removed due to reports of causing motion sickness.
- Improved: Avatar animations in third person view now match the movement direction instead of sliding when moving diagonally.
- Fixed: When trying to tax a player a negative value through the treasury the UI simply closed without any action taken instead of displaying an error.
- Fixed: Civic article names do no longer get truncated when they're within the character limit.
- Fixed: When taking a harvest contract and harvesting a shovelable plant for the contract a crash occured.
- Changed: Vehicle scripts have been moved, which results in any modifications or overrides to them requiring an update.
- Changed: Due to changing the tooltip system used for Ecopedia all item and object overrides will need to be adjusted, specifically the attribute "display: InPageTooltip.DynamicTooltip" for Ecopedia needs to be removed.
- Improved: Claiming with the claim stake does no longer play an animation.
- Fixed: The fishing pole shadow wasn't attached to the avatar.
- Fixed: Fishing line and lure were not syncing properly for other players.
- Fixed: Bows and arrows were not syncing properly for other players.
- Fixed: When you leave a cart after you entered it with a tool animation playing the tool animation will no longer continue.
- Added: The steam tractor now has working lights.
- Fixed: In default controls mode, when pushing a cart instead of pulling it the controls got erroneously inverted.
- Added: The "Authorized Consumers" text in world objects now has a explanatory tooltip.
- Improved: The creation of generic work orders does no longer create a map marker.
- Fixed: Some minor issues in the display of title tooltips.
- Fixed: UI elements that faded in didn't display correctly.
- Fixed: Several causes that could lead to world objects becoming uninteractable. We might not have caught all of them, so please keep reports and logs coming if you still experience this issue.
- Fixed: World Objects that required solid ground wouldn't stop working immediately after the requirement was no longer fulfilled.
- Added: A new ecopedia page listing all living room furniture was added for easier navigation.
- Changed: Rice is no longer required to be collected to finish the tutorial task "Find Food" due to it now requiring a sickle to be harvested.
- Fixed: Players were unable to take fuel out of vehicles when they were authorized but didn't own the vehicle.
- Fixed: Lumber Stockpiles could cause error spam in the player.log, leading to diminished performance.
- Fixed: Using the /unstuck command while driving a vehicle caused the player to no longer be able to interact with the vehicle.
- Fixed: Wolf Whisperer rewards were not available in void storage for eligible players and Alpha rewards had the wrong display icon.
Server Configs Users.eco.template
- Added: "SLGAccountName" config variable, used only for QA mode purposes.
- Added: "SLGAccountPassword" config variable, used only for QA mode purposes.
- Added: "SpawnSearchRange" config variable, determining the range around a potential player spawn point in which all requirements to finish the tutorial must be available when not using a fixed spawn point - defaulting to 600.
- Added: "NewGameTemplate" config variable, specifiying a prepared savegame that is to be loaded whenever a new world is generated instead of regular world generation.
- Removed: "UseCacheForDBQueries" config variable, it is now obsolete due to being enforced at all times.
- Added: "ReasonForAutoShutdown" config variable, acceptable contents are "Restart", "Shutdown" and "Update", determining exit code for the automatic shutdown / reboot feature.
- Added: "ReservedSlots" config variable, determining the amount of slots available to players assigned queue priority permissions beyond what "DefaultSlots" would allow - defaulting to 5.
- Changed: "MaxConnections" config variable was renamed to "DefaultSlots".
- Added: "ServerVoiceIdentifier" config variable, for containing an ID for the Vivox voice chat implementation - this is auto generated, should never be changed and never be copied to other servers as otherwise you will hear the same voices on all servers with the same ID.