X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Ftab_generate.c;h=a35bbd5cfea29318c6fb76e6261776555a732869;hb=c42862bb754d7a8b1ff476887669650845f7570e;hp=a2f2c90147f53c63432bd5670633a8f4958965c3;hpb=12a92e1aa977ccfcc6223eaabc92d6c3ca84e2ff;p=rocksndiamonds.git diff --git a/src/game_em/tab_generate.c b/src/game_em/tab_generate.c index a2f2c901..a35bbd5c 100644 --- a/src/game_em/tab_generate.c +++ b/src/game_em/tab_generate.c @@ -11,12 +11,10 @@ * modify. */ -#include #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(); +}