- Desynced 1.0.18154
- Behavior Editing Improvements
- Added windowed mode to behavior editor (limited view which still allows map and unit control)
- Added new guided behavior tutorials (accessible via the behavior help welcome screen)
- Added faction wide memory as an option for all memory behavior instructions (and also in the Memory Viewer window in the behavior editor)
- In the Memory Viewer, add deleting of a single array besides just the 'Clear All' button
- Performance statistics for behaviors: Adds a new special view in the 'Library' window with statistics for instructions executed per second as well a line of text with stats at the top when editing a behavior main routine
- Added view options to behavior editor to control camera zoom/height as well as allow the main editor to be made transparent to show the game view behind it
- Make behavior instruction search also match the English names even in other languages as well as make it ignore spaces (so "canequip" will find "Can Equip")
- Find certain instructions by a list alternative names (i.e. "set" or "assign" will also find the 'Copy' instruction)
- Overhaul of instruction categories (into "Flow", "Logic", "Loops", "Values", "Units", "Movement", "Inventory", "Logistics", "Components", "Production", "Communication", "World", "Memory")
- Instead of stopping a behavior on a crash (i.e. exceeding unlock step limit or call depth), keep it paused so the failure can be inspected in the behavior editor
- Rework behavior unlocking: When an unlocked behavior ends and restarts, reset unlock state and wait 1 tick
- Rework behavior unlocking: Add extra options to the unlock instruction to allow specifying the instruction limit and 2 modes 'Pause on limit' and 'Continue next tick'
- Rework behavior unlocking: When starting a server besides disabling unlocking, a maximum limit of allowed unlocked instructions can be set
- New instruction 'Return': For called sub-behaviors with an optional branch name which enables diverting the logic to a different path on the outer call node
- Additions
- Added game option to disable story related popups
- Added icon to 'Foundation' object type radar filter that is distinct from the foundation unit type icon
- Make tooltips close by pressing Esc
- Changes
- Show "Destroyed Object" instead of nothing on a register or behavior value that contains a target reference that has been destroyed
- Show boosted movement speed more exactly in the unit tooltip (rounded to one decimal place)
- Make a drone which has its GOTO register explicitly set to 1 not automatically dock (until now docking was done with both 1 and the default 0)
- Keep items reserved on the ground when placing a new construction over it (avoids items and components for relocation getting absorbed)
- Don't show contents of a dropped item in a register with a target reference if the player faction has no visibility on it
- Allow Assembler to be produced in Human Factory
- Allow Metal Bar, Metal Plate and Reinforced Plate to be produced in Reforming Pool
- Allow Power Petal and Phase Leaf to be produced in Pylon
- Changed recipe of Alien Factory, Hybrid Worker
- For a bot that isn't connected or without "Deliver Items" set, require items requested by the player via the unit interface to be delivered by an order carrier in the same network (instead of having the bot go pick it up by itself, even across logistics networks)
- Clarify register selection category names ('Object Type' became 'Filter Value', 'Value' became 'Label Value')
- Removed the 4 docking garage item slots of the Alien Pincer unit
- Rename buildings to match the actual size as it appears at the default rotation (all "Building 2x1" are now "Building 1x2" and "Building 3x2 (2M2S)" is now "Building 2x3 (2M2S)")
- Show numbers in the Control Center item detail tab and Progress window milestone tab with a comma thousands separator
- Add custom icons for the integrated Intel Scanner component on the Human AI Explorer unit, the integrated Power Transmitter component on the Human Power Plant building and the integrated Blight Extractor component on the Blight Complex building
- Add 400 recently added and modified strings temporarily localized via machine translation
- New Behavior Instructions
- New instruction 'Loop Coordinate': Loops through coordinates in a range (given minimum and maximum) around a unit or coordinate
- New instruction 'Category Switch': Diverts the program depending on the category of the passed value
- New instruction 'Memory Sift': Remove multiple items of a memory array matching a filter
- New instruction 'Check Logistics': Query the logistics settings of a unit
- New instruction 'Get Grid Info': Returns power grid information at a location
- New instruction 'Loop Ingredients': Loop over ingredients required for production, construction, research or repair (with option to get remaining, total or single step amounts)
- New instruction 'Compare Data': Compares the data part (identifier, target reference or coordinate) of two values
- New instruction 'Loop Researched': Loops through everything of a given type (components, items, units, etc.) the faction has researched, with option to only return what can be made in available production components
- Changed Behavior Instructions
- Keep arguments and pins associated on instructions 'Call', 'Load Behavior', 'Place Construction', 'Produce Unit' when modifying a referenced behavior or blueprint
- Allow inventory instructions ('Count Slots', 'Loop Inventory Slots', 'Inventory Total') to be used on dropped items and lootable explorables
- Make remaining loop type behavior instructions match others, to clear an output argument if not looping once, otherwise keep the last result ('Loop Units (Range)', 'Loop Research', 'Loop Research Unlocks', 'Loop Research Ingredients', 'Loop Recipe Ingredients', 'Loop Repair Ingredients', 'Loop Signal', 'Loop Nearby Resources')
- Allow many instructions to operate not only on one's own faction but also units of allied factions, unlocked explorables and dropped items ("Get Space for Item", "Check Space for Item", "Get Health", "Get Shield", "Get Battery", "Check Health", "Check Battery", "Get Unit Info", "Get Unit Power Info", "Count Items", "Have Item", "Can Equip", "Has Like Component")
- Instructions 'Notify' and 'Set Signpost': Add support for custom tags like {My Tag} which allows embedding additional values
- Instruction 'Break': Add a count number option to break out of multiple loops at once
- Instruction 'Place Construction': Add support for placing multi-building blueprints
- Instruction 'Place Construction': Add output value 'Target Reference' with a reference to the placed construction site (first if placing a multi blueprint)
- Instruction 'Get Unit Info': Add options to query width and height of a unit/building
- Instruction 'Get Unit Info': Return an empty value instead of 0 when querying with an invalid input
- Instruction 'Deploy': Support Human Lander deployment
- Instruction 'Lock Item Slots': When locking all slots, instead of being limited to storage slots, make it affect slots matching the type of the item being set (i.e. Storage or Gas)
- Instruction 'Unlock Item Slots': When unlocking all slots, instead of being limited to storage slots, make it affect slots of all types
- Instruction 'Data Type Switch' and 'Target Type Switch': Put all pins behind the expandable extra options so normally it only shows pins which are in use
- Instruction 'Get Unit Info': Fix querying "Charge Time" returning the value multiplied by 5 (now returns the number of ticks )
- Instruction 'Loop Equipped Components': Make it return the index (if multiple are equipped) alongside the component identifier (usable input for many other instructions)
- Instruction 'Loop Equipped Components': Change second return value to be the socket index (0 for integrated components) instead of just the loop iteration count
- Instruction 'Equip Component': The 'Socket Index' argument can now also be given as a component identifier (and index if multiple are equipped) to swap with an equipped component
- Instruction 'Memory Length': Fix to not only return identifier keys with the number but also target reference and coordinate keys
- Instruction 'Set Logistics': Added option "Connect To Logistics Network"
- Removed instructions 'Connect', 'Disconnect', 'Enable Transport Route', 'Disable Transport Route': Will automatically get converted to 'Set Logistics'
- Instruction 'Mine': Fix to avoid it resetting a miner component's progress when setting to a specific resource node target reference
- instruction 'Mine': Fix to not jump to 'Cannot Mine' branch when being able to mine but already is mining the same target
- Instruction 'Mine': Fix behavior stopping unexpectedly when specifying an amount when the unit already has enough in its inventory
- Instruction 'Mine': Fix 'Cannot Mine' branch not being taken on invalid inputs
- Instruction 'Mine': Accept dropped items as input if a miner can handle it
- Instruction 'Mine': Only modify miner components capable of mining the requested resource
- Instruction 'Check Blight': Add 'No Visibility' pin to match 'Check Altitude', add option to check for near blight (blight gas can be extracted there)
- Instruction 'Check Altitude': Add option to check for increased wind (high enough for increased wind power)
- Removed instruction 'Get Grid Efficiency': Will automatically get converted to the new 'Get Grid Info' - Breaking changes: Will no longer return a target reference to the unit, just the number
- Removed instruction 'Loop Repair Ingredients': Will automatically get converted to 'Loop Ingredients'
- Removed instruction 'Loop Recipe Ingredients': Will automatically get converted to 'Loop Ingredients'
- Removed instruction 'Loop Research Ingredients': Will automatically get converted to 'Loop Ingredients'
- Instruction 'Drop Off Items': Fix to limit dropping off only into owned or allied units/buildings and unlocked explorables
- Instruction 'Get Unit Info': Can now check a type identifier of a unit as well as a target reference to a non-owned unit
- Instruction 'Loop Products': Renamed from 'Loop Producer Items'
- Removed instruction 'Loop Unlocked Components': Will automatically get converted to 'Loop Researched'
- Instruction 'Check Altitude': Don't hide the "No Visibility" pin behind extra options
- Instruction 'Wait Component': Don't hide the "Not Working" pin behind extra options
- Instruction 'Divide': Add rounding mode selection and return a second value containing the remainder of the division
- Removed instruction 'Modulo': Due to Divide now optionally returning the remainder, existing nodes will automatically convert
- Instruction 'Signal Filter': Add more comparison modes ("Number Any Bit Match", "Number All Bits Match", "Fully Equal", "Data Equal", "Destroyed References")
- Instruction 'Signal Filter': Rework internal logic and make numerical checks consistent with 'Compare Number' (infinite is larger than anything, not is smaller than anything)
- Instruction 'Combine': Renamed from 'Combine Register', will be listed when searching for 'Set Number', 'Set Data' or 'Combine Coordinate'
- Removed instructions 'Set Number'/'Set Data'/'Combine Coordinate': Will automatically convert into 'Combine'
- Instruction 'Separate': Renamed from 'Separate Register' will be listed when searching for 'Separate Coordinate',
- Instruction 'Separate': Add a "Coordinate" output parameter (in addition to the existing separate X/Y parameters)
- Removed instruction 'Separate Coordinate': will automatically convert into 'Separate'
- Instruction 'Compare': Renamed from 'Compare Register' and clarified description
- Instruction 'Compare Type': Renamed from 'Compare Item' and clarified description
- Removed instructions 'Is Unit A' and 'Is a': Will automatically get converted to 'Compare Type'
- Removed instruction 'Compare Unit': Will automatically get converted to 'Compare Data'
- Instruction 'Stop Behavior': Renamed from "Exit", show in list when searching for 'Exit', 'Abort' or 'Quit'
- Instruction 'Data Type Switch': Added 'Target Reference' branch pin, make any unused pin continue with 'No Match'
- Instruction 'Target Type Switch': Renamed from 'Unit Type', added branch pins for Wall/Gate/Foundation/Dropped Item/Resource/Destroyed Object, make any unused pin continue with 'No Match'
- Instruction 'Is Empty': Will no longer match a target reference that has been destroyed
- Removed behavior instruction 'Get Unit Type': Will automatically get converted to equivalent 'Get Type'
- Instruction 'Count Items': Fixed to avoid behavior aborting when called with a target reference that doesn't have an inventory (i.e. wall)
- Instruction 'Switch': Add selection for comparison mode, variable number of cases with "Add/Remove Case" buttons
- Instruction 'Equip Component': Add optional arguments for a specific socket (allows swapping) and remote unit
- Removed instruction 'Equip Component Remotely': Will automatically get converted to 'Equip Component'
- Instruction 'Unequip Component': Add optional arguments for a specific inventory slot (allows swapping) and remote unit
- Removed instruction 'Unequip Component Remotely': Will automatically get converted to 'Unequip Component'
- Instruction 'Produce Unit': Add optional argument to specify the production component, add Unit argument to specify an adjacent unit/building to operate on, add output argument to return the working component (usable for 'Wait Component')
- Instruction 'Loop Producers': Clear output if not looping once
- Instruction 'Random Coordinate': Avoid behavior stopping and logging of error with a negative range
- Instruction 'Check Space for Item': Clarify that besides an item identifier, a target reference to a resource node, dropped item or dockable unit can be passed
- Instruction 'Get Space for Item': Make input accept the same types of values as 'Check Space for Item'
- Instruction 'Get Grid Efficiency': Use grid at outer structure when called for a docked unit
- Instruction 'Get Battery': Avoid behavior stopping and logging of error when querying Current or Max with a non-existing Unit input
- Instruction 'Get Unit Info': Output an empty value when calling with a non-existing Unit input (instead of leaving an existing value in the output variable/parameter)
- Instruction 'Get Unit Power Info': Output an empty value instead of the number zero when calling with a non-existing Unit input
- Instruction 'Get Max Stack': Return empty when querying a non-item (i.e. color value)
- Instruction 'Loop Inventory Slots': Clear all outputs if not looping once
- Instruction 'Inventory Total': Fix help explanation
- Instruction 'Get Location': Output an empty value when calling with a non-existing Unit input
- Instruction 'Get Offset': Output an empty value when calling with an invalid input
- Instruction 'Read Key': Output an empty value when calling with an invalid input
- Instruction 'Look At': Avoid behavior stopping and logging of error with a non-existing Unit input
- Instruction 'Set to Component Remotely': Report failure when trying to set a non-existing or read only register index
- Instruction 'Get from Component Remotely': Report failure when trying to set a non-existing or read only register index
- Instruction 'Memory Set': Output an empty value when calling with an invalid input
- Instruction 'Memory Remove': Output an empty value when calling with an invalid input
- Instruction 'Loop Memory': Clear outputs if not looping once
- Instruction 'Get Unit At': For a tile with multiple things in it, prefer a flying unit like a drone over everything and a construction site over dropped items
- Instruction 'Get Unit Info': Fix querying "Move and Fire" returning nothing (now returns 0 or 1)
- Instruction 'Wait Ticks': Accept input 'infinite' to wait forever (i.e. to wait for an event)
- Instruction 'Distance': Return infinite when measuring distance against something not on the map (i.e. Mothership) instead of doing nothing
- Fixes
- Fix loop behavior instructions possibly causing large stalls if there are many steps to loop but there is not a single instruction in the loop body
- Fix showing wrong icon on certain stats in the unit tooltip
- Fix behavior editor changing the initial value of a parameter not getting registered as a change (and the 'Apply' button not becoming available immediately)
- Fix visibility and power range visualization circles becoming stuck when switching the selected unit (i.e. by pressing a shortcut group key or back space or shift-clicking a register with a target reference) while hovering a component socket or item slot
- Make hovering an item slot show an arrow of the order related to the hovered item slot instead of visualizing any order that targets the currently selected unit/building
- Show range of light components in the tooltip and visualize it in the world when hovering the mouse on an equipped light component
- Trigger blight discovery even if the faction has no player logged in
- Fix unequipping a Blight Charger component on alien and bug units disabling their inherent blight shielding
- Make behavior editor Memory Viewer window slightly wider so the 10th item of each row doesn't get cut off
- Fix multiplayer state potentially going out of sync when a unit docks/is possessed then undocks/is unpossessed in a different 60x60 map chunk
- Avoid logging Lua error 'entity isn't placed on the map' when a worm attacks then immediately gets possessed or docked
- Fix internal API change to Tool.NewRegisterObject and register:Init to correctly set a number even if the value was empty, affecting a few instructions
- Fix behavior instruction 'Bitwise Op' which stopped accepting empty values as its first argument
- Fix Deployer component wrongfully spawning a component when deploying a Human Tank unit which was acquired after the built-in Tank Turret component was removed
- Show stats for the built-in Tank Turret component in the tooltip of the Human Tank unit
- Prevent clicking a behavior notification from revealing the location of an otherwise hidden enemy unit
- Prevent equipped Deployer component losing its "One-Time Use" state when the unit it is equipped on itself is acquired and re-deployed or relocated
- Automatically end debug inspecting in behavior editor if the inspected target is destroyed or converted (i.e. Command Center deployment)
- Fix various spelling mistakes in tech descriptions, story popups and behavior instruction details
- Fix 'Carry Items' not getting applied when pasting settings onto a building with an Item Transporter equipped
- Remove audio track on Stage Games Logo video to avoid capture software picking up audio noise (i.e. Steam game video capture)
- Fix logging of a Lua error when switching the selection with a shortcut group key while looking at the Blight Magnifier tooltip
- Fix behavior potentially being unable to start after removing a parameter of a called sub-behavior which uses branched returns
- Fix behavior editor interface explanation not highlighting the name/description correctly since 1.0.17933
- Fix dynamic tooltips getting stuck in memory while invisible if opened and closed in the same frame (sometimes leading to endless logging of Lua errors)
- Fix for System Index appearing empty and causing a Lua error to be logged when opened in the same frame as a tooltip
- Enable Unicode console text output on the dedicated by default without the need to specify -UTF8Output in the server command line
- Fix Lua errors getting logged when viewing tooltips in the tech tree and unit interface while the unit is getting destroyed or upgraded
- Fix numerical comparison used by behavior instructions 'Switch' and 'Loop Signal' to always treat infinite as a number larger than anything else
- Fix behavior instruction 'Unequip Component' to not allow unequipping of integrated components
- Fix behavior instruction 'Is Equipped' to not log a Lua error when getting passed a wrong value that doesn't specify a component identifier
- Disallow locating hidden enemy units by using shift+click on a register
- Fix multiplayer game potentially going out of sync if a player joins quickly after a bot carrying out an order had its movement towards a teleporter aborted
- Fix modifying component registers while having multiple units selected causing more network traffic than needed
- For buildings that aren't square with a center tile (anything but 1x1 or 3x3), fix placing units coming out of it by always preferring a free tile closest to the building
- Fix logging Lua error after pressing "Clear All" in the memory viewer of the behavior editor
- In behavior editor, don't automatically hide an extra option when clearing its value
- More nicely vertically align text labels to their connection pins in the behavior editor
- Fix long behavior parameter name not getting truncated in the small register box used for parameters 5 to 10
- Fix order carriers (including item transporter buildings) sometimes trying to pick from a nearby building instead of using items already held by the carrier (which can fail if the inventory is full which can cause certain item-transporter-only production block setups to never proceed) (regression from ver. 0.1.15341)
- Fix Scout Radar component providing fast visibility revealing without power use if the component is equipped and unequipped quickly
- Show an warning message when trying to store a storage component into one of its own inventory slots
- Show an warning message when trying to swap a component into an inventory slot locked to another component
- Fix game crash when using the 'Follow Camera' function and the followed unit/building gets destroyed (regression of patch 1.0.17832)
- Fix logging of Lua error when unequipping a Radar component
- Fix default visual register links of integrated components (i.e. production register on Blight Complex) getting recreated when relocating a building
- Fix new explorables not getting marked as having been visited when scanning them with an Intel Scanner component and aborting the scan
- Modding
- Removed `raw_is_empty` and `RawEqual` from the register lua meta object as the regular `is_empty` and equality operator now always checks the value as is (`entity` and `raw_entity` continue to exist and work as before)
- When a tooltip callback returns nil, make it so the game will show a tooltip of something higher up in the layout tree
- Update Lua documentation: Document that functions with a faction type argument can also get passed any entity, component or item slot from which the faction will be used from
- The rules regarding the OrderItem functions have changed. ManualOrder will no longer automatically equip a component unless the new AutoEquipComponent is specified. And, not specifying ManualOrder will no longer reduce the requested amount by any existing amounts (going forward the caller will have to reduce the requested amount if desired).
- — The Desynced Team