Fix potential loss of synchronisation in network games.

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2476 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
meep-eep
2006-10-29 00:25:08 +00:00
parent b5702093b5
commit c9cb2cdbdb
+12 -4
View File
@@ -158,9 +158,16 @@ spawn_asteroid (PELEMENT ElementPtr)
AsteroidElementPtr->current.location.y = LOG_SPACE_HEIGHT;
}
SetVelocityVector (&AsteroidElementPtr->velocity,
DISPLAY_TO_WORLD (((SIZE)TFB_Random () & 7) + 4),
(COUNT)TFB_Random ());
{
// Using these temporary variables because the execution order
// of function arguments may vary per system, which may break
// synchronisation on network games.
SIZE magnitude =
DISPLAY_TO_WORLD (((SIZE)TFB_Random () & 7) + 4);
COUNT facing = (COUNT)TFB_Random ();
SetVelocityVector (&AsteroidElementPtr->velocity, magnitude,
facing);
}
AsteroidElementPtr->current.image.farray = asteroid;
AsteroidElementPtr->current.image.frame =
SetAbsFrameIndex (asteroid[0],
@@ -168,7 +175,8 @@ spawn_asteroid (PELEMENT ElementPtr)
AsteroidElementPtr->turn_wait =
AsteroidElementPtr->thrust_wait =
(BYTE)TFB_Random () & (BYTE)((1 << 2) - 1);
AsteroidElementPtr->thrust_wait |= (BYTE)TFB_Random () & (BYTE)(1 << 7);
AsteroidElementPtr->thrust_wait |=
(BYTE)TFB_Random () & (BYTE)(1 << 7);
AsteroidElementPtr->preprocess_func = asteroid_preprocess;
AsteroidElementPtr->death_func = spawn_rubble;
AsteroidElementPtr->collision_func = collision;