void gd_drawcave_game(const GdCave *cave,
int **element_buffer, int **last_element_buffer,
int **drawing_buffer, int **last_drawing_buffer, int **gfx_buffer,
- int **covered_buffer,
+ int **covered_buffer, int **dir_buffer_from, int **dir_buffer_to,
boolean bonus_life_flash, int animcycle, boolean hate_invisible_outbox)
{
static boolean player_blinking = FALSE;
for (x = cave->x1; x <= cave->x2; x++)
{
GdElement actual = cave->map[y][x];
+ int dir_to = dir_buffer_to[y][x];
// if covered, real element is not important
if (covered_buffer[y][x])
draw = elemdrawing[actual];
}
+ // draw special graphics if element is moving
+ if (dir_to == GD_MV_LEFT || dir_to == GD_MV_RIGHT)
+ {
+ if (actual == O_STONE || actual == O_STONE_F)
+ {
+ if (dir_to == GD_MV_LEFT)
+ {
+ map = O_STONE_MOVE_LEFT;
+ draw = elemdrawing[O_STONE_MOVE_LEFT];
+ }
+ else
+ {
+ map = O_STONE_MOVE_RIGHT;
+ draw = elemdrawing[O_STONE_MOVE_RIGHT];
+ }
+ }
+ }
+
// draw special graphics if player is pushing something (but not while stirring the pot)
if (use_bd_pushing_graphics() &&
(cave->last_direction == GD_MV_LEFT || cave->last_direction == GD_MV_RIGHT) &&
void gd_drawcave_game(const GdCave *cave,
int **element_buffer, int **last_element_buffer,
int **drawing_buffer, int **last_drawing_buffer, int **gfx_buffer,
- int **covered_buffer,
+ int **covered_buffer, int **dir_buffer_from, int **dir_buffer_to,
boolean bonus_life_flash, int animcycle, boolean hate_invisible_outbox);
// function to copy a GdString
NULL, 0, 15, 15, 15
},
+ {
+ O_STONE_MOVE_LEFT, O_STONE_MOVE_LEFT, N_("Stone, moved left"),
+ 0,
+ NULL, 0, 1, 1, 1,
+ },
+ {
+ O_STONE_MOVE_RIGHT, O_STONE_MOVE_RIGHT, N_("Stone, moved right"),
+ 0,
+ NULL, 0, 1, 1, 1,
+ },
+ {
+ O_STONE_PUSH_LEFT, O_STONE_PUSH_LEFT, N_("Stone, pushed left"),
+ 0,
+ NULL, 0, 1, 1, 1,
+ },
+ {
+ O_STONE_PUSH_RIGHT, O_STONE_PUSH_RIGHT, N_("Stone, pushed right"),
+ 0,
+ NULL, 0, 1, 1, 1,
+ },
+
{
O_QUESTION_MARK, O_QUESTION_MARK, NULL,
0,
O_BITER_SWITCH_3,
O_BITER_SWITCH_4,
+ O_STONE_MOVE_LEFT,
+ O_STONE_MOVE_RIGHT,
+ O_STONE_PUSH_LEFT,
+ O_STONE_PUSH_RIGHT,
+
O_QUESTION_MARK,
O_EATABLE,
O_DOWN_ARROW,
if (game->element_buffer && game->drawing_buffer && game->gfx_buffer)
gd_drawcave_game(game->cave, game->element_buffer, game->last_element_buffer,
game->drawing_buffer, game->last_drawing_buffer, game->gfx_buffer,
- game->covered_buffer,
+ game->covered_buffer, game->dir_buffer_from, game->dir_buffer_to,
game->bonus_life_flash != 0, game->animcycle, setup.bd_show_invisible_outbox);
game->state_counter = counter_next;
O_BITER_SWITCH_4, FALSE,
EL_BDX_BITER_SWITCH_4, -1, -1
},
+ {
+ O_STONE_MOVE_LEFT, FALSE,
+ EL_BDX_ROCK, ACTION_MOVING, MV_BIT_LEFT
+ },
+ {
+ O_STONE_MOVE_RIGHT, FALSE,
+ EL_BDX_ROCK, ACTION_MOVING, MV_BIT_RIGHT
+ },
+ {
+ O_STONE_PUSH_LEFT, FALSE,
+ EL_BDX_ROCK, ACTION_PUSHING, MV_BIT_LEFT
+ },
+ {
+ O_STONE_PUSH_RIGHT, FALSE,
+ EL_BDX_ROCK, ACTION_PUSHING, MV_BIT_RIGHT
+ },
{
-1, FALSE,