fixed bug in single button handling causing broken tapes (EM engine)
[rocksndiamonds.git] / src / game_em / tab_generate.c
index 7ed460c08fd0fc1ed7c326ca952394c473260b23..95784516a2bcc5c17e467dd885cc0a48611b3b63 100644 (file)
  * modify.
  */
 
-#include "tile.h"
-#include "display.h"
+#include "main_em.h"
 
 
-/* ---------------------------------------------------------------------- */
+/* ------------------------------------------------------------------------- */
 
 /* 0=stop 1=blank */
 int tile_blank[] =
@@ -69,7 +68,8 @@ int tile_android_move[] =
   TILE_MAX
 };
 
-/* ---------------------------------------------------------------------- */
+
+/* ------------------------------------------------------------------------- */
 
 /* explosions: special format */
 /* everything is initially filled with Xboom_1 */
@@ -152,7 +152,8 @@ int tile_explode[] =
   TILE_MAX                     /* up until here are dynamite explosions */
 };
 
-/* ---------------------------------------------------------------------- */
+
+/* ------------------------------------------------------------------------- */
 
 /* map the graphics file to internal tiles and animations
  *
@@ -4435,7 +4436,7 @@ unsigned short map_ttl[128];
 struct GraphicInfo_EM graphic_info_em_object[TILE_MAX][8];
 
 /* map player number, frames and action to graphic info */
-struct GraphicInfo_EM graphic_info_em_player[2][SPR_MAX][8];
+struct GraphicInfo_EM graphic_info_em_player[MAX_PLAYERS][SPR_MAX][8];
 
 void create_tab(int *invert, unsigned char *array)
 {
@@ -4481,79 +4482,6 @@ void create_obj()
   int *map = obj_map;
   int buffer[8][TILE_MAX];
 
-#if 0
-
-  int debug = 0;
-
-  for (i = 0; i < 8; i++)
-    for (j = 0; j < TILE_MAX; j++)
-      buffer[i][j] = 0;
-
-  for (i = 0; i < 64; i++)
-  {
-    for (;*map != -1; map += 2)
-    {
-      if (map[0] < 0 || map[0] >= TILE_MAX || map[1] < 0 || map[1] >= 8)
-      {
-       fprintf(stderr, "obj_map: bad tile (%d, %d) @ %d+%d\n",
-               map[0], map[1], i / 16, i % 16);
-       debug = 1;
-       continue;
-      }
-      buffer[map[1]][map[0]]++;
-    }
-    map++;
-  }
-
-  for (i = 0; i < 896; i++)
-  {
-    for (;*map != -1; map += 2)
-    {
-      if (map[0] < 0 || map[0] >= TILE_MAX || map[1] < 0 || map[1] >= 8)
-      {
-       fprintf(stderr, "obj_map: bad tile (%d, %d) @ %d\n", map[0], map[1], i);
-       debug = 1;
-       continue;
-      }
-      buffer[map[1]][map[0]]++;
-    }
-    map++;
-  }
-
-  for (i = 0; i < TILE_MAX; i++)
-  {
-    for (j = 0; j < 8; j++)
-    {
-      switch(buffer[j][i])
-      {
-        case 0:
-         fprintf(stderr, "obj_map: uninitialized (%d, %d)\n", i, j);
-         debug = 1;
-         break;
-        case 1:
-         break; /* good */
-        default:
-         fprintf(stderr, "obj_map: duplicate (%d, %d)\n", i, j);
-         debug = 1;
-         break;
-      }
-    }
-  }
-
-  if (sizeof(obj_map) / sizeof(*obj_map) != map - obj_map)
-  {
-    fprintf(stderr, "obj_map: bad end (%d != %d)\n",
-           sizeof(obj_map) / sizeof(*obj_map), map - obj_map);
-    debug = 1;
-  }
-
-  if (debug == 0)
-    fprintf(stderr, "obj_map: looks good, now disable debug code\n");
-
-  abort();
-
-#else
-
   for (i = 0; i < 8; i++)
     for (j = 0; j < TILE_MAX; j++)
       buffer[i][j] = Xblank;
@@ -4577,8 +4505,6 @@ void create_obj()
   for (i = 0; i < 8; i++)
     for (j = 0; j < TILE_MAX; j++)
       map_obj[i][j] = buffer[7 - i][j];
-
-#endif
 }
 
 void create_obj_graphics_info_em()
@@ -4602,11 +4528,14 @@ void create_obj_graphics_info_em()
       g->width = TILEX;
       g->height = TILEY;
 
-      g->has_crumbled_graphics = FALSE;
       g->crumbled_bitmap = NULL;
       g->crumbled_src_x = 0;
       g->crumbled_src_y = 0;
       g->crumbled_border_size = 0;
+      g->crumbled_tile_size = 0;
+
+      g->has_crumbled_graphics = FALSE;
+      g->preserve_background = FALSE;
 
       /* create unique graphic identifier to decide if tile must be redrawn */
       g->unique_identifier = obj;
@@ -4639,14 +4568,14 @@ void create_spr_graphics_info_em()
 {
   int i, j, k;
 
-  for (i = 0; i < 2; i++)
+  for (i = 0; i < MAX_PLAYERS; i++)
   {
     for (j = 0; j < SPR_MAX; j++)
     {
       for (k = 0; k < 8; k++)
       {
        struct GraphicInfo_EM *g = &graphic_info_em_player[i][j][k];
-       int spr = map_spr[i][k][j];
+       int spr = map_spr[i % 2][k][j];
 
        g->bitmap = sprBitmap;
        g->src_x = (spr / 8) * TILEX;