I'm back after a couple of weeks dealing with other stuff. I kind of enjoy taking some time away. I like seeing how the team handles shit without me. It helps identify places where I have too much control, where other team-members need the authority to get shit done. It's important for us to increase the bus factor. Especially as shit in my life is going to get really busy next year, so any way I can empower the team to take weight off my shoulders can only be good.
So I've been looking at problems and solutions this week.
Official Server Stability
Problem: Official servers are shit. They attract hackers and griefers. Sometimes they're down without explanation. Sometimes they're laggy.
We need better monitoring tools. Better reporting tools. Better hardware. At the moment we're hosting our own servers on a bunch of random dedicated servers. We're going to be adding a bunch of new official servers in a variety of places, using a professional host. This means we'll most likely be retiring the old servers.
I knocked together a quick website to monitor and alert us of server issues. The hope is that by making this more visible, and by making it more accessible by more people, we'll be able to spot and react to problems quicker.
I'm hoping this is just the start of this, and we can get serious about administering our official servers properly.
Problem: Can't redefine keys in game. Unity options pop-up window breaks Steam Big Picture mode.
The solution to this is our own input system. Something I was hoping to avoid for a while since Unity is re-writing theirs that will probably make this a waste of time.
I decided that if it's going to be done it might as well be done right. So I copied how Quake/Source works. It all works via the console system. So you can bind keys to certain functions. This will make it so that when you press k the game quits:
Obviously that's just an added bonus, mainly useful to admins/developers, since we can bind keys to debug commands and stuff. Normal users will be able to change key binds in the menu.
Problem: Our code isn't testable.
Our code is pretty modular, but it's all in Unity. It's a bunch of scripts thrown in a folder. We can write tests but then they all exist in Unity, and the more shit you have the slower it all is to compile. So I started extracting code into different self contained assemblies.
This increases re-usability, since we can share those modules with different projects. We can quite neatly add a bunch of tests for each module, to make sure future changes don't fuck shit up. It also takes all the loose files out of the Unity project folder, which can't be a bad thing, right?
I can appreciate this is like shutting the barn door after the horse has bolted, but come on, we're trying ain't we?
We released a small update earlier this week to address some bugs and re-enable the new ambient sound system, which we had to disable over the weekend due to performance issues.
- Fixed servers opening their connection before collider batching, stability and save caching were initialized
- Fixed servers trying to send network updates during the startup routine
- Fixed building placement exploit involving sleepers
- Fixed external wall exploit involving sleeping bags
- Fixed foundations not sending a stability refresh to linked objects on placement
- Fixed issue with roofs not offering sideways support for walls
- Fixed issue with constructions waking before setting their position on the server
- Fixed building block sound cutting out on placement
In this update I also adjusted the default user level for antihack to include admins and developers (antihack.userlevel 2) since we were getting a bunch of exploit reports that were only possible because the people who tested them used admin accounts and were therefore excluded from the server side movement checks. If you want to noclip as an admin, you can temporarily make antihack exclude admins (antihack.userlevel 0). I’ll also add something that automatically does this for you when admin noclipping is enabled as soon as I’m certain it won’t open up any potential exploits.
I started working on the next version of our procedural maps this week. The plan for these changes is to hit the dev branch early next week and then iterate on that.
To get started I hooked up some placeholder underwater vegetation which, together with the awesome underwater shader Diogo wrote, will help make diving a lot more interesting. We also have some ideas floating around (hue hue) to make diving actually useful, but more on that in a future devblog.
Next I addressed the issue that our official servers rarely change their map seed. It’s a pain for us to change the seed of all our servers by hand, so I made it that when no seed is specified the server generates a unique seed that automatically changes every month together with the wiping update. This doesn’t change anything for community servers that prefer to choose their own seed, but server owners now have the option to use this automated behaviour if they like.
The big change everybody’s been waiting for is the addition of Vince’s new dungeons to the procedural maps. I’m working on making all the functionality I wrote for Petur when he designed our custom maps compatible with the dungeon workflow, which should help Vince design some great stuff for us. Speaking of Petur, I asked him to create some more of his beautiful prefab mountains for the procedural maps since the stuff I’m working on for the dungeons also comes in handy for those. We’re hoping to get to a point where we can choose from a unique palette of mountain styles for the various biomes, which should provide some much needed variety.
Probably more dungeon and mountain related work, possibly some optimization.
I just came back today, I will probably copy and paste the same list next week when we release to ensure everybody knows what to expect. There’s a few things left to do regarding our dungeons that I need to fix before next patch:
- Holes in terrains
- Dips in terrain that can lead to the player being blocked under other meshes
- Missing Collisions here and there
And here’s the list of what dungeons will release with that are not currently considered a big deal:
- Small holes between meshes (sparkles, etc).
- Collision precision (you might have to crouch in a few places currently to cross certain obstacles, very few exist to my knowledge though).
- It’s greybox, hence it comes mostly un-textured.
- Performance is likely to not be optimal for several months around those areas as I make progress over final art.
- Popping of distant structures will be part of the game as a result, though some of it might be a bit rough.
- Dungeons generated underwater. This especially regarding any underground tunnels or caves. We will fix this later on, but you can swim if you want to explore them.
- Rail and road networks will connect at a later date.
Things I will be listening for next week and after is feedback on level design, pacing in the dungeons, etc. Any of that feedback will be a priority for a couple of weeks as will fixing any bugs that prevent progression through dungeons.
More dungeon work.
I spent all this week painting about 20 cloud textures, creating matching normal maps and integrating them into a new modified Sky Dome. Clouds are now split into High, Middle and Low layers. The types/shapes of clouds in each layer will be as real-world accurate as possible even down to how fast they move. Scale is really important, so I’m spending time getting all the clouds to match. If I’ve got it right the world should feel a little more open and to scale. Click these for awesome, high-def clouds.
I also started work on painting some epic cumulonimbus clouds to help communicate incoming storms. These will need to be able to work with thunder/lightning and feel really dark and foreboding, so there's a bunch of experiments I’m going to do to see what the best approach is.
Experiments for the storm cloud/lightning stuff. Probably some more base explosion work as I was shown some really useful references last week. Plus I'll spend some time looking at the underwater environment with regards to effects/movement.
I went over all of the items' LOD pop-ups to make sure they pop in/out of the view at more practical ranges. I noticed some of the items were popping out far too early making it quite difficult to spot items on the ground from far away.
The new animations for the player walk/run that I made last week looked a bit too janky so I decided I’ll need to redo them again using better motion reference.
I added some code to spawn flies around a dead body.
I started working on some more wounded animations for when the player gets shot from behind. Here’s a vid of what I have got so far.
For those curious, I video myself for reference.
Continue working on more wounded animations.
This week I managed to work up some scientist NPC ideas, exploring the basic look of their hazmat suits. I want these guys to have a weird, unsettling feeling. I felt like you could capture this by hiding their faces completely behind dirty face masks. I also think it would be cool if they somewhat ignored the player as they went about the island conducting their research, only really acknowledging you if you got too close and threatened them. It would be cool if you could hear them communicating to each other with muffled, distorted voices so you can't really understand what they're saying. Just to add to the creepy factor.
I'll continue with these guys. I'm having lot of fun with these, and it'll be really awesome to add some life to the world to see how players react.
I’ve just been working through my to-do list this week. I’ve finished up soft target impact sounds for a bunch of melee weapons, so hitting animals or the sand with your hatchet or a knife will be more of a slicing sound vs the hard thwack we have right now.
I’ve pretty much finished up the M249 sounds, but there’s a few more tweaks I want to make before I’m totally happy with them.
- Started some additional impact sounds for sand, grass, and forest materials
- Tweaked some of the existing impact sounds
- Tweaked the helicopter wreckage fire & napalm sounds
- Started on large metal gate and wood shutter sounds
Next week I’ll be finishing up the sounds I’ve started this week, making a few smaller adjustments to the ambience system, and knocking some more stuff off my list.
There’s not much to show this week, it’s mostly boring stuff. I’ve just been chugging away at the low poly of automatic rifle. I’ve made some good progress on the stock separately because I was a fairly simple object to texture in relation to everything else. Still gotta tweak some stuff on it but here you go, it’s shaping up to look different from the other weapons in the game already. Great concept by Paul!
More texturing! And more low-polying! Really excited to see this gun in game for you all to play about with!
I managed to get the model in-game this week and all the main materials looking good. The previous skin material had almost no specular (or shininess) which is why it looked kinda flat and dull. Having specular helps pick out smaller details and should go a long way to making it look more life-like. It's still a bit plastic looking because Unity lacks a decent skin shader, but it looks OK for now. It’ll be easier to calibrate the levels of this stuff when he’s in and running around anyway. You can see how the materials react well under different lighting conditions, which is helped by having some specular contribution. You can see some of the subtler details a bit better when you’re actually moving around in-game. Here’s a peek at what it looks like with some motion.
The modelling and texturing is done so I'm making a start on the rigging. The skinning itself should be relatively simple but I'm not sure how much fiddling I'll need to do with proportions or retargeting. Basically fitting the new model to one with some quite wonky proportions might take a lot of work. I'd like to get the facial blendshapes done too if possible.
Spent this week integrating and testing lowest quality (Q=0) water and underwater rendering aiming for consistency across quality levels. Ended up making a ton of changes that increase compatibility even for higher quality modes. Also made a few optimizations in the process.
Here's a comparison shot of how all water quality levels look compared to each other:
And the same comparison for underwater:
We plan to bring these underwater reefs to life and I hope these changes will help increase gameplay opportunities or, at the very least, make our underdeveloped underwater fauna a more interesting place to explore.
During the weekend I revamped our water optics code to improve both color extinction and scattering, and made it easier to tweak. Scatter properties now match exactly over and under the water surface, and lighting is consistent across the entire day and night as well. Also, transitions are looking more natural:
During all these changes I realized there are a couple of problems in top quality modes with regards to simulation. Both displacement and shading could be a lot better. It looks alright for now, however, and these are not super high priority but I’ll get to them sooner or later.
Now that I’ve finished the more important aspects I can finally move on to smaller details and eye candy. I’m taking a break from water, however, to help out Taylor with a new Skin shader and Scott with some underwater FX.