A whole new world to explore…
Today we’re releasing the first iteration of our new hand-crafted map, Hapis Island. Some people have referred to it as “the legacy map” — and while the two do have some similarities, such as a ring road, it really is a brand new and very different map.
As this is only the first iteration, you can expect bugs, floating stuff, waterfalls that look like vertical rivers, and all that good stuff. Likewise, the layout of the land may change considerably as we refine it further with gameplay stuff in mind. Basically, don’t lose your shit just yet. Just give it time.
On that note, you should know that during this initial phase, the servers running the map *may* get weekly forced wipes due to large map changes.
Custom Map Groundwork
I finished up some things for the custom map in order to get it out the door this week and make Petur’s life a bit easier over the next couple of weeks. This is probably a good moment to explain some of the backend functionality of custom maps. Custom maps have certain procedural elements that are required to allow user interaction with various certain parts of the world. One example for that are the forests, which dynamically grow, get chopped and regrow according to forest areas and biome information specified by the artist. The actual growing art doesn’t really exist right now, so it’s kind of a binary process at the moment; but you can deforest parts of the custom maps the same way you can on procedural maps, which will allow forests that are less frequently visited to grow denser. I also mentioned water bodies last week, which other than the ocean aren’t really functional right now. I plan to rework the water checks next week to make lakes and rivers actually affect the character.
This week’s update also forces procedural map server wipes. The changes are fairly minimal this time around, but they do contain some decent fixes. Radtowns 2 and 4 are no longer randomly scaled some cases where bridges would be partially underwater have been fixed, and the placement of the test prefab mountain has been improved.
Affecting both procedural and custom maps, I added a decor density slider that blends out any decor objects that cannot be interacted with in any way and are small enough that they don’t really affect gameplay. Check the F2 menu to see if it improves FPS for you.
As announced a few weeks ago, checksum verification is now enabled on both procedural and custom maps. This means that if your locally loaded map differs from the server state you’ll be disconnected from the server with a checksum mismatch message. This can either mean something is wrong with your install or the server is on a different version.
I also did some more work on the clouds whenever I had a couple of minutes of free time. I did some research on a fully volumetric approach, which I plan to implement in the near-to-mid future, but since that might affect frame rate on lower end hardware I decided to first get the current semi-volumetric layered clouds to a somewhat decent level to have a solid base to fall back to. This week’s update contains shape and shading tweaks, especially for the horizon clouds and the general cloud translucency at sunset and sunrise.
I fixed some bugs with the player footsteps being spawned too frequently. I also tweaked the visual look of the footsteps so they’re more visible now (especially the grass footsteps).
I improved the rocket launcher aiming down the sights so that the front/rear sights now line up to the center of screen.
I added some more movement animations for all of the animals. The animals foot placement is now better aligned with the movement speed. A also fixed a bug where the horse sounded like a popcorn machine because it was creating a ton of footstep effects.
I rigged up and animated the bean can grenade view model, as well as creating some custom sounds and special FX for it. Once I finish the world model (should take less than a day), Helk should be able to add it into the game soon.
I took a few days from working on the new water to implement a per-pixel displacement technique for our terrain shader. We already had some sort of fake deformation going on, but there was only so much it could do to add depth to the terrain. These show how far the new displacement can go in relation to what we had before:
Keep in mind, however, that this technique can be performance intensive ,and this sort of displacement is only active when using terrain quality in highest possible setting. Any lower quality settings will fallback to the previous method.
I also made some progress on the water remake which is coming along nicely. Should be up for deployment around the middle of next week.
A large portion of the work I’ve done over the past week has been making sure that things are organized and working properly. To that end, I’ve been doing things that are mostly behind the scenes, like eliminating extraneous folders, deleting textures that are unnecessary, resizing large textures to use less memory, and assigning nice materials to models so they render properly.
In addition to general housekeeping, I’ve also started to take advantage of the fact that we can now have unique world models for dropped items. As I move forward, I’ll be making world models for all the clothing in the game. Here are a few of the models I’ve made or modified for this specific task over the past week.
I finished up on the SMG! This is what it looks like in Unity. I finished the LODs off too, ready for implementing.
I also updated the revolver material. A bit more shiny and Rusty now, eh? :)
I’ve got a couple of things lined-up for next week’s Dev Blog to keep me busy. I’ve started on a new RPG ammo type, but you’ll have to wait till next week to see it textured. Here’s the high poly model so far.
I made new version of our keypad, and I also produced a simple keylock for our doors. I also worked on slimming some of our building skins down to make the placement of signs and future fixtures on our walls simpler.
I’ve been working on the research table. I did a round of rough sketches and then painted up a design that everybody decided was the coolest. The old research kits from Legacy were blue, so everybody agreed it made sense to bring that colour scheme into the table to make it look a bit more unique and cool, while keeping a lot of handmade elements like thick welding and rusty bolts.
I’ve been working on some alternative lighting ideas. I first tried out a few that would involve candles/fire, but what we’re looking at now are lights that run off electricity and things that you can hang from walls/ceilings. I thought you could paint some bulbs to change colour, too. I also made the icons for the map and for the note-paper.
Aside from refining a few of the concepts I showed last week for Dan (down there), I’ve been working on more paintable signs/object concepts to take advantage of the paint system we have in place.
I originally finished the two water tanks, but the larger one was looking a bit crappy. After asking Howie for some help, he came up with a better concept. The smaller one is and done. I’ve been reworking the larger water tank. I’m currently UV’ing it now, and should be all done and good to go by tomorrow.
I made some small tweaks to the footsteps to make them sound a bit less like an angry man stomping around when you sprint. I did a first pass at the camp-fire and furnace sounds, and also spent a little time tuning the river sounds and adding a few variations there. Eventually, we’ll make the faster running water sounds play where the river is the steepest. I’ve also added sounds for when you jump and when you land on the ground, and made a quick first pass at the horse footsteps.
I spent some time this week working on giving us more control over how many sounds different game objects can play at once. This seems to have helped with the whole lagging out while you’re firing at full-auto thing for me (although it’s not completely gone).
I’ve started working on making more varied animal footsteps, moving those to the same system that the player footsteps use so we can start actually playing snow sounds if a bear is walking through snow instead of just having a single set of footsteps for the animals like we do right now.
Servers are working pretty well right now. They can support 100 players without breaking a sweat. When you start getting into 200+ players things start to get a bit sweatier, and the biggest perspiration is the AI.
So I did a bunch of profiling and worked out a few ways that should make it more stable. The AI was set up to think on intervals, and to randomise those intervals so they don’t all think on the same frame and cause spikes. This wasn’t exactly working: after a small lag spike caused by something else, the AI ticks would bunch up again and then slowly spread out. This could cause a snowballing situation where the AI would tick slow, causing the AI ticks to bunch up.
It’s not sexy, but we now have userinfo. What this means is that the client can set variables that the server can read. This works the same as in the Source engine.
We’re only really using it right now for god mode and skin changes. Admins can set “god true” in the console, which will set their userdata, then the server will know they can’t receive damage. Previously this variable was global to all players.
We also added skincol, skintex, skinmesh userdata. They change the player’s skin color, skin texture and skin mesh. We didn’t want to add these, but people started requesting them for machinima. The thought occurred that it might be nice to now add these and have the machinima guys hire actors based on their in-game looks, but in the end we figured if we don’t add it some server mod will, so we might as well make it easy. They are admin only.
Mesh Collider Optimizations
I had a bunch of code for building skinned mesh colliders. It took all the vertices, all the bone-weights, then it multiplies all the vertices based on the bone-weight matrices, then created a new mesh and set it as the collider. And this worked pretty well. Then I found SkinnedMeshRenderer.BakeMesh which does exactly the same thing, except in native code so it’s faster and doesn’t create any GC churn.
All those words mean it should reduce the lag spikes that happen when shooting.
I started working on a map system this week. A map is a long requested feature, but I think we’d be missing a bunch of gameplay opportunities if we just made a straight up map, so I’m trying a bunch of things. I’ve got it rendering and navigable so far.
With the awesome work Andre and Diogo have done on the terrain system, we already have the terrain normal map, height map and splat maps at hand, so it’s trivial to throw them all in a shader and have it render a top down map that looks kind of legit.
The hope is that the map will only show areas that it’s been in and you’ll be able to draw all over it. This should be in next week.
- Fixed sign texture disappear.
- Menu building caching (perf. increase when looking at something).
- Spectators can use chat again.
You might have noticed we added some loading music last week. It’s by the same guy who did all the Legacy rust music. He produces stuff under the label “Atrium Carceri”, and you can check him out here. His stuff rocks, and we’re probably going to get him to do some more in the coming months to really ramp up the ambiance in the game. I also lowered the overall volume of music and made it obey the music volume slider.
- Fixed rocket launcher starting with one ammo – Oops!
- Fixed explosive damage not resetting the repair delay on building blocks.
- Serverside projectiles are invisible until motion (rockets and grenades look less buggy).
- Added missing normal map to grenade.
- Reduced hammer refire rate.
- Grenades have a minimum damage distance.
- Viewmodels don’t drift as much in ADS mode – way more responsive gun fights.
- You can no longer upgrade building blocks while they are under attack.
- Re-added missing sound effects for eating food.
A big step this week. Petur has been brewing his map quietly in the background for a few months, and today it’s finally released. We fully expect that it will play like shit right off the bat because it hasn’t had any real gameplay testing yet. That’s what we’re doing now, and it’ll get tighter and tighter every week.
People have been requesting that we hide the server name in the main menu when you press escape. This is because it’s revealing which server streamers are on and then people are ghosting them and wrecking their shit. I’ll try to find a solution for that next week.
Next week should be a bit more content filled. I hope to get the map stuff finished over the weekend, and Helk has his research stuff. Tom’s SMG should get animation and audio, and be ready to get in game. Dan’s water catcher should go in too (which means we need to think about adding weather quite soon).
We’ve seen some quite high player counts recently, relative to other games in our category. Which is kind of validating: I guess that means we’re on the right track. We are probably going to remove Legacy from the default install soon. You will still be able to play it but you’ll have to change to the Legacy branch.