X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Ftab_generate.c;h=a35bbd5cfea29318c6fb76e6261776555a732869;hb=c42862bb754d7a8b1ff476887669650845f7570e;hp=50611721742dd5bdaee16dbd18615b63d3ba36e8;hpb=9583e9c55b889974e0df9a8ca1930efdf29bda29;p=rocksndiamonds.git diff --git a/src/game_em/tab_generate.c b/src/game_em/tab_generate.c index 50611721..a35bbd5c 100644 --- a/src/game_em/tab_generate.c +++ b/src/game_em/tab_generate.c @@ -12,6 +12,7 @@ */ #include "tile.h" +#include "display.h" /* ---------------------------------------------------------------------- */ @@ -4322,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]; } @@ -4343,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]; } @@ -4370,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) { @@ -4390,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) { @@ -4405,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]) { @@ -4425,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]; } @@ -4496,3 +4526,8 @@ void tab_generate() create_obj(); create_spr(); } + +void tab_generate_graphics_info_em() +{ + create_obj_graphics_info_em(); +}