DevBlog 172

DevBlog 172


For a long time, we’ve had people complaining that we’re floating without a plan, adding features on a whim with
no real end goal. And to be honest that’s not 100% untrue. Sometimes we get distracted and work on things for fun
that don’t ever push the development towards the finish line. But we’ve always had these long term goals and some
vague outline of a plan to get there.

So we accept the criticism, we hear that you guys want to know what we’re thinking about, what’s on our radar,
what we want to get done. So here’s a roadmap.

Also, just to be clear, so we’re not handing you a loaded gun to hold to our heads in 6 months time: the roadmap
is a rough guide of what we want to do. It’s not a promise, it’s not a contract, it wasn’t brought down from a
mountain carved in stone. Plans change and adapt over time, so expect the roadmap too.


There isn’t going to be a time where we say to each other “okay, that’s performance sorted, we don’t have to worry
about that again”. Performance and optimization aren’t on the roadmap because that’s a common sense, ongoing effort.

Recoil Modifications

I listened to some feedback regarding the recoil changes on the LR300 and MP5 and made a few adjustments.
First, you’ll notice that with the LR300 the horizontal recoil does not kick in until the 4th or 5th shot, making it
easier to control in bursts. You’ll also notice that the player.recoilcomp ConVar actually works now, if you would like
to disable recoil compensation. Let’s have another playtest with these weapons and revisit them again next week to
see if we’re on the right track.

Flashlight Flares

Flashlights now have a flare effect. This might make a flashlight slightly more usable at night, as it will not only
illuminate players, but also disorient targets and make it harder for them to aim right at you. I’ve also added
one to the laser sight, albeit less bright.

Searchlight Changes

I’ve reduced the cost of the searchlight from 500 metal 1000 wood, to 200 metal 500 wood. Maybe we’ll see more of these around now?
I’ve also added the flare effect, making it more difficult for targets to spot the searchlight user.

Helicopter Searchlight Fixes

Ever since Diogo adjusted how light was calculated a few months ago, the helicopter searchlight brightness has been far too low.
There was also a bug where it would aim its searchlight with an altitude offset of 20 units, which meant it mostly missed the place that was
supposed to be illuminated. These issues have since been resolved, and I’ve also toned down the jitter of the light. You’ll also notice it has a flare. Nice!

Ore Harvesting Fixes

I noticed some pretty weird behavior with tool efficiencies last week and uncovered a longstanding bug. Different tools have different destroy fractions. For example, a rock is supposed to destroy 50% of the resources of the object you are harvesting: a stone node has a maximum yield of 750 stone, so a rock should yield 375. This wasn’t the case because of some floating point rounding issues and has since been resolved.

Another issue was that if an object only had 1 of the resource, it wouldn’t properly yield it to a tool that destroyed over a certain fraction. I’ve changed this up so that if there is only a single unit of a resouce left it uses the destroy fraction as a probability to harvest it. tl;dr a rock has a 50% chance of getting a skull when harvesting a player.

There were also some bugs where with some tools, hitting the hotspots on nodes would actually yield less resources. Fixed.

Minor Early Game Balance

I’ve made some minor changes to a few early game items.

  • Gutting a trout will yield 8 animal fat instead of 3
  • Hide armor pieces have had their costs reduced by about half
  • Bone armor now only costs 1 rope instead of 2
  • Stone pickaxe cost equals that of stone hatchet (200 wood, 100 stone)

Nothing major, but should help out early game players.

APC Work

Sadly the APC is not ready. I did, however, make some significant progress with it this week. I had to gut the old pathing system and add something that was a little more dynamic. What this means is it’s no longer stuck on a path like a model train, but can pick any node to go to and pick the shortest route to it. It still doesn’t mean it can handle any terrain, but this system will allow for that in the future. After I get it moving to the best point to engage targets, I’ll work on its weapon system and then polish the effects and ship it out to you guys.

Garbage Collection Optimizations

I focused most of my week on eliminating dynamic memory allocations that caused unnecessary garbage collections, which in turn led to significant random frame rate drops. Areas I optimized include projectiles, ragdolls, corpses, effects and player meshes. This is all a work in progress, and there’s still a lot of work left to do, but the numbers definitely already show a vast reduction in garbage collections. Let’s see how it feels over the course of the weekend.

