Lots on this week as I push on with ItemV2, new patch is now live which should really shake up raiding with increased explosive drop rates, construction resistances and starter huts.
I’ve also spent a bit of time this week upgrading the work environment for the team. We have expanded into a larger space, re-organized the office (needed some room for a vive :P) and most importantly opened up space for new people! For a few months we’ve been on the hunt for kick ass programmers to expand the team and help us push out updates more quickly. There is a massive amount of stuff we want to do with Hurtworld, and our bottleneck is always on the code implementation side. I have pretty high standards when it comes to programmers, there was a danger of growing the team too quickly after release that we would lose the quality standard we are aiming for. Today I am happy to announce he who will be known as “Tom” has joined our ranks. We are still on the lookout for more top programming talent in, or willing to move to Melbourne. If you have shipped real games, have Unity experience, writing code is your passion, and can work from our office we want to hear from you.
I now have item state machines running on a deterministic client side predicted model with no corrections (yay!). I’ve taken the extra step here to build some infrastructure around loading the state machine data from JSON config files which will be streamed from the server allowing full modablility. Here is a sample of the melee weapon logic:
Not the easiest thing to edit by hand, I should have a UI tool to add to shigitools for the map sdk soon.
This week I have mainly been working on coming up with some new character gear. Hopefully with a larger variety of gear we can start to move away from players pretty much running around looking like Ronald McDonlad with red winter jackets and yellow rad pants. 😉
These are a few examples of more of a scavenger type of armour, bit pieced together, and one with a nod to an aussie icon.
These ones have a bit more of a modern feel. With tactical vest and pants.
A few more examples of different types of vest and armour, these ones feel a little bit more in line with our aesthetic. Also a take on a more heavy duty hazmat suit.
Lastly a take on a more heavy armoured set up, and some lighter bone armour.
Also I have been testing the build to make sure that the new update runs smoothly. As can been seen below 😛
Lotta work this week getting the new patch out. There’s been quite a few optimizations, especially with the construction system, that should improve things across the board.
There’s nothing like the wild for stress testing new systems. Since the construction system came out, you guys have been pushing it to its limits. This has shown where it’s good, and where it could use improvement. I’ve done a couple of significant optimizations with how the construction system stores and transfers data over the network.
One of the biggest bottlenecks was a bandwidth issue where, on massive savegames, players would take a substantial amount of time to connect and sometimes fail to connect entirely. When connecting, the server sends a stream of information to you about the structures in the world. This includes what attachment it is, it’s position, and rotation. What attachment something is is represented by the Attachment Identifier, which is basically made up of a Category, Subcategory, Size and Material. Previously we sent this whole chunk of information, which was actually of undefined network size as Category and Subcategory were strings, but was at minimum 32 bytes. Now, we precalculate an index of the attachment, which we can store in a ushort at a much smaller 2 bytes.
We also saw that the construction system was taking up a lot of RAM. Using the SEA Infini Wipe server save, as that server has been really struggling with the RAM load, I tried to track down where we were spending this RAM and where we could be saving it. There’s something very cool about loading up saves and seeing people’s bases – we get to walk around and see what people have been making. I found that we were allocating a majority of memory in registering attachment points. The issue turned out to be how we were representing overlapping attachment points of different rotations. When you look at a point and right click, and an attachment rotates, you’re actually cycling through multiple attachment points which are rotated in different directions. It turns out we were accounting for every rotation, and not just the six which are possible. So this was an enormous saving for memory usage. We saved about 60% of memory allocation associated with the construction system with this optimization.
Before making more decoration for the cities I was also tasked with getting the new version of Easy Roads (V3 beta) to work so that we can create better roads. Since the plugin is in beta it took a bit of time to find a workflow that will allow us to create the improved road networks we want leading out of the city into the suburbs and industrial areas.
I’m adding more street level decor to the City at the moment. Adding some parks to the city, using some one-off feature objects to create a memorable gamespace. The dried up water feature/fountain, circular low wall and some stands of trees help create this park space.
Adding low walls and electrical boxes to the sidewalks is helping add to the clutter that I think we need to make a convincing street level scene.
These street level assets are great but we need to do some optimising to keep the frame rates up. This week I will be grouping small clusters of assets together and duplicating them throughout the map. We need to do this because of a bunch of inefficiencies that come in to play with large numbers of game objects and lod groups. By clustering meshes together we can cull big chunks at a time. We could cluster our entire city together, however this would bloat our mapsize and therefore ram usage and load times.