26 February 2015, 8PM
Something we've been thinking about for a long time. We've talked ourselves out of it and talked ourselves back into it. Our primary problem with this solution was that we didn't like that people would be killing themselves to spawn near a friend. Which probably seems like a silly thing to worry about. So now I'm pulling the trigger.
The idea is as simple as it could be. You hold E on a sleeping bag that you own, select assign to friend - then search for your friend's name and click on it. Your friend now owns this sleeping bag and can spawn at it. The player list is collected from players on the server and from your friends list.
There will obviously be some issues with this. Maybe I will spend a buttload of resources to full your screen with sleeping bags calling you a bitch. Maybe I will make a sleeping bag for everyone on the server to fool them into spawning into my jail. I don't think the effects of these things are too devastating right now, so we're going to handle them as they become issues, instead of removing opportunities for emergent gameplay.
Demolishing isn't used properly and mostly isn't needed, that's our conclusion. When you break into someone's base and you find their cupboard we don't think you should be able to pull out a hammer and demolish walls and doors to find secret rooms. You shouldn't be able to remove the entire building in a couple of minutes. You shouldn't be able to place a cupboard next to someone who doesn't have one, and demolish their base. That seems like common sense game design.
There is one legit reason to use demolish. You are remodelling your base. It seems to us that this is something worth sacrificing, worth making people think around. Maybe we'll add further tools in the future to make remodelling easier, but we need to see how this changes gameplay before making those kind of decisions.
The benefits of removing demolish are obvious. Penetrating a single wall and getting access to your cupboard doesn't give them access to your whole house. You can have multiple chambered safe rooms that take time for them to break into. Your house is probably still going to be there when you log in, even if you have been raided.
People have been missing walls. This is because somewhere along the line a message was sent from the server describing the wall, and it got lost somehow. This isn't something that only affects building parts, it's potentially any entity sent from the server.
To detect and prevent this we now send a hash along with entity snapshots. If the hash doesn't match we throw an error and kick the client. This doesn't fix the problem - it just means that people are kicked instead of missing walls.
I've spent a good chunk of my time this week looking at what we could be doing wrong to cause this to happen. It seems to be affecting about 1 in 100 people who join our development servers right now. We're logging it and we're getting information, hopefully when the patch is released we'll get some answers from the larger pool of people. Just keep in mind that this is a known issue and we're working on it, if there's any information you have that can help it's very much appreciated.
We had a freeze bug last week. After about 10-20 minutes playing the game would freeze. After a lot of messing around I managed to capture the freeze in the editor and was able to debug it. It turned out it was a thread locking issue in FMOD (Unity's audio engine).
After some trial and error we found out that this doesn't happen if we disable our ambient sound system. So it's disabled. For now.
The bug has been passed along to Unity, but I don't have much faith in them fixing it without a hard repro. Next week I'll have a good poke at it and see if I can find out exactly what we're doing to cause the lockup.. but threading issues like these are very hard to recreate on demand.
You might have come across a poor guy on a server somewhere with a trail of lines and boxes following him everywhere he goes. At some point a server admin looked at him and pressed X. This is an internal debugging command that turns on debug mode for an entity. It's a toggle so to turn it off you need to do the same thing again.
We decided we don't think server admins should have these shortcuts, given the amount of craziness it causes, so we have restricted them to developers. We also disabled a bunch of other admin "cheats", like instacraft.
We have new screen overlays for you. An overlay for when you're too cold, an overlay for when you're too hot, and a directional damage overlay - so you know where you're being attacked from. We've tried to make these as unintrusive as possible while still being noticable.
Since the last patch was released I fixed a bunch of stuff that was wrong with the new network code. Some server providers were finding that players couldn't join their servers - this was because the server variable "server.ip" (which binds the server to a specific ip address) wasn't working. Users were losing connection to servers for no reason, this wasn't anything abnormal. They just weren't getting notified of exactly why they were getting kicked.
Server owners who were lucky enough to get over 100 people on their servers will have found that their servers framerate dipped significantly. This isn't a new problem - it's been happening for a while. I spent a good few hours profiling one of our official servers this week with 150+ people connected and found a few performance issues. You should find your server performs a lot better now. A few of these performance fixes also apply to the client too, which is a bonus.
Servers were leaking memory like crazy too. I fixed a bug where some entities weren't getting deleted properly but I also did a lot of optimizing (which is explained in the next section).
It was hard to figure out what was happening on the server in terms of what objects existed in the world, how many there were etc. This information is pretty much critical to optimize memory usage.
So I added a command called "dump".. which dumps a bunch of information about the world into a folder. This information includes:
- System information
- A list of root gameobjects grouped by name, ordered by count.
- A list of root objects grouped by name, ordered by count including children.
- A full hierarchy of gameobjects including component count.
- A list of connected players including network stats.
- A list of all instanced Objects grouped by type, ordered by count
- A list of all instanced ScriptableObjects grouped by type, ordered by count
This has been really valuable. Unity's GameObjects, ScriptableObjects and Components use a lot more memory than you'd expect, so the fewer objects we can have the better. The dump command revealed that we had a bunch of sub-objects on the server that weren't really needed.
A simple example would be weapons. The rock has 3 LOD objects. So you have the rock object, then 3 children objects for the LODs. The server doesn't need those children, so if we cull them we have saved 3 game objects. Which is 1,500 game objects when you have 500 rocks weapons in the world.
Now compare that to the Torch, which on the client consists of 11 gameobjects. Or some of the trees, which before optimization had 20+ collider objects.
So we're getting somewhere.. but there still seems to be an unexplained leak. Unfortunately this leak seems to be in normal objects instead of Unity objects. I started making a quick mono profiler to record the GC creating/destroying objects. But then I realised that there apparently isn't a way to detect when an object is destroyed.. so it's going to be tricky.
It's annoying when you're on a server and the owner restarts it without giving warning, right? You're in the middle of a field - you're vulnerable. So I added a command for server owners called "restart" which notifies everyone on the server that it's going down, and gives them a 60 second countdown to get safe.
Helk and Goosey have made the Eoka behave like it did in legacy. Hold down fire to strike the flint until it goes off. This makes it is a very unreliable firearm. It can now be crafted without a blueprint too!
Helk finished work on the Repair Bench! Just drag your damaged item in and press repair. You'll get it back all fixed up for a price of around 40% item initial cost for a 100% repair.
But careful, each time you repair an item its maximum condition goes down until it becomes un-repairable. The model is a placeholder.
Helk has made different biomes have actual different temperatures. This means you'll freeze to death in the arctic, and bake in the desert (during the day). Clothing will protect you against the cold and Metal armor magnify it.
The values are subject to change but it should definitely have an impact on where you travel, when, and what you wear there.
Radiation is now split into two categories, radiation level and radiation poisoning. This makes it work more like legacy, where radiation level is representative of the radiation in the area you're currently standing in, and radiation poisoning increases based on that.
You wash off some of your radiation by jumping in water and moving around.
We added Comfort. In the future we're going to use it for a bunch of things but right now it means if you stand around a campfire you'll heal faster and not get cold. You'll heal faster if you have a bunch of people with you. Food doesn't directly give you health anymore - you have to metabolise the calories gained from them instead.
A bunch of numbers have been balanced and tweaked here. It's all subject to change - so let us know how it feels.
- Fixed Poncho zfight fix
- Don't warm up stability if server.stability is false
- Lanterns are destroyable
- Bow and Arrow are craftable by default
- Animals make attack noises
- Fixed melee swing animations not playing for other players
- Fixed items not cooking/smelting after load
- Metabolism changes are networked to the player without delay
- Reduced torch brightness
- Hammer attacks are non repeating, can repair faster
- Fixed third person player look angles sometimes going crazy
- Banning a player also kicks if they're connected
- Cargo plane doesn't fly as high
- Fixed loot containing starter blueprints
- Ricochets bounces are less random
- Smoothed radiation screen transitions
- Made geiger sound quieter
- Fixed letters repeating in sleeping bag rename eeeeeeeeeeeeee
- Servers running insecure now run without VAC
- Users that are VAC banned or running without EAC see only insecure servers
- Radiation clothing protects against radiation exposure rather than radiation poisoning
Sorry about the technical rambling devblog this week. We did good this week. Took a few things from the priority list.
Next week we have a bunch of stuff queue'd up and ready to go. I'm going to take it easy and work on some fun, exploratory stuff.
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.