X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=e49e0937a4ca0d879c7f42e09719033e5ccd0882;hb=d9b86b7b2ebe0b2be3926656c3bbdcd060ee5811;hp=3c6d53fe4c936acee54dc2d7d82f1f8560e5733f;hpb=ecf508e3d4590f48a92f6b37114a0590a08acb2b;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index 3c6d53fe..e49e0937 100644 --- a/src/tools.c +++ b/src/tools.c @@ -127,7 +127,11 @@ void RedrawPlayfield(boolean force_redraw, int x, int y, int width, int height) 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) { @@ -1827,6 +1831,13 @@ void DrawPlayer(struct PlayerInfo *player) 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; @@ -1864,12 +1875,14 @@ void DrawPlayer(struct PlayerInfo *player) 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 @@ -3440,19 +3453,19 @@ em_object_mapping_list[] = }, { 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, @@ -4084,27 +4097,27 @@ em_object_mapping_list[] = }, { 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, @@ -5116,6 +5129,33 @@ int getGameFrameDelay_EM(int native_em_game_frame_delay) 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) @@ -5335,9 +5375,9 @@ void InitGraphicInfo_EM(void) 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 : @@ -5449,7 +5489,7 @@ void InitGraphicInfo_EM(void) 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); @@ -5608,7 +5648,7 @@ void InitGraphicInfo_EM(void) 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 :