Versions/AP-408920

**AP-408920** is an update for *Oxygen Not Included* released on May 5, 2020. Official Release Notes

## Update Information

Hey friends!

We're putting out another hotfix on the live version of the game today! We've knocked out a bunch of recently introduced bugs, cleaned up and expanded some of the new features from the Automation Pack, and added a lot of refinement to the way crashes and mods are handled.

Additionally, there's a new color blindness mode which can be selected from the options menu. Read all about it and leave comments on this post!

I'd also like to mention that like many other teams, the ONI team has been affected by the transition to working from home. We're not sure yet how this is going to affect our future releases, but we're glad to provide this weird pee simulator to amuse you during these times and we're going to keep making it better! We're still here and still working hard to improve the game, so please report bugs and leave feedback for us.

Thank you!

**FULL PATCH NOTES:**

### Features and Changes

* Add Protanopia and Deuteranopia color blindness modes.
* Added Feedback button below patch notes as shortcut to feedback options.
* Mod and Crash Screen Improvements:
	+ Mods Screen button says "Browse" instead of "Subscription" for local mods. Hitting the button always opened a folder to the local directory, now the text matches that
	+ Hook up new art for crash report screen
	+ Enable/Disable all mods button on ModsScreen
	+ Errors encountered while mods are installed will now bring up an error dialog.
	+ Fix localization on the error screen
	+ Error screen now has a "MORE INFO" button that reveals the callstack, and a copy to clipboard button
	+ Mods referenced in the stack trace will be disabled by default (unless they are dev mods).
	+ Disable mods that are non-dev mods when they fail to load, even if other mods are dev mods. This was causing infinite loops for mod creators when a mod was crashing that had nothing to do with what they were developing
	+ Mods can be disabled or enabled directly on the error screen.
* Under the hood, Timer Sensor now counts Logic Ticks rather than Time.time, which will make them more accurate and better at staying in sync with each other.
* Counter Sensor improvements:
	+ Add "Advanced Mode" toggle to Counter sidescreen. Advanced Mode performs a % on the count, rather than a direct comparison, allowing for actual binary counting.
	+ Advanced Mode: sends a Green Signal only for one logic tick, rather than continuously.
	+ Standard Mode: After its initial 0, Counter Sensor sidescreen displays its count as "10" rather than 0.
	+ Counter sidescreen visual polish.
	+ Improved counter's reset behavior to be more reliable.
* Added some new hammer strike sounds
* New logic gate sounds, changes and remixing
* Sweepbot Station contents are always marked for clearing - similar to user marked sweeps on floor ore. This allows their storage priority to be set right on the Sweepbot Station
* Notifier sidescreen now has tooltips for the three notification types.
* New !! icon for VERY BAD notifications
* OR and XOR gate backpieces shaped to look more like their symbols.
* Add Copy Settings button to Signal Switch, Power Switch, Ribbon Reader, Ribbon Writer.
* Counter Sensor description updated to make it more clear that it resets on the next signal after reaching max count.
* Add localized string for "Reported Error" confirmation dialog
* Ore chunks show their element description if necessary in Sweepy/receptacle side screens. Player visible debug message removed.
* Revised description of the Feedback window
* If world generation fails it displays an error message instead of continuing to selecting starting Duplicants
* World generation will no longer retry with a new seed if a seed fails. This means that errors in worldgen will cause failures instead of silently changing the seed in the background.
* Fixed world generation failing on some seeds resulting in a world filled with Abyssalite. This was reported primarily on Volcanea Asteroids but it could happen on any asteroid type with world traits.
	+ Note: due to the combination of the above two fixes, a small number of seeds have been changed where previously that seed would fail on the first try and then succeed. This will not affect the vast majority of seeds.
* Medical Cot severity slider requirement default is set to 70%.

### Fixes

* Further fixes for constructions getting dragged around during autosave and when the Notifier triggers
* Fixed building toggle errands not being saved.
* Fix rocket module meters not matching the offset of their parent module
* Fix crash when deconstructing a tile
* Counter Sensor defaults to the "off" anim state when first built.
* Counter Sensor no longer sends Green Signal for its initial "zero" state, making daisy-chaining possible without requiring to reset.
* Copy Settings works correctly for Liquid Reservoirs and Gas Reservoirs
* Signal Switch and Circuit Switch sidescreens now scale correctly with UI scaling.
* Signal Switch now initializes in the right animation based on whether it's on or off, instead of always defaulting to off.
* Signal Switch no longer says it requires Duplicant operation.
* Control Inputs on the Signal Selector/Signal Distributor now only read from the first bit of an Automation Ribbon.
* Canister emptier no longer shares auto-bottle strings with bottle emptier
* When paused, multiple Signal Switches/Circuit Switches can be toggled at a time, and general improvements to the functionality of the player controlled toggle sidescreen.
* Automation Ribbon Bridges now correctly de-tint if they are offscreen when the Automation Overlay is closed
* Light audio mix and performance fixes around creatures
* Fixed issue allowing for 2 Sweepys to be produced for the same base station
* MOTD strings can now be translated by Language Mods
* Sweepy fixes:
	+ Refined metal for sweepy production will no longer be cleared from the Sweepy base station as if it were swept clutter. This should fix some infinite delivery loops with the sweepy station.
	+ Improved Sweepy status item when trapped
	+ Fixed empty status item for Sweepy. Added status items for common states. Added placeholder string to base station description to describe emptying behavior.
	+ Fixed the dying animation sometimes being interrupted by the idle animation.
	+ Fixed bug allowing Sweepy to magically change the temperature of things swept.
