rnd-20041124-1-src
[rocksndiamonds.git] / src / game_em / tab_generate.c
index a2f2c90147f53c63432bd5670633a8f4958965c3..a35bbd5cfea29318c6fb76e6261776555a732869 100644 (file)
  * modify.
  */
 
-#include <stdio.h>
 #include "tile.h"
+#include "display.h"
 
 
-#if defined(TARGET_X11)
-
 /* ---------------------------------------------------------------------- */
 
 /* 0=stop 1=blank */
@@ -45,19 +43,19 @@ int tile_acid[] =
   TILE_MAX
 };
 
-/* 0=stop 1=ameuba */
-int tile_ameuba[] =
+/* 0=stop 1=amoeba */
+int tile_amoeba[] =
 {
   Xdripper, 1, 
   XdripperB, 1, 
-  Xameuba_1, 1, 
-  Xameuba_2, 1, 
-  Xameuba_3, 1, 
-  Xameuba_4, 1, 
-  Xameuba_5, 1, 
-  Xameuba_6, 1, 
-  Xameuba_7, 1, 
-  Xameuba_8, 1, 
+  Xamoeba_1, 1, 
+  Xamoeba_2, 1, 
+  Xamoeba_3, 1, 
+  Xamoeba_4, 1, 
+  Xamoeba_5, 1, 
+  Xamoeba_6, 1, 
+  Xamoeba_7, 1, 
+  Xamoeba_8, 1, 
   TILE_MAX
 };
 
@@ -2940,77 +2938,77 @@ int obj_map[] =
   XwonderwallB, 6, 
   -1, 
 
-  Xameuba_1, 0, 
-  Xameuba_1, 1, 
-  Xameuba_1, 2, 
-  Xameuba_1, 3, 
-  Xameuba_1, 4, 
-  Xameuba_1, 5, 
-  Xameuba_1, 6, 
-  Xameuba_1, 7, 
-  -1, 
-  Xameuba_2, 0, 
-  Xameuba_2, 1, 
-  Xameuba_2, 2, 
-  Xameuba_2, 3, 
-  Xameuba_2, 4, 
-  Xameuba_2, 5, 
-  Xameuba_2, 6, 
-  Xameuba_2, 7, 
-  -1, 
-  Xameuba_3, 0, 
-  Xameuba_3, 1, 
-  Xameuba_3, 2, 
-  Xameuba_3, 3, 
-  Xameuba_3, 4, 
-  Xameuba_3, 5, 
-  Xameuba_3, 6, 
-  Xameuba_3, 7, 
-  -1, 
-  Xameuba_4, 0, 
-  Xameuba_4, 1, 
-  Xameuba_4, 2, 
-  Xameuba_4, 3, 
-  Xameuba_4, 4, 
-  Xameuba_4, 5, 
-  Xameuba_4, 6, 
-  Xameuba_4, 7, 
-  -1, 
-  Xameuba_5, 0, 
-  Xameuba_5, 1, 
-  Xameuba_5, 2, 
-  Xameuba_5, 3, 
-  Xameuba_5, 4, 
-  Xameuba_5, 5, 
-  Xameuba_5, 6, 
-  Xameuba_5, 7, 
-  -1, 
-  Xameuba_6, 0, 
-  Xameuba_6, 1, 
-  Xameuba_6, 2, 
-  Xameuba_6, 3, 
-  Xameuba_6, 4, 
-  Xameuba_6, 5, 
-  Xameuba_6, 6, 
-  Xameuba_6, 7, 
-  -1, 
-  Xameuba_7, 0, 
-  Xameuba_7, 1, 
-  Xameuba_7, 2, 
-  Xameuba_7, 3, 
-  Xameuba_7, 4, 
-  Xameuba_7, 5, 
-  Xameuba_7, 6, 
-  Xameuba_7, 7, 
-  -1, 
-  Xameuba_8, 0, 
-  Xameuba_8, 1, 
-  Xameuba_8, 2, 
-  Xameuba_8, 3, 
-  Xameuba_8, 4, 
-  Xameuba_8, 5, 
-  Xameuba_8, 6, 
-  Xameuba_8, 7, 
+  Xamoeba_1, 0, 
+  Xamoeba_1, 1, 
+  Xamoeba_1, 2, 
+  Xamoeba_1, 3, 
+  Xamoeba_1, 4, 
+  Xamoeba_1, 5, 
+  Xamoeba_1, 6, 
+  Xamoeba_1, 7, 
+  -1, 
+  Xamoeba_2, 0, 
+  Xamoeba_2, 1, 
+  Xamoeba_2, 2, 
+  Xamoeba_2, 3, 
+  Xamoeba_2, 4, 
+  Xamoeba_2, 5, 
+  Xamoeba_2, 6, 
+  Xamoeba_2, 7, 
+  -1, 
+  Xamoeba_3, 0, 
+  Xamoeba_3, 1, 
+  Xamoeba_3, 2, 
+  Xamoeba_3, 3, 
+  Xamoeba_3, 4, 
+  Xamoeba_3, 5, 
+  Xamoeba_3, 6, 
+  Xamoeba_3, 7, 
+  -1, 
+  Xamoeba_4, 0, 
+  Xamoeba_4, 1, 
+  Xamoeba_4, 2, 
+  Xamoeba_4, 3, 
+  Xamoeba_4, 4, 
+  Xamoeba_4, 5, 
+  Xamoeba_4, 6, 
+  Xamoeba_4, 7, 
+  -1, 
+  Xamoeba_5, 0, 
+  Xamoeba_5, 1, 
+  Xamoeba_5, 2, 
+  Xamoeba_5, 3, 
+  Xamoeba_5, 4, 
+  Xamoeba_5, 5, 
+  Xamoeba_5, 6, 
+  Xamoeba_5, 7, 
+  -1, 
+  Xamoeba_6, 0, 
+  Xamoeba_6, 1, 
+  Xamoeba_6, 2, 
+  Xamoeba_6, 3, 
+  Xamoeba_6, 4, 
+  Xamoeba_6, 5, 
+  Xamoeba_6, 6, 
+  Xamoeba_6, 7, 
+  -1, 
+  Xamoeba_7, 0, 
+  Xamoeba_7, 1, 
+  Xamoeba_7, 2, 
+  Xamoeba_7, 3, 
+  Xamoeba_7, 4, 
+  Xamoeba_7, 5, 
+  Xamoeba_7, 6, 
+  Xamoeba_7, 7, 
+  -1, 
+  Xamoeba_8, 0, 
+  Xamoeba_8, 1, 
+  Xamoeba_8, 2, 
+  Xamoeba_8, 3, 
+  Xamoeba_8, 4, 
+  Xamoeba_8, 5, 
+  Xamoeba_8, 6, 
+  Xamoeba_8, 7, 
   -1, 
 
   Xdoor_1, 0, 
