1 /* 2000-04-19T13:26:05Z
3 * construct some tables to be included directly in emerald mine source.
4 * i made this because dynamically building the tables every time sucks and i
5 * need to be able to easily modify tile.h.
7 * this is key data which almost everything depends on.
9 * this is supposed to be fairly easy to read and modify. the tab values
10 * are still hard coded constants but that should be less of a problem to
17 /* ---------------------------------------------------------------------- */
56 int tile_android_move[] = {
64 /* ---------------------------------------------------------------------- */
66 /* explosions: special format */
67 /* everything is initially filled with Xboom_1 */
68 int tile_explode[] = {
119 TILE_MAX, /* up till here are indestructable */
129 Xbomb_pause, Xboom_bomb,
130 Xbomb_fall, Xboom_bomb,
131 TILE_MAX, /* up till here are special explosions */
132 Xandroid, Xboom_android,
133 Xandroid_1_n, Xboom_android,
134 Xandroid_2_n, Xboom_android,
135 Xandroid_1_e, Xboom_android,
136 Xandroid_2_e, Xboom_android,
137 Xandroid_1_s, Xboom_android,
138 Xandroid_2_s, Xboom_android,
139 Xandroid_1_w, Xboom_android,
140 Xandroid_2_w, Xboom_android,
141 TILE_MAX /* up until here are dynamite explosions */
144 /* ---------------------------------------------------------------------- */
146 /* map the graphics file to internal tiles and animations
148 * one graphics icon maps to many tiles and animations
1900 Xemerald_force_e,0 ,
1901 Xemerald_force_e,1 ,
1902 Xemerald_force_e,2 ,
1903 Xemerald_force_e,3 ,
1904 Xemerald_force_e,4 ,
1905 Xemerald_force_e,5 ,
1906 Xemerald_force_e,6 ,
1907 Xemerald_force_e,7 ,
1908 Xemerald_force_w,0 ,
1909 Xemerald_force_w,1 ,
1910 Xemerald_force_w,2 ,
1911 Xemerald_force_w,3 ,
1912 Xemerald_force_w,4 ,
1913 Xemerald_force_w,5 ,
1914 Xemerald_force_w,6 ,
1915 Xemerald_force_w,7 ,
2057 Xdiamond_force_e,0 ,
2058 Xdiamond_force_e,1 ,
2059 Xdiamond_force_e,2 ,
2060 Xdiamond_force_e,3 ,
2061 Xdiamond_force_e,4 ,
2062 Xdiamond_force_e,5 ,
2063 Xdiamond_force_e,6 ,
2064 Xdiamond_force_e,7 ,
2065 Xdiamond_force_w,0 ,
2066 Xdiamond_force_w,1 ,
2067 Xdiamond_force_w,2 ,
2068 Xdiamond_force_w,3 ,
2069 Xdiamond_force_w,4 ,
2070 Xdiamond_force_w,5 ,
2071 Xdiamond_force_w,6 ,
2072 Xdiamond_force_w,7 ,
3354 Xsand_stonesand_1,0 ,
3355 Xsand_stonesand_1,1 ,
3356 Xsand_stonesand_1,2 ,
3357 Xsand_stonesand_1,3 ,
3358 Xsand_stonesand_1,4 ,
3359 Xsand_stonesand_1,5 ,
3360 Xsand_stonesand_1,6 ,
3361 Xsand_stonesand_1,7 ,
3362 Xsand_stonesand_2,0 ,
3363 Xsand_stonesand_2,1 ,
3364 Xsand_stonesand_2,2 ,
3365 Xsand_stonesand_2,3 ,
3366 Xsand_stonesand_2,4 ,
3367 Xsand_stonesand_2,5 ,
3368 Xsand_stonesand_2,6 ,
3369 Xsand_stonesand_2,7 ,
3370 Xsand_stonesand_3,0 ,
3371 Xsand_stonesand_3,1 ,
3372 Xsand_stonesand_3,2 ,
3373 Xsand_stonesand_3,3 ,
3374 Xsand_stonesand_3,4 ,
3375 Xsand_stonesand_3,5 ,
3376 Xsand_stonesand_3,6 ,
3377 Xsand_stonesand_3,7 ,
3378 Xsand_stonesand_4,0 ,
3379 Xsand_stonesand_4,1 ,
3380 Xsand_stonesand_4,2 ,
3381 Xsand_stonesand_4,3 ,
3382 Xsand_stonesand_4,4 ,
3383 Xsand_stonesand_4,5 ,
3384 Xsand_stonesand_4,6 ,
3385 Xsand_stonesand_4,7 ,
3386 Xsand_sandstone_1,0 ,
3387 Xsand_sandstone_1,1 ,
3388 Xsand_sandstone_1,2 ,
3389 Xsand_sandstone_1,3 ,
3390 Xsand_sandstone_1,4 ,
3391 Xsand_sandstone_1,5 ,
3392 Xsand_sandstone_1,6 ,
3393 Xsand_sandstone_1,7 ,
3394 Xsand_sandstone_2,0 ,
3395 Xsand_sandstone_2,1 ,
3396 Xsand_sandstone_2,2 ,
3397 Xsand_sandstone_2,3 ,
3398 Xsand_sandstone_2,4 ,
3399 Xsand_sandstone_2,5 ,
3400 Xsand_sandstone_2,6 ,
3401 Xsand_sandstone_2,7 ,
3402 Xsand_sandstone_3,0 ,
3403 Xsand_sandstone_3,1 ,
3404 Xsand_sandstone_3,2 ,
3405 Xsand_sandstone_3,3 ,
3406 Xsand_sandstone_3,4 ,
3407 Xsand_sandstone_3,5 ,
3408 Xsand_sandstone_3,6 ,
3409 Xsand_sandstone_3,7 ,
3410 Xsand_sandstone_4,0 ,
3411 Xsand_sandstone_4,1 ,
3412 Xsand_sandstone_4,2 ,
3413 Xsand_sandstone_4,3 ,
3414 Xsand_sandstone_4,4 ,
3415 Xsand_sandstone_4,5 ,
3416 Xsand_sandstone_4,6 ,
3417 Xsand_sandstone_4,7 ,
4245 SPR_walk+0,0, 0,1,2,3,4,5,6,7,
4246 SPR_walk+1,0, 8,9,10,11,12,13,14,15,
4247 SPR_walk+2,0, 16,17,18,19,20,21,22,23,
4248 SPR_walk+3,0, 24,25,26,27,28,29,30,31,
4249 SPR_push+0,0, 32,33,34,35,36,35,34,33,
4250 SPR_push+1,0, 37,38,39,40,41,40,39,38,
4251 SPR_push+2,0, 42,43,44,45,46,45,44,43,
4252 SPR_push+3,0, 47,48,49,50,51,50,49,48,
4253 SPR_spray+0,0, 52,52,52,52,52,52,52,52,
4254 SPR_spray+1,0, 53,53,53,53,53,53,53,53,
4255 SPR_spray+2,0, 54,54,54,54,54,54,54,54,
4256 SPR_spray+3,0, 55,55,55,55,55,55,55,55,
4257 SPR_walk+0,1, 56,57,58,59,60,61,62,63,
4258 SPR_walk+1,1, 64,65,66,67,68,69,70,71,
4259 SPR_walk+2,1, 72,73,74,75,76,77,78,79,
4260 SPR_walk+3,1, 80,81,82,83,84,85,86,87,
4261 SPR_push+0,1, 88,89,90,91,92,91,90,89,
4262 SPR_push+1,1, 93,94,95,96,97,96,95,94,
4263 SPR_push+2,1, 98,99,100,101,102,101,100,99,
4264 SPR_push+3,1, 103,104,105,106,107,106,105,104,
4265 SPR_spray+0,1, 108,108,108,108,108,108,108,108,
4266 SPR_spray+1,1, 109,109,109,109,109,109,109,109,
4267 SPR_spray+2,1, 110,110,110,110,110,110,110,110,
4268 SPR_spray+3,1, 111,111,111,111,111,111,111,111,
4269 SPR_still,0, 112,112,112,112,112,112,112,112,
4270 SPR_still,1, 113,113,113,113,113,113,113,113,
4275 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
4276 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
4277 -1,0,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,2,3,4,-1, /* !',-. */
4278 5,6,7,8,9,10,11,12,13,14,15,-1,-1,-1,-1,16, /* 0123456789:? */
4279 -1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, /* ABCDEFGHIJKLMNO */
4280 32,33,34,35,36,37,38,39,40,41,42,-1,-1,-1,-1,-1, /* PQRSTUVWXYZ */
4281 -1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, /* abcdefghijklmno */
4282 32,33,34,35,36,37,38,39,40,41,42,-1,-1,-1,-1,-1 /* pqrstuvwxyz */
4285 /* ---------------------------------------------------------------------- */
4289 /* quick and dirty code to format the data semi nicely */
4291 void print_buffer(int *buffer, int count)
4295 for(i = 0; i < count;) {
4296 if(j > 80) { j=0; printf("\n"); }
4297 if(j == 0) printf("\t");
4298 j += printf("%d", buffer[i]);
4299 j += printf("%s", ++i == count ? "" : ",");
4303 void print_tab(int *invert, char *varname, char *comment)
4306 int buffer[TILE_MAX];
4308 for(i = 0; i < TILE_MAX; i++) buffer[i] = 0;
4309 for(;invert[0] < TILE_MAX; invert += 2) buffer[invert[0]] = invert[1];
4311 printf("/* %s */\n", comment);
4312 printf("const unsigned char %s[%d] = {\n", varname, TILE_MAX);
4313 print_buffer(buffer, TILE_MAX);
4316 void print_explode(void)
4319 int *tile = tile_explode;
4320 int buffer[TILE_MAX];
4322 for(i = 0; i < TILE_MAX; i++) buffer[i] = Xboom_1;
4323 while((i = *tile++) < TILE_MAX) buffer[i] = i; /* these tiles are indestructable */
4324 while((i = *tile++) < TILE_MAX) buffer[i] = *tile++; /* these tiles are special */
4326 printf("/* normal explosion */\n");
4327 printf("const unsigned short tab_explode_normal[%d] = {\n", TILE_MAX);
4328 print_buffer(buffer, TILE_MAX);
4331 while((i = *tile++) < TILE_MAX) buffer[i] = *tile++; /* these tiles for dynamite */
4333 printf("/* dynamite explosion */\n");
4334 printf("const unsigned short tab_explode_dynamite[%d] = {\n", TILE_MAX);
4335 print_buffer(buffer, TILE_MAX);
4338 void print_obj(void)
4342 int buffer[8][TILE_MAX];
4346 for(i = 0; i < 8; i++) for(j = 0; j < TILE_MAX; j++) buffer[i][j] = 0;
4347 for(i = 0; i < 64; i++) {
4348 for(;*map != -1; map += 2) {
4349 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; }
4350 buffer[map[1]][map[0]]++;
4354 for(i = 0; i < 896; i++) {
4355 for(;*map != -1; map += 2) {
4356 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; }
4357 buffer[map[1]][map[0]]++;
4361 for(i = 0; i < TILE_MAX; i++) for(j = 0; j < 8; j++) {
4362 switch(buffer[j][i]) {
4363 case 0: fprintf(stderr, "obj_map: uninitialized (%d,%d)\n", i, j); debug = 1; break;
4364 case 1: break; /* good */
4365 default: fprintf(stderr, "obj_map: duplicate (%d,%d)\n", i, j); debug = 1; break;
4368 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; }
4369 if(debug == 0) fprintf(stderr, "obj_map: looks good, now disable debug code\n");
4373 for(i = 0; i < 8; i++) for(j = 0; j < TILE_MAX; j++) buffer[i][j] = Xblank;
4375 /* special case for first 64 entries */
4376 for(i = 0; i < 64; i++) {
4377 for(;*map != -1; map += 2) buffer[map[1]][map[0]] = i;
4381 /* now regular entries */
4382 for(i = 0; i < 896 * 16; i += 16) {
4383 for(;*map != -1; map += 2) buffer[map[1]][map[0]] = i;
4387 printf("/* map tiles to coords */\n");
4388 printf("const unsigned short map_obj[8][%d] = {\n", TILE_MAX);
4389 for(i = 0; i < 8;) {
4391 print_buffer(buffer[7 - i], TILE_MAX);
4392 printf("}%s", ++i == 8 ? "\n" : ",");
4397 void print_spr(void)
4401 int buffer[2][8][SPR_MAX];
4403 while(*map < SPR_MAX) {
4406 for(k = 0; k < 8; k++) buffer[j][k][i] = *map++;
4409 printf("/* map sprites to coords */\n");
4410 printf("const unsigned short map_spr[2][8][%d] = {\n", SPR_MAX);
4411 for(i = 0; i < 2;) {
4413 for(j = 0; j < 8;) {
4415 for(k = 0; k < SPR_MAX;) {
4416 printf("%d", buffer[i][7 - j][k]);
4417 printf("%s", ++k == SPR_MAX ? "" : ",");
4419 printf(" }%s\n", ++j == 8 ? "" : ",");
4421 printf("}%s", ++i == 2 ? "\n" : ",");
4425 void print_ttl(void)
4430 for(i = 0; i < 128; i++) {
4431 if(ttl_map[i] == -1) {
4434 j = (ttl_map[i] % 22) * 14;
4435 k = (ttl_map[i] / 22);
4436 buffer[i] = k * 320 + j;
4439 printf("/* map ascii to coords */\n");
4440 printf("const unsigned short map_ttl[128] = {\n");
4441 print_buffer(buffer, 128);
4446 printf("/* THIS FILE AUTOMATICALLY GENERATED */\n\n");
4447 print_tab(tile_blank, "tab_blank", "0=stop 1=blank");
4448 print_tab(tile_acid, "tab_acid", "0=stop 1=acid");
4449 print_tab(tile_ameuba, "tab_ameuba", "0=stop 1=ameuba");
4450 print_tab(tile_android_move, "tab_android_move", "0=stop 1=move");
4460 /* ------------------------------------------------------------------------- */
4462 /* 0=stop 1=blank */
4463 unsigned char tab_blank[TILE_MAX];
4466 unsigned char tab_acid[TILE_MAX];
4468 /* 0=stop 1=ameuba */
4469 unsigned char tab_ameuba[TILE_MAX];
4472 unsigned char tab_android_move[TILE_MAX];
4474 /* normal explosion */
4475 unsigned short tab_explode_normal[TILE_MAX];
4477 /* dynamite explosion */
4478 unsigned short tab_explode_dynamite[TILE_MAX];
4480 /* map tiles to coords */
4481 unsigned short map_obj[8][TILE_MAX];
4483 /* map sprites to coords */
4484 unsigned short map_spr[2][8][13];
4486 /* map ascii to coords */
4487 unsigned short map_ttl[128];
4489 void create_tab(int *invert, unsigned char *array)
4492 int buffer[TILE_MAX];
4494 for(i = 0; i < TILE_MAX; i++)
4497 for(;invert[0] < TILE_MAX; invert += 2)
4498 buffer[invert[0]] = invert[1];
4500 for(i = 0; i < TILE_MAX; i++)
4501 array[i] = buffer[i];
4504 void create_explode()
4507 int *tile = tile_explode;
4508 int buffer[TILE_MAX];
4510 for(i = 0; i < TILE_MAX; i++)
4511 buffer[i] = Xboom_1;
4512 while((i = *tile++) < TILE_MAX)
4513 buffer[i] = i; /* these tiles are indestructable */
4514 while((i = *tile++) < TILE_MAX)
4515 buffer[i] = *tile++; /* these tiles are special */
4517 for(i = 0; i < TILE_MAX; i++)
4518 tab_explode_normal[i] = buffer[i];
4520 while((i = *tile++) < TILE_MAX)
4521 buffer[i] = *tile++; /* these tiles for dynamite */
4523 for(i = 0; i < TILE_MAX; i++)
4524 tab_explode_dynamite[i] = buffer[i];
4531 int buffer[8][TILE_MAX];
4536 for(i = 0; i < 8; i++)
4537 for(j = 0; j < TILE_MAX; j++)
4539 for(i = 0; i < 64; i++)
4541 for(;*map != -1; map += 2)
4543 if (map[0] < 0 || map[0] >= TILE_MAX || map[1] < 0 || map[1] >= 8)
4545 fprintf(stderr, "obj_map: bad tile (%d,%d) @ %d+%d\n",
4546 map[0], map[1], i / 16, i % 16);
4550 buffer[map[1]][map[0]]++;
4554 for(i = 0; i < 896; i++)
4556 for(;*map != -1; map += 2)
4558 if (map[0] < 0 || map[0] >= TILE_MAX || map[1] < 0 || map[1] >= 8)
4560 fprintf(stderr, "obj_map: bad tile (%d,%d) @ %d\n", map[0], map[1], i);
4564 buffer[map[1]][map[0]]++;
4568 for(i = 0; i < TILE_MAX; i++)
4570 for(j = 0; j < 8; j++)
4572 switch(buffer[j][i])
4575 fprintf(stderr, "obj_map: uninitialized (%d,%d)\n", i, j);
4581 fprintf(stderr, "obj_map: duplicate (%d,%d)\n", i, j);
4588 if(sizeof(obj_map) / sizeof(*obj_map) != map - obj_map)
4590 fprintf(stderr, "obj_map: bad end (%d != %d)\n",
4591 sizeof(obj_map) / sizeof(*obj_map), map - obj_map);
4595 fprintf(stderr, "obj_map: looks good, now disable debug code\n");
4600 for(i = 0; i < 8; i++)
4601 for(j = 0; j < TILE_MAX; j++)
4602 buffer[i][j] = Xblank;
4604 /* special case for first 64 entries */
4605 for(i = 0; i < 64; i++)
4607 for(;*map != -1; map += 2)
4608 buffer[map[1]][map[0]] = i;
4612 /* now regular entries */
4613 for(i = 0; i < 896 * 16; i += 16)
4615 for(;*map != -1; map += 2)
4616 buffer[map[1]][map[0]] = i;
4620 for(i = 0; i < 8; i++)
4621 for(j = 0; j < TILE_MAX; j++)
4622 map_obj[i][j] = buffer[7 - i][j];
4631 int buffer[2][8][SPR_MAX];
4633 while(*map < SPR_MAX)
4637 for(k = 0; k < 8; k++)
4638 buffer[j][k][i] = *map++;
4641 for(i = 0; i < 2; i++)
4642 for(j = 0; j < 8; j++)
4643 for(k = 0; k < SPR_MAX; k++)
4644 map_spr[i][j][k] = buffer[i][7 - j][k];
4652 for(i = 0; i < 128; i++)
4654 if(ttl_map[i] == -1)
4660 j = (ttl_map[i] % 22) * 14;
4661 k = (ttl_map[i] / 22);
4662 buffer[i] = k * 320 + j;
4666 for (i = 0; i < 128; i++)
4667 map_ttl[i] = buffer[i];
4672 create_tab(tile_blank, tab_blank);
4673 create_tab(tile_acid, tab_acid);
4674 create_tab(tile_ameuba, tab_ameuba);
4675 create_tab(tile_android_move, tab_android_move);