Multiplayer - back and forth, old and new
In the past weeks, while I was basically just sitting on my a$$ and waiting for emails to arrive, I had a lot of time to think about how I want to proceed with the Multiplayer.
Since day 1, this thing was bugging me beyond repair which was also the state in which I found it when I adopted the D1X and D2X sources. And despite the fact that I don't care much for it, I decided to do something.

As you all know, Descent always based on P2P and when I got the game online, I got so much feedback from players unable to play since they had no abilities to open their ports. Which is why I started with what I still think is the best approach: A client/Server model. right now it's mostly "Client/Server" in terms of communication. My mistake was that I tried to optimize the hell out of it and the fact that most of the game was still designed for P2P made things only worse. I released that too soon, yes. That was bad. But I wanted to have players be ABLE to play. That was good.

Only recently I got most problems under control. In fact I am VERY eager to see how you guys will like what I did. I have a big BETA test planned and I am really excited about it and I hope you guys will be willing to test the heck outta it.
And I have more in stock which however I will delay until you guys out there are satisfied.

This also includes something very important: Competitive playing.

Many of you were not satisfied with how the Host is actually hindering the communication as opposed to the Peer2Peer model. Like I mentioned earlier, there were still some odds and ends which I could fix and drastically improve the host performance.
But I still can imagine that some of you won't be satisfied with it as effectively is adds a new hop to the communication which increases the travel distance of a packet.
I still hold against that, that this will always depend and vary depending on the location of players. Potentially a P2P game can have the same delay times or worse than a C/S game and the closer the players are together, the smaller the actual difference of the additional hop anyways.
We are under the rules of relativity and so we will always live with Ping. I personally would rather go and eliminate the side effects of the ping rather just trying to minimize the inevitable.

But as I said:
a) I am not a big Multiplayer guy and
b) I want you guys to have fun with it

So I came to a conclusion.
When I redesigned the UDP component, I made the whole thing modular and exchangeable.
That means we could implement new protocols like TCP on the fly but it also means that I can add new way of communication altogether.

So there is my idea: If you guys - who are very competitive - still don't like the performance of how the game behaves in the BETA2 (BETA1 will still have a few open tasks), I will be adding a P2P model again.
I am not 100% decided on how I will do it. First of my UDP implementations had Client/Server relay simply as a fallback in case a player didn't have his/her port open.
So we could have a Client/Server protocol, we could have a P2P protocol and we could have a Hybrid, where C/S is only used if P2P is not possible.
If I'll make the Hybrid and on-the-fly switching possible, depends on the workload. Having a clear separation between C/S and P2P is probably the easiest but with little effort, their mechanics can be merged.

It's additional work but seriously, it's not that big of a deal.

If it lets you guys have more fun, I'll add it.

Your turn.
The greatest pleasure in life is to do what people say you cannot do.
Uhm... Honey, there's a head in the toilet!
This sounds awesome!! I'm glad you're doing it zico, and I think it will make a lot of people in the competitive multiplayer community happy! Smile
Thank you for the supportive words. I really appreciate it. I hope I haven't shot myself in the knee by putting more pork on me than I can handle. But the team is growing and I think we can do it - if you really want it after the BETA tests. I just need to make the time for it. I hardly wanna be a moneygrabbingbegging bastard but for this I think again of the idea of the donation buckets I raised back in 2011. It still feels bad since I only wanted to use that money for cancer research which became very important when something happened...
So yeah - I want to deliver and of course I also want to see how the BETA turns out - then think of what comes next. Best way of action of course is that the C/S model finally works as it should and P2P won't be necessary at all. But one step after another.

EDIT: Oh. OH! I totally forgot!
1) The new BETA will also have a mechanism that does not only prevent packet loss but also will keep the packets in order. So things like "respawn before dying" will be done for
2) We get a new tracker! Hopefully for BETA. It will host/show all game infos (players, scores, all game settings)!
3) The new tracker will - in the future - also allow level downloading. I.e. making you able to get the level the host is playing on-the-fly. Sounds cool?
The greatest pleasure in life is to do what people say you cannot do.
Uhm... Honey, there's a head in the toilet!
A lot of this stuff sounds cool, stop  teasing and start showing something working.  Tongue
p2p is back? well you did change your mind after all.
so if p2p - means that C/S will be used only between two firewalled clients? because if there is only 1 in the game then he could initialise p2p connection with all others? or its possible in TCP only?
Of course I will also base this on Feedback in the BETA version. Which is the main thing I am going to show (soon as the current big project is sorted). So whatever happens, P2P will not be part of the next version. Just alone because I can't do that in time.