* Fix some instances of dupes still carrying on conversations after death.
* Fix crash when a dupe greets another dupe right as they're dying.
* A couple fixes for trying to retrieve the schedule of a dead dupe.
* Fix crash when a critter dies right before they get wrangled.
* Fix crash when a building or plant is destroyed while its room is being updated.
* Fix achievement crash for very old saves.
* Fix retry-loop when a translation mod becomes enabled somehow.
* Prevent softlock when a modal dialog is rendering behind the crash report screen.
* Separate limits for sliders and text input fields in sandbox tools. Should allow very negative heat gun values and prohibit <1 brush size values.
* Sandbox brush size limited to 50
* Sandbox settings revert to default settings if the saved data is not applicable (update IDs loaded in base game). Mass, temperature, and brush radius values are better clamped.
* Further fix for refunding secondary materials from construction when a building is replacing itself
* Tweaks to the Reader/Writer and Ribbon art to overlap better and display the proper animations
* Wheezewort description updated
* Sweepy Recharge description updated
* Fixed blank status item for Sweepy moving to charging station
* Make "Infinity" and "-Infinity" translatable.
* Add closing color tag to privacy policy description
* Fix sandbox backup save file path on non-Windows machines
* Potentially fix broken "Browse Log Files" link for Linux
* Fix color for red duration tooltip on Timer details screen
* Hover tooltips properly use selected color mode for logic description strings
* Duplicants can no longer get the "Pacifist" trait if they have a Digging interest. This prevents the bug where their stats would reroll if they ever had both Digging interest and Pacifist.
* Door toggle buttons once again animate while waiting for a Duplicant to perform the action
* Remove duplicate "Tutorial: Scheduling" entry from the codex
* Fix typo in Pip codex entry
* Weight plates now properly detect when an element solidifies directly on top of them
* Fix crash when creature dies while it's laying an egg
	+ Also cleanup the inactive egg left in the scene
* Fix old hack that had sweepers always drop their contents on load. This was to stop them from putting their current contents into an unrelated fetch. Now the arm drops everything only if its new fetch doesn't match the current request
* Fix unrelated entities taking on mass when combining same elements on a cell
* Fix crash when a sweeper has to drop an item
* Fix Counter not changing output signal when receiving reset signal
* Fix inconsistent Timer Sensor behaviour dependent on framerate
	+ This will reset all timer sensors for save files currently on the preview branch.
* Fix strange input if a mouse button was clicked twiced in a frame. This caused the area measurement numbers to stick around, "phantom" constructions, and other oddities.
* Properly load localized string keys for Sweepy status messages
* Fixed Auto-Sweepers sometimes dropping their contents before their errand was actually finished

### Optimizations

* Removed validations in our arrays which were were taking up over 5% of the frame
* Minor optimize to ConduitFlow
* Bridge optimizations save about 3% of the frame when a steady stream of elements are passing through conduit bridges
* Reduce memory usage during save:
* State Machines don't allocate extra memory
	+ Compress save data directly into the filestream instead of using a separate buffer
	+ Move our serialization of the Sim directly into our primary buffer
	+ Estimate our deserialization buffer capacity based on last load or save
	+ Save ~1% frame time when setting animation symbol overrides
* Reduce memory usage when saving numbers. And there are a lot of numbers in this game...
* Reduce memory usage for writing out encoded strings
* Reduce Report Manager memory usage while saving
* Slight improvement to the speed of the algorithm for fetch errands
* Slight improvement to the speed of data lookup for fetch errands

### Modding

* Added hooks to LogException in KMonoBehehaviour's try-catches for mod support
* Removed IEffectDescriptor; in every case except one it just deferred to the game object anyways, so no reason to inject the BuildingDef. This makes all effect descriptors use the same interface, simplifying things.
* Support archived versions for mods
	+ This will allow modders in the future to publish versions of their mod simultaneously for the testing and release builds. There's no immediate changes to be made right now. However, next patch this can be used to update mods on the Testing branch without breaking them for Release players!
	+ The "current" most up-to-date version of the mod continues to live in the root folder of the mod as always.
	+ Archived/previous versions of the mod can be moved into an 'archived\_versions' folder, and their last good version specified in a top-level file called 'archived\_versions.yaml'. Its structure looks like this:

archivedVersions:
- relativePath: archived\_versions/0
  lastWorkingBuild: 10000
- relativePath: archived\_versions/1
  lastWorkingBuild: 10001
You can join in the Discussion Topic here.

If you run into a bug, please visit the Klei Bug Tracker.