4 February 2016
I spent more time on music this week. I polished up the second tune I had started last week and started work on another piece too. Enjoy!
I updated more physics code to use Unity’s new physics API features. This is all invisible to you guys, but the gist of it is that a bunch of stuff got more memory efficient, reliable and faster.
We’ve been in kind of a horrible situation to test certain things lately because we couldn’t load savegames from servers directly in the editor. This pretty much meant the easiest way to test the server startup or a savegame was to commit, let the build server do its thing, download the update and run a dedicated server. For the new conditional model system and stability serialization this really started to piss me off, so I fixed everything that didn’t work when loading a savegame in the editor. Now we can load up any world from a server directly in there, which is useful for lots of stuff from performance testing to making sure things are working before throwing them at the dev branches.
One thing I’d like to do with this is some sort of reproducible performance testing using real savegames, as that would be a great indicator of the actual performance gains we can expect from an optimization. It would also allow us to compare performance when upgrading to a new version of Unity in order to detect any regressions or improvements on their end before pulling the trigger.
Since floor frames will go live today, we tested them on the staging branch this week and I did some usability improvements, balancing and fixes for them. You can now rotate the floor frame hatch by looking at different edges of the floor frame when placing it. The main thing to be aware of when designing your base is that you cannot use pillars to increase the stability of floor frame inserts. The floor frames themselves aren't a weak spot compared to floors, so you shouldn’t be held back by safety considerations.
I’m back producing the art for the dungeons. Done this week on my branch are the chainlink fences that I have adapted from the player blocks I made last week, as well as concrete walls. I also produced a first type of rubble pile, it’s all kinds of junk in this one, and truth be told it won’t work everywhere the old greybox was placed. I need to add some other types of piles, like charcoal, concrete boulders only, brick only, etc. The good thing is high poly meshes are done and it’s relatively easy now to throw another pile of something, bake it and place it in-game.
None of this goes in this week, the layout of dungeons is changing as I adapt the looks and level of detail in places as I go. Patience.
Building stability serialization is now in, which for you means much faster server restarts. It also improves the performance of stability refreshes at runtime since I got rid of a bunch of overhead and made the stability calculation terminate quite a bit faster. The effect on the building stability percentage is negligible, so your old base designs will still work.
I did some more work on the conditional model system I talked about last week. The only things left to do are to support prefab pooling and add conditional server side colliders. Since it doesn’t require a wiping update to go live I’ll take some more time with it. There will be more details next week.
Finally refactored our entire standard shader codebase. There are a number of advantages to the new approach, such as: dramatically reduced compilation times (60 times faster in some cases) which will help our iteration times, eliminate some constraints we had before allowing us to fix problems like the tire mark decals in the warehouse building, and hopefully an improvement in rendering performance due to the elimination of unwanted or redundant shader clutter.
I've gone through the last of the clothing pieces and tweaked them to match the new player models. All 40+ pieces and their LoDs are finished now, with the majority of them having some extensive reworking of how they deform.
Don't get excited: it isn't working. But I've been working with some guys on Rustafied's server slack on getting it working. This included some non-trivial work to get the dependency on OpenGL out of our native library, which I did by splitting them up into separate libraries (so the server doesn't even need to load the rendering one). It works to a certain degree right now, but we're having problems with getting Steam to cooperate - so players can't join.
If you can get it working or have any pointers as to why it isn't working, let me know on Twitter by clicking my name on the top right of this post.
Only a couple of minor changes to the world generation this time around since I was busy with building related work for the last month. I tweaked the amount of forest bushes in the various biomes and made sure that field bushes and rocks are clustered together a bit more tightly. These changes are meant to give the whole thing less of a “rocks and bushes everywhere” feeling, let’s see how it works out.
Lamps are awesome! They let you see in the dark without having to squint real hard and wish you had night vision. Paul concepted some artwork for this a while back, and with a few tweaks here and there and with the help of Matt (who works on Deuce, and who gave me the idea to put a chunk of shiny metal at the back to act as a reflector) it’s now made! I guess the idea is that you can place it anywhere on your walls. Which is awesome. You can have a spin of it here!
I’ve been trying to come up with more objects for players to place around their base that work within the current mechanics that we have.
One thing I'm keen to try with the new XP/Crafting system is moving the crafting menu from the right of the inventory menu to its own screen. It's a constant struggle trying to get everything on one screen, and that's only going to get harder as we add in skills, unlocks and tech trees.
Right now I have it wired up so that TAB opens the inventory menu, and Q opens the crafting menu. Pressing TAB while in the crafting will switch to the inventory, then pressing Q will switch to the crafting. This has to feel really snappy so that you can quickly switch between them to easily determine how much of a resource you have etc. Don't worry though, I'm planning on having a list of "quick crafts" on the inventory screen too, so you'll be able to start a craft from there should you want to.
The good thing about XP system is that as developers we can use it as a tool to indirectly change behaviour. We never want to say "hey, you killed a player -10xp", but we can find ways to reward the opposite. As an example, what would happen if when you craft an item and give it away, you get XP when the person uses it. Suddenly the nakeds who can't craft are useful to you. You want to keep them alive and give them items to earn you XP.
Added sounds for all the new building parts
Added building stability serialization (faster server restarts and stability refreshes)
Removed a worst-case second raycast in the game trace code
Fixed potential signage NRE when server database was deleted
Fixed cupboard gib errors
Fixed water rendering error when screen size is reported as zero
Fixed warehouse floor decal
Fixed foundation stair placement being blocked next to triangle foundations
Fixed triangle foundation placement being blocked beneath floors
Item icons + data now build to the right folder
Network backend optimizations
New floor frames (grill and hatch)
Reduced video memory overhead by 144 MB
All collectables now use the load balanced LOD system
Updated some remaining physics calls to the new Unity physics API
Tweaked distribution of rocks and bushes
If you want to follow this project you can sign up to the mailing list.
We'll only update you about this project, we won't spam you about other stuff or sell your email address.