GodWeapon Delay Upgrade

nice job Supra! an upgrade indeed to GW! I still logon GW sometimes to find some games when I can’t find any on p2p. It is horrible for me though since my ping on GW is usually at the 7 frames mark which does suck, but hey its better than not playing for me. So anyway like I said good job, now I can play more people with my ugly ping without them saying “your ping is too high sorry” or i can own random losers that like to blame their losses on the delay (when really they weren’t good to begin with).

yay, finally a noted improvement. good shit. +rep for u.

Though I haven’t played on GW in like 9 months :wonder:… Will this be available for other servers or just GW?

GW for the time being until I can confirm everything is okay. Then I will give it to Emularena, Reps, and West Wonderland so they can upgrade from the previous EmulinkerSF

I understand the upgrade. Good work. I think people don’t understand the concept of frame delay versus input delay. I like to try and play with some people from GW but they never want to play cus I’m on the west coast. This will hopefully increases the odds of people willing to give it a shot.

I see the differences and retrospect of the upgrade, it’s a great idea. What I like about GW is the consistancy of the matches, although the majority of players their are incompitant to understand some of the games, unlike GGPO at least the matches are afluid and consistant. After playing on GGPO I noticed the timing and spacing and everything just seemed so off, after doing 720’s and 360’s on GGPO, trying to do them offline seemed more of a nuisance. I guess I am much more familiar with Mame and it’s delay where as GGPO seems a bit fast paced. I don’t mind the attuned differences with the delay inputs, I see how it can balance out certain issues concerning each players latency which is a good way to even it out. Although this doesn’t make it superior or great, it is indeed a major improvement and something I am looking foward too.

All I want to know is why the fuck my ping on Godweapon has risen from 50 to 93 over the past few weeks.
(Was is moved to a less quality hosting server or something?)

yea I noticed the same thing as Syntax, mines gone from 54–>81 in the last couple of weeks.

i think this is an amazing upgrade to godweapon
people who have 100+ pings have challenged me SEVERAL times and saying i’m scared to play them when I just don’t want to play against someone with high ping cause it’s just boring and stupid when i could be playing someone with ping closer to mine without lag…
although they are at a disadvantage, it’s their choice to play in this situation
i think it is generally impossible for anyone of that level of ping to play anyways, they will only be playing in that ping against anyone, so i’m pretty sure they’ll get used to it
why bring down the people with low ping?
great job supraclient

yea i actually like it now i dont have to worry about there being soo much delay…just today i played 2 ppl (this might sound crazy but it was just a test) with pings over 100 and i gotta say this RLY is something…i had no problems playing at all and still had the same delay of playing someone online in my area…everyone should give it a try…

Nice. I guess its the first 100% kaillera netcode compatible emulinker server. Guess I won’t get to bitch about all emulinker servers being half assed kaillera any more. Its as good as Kaillera now in terms of gameplay?_?
Takes me back to even before my time. Things would have turned out differently if Moosehead completed what he started a long time ago. I can only imagine how he used to be so passionate when he sent that e-mail to Joel, my predecessor at Open Kaillera. Oh well, thanks for your hard work.

It happens. When dealing with something for a long time you tend to burn out. I’ve left and came back several times over the past 2-3 years. I get bored easily so I’m always switching between projects. I kind of got motivated the other night to figure out how to do it without rewriting his code. If I wanted to support different connection types, it wouldn’t have been as simple. I don’t really want to rewrite his code. I think this is good enough for now, especially with GGPO’s bright future.

