rnd-20060216-1-src
[rocksndiamonds.git] / src / game_em / synchro_1.c
index c5b2c456b4910ed38eae9452f42b29d4f17d1edb..058c79e3caedb4ebd3e7d40768d1bc0025300f9a 100644 (file)
@@ -18,7 +18,24 @@ static boolean player_killed(struct PLAYER *);
 
 void synchro_1(void)
 {
- /* must test for death and actually kill separately */
+#if 1
+
+  int start_check_nr;
+  int i;
+
+  /* must test for death and actually kill separately */
+
+  for (i = 0; i < MAX_PLAYERS; i++)
+  {
+    boolean ply_kill = player_killed(&ply[i]);
+
+    if (ply[i].alive && ply_kill)
+      kill_player(&ply[i]);
+  }
+
+#else
+
+  /* must test for death and actually kill separately */
   boolean ply1_kill = player_killed(&ply1);
   boolean ply2_kill = player_killed(&ply2);
 
@@ -27,10 +44,51 @@ void synchro_1(void)
   if (ply2.alive && ply2_kill)
     kill_player(&ply2);
 
+#endif
+
 #if 0
   ply1.alive = 1; /* debugging */
 #endif
 
+#if 1
+
+  for (i = 0; i < MAX_PLAYERS; i++)
+  {
+    ply[i].oldx = ply[i].x;
+    ply[i].oldy = ply[i].y;
+    ply[i].anim = SPR_still;
+  }
+
+  start_check_nr = (RandomEM & 128 ? 0 : 1) * 2 + (RandomEM & 256 ? 0 : 1);
+
+  for (i = 0; i < MAX_PLAYERS; i++)
+  {
+    int check_nr = (start_check_nr + i) % MAX_PLAYERS;
+
+    if (ply[check_nr].alive)
+      check_player(&ply[check_nr]);
+  }
+
+  for (i = 0; i < MAX_PLAYERS; i++)
+  {
+    if (!ply[i].alive)
+      continue;
+
+    if (Cave[ply[i].oldy][ply[i].oldx] == Zplayer)
+    {
+      Cave[ply[i].oldy][ply[i].oldx] = Xblank;
+      Next[ply[i].oldy][ply[i].oldx] = Xblank;
+    }
+
+    if (Cave[ply[i].y][ply[i].x] == Xblank)
+    {
+      Cave[ply[i].y][ply[i].x] = Zplayer;
+      Next[ply[i].y][ply[i].x] = Zplayer;
+    }
+  }
+
+#else
+
   ply1.oldx = ply1.x;
   ply1.oldy = ply1.y;
   ply1.anim = SPR_still;
@@ -38,7 +96,7 @@ void synchro_1(void)
   ply2.oldy = ply2.y;
   ply2.anim = SPR_still;
 
-  if (Random & 256)
+  if (RandomEM & 256)
   {
     if (ply1.alive) check_player(&ply1);
     if (ply2.alive) check_player(&ply2);
@@ -78,12 +136,18 @@ void synchro_1(void)
       Next[ply2.y][ply2.x] = Zplayer;
     }
   }
+
+#endif
 }
 
 static boolean player_killed(struct PLAYER *ply)
 {
-  register unsigned int x = ply->x;
-  register unsigned int y = ply->y;
+  int x = ply->x;
+  int y = ply->y;
+
+#if 0
+  printf("::: %d: %d, %d\n", ply->num, x, y);
+#endif
 
   if (!ply->alive)
     return FALSE;
@@ -208,8 +272,8 @@ static boolean player_killed(struct PLAYER *ply)
 
 static void kill_player(struct PLAYER *ply)
 {
-  register unsigned int x = ply->x;
-  register unsigned int y = ply->y;
+  int x = ply->x;
+  int y = ply->y;
 
   ply->alive = 0;
 
@@ -373,11 +437,11 @@ static void kill_player(struct PLAYER *ply)
 
 static void check_player(struct PLAYER *ply)
 {
-  unsigned int oldx = ply->x;
-  unsigned int oldy = ply->y;
-  register unsigned int x = oldx;
-  register unsigned int y = oldy;
-  unsigned int anim = 0;
+  int oldx = ply->x;
+  int oldy = ply->y;
+  int x = oldx;
+  int y = oldy;
+  int anim = 0;
   int dx = 0, dy = 0;
 
 #if 0
@@ -489,7 +553,7 @@ static void check_player(struct PLAYER *ply)
       ply->dynamite_cnt = 0;
     }
 
-    Random += 7;       /* be a bit more random if the player doesn't move */
+    RandomEM += 7;     /* be a bit more random if the player doesn't move */
 
     return;
   }
@@ -531,10 +595,10 @@ static void check_player(struct PLAYER *ply)
 static boolean player_digfield(struct PLAYER *ply, int dx, int dy)
 {
   int anim = (dx < 0 ? 3 : dx > 0 ? 1 : dy < 0 ? 0 : dy > 0 ? 2 : 2);
-  unsigned int oldx = ply->x;
-  unsigned int oldy = ply->y;
-  register unsigned int x = oldx + dx;
-  register unsigned int y = oldy + dy;
+  int oldx = ply->x;
+  int oldy = ply->y;
+  int x = oldx + dx;
+  int y = oldy + dy;
   boolean result = TRUE;
 
   if (!dx && !dy)                      /* no direction specified */