Log Cleanup

The thing that annoys me the most when going over game logs people sent in is that half of the log is spammed with stack traces. Stack traces can be immensely useful, so we definitely want to keep them around, but for all the basic status updates that are written to the log on every game start they were completely useless and could even make you miss an important entry in the chaos. This most likely means nothing to you, but it makes me quite happy that this is now fixed.


This week has mainly been spent on optimizing and bug-fixing the new navmesh grid system and cover system. It’s a slow process of testing, profiling and improving upon code. Not very exciting stuff to report about, but important and necessary work.

Coverage and Flares

Most of my work this week was aimed at backend, making texture packing more seamless. Still, I had some time to add a new system for situations where we need to test, approximately, how much of an object’s area is being covered by an obstacle.

This may come handy in the future but our first immediate usage was on flares. They scale up and down in strength, depending on how much light reaches the lens.

Also helped optimizing the flare’s shader in order to offload some work from the CPU.

Gas Station

This month is going to be dedicated to small monuments for me. While Damian is working up the supermarket, I am working on a gas station.

It will hopefully be a small, action-packed location, surrounded by makeshift palisades and covers made of local materials. Here you will be able to find a small shop, a garage, a back office, a small warehouse and… toilets! All together. There’s a little tunnel that someone has dug under the garage that has unfortunately collapsed since, but it may reveal something. There’s a hatch leading to the building roof where you will find some extra too.

It’s currently greyboxed, and I’ll be producing the art for this piece in the coming weeks until next wipe. Here’s a work in progress sneak peek:

Snow Biome Revamp

Ever since the new grass came in, the snow biome started to look a little dated in comparison. To update it a little bit and make it more visually interesting, I’ve made new snow textures, as well as some snow mound meshes that were setup by Andre to spawn during procedural map generation. As a result, the snowy landscapes should be much more bumpier than previously, with small patches of melted ice here and there.

Below are some screenshots that show the updated snow biome.

This is not all, however, and over the next few months I want to gradually update the northern biome. This will include remaking the icebergs, adding ice sheets that will be floating on the ocean, frozen lakes and unique smalluments, such as ships encased in ice. All in all, this should make the snow biome a bit more interesting for those who would like to setup their bases in the cold wintery landscape. These ideas are not set in stone and for the moment, the monuments are my priority, but you hopefully some of these ideas will materialize in the near future.


The supermarket got some love this week. I created greyboxes for the building and the various props you will find in it, such as store counters, magazine stands, cash register, and I’ve begun texturing and creating the final mesh. Below is a screenshot that showcases my current progress.

Makeshift Bag Art ( Backpack )

Progress continues on the smaller makeshift bag. I’ve been really enjoying making this so far, trying to tie it in with the world it inhabits a bit better. I’ll probably throw in a logo from Paul’s Cobalt posters (which are ridiculously cool!), or at at least elements of it. Here’s it so far.

Engine Sound System

I plugged away at the tank engine sound system this week.

We’re successfully tracking multiple harmonics in the engine recording now (white lines w/ blue dots on them in the image above). I had to rejig things quite a bit to get this working well, but it’s helped smooth out the problem areas in the green line quite a bit and made the whole system a lot more robust.

In case you’ve forgotten, the green line essentially tells us how long a single cycle of the engine is. We use that info to take tiny slices of audio that are exactly one engine cycle long and then splice them together back to back to make a final engine sound at any speed covered by the recording. If the timing info we’re getting from the green line is off it’ll throw off any cycles later in the recording, so it’s important to get this really tight.

If you look at the shorter stand-alone peak just to the left of the middle of the image, you’ll notice the green line is slightly below the white bit that it’s following through the rest of the image. That’s pretty much the last issue left to solve, and it’s just caused by a few of the weaker harmonics tracking slightly incorrectly. Since most of the harmonics in that section are still correct, I can just take a majority-rules approach and correct the few that are off, which should be trivial.

After the last little bit of this nailed down I’ll move on to tank tracks, gun turret movement, and then the really fun stuff: shooting and explosions! Boom boom!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Translate »