@@ -4304,8 +4302,8 @@ unsigned char tab_blank[TILE_MAX];
 /* 0=stop 1=acid */
 unsigned char tab_acid[TILE_MAX];
 
-/* 0=stop 1=ameuba */
-unsigned char tab_ameuba[TILE_MAX];
+/* 0=stop 1=amoeba */
+unsigned char tab_amoeba[TILE_MAX];
 
 /* 0=stop 1=move */
 unsigned char tab_android_move[TILE_MAX];
@@ -4325,18 +4323,21 @@ unsigned short map_spr[2][8][13];
 /* map ascii to coords */
 unsigned short map_ttl[128];
 
+/* map tiles and frames to graphics info */
+struct GraphicInfo_EM graphic_info_em[TILE_MAX][8];
+
 void create_tab(int *invert, unsigned char *array)
 {
   int i;
   int buffer[TILE_MAX];
 
-  for(i = 0; i < TILE_MAX; i++)
+  for (i = 0; i < TILE_MAX; i++)
     buffer[i] = 0;
 
-  for(;invert[0] < TILE_MAX; invert += 2)
+  for (;invert[0] < TILE_MAX; invert += 2)
     buffer[invert[0]] = invert[1];
 
-  for(i = 0; i < TILE_MAX; i++)
+  for (i = 0; i < TILE_MAX; i++)
     array[i] = buffer[i];
 }
 
@@ -4346,20 +4347,20 @@ void create_explode()
   int *tile = tile_explode;
   int buffer[TILE_MAX];
 
-  for(i = 0; i < TILE_MAX; i++)
+  for (i = 0; i < TILE_MAX; i++)
     buffer[i] = Xboom_1;
-  while((i = *tile++) < TILE_MAX)
+  while ((i = *tile++) < TILE_MAX)
     buffer[i] = i;                     /* these tiles are indestructable */
-  while((i = *tile++) < TILE_MAX)
+  while ((i = *tile++) < TILE_MAX)
     buffer[i] = *tile++;               /* these tiles are special */
 
-  for(i = 0; i < TILE_MAX; i++)
+  for (i = 0; i < TILE_MAX; i++)
     tab_explode_normal[i] = buffer[i];
 
-  while((i = *tile++) < TILE_MAX)
+  while ((i = *tile++) < TILE_MAX)
     buffer[i] = *tile++;               /* these tiles for dynamite */
 
