Hello Noveans,
We've deployed a new update. Dual Universe is now in version 1.4.0.
New features
Player versus Environment Combat Missions
- Gain access to new PvE Combat mission content.
- Engage a new mysterious foe in 5 available difficulties: Very Easy, Easy, Medium, Hard and Very Hard.
- Group up with your friends when you need a helping hand.
- Unlock the mysteries of this new enemy as a community by completing missions.
- PVE Missions are a race against the clock, and you are required to vanquish all the targets in the mission and leave through the beacon before the timer expires.
- Losses in PVE through destruction, being killed or the expiration of the timer before you leave the mission do not result in the loss of construct ownership, your novean will be killed and respawn at a resurrection node, and your construct will be returned to the mission entry point in your ownership.
New Planets: Sicari and Sinnen
- Two new planets have been added to the universe named Sicari and Sinnen.
- Both planets have entirely new terrain and design, and some entirely new and unique art assets.
- These planets come with more mineable resources, and more available hauling missions.
Input Remapping Rework
- The game now supports Joysticks and Gamepads, allowing you to play using any of your devices.
- There is a new setting in the settings menu of the remapping window which allows you to turn certain press-and-hold actions into instant actions.
- You are now able to save your keybindings to a file, and or to your account, allowing you to load it directly into your client from your account on whichever system you are playing on.
- New Lua assignable options and axes have been added allowing much more refined control through Lua.
Lua Version Upgrade and Improvements
- We have made several large improvements to the Lua side of the game, this will likely have broken a number of existing Lua scripts that are scripted to request boolean values. Default flight configurations have been updated, however community made flight configurations may take some time to come up to date with 1.4.
- Where possible we have added compatibility layers to reduce the amount of difficulty to upgrade.
- You can read all the details about the changes below.
PVP Rebalance
- We have made several significant changes to the balancing of PVP, resulting in more frequent shield venting and different tracking behavior and stronger honeycomb.
- All the changes are detailed below.
Improvements
- [Challenge] New Orbital Delivery Challenge. Fly to a mothballed archeological compound in orbit around a planet. Transfer items to help Aphelia reactivate the compound and restart studying the mysterious Alien Artefact.
- [Shield Widget] Added venting button.
- Notifications to organizations are now sent to all legates instead of just the superlegate.
- [Lua] Fixed AxisCommand library thrust calculation when transitioning between atmosphere and space.
- [Rendering] Reduced intensity of bloom effect, especially on bright emissives.
- [Weapon] Immobile and barely moving targets with small cross sections can be hit more easily.
- Split land control mapping and jetpack control mapping.
Lua changes
Replaced dkjson Lua library by json.lua library to improve JSON encoding and decoding performances.
Fixed the problem of boolean type support in Lua. Now functions will return real booleans and accept real booleans as arguments (integers will still be functional as arguments).
Updated Lua environment to 5.4.4. Lua changelog:
- new generational mode for garbage collection
- new attributes for variables (const and to-be-closed)
- new implementation for math.random
- new semantics for the integer 'for' loop
- optional 'init' argument to 'string.gmatch'
- new function 'coroutine.close'
- string-to-number coercions moved to the string library
- new format '%p' in 'string.format'
Added new events to the CoreUnit API to monitor element damage:
- onElementBroken([int] localId, [int] restorations)
- onElementRestored([int] localId, [int] restorations)
- onElementDamaged([int] localId, [int] hitpoints)
- onElementRepaired([int] localId, [int] hitpoints)
Added two new Lua function on the Core Unit API to monitoring restorations of an element with its local id
- [int] getElementRestorationsById([int] localId): Returns the remaining restorations of the Element, identified by its local ID
- [int] getElementMaxRestorationsById([int] localId): Returns the maximum restorations of the Element, identified by its local ID
Added new functions to the CoreUnit API to improve the engines control for flight systems :
- getElementTagsById -> [string] getEngineTagsById([int] localId): Returns the list of engine tags for an Engine Element, identified by its local ID
- [bool] setEngineTagsById([int] localId, [string] tags, [bool] ignore): Sets the list of engine tags for an Engine Element, identified by its local ID
- setEngineTorqueById([int] localId, [bool] state): Sets the torque generation state for the Engine Element, identified by its local ID
- [bool] getEngineTorqueById([int] localId): Returns the torque generation state for the Engine Element, identified by its local ID
Added getTotalMass function to the Construct API. Returns the total mass of the construct (voxels, elements, avatars and docked constructs).
Added a return boolean to all engine type elements setTags Lua function.
Added optional querying options to the radar.getConstructs function, the following filters can be used (all optional and combinable) :
- [bool] isMatching : True to filter out constructs with a matching transponder, false otherwise
- [int] constructKind : The construct kind id to filter out constructs (Universe = 1,Planet = 2,Asteroid = 3,Static = 4,Dynamic = 5,Space = 6,Alien = 7)
- [string] coreSize : The construct core unit size to filter out constructs ('XS', 'S', 'M', 'L', 'XL')
- [bool] isAbandoned : True to filter out abandoned constructs, false otherwise
Added the constructKind and hasMatchingTransponder fields on the radar construct result of the Lua function getConstructs of the Radar API.
Deprecated (but still populated) constructType that was not consistent with the current radar API in the radar construct result of the Lua function getConstructs of the Radar API.
Added new events to the CoreUnit API to monitor element damage:
- [int] getInstructionCount(): Returns the current instruction count during this tick
- [int] getInstructionLimit(): Returns the instruction limit before the CPU overload
Aligned controllers's Lua instruction limit on Lua screens instruction limit ; 2 000 000 -> 10 000 000.
Improved syntax coloring:
Added unit, system, construct, player, library and renderscript coloring entries.
Added operators and constants coloring.
Added a "usage" section in CODEX to provide more in-depth explanations of functions and events, as well as code examples.
Added three new Lua functions on the Core Unit API to allow to map elements plugs:
- [int] getElementClassIdById([int] localId): Returns the item id of the class of the Element, identified by its local ID
-
getElementInPlugsById([int] localId): Returns the Element IN plug map, identified by its local ID
getElementOutPlugsById([int] localId): Returns the Element OUT plug map, identified by its local ID
Added three new Lua function on the generic element API:
- [bool] isInClassId([int] classId): Checks if the element is an element of the class given by its item id
- [bool] isInClass([string] className): Checks if the element is an element of the class given by its class name
- [int] getClassId(): Returns the item id of the class of the Element
Added three new Lua functions on the Core Unit API:
- [int] getElementClassIdById([int] localId): Returns the item id of the class of the Element, identified by its local ID
-
getElementInPlugsById([int] localId): Returns the Element IN plug map, identified by its local ID
getElementOutPlugsById([int] localId): Returns the Element OUT plug map, identified by its local ID
Added 12 new Lua functions on the System API:
- [bool] isItemInClassId([int] itemId, [int] classId): Checks if the item is an item of the class identified by its item id
- [bool] isItemInClass([int] itemId, [string] className): Checks if the given item is an item of the class given by its class name
- [bool] isClassItem([int] itemId): Checks if the given item is a class item
- [bool] isElementItem([int] itemId): Checks if the given item is an element
- [bool] isMaterialItem([int] itemId): Checks if the given item is a material
- [bool] isRawMaterialItem([int] itemId): Checks if the given item is a raw material
- [bool] isBlueprintItem([int] itemId): Checks if the given item is a blueprint
- [bool] isScrapItem([int] itemId): Checks if the given item is a scrap item
- [bool] isPartItem([int] itemId): Checks if the given item is a part
- [bool] isAmmoItem([int] itemId): Checks if the given item is an ammo item
- [bool] isPackageItem([int] itemId): Checks if the given item is a package
- [bool] isSchematicItem([int] itemId): Checks if the given item is a schematic
Added three new fields on the Item table returned by getItem function in System API ([int] classId, [int] displayClassId,
