Upcoming Events! Community Event Calendar

BUGSMASHERS!: Episode 31 Written Wednesday 31st of August 2016 at 04:37pm by StormyWinters

Mark Abent returns to save the day in Bugsmashers! Check it out.

TL;DR (Too Long; Didn't Read)

  • A situation where two clients are in the same instance and if one person needs to respawn (Ex: explodes during a firefight) and needs to respawn, from then on you won’t see the ship move and other clients won’t either
  • When a ship spawns it’s given an ID, if a new ship is respawned the old ID is reused, this causes problems in that other clients still have the old one or the old one is gone but are still receiving packets of info from the original ship
  • If the IFCS checks and gets a higher tick from the previous instance then it does from the respawned new ship, it ignores the smaller value resulting in the remote client staying still
  • The work around is checking to see if there are conditions they can use to restart the flight controller, this allows ships to continue to fly even if it’s receiving bad information.

Full Transcript

Mark Abent: Oh hello there, welcome to Bugsmashers.

Hey everyone, we’re here in fun little environment with two clients in a multiplayer test and we have a bug in that remote ships are not moving, they’re calling it a desync issue so if I fly this guy around, weee. We stop him for a moment so I flew a bit, you’ll see on this client that he’s actually stayed still, nooooo. So, what’s happening. Oh shenanigans, that’s what’s happening… but for real, so if we have a ship and he’s flying around and then some fun guy in the Persistent Universe goes, ‘I want that ship’ and they get into a dogfight and you know, the first player explodes into a glorious fireball. He’ll respawn and from then on you’ll never see the ship move, or other clients won’t except if you wait long enough eventually it’ll start moving along.

What’s happening is the worst thing ever, so we have a ship, I’m going to use… what shall I use today? I will use this paper notebook. So we have this ship and when we spawn him in we give him the ID of let’s just say 2, now he flies around and explodes. We need to spawn a new one because well this guy still wants to dogfight. So we spawn a new ship and we give it the same ID because why not, I mean keep everything the same so we give him the same ID, we give him all his loadout information and he spawns. Problem is when this guy spawns on the server, the other clients may still have the old one around…oh, phone fell… or the old one is gone but they still are getting packets of information from the original ship.

So, IFCS checks to see the last time it has got a response from the server for any packets coming in and if it gets, you know, say a tick from the server of 600 but we just died and we’ve resetted our tick it would get a tick of 600 and it’ll think, ‘oh, we should be at 600, we should be at 600’ but then our new ship starts sending information and the tick’s going to be at 0-1-2-3-4 and it’s going to be like, ‘wait a minute, our last one was 600, our new one is smaller so we’re going to ignore all that’ and because it’s ignoring it, you basically see the remote client just stay still. Not cool.

So, for now what we have done are, let’s just say Sir Paul has done, is he has added a work around that checks to see if there’s some conditions we can see to restart the, you know, the flight controller again. Here you can see if we’re in the bad server state because of the aspect bug it will just allow it and get processed. It’s a good work around for 2.5 and let’s start this up and as this recodes… but it has disclosed a bad thing in our networking code that we’ll have to take a look at soon but it’s going to be such a big change it’s too risky for 2.5. You know, it’s pretty bad when you have a new entity spawn in and it’s getting information from the old system. I mean what happens if you have health of 5 or 10 or you die, you spawn but then you get information that you’re health should be 0 from the server because it’s from the old system and you die again, not cool.

So, there’s going to be some weird oddities until this gets resolved but this work around will at least allow you to fly until the networking issue can get resolved which should happen shortly. So, let’s pop up…recodes still going. Take my sip of coffee. All right, recode is gone. I’m going to move my clients, so as you can see the ship already moved around. Let’s see if we can find him… he snapped to the correct state, where did you go… oh, there he is, there he is. All right, so there’s the other Argo and if I go on here you now correctly see him move about, weee.

Oh the shenanigans of game design or programming, same thing, all right. So, we had a fun little issue with, you know, remote ships just dead stopping. No longer updating when a ship dies and respawns, it would just stay there and some time later it will just start magically working. It was tracked down by Paul, fun bug because it just realized a bigger issue we have where if we use the same entity ID on a ship that we’re… we delete it and spawn a new one with the same entity ID or ID, any old packets that come in the other clients will start using them so with the flight controller it checks to see if the server tick is a certain number and if it gets lower numbers it flat out ignores it.

Paul put in a work around to make sure the ships continue to fly even if it gets some bad information but we’re going to have to look into the deeper issue because we can’t have the network, you know, sending old information to new entities from old entities but you know that’s how it is in working on a game. You think you’ve covered something and then you get a bug that uncovers some crazy other shenanigans. Well, we’ll have to fix it but until next time I hope you guys enjoyed, bye.


Director of Fiction

Moonlighting as a writer in her spare time StormyWinters combines her passion for the written word and love of science fiction resulting in innumerable works of fiction. As the Director of Fiction, she works with a fantastic team of writers to bring you amazing stories that transport you to new places week after week.