We have a lot to talk about in this post so feel free to scroll down and read about the subjects that matter most to you.
Overall performance gains
Baking our vehicles has always been about optimizing the result.
We are glad to have found additional ways to optimize our vehicles even more.
Especially for highly detailed vehicles where a lot of pipes, plates and shapes can be found.
First we found a way to remove pipe, plate and shape objects after baking the vehicle.
Reducing the amount of objects means that rotating or moving these vehicle pieces has much better performance.
This example removed 2947 objects, bringing it from 3379 down to 432:
Fewer center of gravity points
We were also able to combine center of gravity points in a better way than before.
Fewer center of gravity points means less computation is needed in real time.
Again giving the most performance gain on detailed vehicles.
Here we went from 711 CoG points to just 8:
We also took a look at the vehicle shader and found that it was doing some unnecessary things.
So we simplified it and can see a significant reduction on the GPU load whilst looking at a vehicle.
Lightweight network IDs
And finally we went over the networking pipeline and were able to reduce the size of IDs sent with each network package.
While this give a light performance gain on its own it does reduce network traffic a lot.
Colliders play a big role in the handling and performance of your vehicle.
Up until now the builder has been adding colliders for each part, pipe, plate or shape.
As you can imagine for high detailed vehicles this results in loads and loads of colliders
while this does give a decent approximation of your vehicle shape it is not so good on performance
So for this update, we introduce voxel collision.
Voxel collision slices your vehicle in small pieces and adds colliders accordingly, resulting in fewer colliders in most cases while still providing a decent approximation of your vehicle shape.
We provided you with the choice between object collision vs voxel collision found in the utility bar.
When we test our vehicle, we can now see how many colliders have been built for comparison reasons.
Aah weapons... yes
We knew fixing weapons was an absolute must for this update... or else!
So looking at the code we saw a lot of issues.
First, the system was so complex that our noodles could not make sense of it.
We noticed that the teams system responsible for 70% of the complexity accounted for almost 0% gameplay since we never really use teams, except for that one time... maybe...
So we removed the teams system and were left with something we could actually fix.
Remembering how damage used to be, the biggest issues are that we don't have per-part based damage, that we don't get to see damage, HP and armor feedback, and that gunner seats for other players are basically useless as the gunner seat lags behind due to ownership of the vehicle.
There is more to improve but these outline the most prominent sucky parts of our damage system.
Damage and armor feedback
To give user feedback we now show damage and armor on the hitmarker whenever we make a hit.
Whenever we hit a vehicle we get to see an HP bar showing the remaining health of the vehicle.
Know that damage is still split per vehicle piece, meaning not every hit will reduce the overall HP of the vehicle and the HP bar doesn't have to be fully depleted for a vehicle to be destroyed beyond the point of working.
To fix the gunner seat issue we had to introduce a new wire type.
From now on each weapon has to be linked to a seat using the weapon wire.
Linking the wire with a seat makes the weapon respond instantly to the player that is in that seat regardless of who owns the vehicle at this time.
It also allow the weapon to know which player is actually doing the damage.
Overall weapons now rotate smoothly for non vehicle owners if it's welded onto a weapon mount or hemi servo, using the vector wire as input.
Tweaking damage on servers
Damage can now be tweaked via server settings.
we can set damage and armor multipliers and we can cap the armor so it won't go above a certain value.
While the damage system has been improved, some issues still remain that we can't fix right away.
For example, tweaking the HP and armor coefficients requires us to run the system in a natural environment looking at all sorts of vehicles.
So don't expect the damage to be tweaked perfectly yet, we will tweak the numbers as we go via the server settings, we will see what works best and provide updates as we go.
While the damage system has been improved there is still more to do like per-part based damage, missiles and bombs etc...
We will dive more into weapons in future updates.
One of our beloved community members Being Bright started a snow mod a while ago.
We were looking for something to do for Christmas, while looking at his mod we saw a perfect match.
We contacted Being Bright right away and improved the mod where needed.
This mod will automatically activate between Nov and Feb, bringing snow to our world.
Vector Math Box
For our Math Heads we've added a "Vector Math Box"
containing all the vector operations a proper Math Head would want.
We can also convert from float wires to vector wires and back using this box:
Mods now live in the current lua version folder, found at userdata/lua/<version>/...
This means that you will have to move your mods to this new folder.
A readme.txt file can be found in userdata/lua telling you what to do with your mods.
you will also see a chat message giving you a warning that mods need to be moved, triggered only when you have mods installed and no mods are found at the new location.
Devkit? What's a devkit?
Well, simply put, a devkit is a bag of tools that helps you develop certain things.
In our case the devkit helps us to create or edit parts and world assets.
The devkit is new but powerful already, it has both modders and devs in mind and will make both of our lives easier when it comes to creating new content that can be released in updates or uploaded to the Warehouse.
We have made the gadget load faster when you select it, and added effects that make it look better.
As of now default vehicles will install for new players only.
If you are not a new player you can still install them by using the "/installdefault" chat command.
This is a big update, we have done our best to keep track of all the changes and mention the highlights in this post.
We can't guarantee everything will work perfectly at first, we may find things to tweak as it goes public.
We will be on the lookout for bugs, so please report them ASAP so we can get the "hot fixes" rolling.
Here is the remaining list of fixes and additions:
- fixed issue where HBU path functions returned backward slashes
- fixed issue where the bounding function would return incorrect results in some cases
- fixed issue where the game runs on more than 60 fps in the loading menu
- fixed issue where vehicles could not be loaded after saving in rare cases
- fixed issue where plates could be created with all vertices on 1 point, resulting in physics issues
- fixed issue where AddTool would place parts with the wrong rotation
- fixed issue where tiremarks could creep their way onto your vehicle in the builder, resulting in physics issues
- fixed issue where cloned or symmetrical parts could not be selected in some cases
- fixed issue where HBU.CopyAsset logged an error while it was working correctly
- fixed issue where solar panels do not work on vehicles built in the new builder
- fixed issue where Hide Tool hides pipes and plates inside rotators when parts are set to hidden
- fixed issue where the adjust tool would not show pipe or plate properties in some cases
- fixed issue where ctrl+click while editing nodes, selected a plate or pipe behind the node
- fixed issue where toggle boxes did not initialize correctly, not providing the correct state in the inspector panel
- fixed issue where adjust tool lock selection option displayed true while it is false
- fixed issue where in and output properties had propertyname in the link property field in the inspector panel
- fixed issue where the move tool would try to access a non existing function
- fixed issue where game would lock when spawning a corrupt vehicle
- fixed issue where network package could be dropped due to incorrect package size
- fixed issue where vehicle mass as NaN would result in a crash
- fixed issue where selecting the adjust tool with a pipe already selected not displaying properties in the inspector panel
- fixed issue where adding keybinds to the seat would not rename the keybind
- fixed issue where deleting parts would not register a change in the builder, meaning that it would not ask to save before closing
- fixed issue where toggle properties on the parts would not show correct state
- fixed issue where mass would not be calculated properly on some symmetrical parts
- fixed issue where mass would not bake correctly resulting in a difference in weight in the builder vs the world
- fixed issue where wing surface area could go negative resulting in infinite power
- fixed issue where jet engine would provide infinite power by flying backwards at high speeds
- fixed issue where blimps would fly in reverse
- fixed issue where mass was incorrect in the old builder
- fixed issue where player would not reset its components correctly when using the /cva command
- fixed issue where weapons failed to deal damage
- fixed issue where weapons did not transfer ownership with the vehicle
- fixed issue where builder was unable to locate the assembly while the assembly was hidden
- fixed issue where wrong components would be added to sub-pieces of your vehicle
- fixed issue where when you enter a vehicle in multiplayer it would glitch to the origin point of the world for a few frames
- fixed issue where weapon dots would not display correctly for other players in that vehicle
- fixed issue where weapons would fire twice in single player
- fixed issue where rigidbody would fall asleep when there was nearly no motion, resulting in issues in waking up
- fixed issue where using the functions CreateEmptyPart() or CreateEmptyAdjustablePart() would not assign RefrenceID components resulting in unlinkable parts
- fixed issue on single sequence box where the time property would always revert to 0
- fixed memory leak in the save/load system
- fixed memory leak when using Forms
- fixed memory leak in "other" player objects in multiplayer
- added vector math box
- added /installdefault command to install default vehicles anyways
- added HBU.ShouldNotifyUpgradingMods() for modders to use, this will tell us if a user needs to move his mods to the new version folder
- added chat message when we detect that a user has installed mods and needs to move them to the new version folder
- added part script to get a readout on health, for modders to use ( no part has been built using this script yet )
- added a vector wire output to the GPS box
- added readme file installed when the game starts into the lua folder, for modders to read
- added a set of spring materials for future use
- added HBU.AddLuaComponentPath() that accepts absolute path to the mod, for modders to use
- added a HP bar that will be shown when you hit a vehicle
- added damage and armor stats that show on the hit marker when you hit a vehicle
- added voxel collision method for baking your vehicle, this can result in less colliders, giving you better performance
- added HBU.LoadH3D and SaveH3D functions for modders to use ( these are HB native model formats )
- added extra checks for loading mods, checking if the script can be loaded otherwise resulting in error spam
- added part script for blend shapes for modders to use ( no part has been build using this script yet )
- Added HBU.GetModLuaFolder() for modders to use
- Added HBU.GetBuilderLuaFolder() for modders to use
- Added HBU.GetGadgetLuaFolder() for modders to use
- Added HBU.GetOfficialModLuaFolder() for modders to use
- Added HBU.GetOfficialBuilderLuaFolder() for modders to use
- Added HBU.GetOfficialGadgetLuaFolder() for modders to use
- Added /streamingassets chat command -> will open streamingAssets folder
- Added /lua chat command -> will open lua folder
- Added /version chat command
- added part script to move objects for modders to use, works similar like a hemi but for movement instead of rotation
- added versioning structure for mods
- added general purpose StringDataContainer component for modders to use
- added occlusion area, improves performance on camera occlusion
- added a bunch of generic materials for modders/content creators to use
- removed tons of warning messages when the game starts
- removed teams system knowing that we set ourself as spectator 99% of the time anyways
- removed issue where too much drag to the vehicle would be added via the use of dragboxes
- removed redundant checks in VersionManager and SteamManager
- removed the box that would ask to import workshop vehicles when the game starts
- exposed System.DateTime to lua for modders to use
- exposed System.TimeSpan to lua for modders to use
- exposed System.IO.FileInfo to lua for modders to use
- exposed System.IO.DirectoryInfo to lua for modders to use
- exposed certain variables on springs to lua, for modders to use
- optimized performance of the loading screen
- optimized performance of rotating objects by the rotator part or hemi part
- optimized the vehicle baker, cleaning up gameobjects that are not necessary, giving you better performance
- optimized box collider method resulting in fewer gameobjects needed on your final vehicle, giving you better overall performance
- optimized network traffic used by weapons
- optimized network traffic by using shortened IDs
- optimized color tool initialization by removing generated colors and adding the color properties one by one in the inspector panel
- builder stores last opened project
- separated the tool bar from the main builder script into its own module
- separated the utility bar from the main builder script into its own module
- equalized the spaces in the utility bar
- renamed "projectile physics" settings to "weapons"
- wheels dislocate when your vehicle is destroyed
- disabling weapons will now stop all damage given and taken
- upgraded to unity version 5.6.7f1 ( no notable changes, only security related changes )
- lua folders now get created if they don't exist yet when the game starts
- hinges break when your vehicle is destroyed
- when your vehicle is destroyed it will spawn explosions instead of just smoke
- seat now has a new output wire type, meant to be linked to weapons, this is how the weapon will know who did the damage
- tweaked skybox colors
- improved terrain shader to have overall color and contrast values
- when copy pasting parts the wires will try and stay linked within the selection you are copying
- the inspector panel now updates when a part changes its own properties, like how the solid fuel rocket does
- transparent color material is a bit more transparent now
- default vehicles will only install automatically for new players
We hope you guys like the update and can look past the long long delay.
In the next post we will talk about how we are going to move forward from now on.
As always, we'll keep our eyes open on Steam, DISCORD and our other channels.
DREAM - BUILD - ENJOY
Version 15.1 - 637093565581787752