Page 1 of 1

[0.11.15] Dysync related to exosuit and 32bit versus 64bit

Posted: Tue Dec 23, 2014 5:34 pm
by Whitelance89
Hello, this is my first post here and hopefully i can help with this great games advancement.

Here is my bug report, I've never really done this before but going to try and make it helpful.

Been playing Multilayer with my friend for a while now, I'm on 32bit and he's on 64bit, Recently made basic exoskeleton equipment and put it in my power armor, my friend was in a tank, the moment the basic exoskeleton equipment charged up and my friends tank took damage it dysynced him, I took the basic exoskeleton equpiment off and it stoped Dysyncing him when he/his tank took damage.

Hopefully this has helped.

Whitelance.

Re: Dysync issues 0.11.8

Posted: Wed Dec 24, 2014 6:37 am
by immibis
I read that you both need to use 32-bit, or both 64-bit, to avoid desyncs.

Re: Dysync issues 0.11.8

Posted: Thu Dec 25, 2014 11:37 am
by cube
immibis wrote:I read that you both need to use 32-bit, or both 64-bit, to avoid desyncs.
That is just a workaround, but in the long run we want to be able to play with 32 and 64 bits together.

Exosuit Equipoment Desync

Posted: Sat Jan 24, 2015 5:29 pm
by Ranakastrasz
Multiplayer "Basic Exosuit Equipment" causes desync.
Conjure powered armor t2, fusion reactor, a single basic exosuit equipment.
save, host as multiplayer. Allow another to join. Walk around with said modular setup.

Does not occur with multiple exosuit equipments. Only one.

Disabled all mods.

Re: Exosuit Equipoment Desync

Posted: Tue Feb 10, 2015 1:50 pm
by kovarex
I merged the topics.

Re: [0.11.15] Dysync related to exosuit and 32bit versus 64b

Posted: Fri Feb 13, 2015 5:25 pm
by kovarex
Fixed for 0.11.16.

I had to go quite deep to find the problem, and I don't really understand the solution, but it works now.

For the curious ones, this is how the fix looks:

Code: Select all

 float result = this->getPrototype()->runningSpeed;
   if (Armor* armor = this->getArmor())
-    result *= (1 + armor->grid.getMovementBonus(this));
+  {
+    // I put the value into variable, because of magic (32bit versus 64 bit compatibility)
+    float bonus = (1 + armor->grid.getMovementBonus(this));
+    result *= bonus; //(1 + armor->grid.getMovementBonus(this));
+  }
   result *= (1 - this->shooter->getSlowDownFactor());
   return result;

Re: [0.11.15] Dysync related to exosuit and 32bit versus 64b

Posted: Sat Feb 14, 2015 12:44 am
by dee-
kovarex wrote:Fixed for 0.11.16.

I had to go quite deep to find the problem, and I don't really understand the solution, but it works now.

For the curious ones, this is how the fix looks:

Code: Select all

 float result = this->getPrototype()->runningSpeed;
   if (Armor* armor = this->getArmor())
-    result *= (1 + armor->grid.getMovementBonus(this));
+  {
+    // I put the value into variable, because of magic (32bit versus 64 bit compatibility)
+    float bonus = (1 + armor->grid.getMovementBonus(this));
+    result *= bonus; //(1 + armor->grid.getMovementBonus(this));
+  }
   result *= (1 - this->shooter->getSlowDownFactor());
   return result;
is the implicit type of "(1 + armor->grid.getMovementBonus(this))" a float? because using the variable "bonus" makes an explicit typecast to float, which might be a meaningful difference.

Re: [0.11.15] Dysync related to exosuit and 32bit versus 64b

Posted: Sat Feb 14, 2015 7:19 am
by kovarex
dee- wrote:
kovarex wrote:Fixed for 0.11.16.

I had to go quite deep to find the problem, and I don't really understand the solution, but it works now.

For the curious ones, this is how the fix looks:

Code: Select all

 float result = this->getPrototype()->runningSpeed;
   if (Armor* armor = this->getArmor())
-    result *= (1 + armor->grid.getMovementBonus(this));
+  {
+    // I put the value into variable, because of magic (32bit versus 64 bit compatibility)
+    float bonus = (1 + armor->grid.getMovementBonus(this));
+    result *= bonus; //(1 + armor->grid.getMovementBonus(this));
+  }
   result *= (1 - this->shooter->getSlowDownFactor());
   return result;
is the implicit type of "(1 + armor->grid.getMovementBonus(this))" a float? because using the variable "bonus" makes an explicit typecast to float, which might be a meaningful difference.
The getMovementBonus returns float, so I would guess that 1 + float is float.