If you have problems playing anyone with high ping or worried about having bad delay, you can always set a max ping for users joining your game. ( **\maxping # ** ) If its higher than what you set it for, they can’t join. So if you don’t want to play anyone with ping higher than 50, just do \maxping 50 when you host your game.

I usually set it for 95 max, but I can have decent fair delay games with players who have pings up to 125 ms as if I’m playing someone with 40 ms and I’m usually 12 ms. Problem is most players with pings higher than 100 are usually foreigners on kawaks or older versions of mame and its hard to explain to them that it won’t work with .64 or .117.

I had the server box reset. Some thing was acting up and now everythign seems much better. Both IP’s also seem to work for GW too once again:

GW: 69.31.15.70:27888
GW: 69.31.15.190:27888

Those who were complaining about a high ping, please join the server and confirm your ping is normal? Report results back here.

Has the server been set for every gamer to play at the frame delay as the person with the highest ping? It feels like it’s been laggier… I dunno…

Ping is 90-100…used to be 50-60

Maybe those scripts are lagging it?

I can give you the reasons I never “completed what I started”, if anybody really cares…

#1 The delay problem you like to complain about really never caused any problem for me personally. I duno if I just have a good network connection or never played anybody with a bad ping, but I’ve just never noticed the issue to this day.

#2 I don’t really understand the delay algorithm. If fact, I didn’t even know it existed when I released the first few versions of EmuLinker. Supra has tried to explain it to me a few times but I still don’t really get it. If you can write the business rules governing setting that delay byte clearly in a way that I can use to put in code, I am willing to fix EmuLinker.

#3 Child born 6/10/2005…

#4 “Passion redirected” to other projects… http://www.buzzsurf.com/sql/

Nice ^_^. I’ll try to remember the date to send birthday cards.

I’ll give #2 a go:

Well, the problem is users with different pings and connection settings are connected to the server. When they want to play in the same game, server needs a way of mixing the input values of different players in a way that the users do not get any more input delay than they should and everyone stays synchronized.

So the problems are:
no 1 - needs to know how much delay the user will have
no 2 - needs to know what data to send to the user and when

for no 1:
Each user can have different pings and connection settings.
Firstly, assuming all users are using LAN connection setting, the minimum input delay an user should have is just the ping. In that time the user’s input data can reach the server, server can mix that with other player’s input delays and then server can send it back to the user. Kaillera assumes 60 frames per second so this delay is just ping in ms divided by (1000 ms / 60 frames) = 16.6666666666667 ms per frame
so delay = ping / (1000 / 60) = ping * 60 / 1000 frames. This’ll give a fraction. Since we want to work with discrete frames and not fractions, just move it up to next possible integer value = (ping * 60 / 1000) + 1; Thats how the basic formula is derived.

Now LAN might not be the only connection setting used. As you know connection settings just specifies the length of the minimum unit of input data transmission between the server and the client. i.e. LAN == 1 frame of input values per packet => 60 packets per second…excellent == 2 => 30 packets per second etc. Since the user will only transmit data with that grouping, it’d make more sense to describe the delay with that grouping:
basic delay = (ping * 60 / 1000 frames) / connection setting = (ping * 60) / (1000 frames * connection setting) , or turned to whole number:
delay = ((ping * 60) / (1000 frames * connection setting)) + 1;
this is the number server sends to the client. This was double confirmed by TRAC’s hand decompiled UOKS server code.
On client side: Client expects input from server after sending 1 + this number of input packets.
e.g. if an user was on excelent and he had a ping of 33:
delay = 33 * 60 / (2 for excelent * 1000) + 1 = 1
i.e. it’ll send 2 packets containing input values of frames 1,2 and frames 3,4 and on the 4th frame (when it sent the second packet) it’ll expect to receive something from the server and it’ll give what it receives to the emulator on that frame. i.e. 3 frames delay

for no 2:
Since that delay calculation is true for both ends i.e. client’s ping to server = server’s ping to client, the time it takes for the game start signal to reach the client and it sending the player’s first input frame is also equal to that delay calculated. To think of it in a simpler manner, the frame when it expects an user’s input = (delay + 1) * connection setting frames. It does not include a certain player’s data or send any data to him before this frame on server’s end.

here is an example: http://img216.imageshack.us/img216/1859/examplefn0.gif
3 players in a game;
p1: 0 ping LAN connection setting
p2: 0 ping Good connection setting
p3: 0 ping Excelent connection setting

Assuming everyone sent “1” on frame 1 and “2” on frame 2 and “3” on frame 3 and etc…

On “frame 1” the server would do nothing
On “frame 2” when the server receives “1” from player 1, it’ll send “100” to player 1 only i.e. player 1’s first frame input with a bunch of 0s in player 2 and 3’s slot
On “frame 3” it’ll send back “200” to player 1 only i.e. player one’s second frame input with 0s in player 2 and 3 pos
On “frame 4” it’ll also expect player 3’s first frame. so it’ll send “301” to player 1 and player 3.
On “frame 5” it’ll send “402” back player 1 and player 3.
On “frame 6” it’ll send also expect player 2’s input. so it’ll send “513” to all the players
Of course it wont send to player 3 straight away on frame 4 because of his connection setting.

I’m not good with explaining so hope you understood.

This is how the official server and UOKS does it. You can probably tell its not 100% perfect.