-  for(i = 0; i < TILE_MAX; i++)
+  for (i = 0; i < TILE_MAX; i++)
     tab_explode_dynamite[i] = buffer[i];
 }
 
@@ -4373,13 +4374,13 @@ void create_obj()
 
   int debug = 0;
 
-  for(i = 0; i < 8; i++)
-    for(j = 0; j < TILE_MAX; j++)
+  for (i = 0; i < 8; i++)
+    for (j = 0; j < TILE_MAX; j++)
       buffer[i][j] = 0;
 
-  for(i = 0; i < 64; i++)
+  for (i = 0; i < 64; i++)
   {
-    for(;*map != -1; map += 2)
+    for (;*map != -1; map += 2)
     {
       if (map[0] < 0 || map[0] >= TILE_MAX || map[1] < 0 || map[1] >= 8)
       {
@@ -4393,9 +4394,9 @@ void create_obj()
     map++;
   }
 
-  for(i = 0; i < 896; i++)
+  for (i = 0; i < 896; i++)
   {
-    for(;*map != -1; map += 2)
+    for (;*map != -1; map += 2)
     {
       if (map[0] < 0 || map[0] >= TILE_MAX || map[1] < 0 || map[1] >= 8)
       {
@@ -4408,9 +4409,9 @@ void create_obj()
     map++;
   }
 
-  for(i = 0; i < TILE_MAX; i++)
+  for (i = 0; i < TILE_MAX; i++)
   {
-    for(j = 0; j < 8; j++)
+    for (j = 0; j < 8; j++)
     {
       switch(buffer[j][i])
       {
@@ -4428,64 +4429,90 @@ void create_obj()
     }
   }
 
-  if(sizeof(obj_map) / sizeof(*obj_map) != map - obj_map)
+  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)
+  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++)
+  for (i = 0; i < 8; i++)
+    for (j = 0; j < TILE_MAX; j++)
       buffer[i][j] = Xblank;
 
   /* special case for first 64 entries */
-  for(i = 0; i < 64; i++)
+  for (i = 0; i < 64; i++)
   {
-    for(;*map != -1; map += 2)
+    for (;*map != -1; map += 2)
       buffer[map[1]][map[0]] = i;
     map++;
   }
 
   /* now regular entries */
-  for(i = 0; i < 896 * 16; i += 16)
+  for (i = 0; i < 896 * 16; i += 16)
   {
-    for(;*map != -1; map += 2)
+    for (;*map != -1; map += 2)
       buffer[map[1]][map[0]] = i;
     map++;
   }
 
-  for(i = 0; i < 8; i++)
-    for(j = 0; j < TILE_MAX; j++)
+  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()
+{
+  int i, j;
+
+  for (i = 0; i < TILE_MAX; i++)
+  {
+    for (j = 0; j < 8; j++)
+    {
+      struct GraphicInfo_EM *g = &graphic_info_em[i][j];
+      int obj = map_obj[j][i];
+
+      g->bitmap = objBitmap;
+      g->src_x = (obj / 512) * TILEX;
+      g->src_y = (obj % 512) * TILEY / 16;
+      g->src_offset_x = 0;
+      g->src_offset_y = 0;
+      g->dst_offset_x = 0;
+      g->dst_offset_y = 0;
+      g->width = TILEX;
+      g->height = TILEY;
+    }
+  }
+
+  InitGraphicInfo_EM();
+}
+
 void create_spr()
 {
   int i, j, k;
   int *map = spr_map;
   int buffer[2][8][SPR_MAX];
 
-  while(*map < SPR_MAX)
+  while (*map < SPR_MAX)
   {
     i = *map++;
     j = *map++;
-    for(k = 0; k < 8; k++)
+    for (k = 0; k < 8; k++)
       buffer[j][k][i] = *map++;
   }
 
-  for(i = 0; i < 2; i++)
-    for(j = 0; j < 8; j++)
-      for(k = 0; k < SPR_MAX; k++)
+  for (i = 0; i < 2; i++)
+    for (j = 0; j < 8; j++)
+      for (k = 0; k < SPR_MAX; k++)
        map_spr[i][j][k] = buffer[i][7 - j][k];
 }
 
@@ -4493,11 +4520,14 @@ void tab_generate()
 {
   create_tab(tile_blank, tab_blank);
   create_tab(tile_acid, tab_acid);
-  create_tab(tile_ameuba, tab_ameuba);
+  create_tab(tile_amoeba, tab_amoeba);
   create_tab(tile_android_move, tab_android_move);
   create_explode();
   create_obj();
   create_spr();
 }
 
-#endif
+void tab_generate_graphics_info_em()
+{
+  create_obj_graphics_info_em();
+}