if (game_status == GAME_MODE_PLAYING &&
level.game_engine_type == GAME_ENGINE_TYPE_EM)
{
+#if 1
+ RedrawPlayfield_EM(force_redraw);
+#else
BlitScreenToBitmap_EM(backbuffer);
+#endif
}
else if (game_status == GAME_MODE_PLAYING && !game.envelope_active)
{
DrawLevelElementExt(x, y, 0, 0, Feld[x][y], NO_CUTTING, USE_MASKING);
}
-#define TILE_GFX_ELEMENT(x, y) \
- (GfxElement[x][y] != EL_UNDEFINED && Feld[x][y] != EL_EXPLOSION ? \
- GfxElement[x][y] : Feld[x][y])
-
static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame)
{
Bitmap *src_bitmap;
return;
#if 1
+ /*
+ if (Feld[x][y] == EL_ELEMENT_SNAPPING &&
+ GFX_CRUMBLED(GfxElement[x][y]))
+ */
+
if (Feld[x][y] == EL_ELEMENT_SNAPPING &&
+ GfxElement[x][y] != EL_UNDEFINED &&
GFX_CRUMBLED(GfxElement[x][y]))
{
DrawLevelFieldCrumbledSandDigging(x, y, GfxDir[x][y], GfxFrame[x][y]);
+
return;
}
#endif
int last_player_frame = player->Frame;
int frame = 0;
+#if 1
+ /* GfxElement[][] is set to the element the player is digging or collecting;
+ remove also for off-screen player if the player is not moving anymore */
+ if (IN_LEV_FIELD(jx, jy) && !player_is_moving)
+ GfxElement[jx][jy] = EL_UNDEFINED;
+#endif
+
if (!player->active || !IN_SCR_FIELD(SCREENX(last_jx), SCREENY(last_jy)))
return;
DrawLevelElement(last_jx, last_jy, Back[last_jx][last_jy]);
if (last_element == EL_DYNAMITE_ACTIVE ||
+ last_element == EL_EM_DYNAMITE_ACTIVE ||
last_element == EL_SP_DISK_RED_ACTIVE)
DrawDynamite(last_jx, last_jy);
else
DrawLevelFieldThruMask(last_jx, last_jy);
}
else if (last_element == EL_DYNAMITE_ACTIVE ||
+ last_element == EL_EM_DYNAMITE_ACTIVE ||
last_element == EL_SP_DISK_RED_ACTIVE)
DrawDynamite(last_jx, last_jy);
else
if (player_is_moving && last_element == EL_EXPLOSION)
{
- int graphic = el_act2img(GfxElement[last_jx][last_jy], ACTION_EXPLODING);
+ int element = (GfxElement[last_jx][last_jy] != EL_UNDEFINED ?
+ GfxElement[last_jx][last_jy] : EL_EMPTY);
+ int graphic = el_act2img(element, ACTION_EXPLODING);
int delay = (game.emulation == EMU_SUPAPLEX ? 3 : 2);
int phase = ExplodePhase[last_jx][last_jy] - 1;
int frame = getGraphicAnimationFrame(graphic, phase - delay);
},
{
Yspring_kill_e, FALSE, FALSE,
- EL_SPRING, ACTION_SLURPING, MV_BIT_RIGHT
+ EL_SPRING, ACTION_EATING, MV_BIT_RIGHT
},
{
Yspring_kill_eB, FALSE, TRUE,
- EL_SPRING, ACTION_SLURPING, MV_BIT_RIGHT
+ EL_SPRING, ACTION_EATING, MV_BIT_RIGHT
},
{
Yspring_kill_w, FALSE, FALSE,
- EL_SPRING, ACTION_SLURPING, MV_BIT_LEFT
+ EL_SPRING, ACTION_EATING, MV_BIT_LEFT
},
{
Yspring_kill_wB, FALSE, TRUE,
- EL_SPRING, ACTION_SLURPING, MV_BIT_LEFT
+ EL_SPRING, ACTION_EATING, MV_BIT_LEFT
},
{
Xeater_n, TRUE, FALSE,
},
{
Xdynamite, TRUE, FALSE,
- EL_DYNAMITE, -1, -1
+ EL_EM_DYNAMITE, -1, -1
},
{
Ydynamite_eat, FALSE, FALSE,
- EL_DYNAMITE, ACTION_COLLECTING, -1
+ EL_EM_DYNAMITE, ACTION_COLLECTING, -1
},
{
Xdynamite_1, TRUE, FALSE,
- EL_DYNAMITE_ACTIVE, -1, -1
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
},
{
Xdynamite_2, FALSE, FALSE,
- EL_DYNAMITE_ACTIVE, -1, -1
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
},
{
Xdynamite_3, FALSE, FALSE,
- EL_DYNAMITE_ACTIVE, -1, -1
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
},
{
Xdynamite_4, FALSE, FALSE,
- EL_DYNAMITE_ACTIVE, -1, -1
+ EL_EM_DYNAMITE_ACTIVE, -1, -1
},
{
Xbumper, TRUE, FALSE,
return game_frame_delay_value;
}
+int getCenteredPlayerNr_EM()
+{
+ if (game.centered_player_nr_next >= 0 &&
+ !native_em_level.ply[game.centered_player_nr_next]->alive)
+ game.centered_player_nr_next = game.centered_player_nr;
+
+ if (game.centered_player_nr != game.centered_player_nr_next)
+ game.centered_player_nr = game.centered_player_nr_next;
+
+ return game.centered_player_nr;
+}
+
+int getActivePlayers_EM()
+{
+ int num_players = 0;
+ int i;
+
+ if (!tape.playing)
+ return -1;
+
+ for (i = 0; i < MAX_PLAYERS; i++)
+ if (tape.player_participates[i])
+ num_players++;
+
+ return num_players;
+}
+
unsigned int InitRND(long seed)
{
if (level.game_engine_type == GAME_ENGINE_TYPE_EM)
i == Xexit_2 ? j + 8 :
i == Xexit_3 ? j + 16 :
i == Xdynamite_1 ? 0 :
- i == Xdynamite_2 ? 20 :
- i == Xdynamite_3 ? 40 :
- i == Xdynamite_4 ? 60 :
+ i == Xdynamite_2 ? 8 :
+ i == Xdynamite_3 ? 16 :
+ i == Xdynamite_4 ? 24 :
i == Xsand_stonein_1 ? j + 1 :
i == Xsand_stonein_2 ? j + 9 :
i == Xsand_stonein_3 ? j + 17 :
if (!g->double_movement && (effective_action == ACTION_FALLING ||
effective_action == ACTION_MOVING ||
effective_action == ACTION_PUSHING ||
- effective_action == ACTION_SLURPING))
+ effective_action == ACTION_EATING))
{
int move_dir =
(effective_action == ACTION_FALLING ? MV_DOWN : direction);
if ((action == ACTION_SMASHED_BY_ROCK ||
action == ACTION_SMASHED_BY_SPRING ||
- action == ACTION_SLURPING) &&
+ action == ACTION_EATING) &&
graphic_action == graphic_default)
{
int e = (action == ACTION_SMASHED_BY_ROCK ? Ystone_s :