Synchronisation
#1
Hello,
yesterday I performed with Roy this test:

I took a sword and raised my dex so I had 50% (real-) hit chance (calculated using the Formulas from JG). Both players changed to "Player Attack".
I started an attack about every 5 seconds. After an attack, we wrote down the effect (Hit on my screen? Hit on roys screen? Damage done?).
Here are the results:

[H = Hit ; F = Failed (No hit) ; X = Damage done ; 0 = no damage done]
{my screen ; roys screen ; damage?}
H H X - 2 times
H H 0 - 2 times
H F X - 10 times
H F 0 - 3 times
F H X - 0 times
F H 0 - 14 times
F F X - 0 times
F F 0 - 3 times

To those who the table is a mysterium:
We had some "logic" results (e.g. both failed, no damage), major "lag" results (hit on my screen, no hit on roys screen, damage done) and minor "unlogic" results (e.g. both have ssen an hit, but no damage done).

My question: How is this possible (especial the things like "both have seen a hit but no damage was done")???
I thought the player indicating the damage (swings the sword) defines if it is a hit or not. Now I'm a bit confused. Is the "damage done calculation" an "off-screen" calculation?

Maybe Jarulf can help me (us?) out, maybe noone. Maybe God? ^^

(we all know Diablo is buggy and laggy, but thats just ... crazy)




Ete
Reply
#2
Long ago, way before my Guide, me and Da O'Thot made similar tests to figure out the actual ToHit chances, blocking chances and such. After a while, we realised we were experiencing the exact same thing you do. Basically, one can say that the game does minimal syncronization and each computer works on its own with non syncronized random number sequence, monsters being an excpetion but the way they did it introduces quite a lot of non randomness and you can get a feeling you get "stuck" in certain results. You man experience this in a PvP situation too though.

I have never really researched the compunication and its protocol in the game, hence I am no expert on what messages are snet and when but for a player attacking another player, the game basically just tells the other game it is attacking, each game then do their own attack, which does not nessecarilly reach the same outcome since it roll seperate random numbers. WHen a hit is done and actually result in some damage, the attacker's machine send information on the ammount of damage done. This is the reason why one can easilly make cheats for autokill, just tell the other computers your player just did an enormous ammount of damage to them.

Also note that a computer might not have accurate information on the other player's stats, although I know little about this, you might want to compare the life of the target on your two computers, perhaps it is syncronized so that the target always take damage on both computers at the same time, not sure, you only give information of damage done in one column, did it always match? As for the column of "being hit", how did you register that, the target going into hit recovery or?

So to conclude, I am not sure if the game syncronize showing another player being hit and actually "hiting" as in doing damage but for sure, the game does not syncronize such things between computers.

Not sure if this answer was anything good though or answered any questions except that yes, it is crazy :)

Note that my Guide is based on the actual game code and does not at all factor in syncronization stuff between computers if there is any effect of that. I am not sure which computer is in charge if there is a conflict bwteen them (for monsters it tend to be "both" with totally strange results with monsters warping arround dependingon the last computer to send a message to the other about something). I know the attacker sends a message about damage done (and attack initiated) but hit recovery for example would probably be handled by the target and so on. Think of the game as basically running the game for your character only, not fully running all the other players.
There are three types of people in the world. Those who can count and those who can't.
Reply
#3
The "H" and "F" means "Roy/I saw a hit recovery animation on the screen".
Because roy used a manshield, I wasn't able to check the life. But as far as I know, the current life is always the same for both players. (I don't remember a situation where someone had e.g. 500 life but I only saw 450 life or something)

Although not realy helpful for the topic you wrote some interesting things about synchronisation in general (Now I know why monsters sometimes "jump" all the time from one square to another).

Do you have any idea why both of us saw a "hit recovery animation" but no damage was done? (These situations are the most curious facts)
Reply
#4
Baceolus,Feb 24 2006, 09:03 PM Wrote:The "H" and "F" means "Roy/I saw a hit recovery animation on the screen".
Because roy used a manshield, I wasn't able to check the life. But as far as I know, the current life is always the same for both players. (I don't remember a situation where someone had e.g. 500 life but I only saw 450 life or something)

Although not realy helpful for the topic you wrote some interesting things about synchronisation in general (Now I know why monsters sometimes "jump" all the time from one square to another).

Do you have any idea why both of us saw a "hit recovery animation" but no damage was done? (These situations are the most curious facts)
[right][snapback]102871[/snapback][/right]

Are you sure Roy did a hit recovery and not a block? You may want to repeat the tests without any Mana Shields involved.

Life is synchronized, along with some stat information. It's sent in every game update, even if nothing else is going on. Mana is not synchronized, which has some odd side effects (especially related to the collapse of Mana Shield due to attacks). As Jarulf said, synchronization is poor at best. Hit recovery calculations are done on the target's system, which is why you can have warriors who are block-locked by a rogue who insists she isn't even shooting near them.

Diablo's random number generation is quite a mess, so I'm not at all surprised it got out of sync for your tests. Much of that mess could be cleaned up by sending the seed for each attack along with the attack notification itself. Then the players could at least agree on the outcome, though you'd still have runs of behavior.
Reply
#5
[vL]Kp,Feb 25 2006, Wrote:Are you sure Roy did a hit recovery and not a block?

Yes





[vL]Kp,Feb 25 2006, Wrote:You may want to repeat the tests without any Mana Shields involved.

True
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)