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 definitions.
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 /* ------------------------------------------------------------------------- */
25 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
44 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
65 /* 0=stop 1=fake_acid */
66 int tile_fake_acid[] =
68 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
98 int tile_android_move[] =
103 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
118 /* ------------------------------------------------------------------------- */
120 /* explosions: special format */
121 /* everything is initially filled with Xboom_1 */
174 TILE_MAX, /* up till here are indestructable */
185 Xbomb_pause, Xboom_bomb,
186 Xbomb_fall, Xboom_bomb,
187 TILE_MAX, /* up till here are special explosions */
189 Xandroid, Xboom_android,
190 Xandroid_1_n, Xboom_android,
191 Xandroid_2_n, Xboom_android,
192 Xandroid_1_e, Xboom_android,
193 Xandroid_2_e, Xboom_android,
194 Xandroid_1_s, Xboom_android,
195 Xandroid_2_s, Xboom_android,
196 Xandroid_1_w, Xboom_android,
197 Xandroid_2_w, Xboom_android,
198 TILE_MAX /* up until here are dynamite explosions */
202 /* ------------------------------------------------------------------------- */
204 /* map the graphics file to internal tiles and animations
206 * one graphics icon maps to many tiles and animations
354 /* use normal "Xblank" instead of explicit x==0, y==2 empty space graphic */
1585 Yspring_alien_eB, 6,
1589 Yspring_alien_eB, 5,
1593 Yspring_alien_eB, 4,
1597 Yspring_alien_eB, 3,
1601 Yspring_alien_eB, 2,
1605 Yspring_alien_eB, 1,
1609 Yspring_alien_eB, 0,
1615 Yspring_alien_wB, 0,
1619 Yspring_alien_wB, 1,
1623 Yspring_alien_wB, 2,
1627 Yspring_alien_wB, 3,
1631 Yspring_alien_wB, 4,
1635 Yspring_alien_wB, 5,
1639 Yspring_alien_wB, 6,
2895 Yslidewall_ew_blank, 7,
2905 Yslidewall_ew_blank, 0,
2907 Yslidewall_ew_blank, 1,
2909 Yslidewall_ew_blank, 2,
2911 Yslidewall_ew_blank, 3,
2913 Yslidewall_ew_blank, 4,
2915 Yslidewall_ew_blank, 5,
2917 Yslidewall_ew_blank, 6,
2919 Yslidewall_ns_blank, 7,
2929 Yslidewall_ns_blank, 0,
2931 Yslidewall_ns_blank, 1,
2933 Yslidewall_ns_blank, 2,
2935 Yslidewall_ns_blank, 3,
2937 Yslidewall_ns_blank, 4,
2939 Yslidewall_ns_blank, 5,
2941 Yslidewall_ns_blank, 6,
3405 Xsand_stonesand_1, 0,
3406 Xsand_stonesand_1, 1,
3407 Xsand_stonesand_1, 2,
3408 Xsand_stonesand_1, 3,
3409 Xsand_stonesand_1, 4,
3410 Xsand_stonesand_1, 5,
3411 Xsand_stonesand_1, 6,
3412 Xsand_stonesand_1, 7,
3413 Xsand_stonesand_2, 0,
3414 Xsand_stonesand_2, 1,
3415 Xsand_stonesand_2, 2,
3416 Xsand_stonesand_2, 3,
3417 Xsand_stonesand_2, 4,
3418 Xsand_stonesand_2, 5,
3419 Xsand_stonesand_2, 6,
3420 Xsand_stonesand_2, 7,
3421 Xsand_stonesand_3, 0,
3422 Xsand_stonesand_3, 1,
3423 Xsand_stonesand_3, 2,
3424 Xsand_stonesand_3, 3,
3425 Xsand_stonesand_3, 4,
3426 Xsand_stonesand_3, 5,
3427 Xsand_stonesand_3, 6,
3428 Xsand_stonesand_3, 7,
3429 Xsand_stonesand_4, 0,
3430 Xsand_stonesand_4, 1,
3431 Xsand_stonesand_4, 2,
3432 Xsand_stonesand_4, 3,
3433 Xsand_stonesand_4, 4,
3434 Xsand_stonesand_4, 5,
3435 Xsand_stonesand_4, 6,
3436 Xsand_stonesand_4, 7,
3437 Xsand_sandstone_1, 0,
3438 Xsand_sandstone_1, 1,
3439 Xsand_sandstone_1, 2,
3440 Xsand_sandstone_1, 3,
3441 Xsand_sandstone_1, 4,
3442 Xsand_sandstone_1, 5,
3443 Xsand_sandstone_1, 6,
3444 Xsand_sandstone_1, 7,
3445 Xsand_sandstone_2, 0,
3446 Xsand_sandstone_2, 1,
3447 Xsand_sandstone_2, 2,
3448 Xsand_sandstone_2, 3,
3449 Xsand_sandstone_2, 4,
3450 Xsand_sandstone_2, 5,
3451 Xsand_sandstone_2, 6,
3452 Xsand_sandstone_2, 7,
3453 Xsand_sandstone_3, 0,
3454 Xsand_sandstone_3, 1,
3455 Xsand_sandstone_3, 2,
3456 Xsand_sandstone_3, 3,
3457 Xsand_sandstone_3, 4,
3458 Xsand_sandstone_3, 5,
3459 Xsand_sandstone_3, 6,
3460 Xsand_sandstone_3, 7,
3461 Xsand_sandstone_4, 0,
3462 Xsand_sandstone_4, 1,
3463 Xsand_sandstone_4, 2,
3464 Xsand_sandstone_4, 3,
3465 Xsand_sandstone_4, 4,
3466 Xsand_sandstone_4, 5,
3467 Xsand_sandstone_4, 6,
3468 Xsand_sandstone_4, 7,
4393 PLY_walk_n, 0, 0, 1, 2, 3, 4, 5, 6, 7,
4394 PLY_walk_e, 0, 8, 9, 10, 11, 12, 13, 14, 15,
4395 PLY_walk_s, 0, 16, 17, 18, 19, 20, 21, 22, 23,
4396 PLY_walk_w, 0, 24, 25, 26, 27, 28, 29, 30, 31,
4398 PLY_push_n, 0, 32, 33, 34, 35, 36, 35, 34, 33,
4399 PLY_push_e, 0, 37, 38, 39, 40, 41, 40, 39, 38,
4400 PLY_push_s, 0, 42, 43, 44, 45, 46, 45, 44, 43,
4401 PLY_push_w, 0, 47, 48, 49, 50, 51, 50, 49, 48,
4403 PLY_shoot_n, 0, 52, 52, 52, 52, 52, 52, 52, 52,
4404 PLY_shoot_e, 0, 53, 53, 53, 53, 53, 53, 53, 53,
4405 PLY_shoot_s, 0, 54, 54, 54, 54, 54, 54, 54, 54,
4406 PLY_shoot_w, 0, 55, 55, 55, 55, 55, 55, 55, 55,
4408 PLY_walk_n, 1, 56, 57, 58, 59, 60, 61, 62, 63,
4409 PLY_walk_e, 1, 64, 65, 66, 67, 68, 69, 70, 71,
4410 PLY_walk_s, 1, 72, 73, 74, 75, 76, 77, 78, 79,
4411 PLY_walk_w, 1, 80, 81, 82, 83, 84, 85, 86, 87,
4413 PLY_push_n, 1, 88, 89, 90, 91, 92, 91, 90, 89,
4414 PLY_push_e, 1, 93, 94, 95, 96, 97, 96, 95, 94,
4415 PLY_push_s, 1, 98, 99, 100, 101, 102, 101, 100, 99,
4416 PLY_push_w, 1, 103, 104, 105, 106, 107, 106, 105, 104,
4418 PLY_shoot_n, 1, 108, 108, 108, 108, 108, 108, 108, 108,
4419 PLY_shoot_e, 1, 109, 109, 109, 109, 109, 109, 109, 109,
4420 PLY_shoot_s, 1, 110, 110, 110, 110, 110, 110, 110, 110,
4421 PLY_shoot_w, 1, 111, 111, 111, 111, 111, 111, 111, 111,
4423 PLY_still, 0, 112,112, 112, 112, 112, 112, 112, 112,
4424 PLY_still, 1, 113,113, 113, 113, 113, 113, 113, 113,
4430 /* 0=stop 1=blank */
4431 unsigned char tab_blank[TILE_MAX];
4434 unsigned char tab_acid[TILE_MAX];
4436 /* 0=stop 1=fake_acid */
4437 unsigned char tab_fake_acid[TILE_MAX];
4439 /* 0=stop 1=amoeba */
4440 unsigned char tab_amoeba[TILE_MAX];
4443 unsigned char tab_android_move[TILE_MAX];
4445 /* normal explosion */
4446 unsigned short tab_explode_normal[TILE_MAX];
4448 /* dynamite explosion */
4449 unsigned short tab_explode_dynamite[TILE_MAX];
4451 /* map objects to coords */
4452 unsigned short map_obj[8][TILE_MAX];
4454 /* map players to coords */
4455 unsigned short map_ply[2][8][13];
4457 /* map ascii to coords */
4458 unsigned short map_ttl[128];
4460 /* map tiles and frames to graphic info */
4461 struct GraphicInfo_EM graphic_info_em_object[TILE_MAX][8];
4463 /* map player number, frames and action to graphic info */
4464 struct GraphicInfo_EM graphic_info_em_player[MAX_PLAYERS][PLY_MAX][8];
4466 static void create_tab(int *invert, unsigned char *array)
4469 int buffer[TILE_MAX];
4471 for (i = 0; i < TILE_MAX; i++)
4474 for (;invert[0] < TILE_MAX; invert += 2)
4475 buffer[invert[0]] = invert[1];
4477 for (i = 0; i < TILE_MAX; i++)
4478 array[i] = buffer[i];
4481 static void create_explode(void)
4484 int *tile = tile_explode;
4485 int buffer[TILE_MAX];
4487 for (i = 0; i < TILE_MAX; i++)
4488 buffer[i] = Xboom_1;
4489 while ((i = *tile++) < TILE_MAX)
4490 buffer[i] = i; /* these tiles are indestructable */
4491 while ((i = *tile++) < TILE_MAX)
4492 buffer[i] = *tile++; /* these tiles are special */
4494 for (i = 0; i < TILE_MAX; i++)
4495 tab_explode_normal[i] = buffer[i];
4497 while ((i = *tile++) < TILE_MAX)
4498 buffer[i] = *tile++; /* these tiles for dynamite */
4500 for (i = 0; i < TILE_MAX; i++)
4501 tab_explode_dynamite[i] = buffer[i];
4504 static void create_obj(void)
4508 int buffer[8][TILE_MAX];
4510 for (i = 0; i < 8; i++)
4511 for (j = 0; j < TILE_MAX; j++)
4512 buffer[i][j] = Xblank;
4514 /* special case for first 64 entries */
4515 for (i = 0; i < 64; i++)
4517 for (;*map != -1; map += 2)
4518 buffer[map[1]][map[0]] = i;
4522 /* now regular entries */
4523 for (i = 0; i < 896 * 16; i += 16)
4525 for (;*map != -1; map += 2)
4526 buffer[map[1]][map[0]] = i;
4530 for (i = 0; i < 8; i++)
4531 for (j = 0; j < TILE_MAX; j++)
4532 map_obj[i][j] = buffer[7 - i][j];
4535 static void create_obj_graphics_info_em(void)
4539 for (i = 0; i < TILE_MAX; i++)
4541 for (j = 0; j < 8; j++)
4543 struct GraphicInfo_EM *g = &graphic_info_em_object[i][j];
4544 int obj = map_obj[j][i];
4546 g->bitmap = objBitmap;
4547 g->src_x = (obj / 512) * TILEX;
4548 g->src_y = (obj % 512) * TILEY / 16;
4549 g->src_offset_x = 0;
4550 g->src_offset_y = 0;
4551 g->dst_offset_x = 0;
4552 g->dst_offset_y = 0;
4556 g->crumbled_bitmap = NULL;
4557 g->crumbled_src_x = 0;
4558 g->crumbled_src_y = 0;
4559 g->crumbled_border_size = 0;
4560 g->crumbled_tile_size = 0;
4562 g->has_crumbled_graphics = FALSE;
4563 g->preserve_background = FALSE;
4565 /* create unique graphic identifier to decide if tile must be redrawn */
4566 g->unique_identifier = obj;
4571 static void create_ply(void)
4575 int buffer[2][8][PLY_MAX];
4577 while (*map < PLY_MAX)
4582 for (k = 0; k < 8; k++)
4583 buffer[j][k][i] = *map++;
4586 for (i = 0; i < 2; i++)
4587 for (j = 0; j < 8; j++)
4588 for (k = 0; k < PLY_MAX; k++)
4589 map_ply[i][j][k] = buffer[i][7 - j][k];
4592 static void create_ply_graphics_info_em(void)
4596 for (i = 0; i < MAX_PLAYERS; i++)
4598 for (j = 0; j < PLY_MAX; j++)
4600 for (k = 0; k < 8; k++)
4602 struct GraphicInfo_EM *g = &graphic_info_em_player[i][j][k];
4603 int spr = map_ply[i % 2][k][j];
4605 g->bitmap = sprBitmap;
4606 g->src_x = (spr / 8) * TILEX;
4607 g->src_y = (spr % 8) * TILEY;
4608 g->src_offset_x = 0;
4609 g->src_offset_y = 0;
4610 g->dst_offset_x = 0;
4611 g->dst_offset_y = 0;
4615 g->has_crumbled_graphics = FALSE;
4616 g->crumbled_bitmap = NULL;
4617 g->crumbled_src_x = 0;
4618 g->crumbled_src_y = 0;
4619 g->crumbled_border_size = 0;
4621 g->unique_identifier = 0;
4627 void tab_generate(void)
4629 create_tab(tile_blank, tab_blank);
4630 create_tab(tile_acid, tab_acid);
4631 create_tab(tile_fake_acid, tab_fake_acid);
4632 create_tab(tile_amoeba, tab_amoeba);
4633 create_tab(tile_android_move, tab_android_move);
4639 void tab_generate_graphics_info_em(void)
4641 create_obj_graphics_info_em();
4642 create_ply_graphics_info_em();
4644 InitGraphicInfo_EM();