Depending on the location of the players, P2P can - and I understand that - be a lot faster. On the other hand it's also not easily to say that a C/S ping is definitely double of the P2P ping. In fact from what I can see from the tests I ran with some other people, a rule of thumb is that P2P is around 2/3 the Ping you'd normally get in P2P (between two clients). And of course there is the fact that "Ping" value is Ping-Pong - i.e. the time between sending and getting an Ack for the Ping. So if your Ping value is 200ms, it means that a packet to that player would take around half of the time. Let alone that becomes even more misleading in a C/S game.

So all in all I would love to get much Feedback from all you guys in the upcoming BETA and just see if you have fun or not. I'd also love to play with you all and see as well how that goes. Test games are one thing - even tho I am not even half-way good player so I am slow to judge anyways.

I got rid of so many problems recently of which I think that influence the game in a much more negative way then 200ms of additional ping can do. So yes: First I wanna see how you like this, get the bugs out of the way, make homers work correctly in Coop and all that - THEN I wanna see if we can and should try to optimize for 33% (generalized) less Ping - or maybe just negating the side effects of that which would also come in handy in case your connection cannot prevent a moderate ping at all (independent of the connection model). There will be polls (also see below). Of course I also wanna concentrate getting CCTF in the game as soon as possible. But I only have so much time. And especially with the current code unification (which was long overdue) it's all pretty chaotic.

About your question:
How I realize P2P is up for the question. In all honesty I am playing back and forth with the idea of donation buckets. That came to my mind with the current suggestions for Occulus Rift support. And first of all I'd need a Rift to make this happen. This isn't meant to be money-begging but like you said: "Show something" and I'd love to do that.
So with a donation bucket I could build a stretch goal. So if we reach the goal, it will be C/S OR P2P which the host can select from the "Host Game" menu. If we reach the stretch I could make P2P in a way so it can automatically switch between P2P and C/S depending on if the Client is properly configured - and of course with ANOTHER option to not prevent switching at all - if you want a pure one-model game. Which would probably be having three options in the Host menu: P2P, C/S and Hybrid
That's of course a bit more work since I have to unify the C/S and P2P code instead of simply separating it.
In such a Hybrid game, only the person with closed ports would need to be relayed via the host. All others before or after that player could use P2P if they are configured correctly.

Like I said, I want you to have the most fun. So after we get the next version out, I'll see what I can do for you guys.
The greatest pleasure in life is to do what people say you cannot do.
Uhm... Honey, there's a head in the toilet!
Hybrid protocol - sounds cool.
I wonder if you are aware of the recent Drakonas work - she actually did show us working p2p build to play around some time ago and for some it works a lot better than latest official.
I must admit that it has its disadvantages, and good host with sniperpackets build (which does work on 'old' non p2p codebase) does a lot better than that at least for euro guy playing on US host.
Drakona's recent P2P work has been a great benefit to many non-US players, since almost all games are hosted by US players.  I was recently in a P2P game with two Brazilian players (LoNI and RPN) with three of us US players with a US host.  It was amazing, I had < 50 ms pings to two US players (Scoundrl and DKH), 120ms ping to Bahamut, and 220ms pings to LoNI and RPN.  LoNI and RPN had < 100ms pings to eachother, 180-200ms pings to Bahamut, and 220-250ms pings to Scoundrl and myself.  Was one of the most playable anarchy games the Euro players had played in recent memory -- I think LoNI beat the crap out of us.

A nice technical writeup on Drakona's changes:
Loni and RPN are from Brasil as far as I remember which is located in south America which is far away from Europe, and closer to US, so I find it a bit awkward to call them Euro players.
I guess if it is so wonderful we should expect mass return of real Euro players to the Rangers. Will see.
Actually, the longer the distance between the players, the less important it should be, which transfer model is used since the packets would travel the longest time crossing countries in both cases. Of course it strongly depends on how "central" the host sits. so yes, topography is a very big topic here. Also for both models since packets will in fact have many, many hops, depending on the Gateways. That's hard to test which is why I'd like to join a few BETA tests - as host as well as a Client so I can also ping a few guys directly and see how much time-difference there actually is between the Host-relayed connection and a direct one. Of course it's just another point of generalization but still very valuable to me.
The greatest pleasure in life is to do what people say you cannot do.
Uhm... Honey, there's a head in the toilet!
With Drakonas build it is actually like 1/3 ping reduction between clients - but it's average and not very accurate assumption since now it involves individual routing paths between clients which in some cases could be even worse than using host relay.
Two 200 ping clients in centralised game meaning around 400 ms between them - in theory, host adds between 30 up to 100 or sometimes more (software lag, depends on many things - processing time, multitasking etc.)
Me and Loni are usually around 200 ping on USA based host - which makes best tactics to avoid each other or we waste ammo without much effect (except homing weapons).
In p2p I see potential advantage in lack of software lag caused by crappy host - which is worth of pursuing, yet there are still some things managed by the host only and as long as those things do not require precise timing
then its all good.

Forum Jump:

Users browsing this thread: 1 Guest(s)