X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=1ecb117b915ac518312a778f0f1f3f5086ba47a6;hb=394fd0859ee1fd61606798b4683edd3bd5295c93;hp=aa15883d5fd03fc5df01c9308e193dd80a6019c2;hpb=9674da3df89c9bbe4b6b57e44396c476895e953f;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index aa15883d..1ecb117b 100644 --- a/src/tools.c +++ b/src/tools.c @@ -6212,7 +6212,7 @@ bd_object_mapping_list[] = }, { O_FLYING_STONE_F, FALSE, - EL_BD_FLYING_ROCK, ACTION_FALLING, -1 + EL_BD_FLYING_ROCK, ACTION_FLYING, -1 }, { O_MEGA_STONE, TRUE, @@ -6248,7 +6248,7 @@ bd_object_mapping_list[] = }, { O_FLYING_DIAMOND_F, FALSE, - EL_BD_FLYING_DIAMOND, ACTION_FALLING, -1 + EL_BD_FLYING_DIAMOND, ACTION_FLYING, -1 }, { O_NUT, TRUE, @@ -6974,14 +6974,6 @@ bd_object_mapping_list[] = O_NITRO_PACK_F, FALSE, EL_BD_NITRO_PACK, ACTION_FALLING, -1 }, - { - O_NITRO_PACK_EXPLODE, TRUE, - EL_BD_NITRO_PACK_EXPLODING, -1, -1 - }, - { - O_NITRO_PACK_EXPLODE, FALSE, - EL_BD_NITRO_PACK, ACTION_EXPLODING, -1 - }, { O_PRE_CLOCK_1, TRUE, EL_BD_CLOCK_GROWING_1, -1, -1 @@ -7254,6 +7246,14 @@ bd_object_mapping_list[] = O_NITRO_EXPL_4, FALSE, EL_BD_NITRO_PACK, ACTION_EXPLODING, -1 }, + { + O_NITRO_PACK_EXPLODE, TRUE, + EL_BD_NITRO_PACK_EXPLODING, -1, -1 + }, + { + O_NITRO_PACK_EXPLODE, FALSE, + EL_BD_NITRO_PACK, ACTION_EXPLODING, -1 + }, { O_AMOEBA_2_EXPL_1, TRUE, EL_BD_AMOEBA_2_EXPLODING_1, -1, -1 @@ -7327,11 +7327,11 @@ bd_object_mapping_list[] = EL_BD_PLAYER, ACTION_HITTING, MV_BIT_RIGHT }, { - O_PNEUMATIC_ACTIVE_LEFT, TRUE, + O_PNEUMATIC_ACTIVE_LEFT, FALSE, EL_BD_PNEUMATIC_HAMMER, ACTION_HITTING, MV_BIT_LEFT }, { - O_PNEUMATIC_ACTIVE_RIGHT, TRUE, + O_PNEUMATIC_ACTIVE_RIGHT, FALSE, EL_BD_PNEUMATIC_HAMMER, ACTION_HITTING, MV_BIT_RIGHT }, @@ -7491,6 +7491,50 @@ int map_element_RND_to_BD_cave(int element_rnd) return mapping_RND_to_BD[element_rnd]; } +int map_element_RND_to_BD_effect(int element_rnd, int action) +{ + static unsigned short mapping_RND_to_BD[NUM_FILE_ELEMENTS][NUM_ACTIONS]; + static boolean mapping_initialized = FALSE; + + if (!mapping_initialized) + { + int i, j; + + // return "O_UNKNOWN" for all undefined elements in mapping array + for (i = 0; i < NUM_FILE_ELEMENTS; i++) + for (j = 0; j < NUM_ACTIONS; j++) + mapping_RND_to_BD[i][j] = O_UNKNOWN; + + for (i = 0; bd_object_mapping_list[i].element_bd != -1; i++) + { + int element_rnd = bd_object_mapping_list[i].element_rnd; + int element_bd = bd_object_mapping_list[i].element_bd; + int action = bd_object_mapping_list[i].action; + + if (action != -1) + mapping_RND_to_BD[element_rnd][action] = element_bd; + } + + mapping_initialized = TRUE; + } + + if (element_rnd < 0 || element_rnd >= NUM_FILE_ELEMENTS) + { + Warn("invalid RND element %d", element_rnd); + + return O_UNKNOWN; + } + + if (action < 0 || action >= NUM_ACTIONS) + { + Warn("invalid action %d", action); + + return O_UNKNOWN; + } + + return mapping_RND_to_BD[element_rnd][action]; +} + int map_element_BD_to_RND_cave(int element_bd) { static unsigned short mapping_BD_to_RND[O_MAX_ALL]; @@ -10578,6 +10622,9 @@ void InitGraphicInfo_BD(void) g_bd->src_y = src_y; g_bd->width = TILEX; g_bd->height = TILEY; + + g_bd->graphic = graphic; + g_bd->frame = frame; } } @@ -10594,6 +10641,9 @@ void InitGraphicInfo_BD(void) g_bd->src_y = src_y; g_bd->width = TILEX; g_bd->height = TILEY; + + g_bd->graphic = graphic; + g_bd->frame = 0; } void InitGraphicInfo_EM(void)