X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=d5256fd4ed0cd9b6b1bb62e7b3c319aa540b09eb;hb=b844b9ff4b1c79c5789cdae0a90deacb88d0887a;hp=57771d75b866c7f4995fefb43eea95ad94830fd5;hpb=93c8731e8f90c740a393896cdbff237068cd49a5;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 57771d75..d5256fd4 100644 --- a/src/game.c +++ b/src/game.c @@ -1963,12 +1963,12 @@ static void InitField(int x, int y, boolean init_game) break; case EL_EMC_MAGIC_BALL: - if (game.ball_state) + if (game.ball_active) Feld[x][y] = EL_EMC_MAGIC_BALL_ACTIVE; break; case EL_EMC_MAGIC_BALL_SWITCH: - if (game.ball_state) + if (game.ball_active) Feld[x][y] = EL_EMC_MAGIC_BALL_SWITCH_ACTIVE; break; @@ -2126,9 +2126,9 @@ static int compareGamePanelOrderInfo(const void *object1, const void *object2) int getPlayerInventorySize(int player_nr) { if (level.game_engine_type == GAME_ENGINE_TYPE_EM) - return level.native_em_level->ply[player_nr]->dynamite; + return game_em.ply[player_nr]->dynamite; else if (level.game_engine_type == GAME_ENGINE_TYPE_SP) - return level.native_sp_level->game_sp->red_disk_count; + return game_sp.red_disk_count; else return stored_player[player_nr].inventory_size; } @@ -2212,32 +2212,32 @@ static void UpdateGameControlValues(void) int time = (game.LevelSolved ? game.LevelSolved_CountingTime : level.game_engine_type == GAME_ENGINE_TYPE_EM ? - level.native_em_level->lev->time : + game_em.lev->time : level.game_engine_type == GAME_ENGINE_TYPE_SP ? - level.native_sp_level->game_sp->time_played : + game_sp.time_played : level.game_engine_type == GAME_ENGINE_TYPE_MM ? game_mm.energy_left : game.no_time_limit ? TimePlayed : TimeLeft); int score = (game.LevelSolved ? game.LevelSolved_CountingScore : level.game_engine_type == GAME_ENGINE_TYPE_EM ? - level.native_em_level->lev->score : + game_em.lev->score : level.game_engine_type == GAME_ENGINE_TYPE_SP ? - level.native_sp_level->game_sp->score : + game_sp.score : level.game_engine_type == GAME_ENGINE_TYPE_MM ? game_mm.score : game.score); int gems = (level.game_engine_type == GAME_ENGINE_TYPE_EM ? - level.native_em_level->lev->required : + game_em.lev->gems_needed : level.game_engine_type == GAME_ENGINE_TYPE_SP ? - level.native_sp_level->game_sp->infotrons_still_needed : + game_sp.infotrons_still_needed : level.game_engine_type == GAME_ENGINE_TYPE_MM ? game_mm.kettles_still_needed : game.gems_still_needed); int exit_closed = (level.game_engine_type == GAME_ENGINE_TYPE_EM ? - level.native_em_level->lev->required > 0 : + game_em.lev->gems_needed > 0 : level.game_engine_type == GAME_ENGINE_TYPE_SP ? - level.native_sp_level->game_sp->infotrons_still_needed > 0 : + game_sp.infotrons_still_needed > 0 : level.game_engine_type == GAME_ENGINE_TYPE_MM ? game_mm.kettles_still_needed > 0 || game_mm.lights_still_needed > 0 : @@ -2277,7 +2277,7 @@ static void UpdateGameControlValues(void) { if (level.game_engine_type == GAME_ENGINE_TYPE_EM) { - if (level.native_em_level->ply[i]->keys & (1 << k)) + if (game_em.ply[i]->keys & (1 << k)) game_panel_controls[GAME_PANEL_KEY_1 + k].value = get_key_element_from_nr(k); } @@ -2305,7 +2305,7 @@ static void UpdateGameControlValues(void) { if (level.game_engine_type == GAME_ENGINE_TYPE_EM) { - if (level.native_em_level->ply[player_nr]->keys & (1 << k)) + if (game_em.ply[player_nr]->keys & (1 << k)) game_panel_controls[GAME_PANEL_KEY_1 + k].value = get_key_element_from_nr(k); } @@ -2366,9 +2366,9 @@ static void UpdateGameControlValues(void) (exit_closed ? EL_EXIT_CLOSED : EL_EXIT_OPEN); game_panel_controls[GAME_PANEL_EMC_MAGIC_BALL].value = - (game.ball_state ? EL_EMC_MAGIC_BALL_ACTIVE : EL_EMC_MAGIC_BALL); + (game.ball_active ? EL_EMC_MAGIC_BALL_ACTIVE : EL_EMC_MAGIC_BALL); game_panel_controls[GAME_PANEL_EMC_MAGIC_BALL_SWITCH].value = - (game.ball_state ? EL_EMC_MAGIC_BALL_SWITCH_ACTIVE : + (game.ball_active ? EL_EMC_MAGIC_BALL_SWITCH_ACTIVE : EL_EMC_MAGIC_BALL_SWITCH); game_panel_controls[GAME_PANEL_LIGHT_SWITCH].value = @@ -2906,12 +2906,17 @@ static void InitGameEngine(void) game.use_block_last_field_bug = (game.engine_version < VERSION_IDENT(3,1,1,0)); + /* various special flags and settings for native Emerald Mine game engine */ + game_em.use_single_button = (game.engine_version > VERSION_IDENT(4,0,0,2)); game_em.use_snap_key_bug = (game.engine_version < VERSION_IDENT(4,0,1,0)); + game_em.use_old_explosions = + (game.engine_version < VERSION_IDENT(4,1,4,2)); + // -------------------------------------------------------------------------- // set maximal allowed number of custom element changes per game frame @@ -3250,6 +3255,8 @@ static void InitGameEngine(void) // ---------- initialize graphics engine ------------------------------------ game.scroll_delay_value = (game.forced_scroll_delay_value != -1 ? game.forced_scroll_delay_value : + level.game_engine_type == GAME_ENGINE_TYPE_EM && + !setup.forced_scroll_delay ? 0 : setup.scroll_delay ? setup.scroll_delay_value : 0); game.scroll_delay_value = MIN(MAX(MIN_SCROLL_DELAY, game.scroll_delay_value), MAX_SCROLL_DELAY); @@ -3612,7 +3619,7 @@ void InitGame(void) game.lenses_time_left = 0; game.magnify_time_left = 0; - game.ball_state = level.ball_state_initial; + game.ball_active = level.ball_active_initial; game.ball_content_nr = 0; game.explosions_delayed = TRUE; @@ -3746,12 +3753,13 @@ void InitGame(void) // use preferred player also in local single-player mode if (!network.enabled && !game.team_mode) { - int old_index_nr = local_player->index_nr; int new_index_nr = setup.network_player_nr; if (new_index_nr >= 0 && new_index_nr < MAX_PLAYERS) { - stored_player[old_index_nr].connected_locally = FALSE; + for (i = 0; i < MAX_PLAYERS; i++) + stored_player[i].connected_locally = FALSE; + stored_player[new_index_nr].connected_locally = TRUE; } } @@ -3933,6 +3941,7 @@ void InitGame(void) game.centered_player_nr = (network_playing ? local_player->index_nr : -1); game.centered_player_nr_next = game.centered_player_nr; game.set_centered_player = FALSE; + game.set_centered_player_wrap = FALSE; if (network_playing && tape.recording) { @@ -4491,7 +4500,7 @@ static void LevelSolved(void) game.GameOver = TRUE; game.score_final = (level.game_engine_type == GAME_ENGINE_TYPE_EM ? - level.native_em_level->lev->score : + game_em.lev->score : level.game_engine_type == GAME_ENGINE_TYPE_MM ? game_mm.score : game.score); @@ -11239,7 +11248,7 @@ static void CheckLevelTime(void) if (!TimeLeft && setup.time_limit) { if (level.game_engine_type == GAME_ENGINE_TYPE_EM) - level.native_em_level->lev->killed_out_of_time = TRUE; + game_em.lev->killed_out_of_time = TRUE; else for (i = 0; i < MAX_PLAYERS; i++) KillPlayer(&stored_player[i]); @@ -11250,8 +11259,7 @@ static void CheckLevelTime(void) game_panel_controls[GAME_PANEL_TIME].value = TimePlayed; } - level.native_em_level->lev->time = - (game.no_time_limit ? TimePlayed : TimeLeft); + game_em.lev->time = (game.no_time_limit ? TimePlayed : TimeLeft); } if (tape.recording || tape.playing) @@ -14218,13 +14226,13 @@ static int DigField(struct PlayerInfo *player, { int xx, yy; - game.ball_state = !game.ball_state; + game.ball_active = !game.ball_active; SCAN_PLAYFIELD(xx, yy) { int e = Feld[xx][yy]; - if (game.ball_state) + if (game.ball_active) { if (e == EL_EMC_MAGIC_BALL) CreateField(xx, yy, EL_EMC_MAGIC_BALL_ACTIVE); @@ -14701,78 +14709,78 @@ static void PlayLevelMusic(void) void PlayLevelSound_EM(int xx, int yy, int element_em, int sample) { - int element = (element_em > -1 ? map_element_EM_to_RND(element_em) : 0); + int element = (element_em > -1 ? map_element_EM_to_RND_game(element_em) : 0); int offset = (BorderElement == EL_STEELWALL ? 1 : 0); int x = xx - 1 - offset; int y = yy - 1 - offset; switch (sample) { - case SAMPLE_blank: + case SOUND_blank: PlayLevelSoundElementAction(x, y, element, ACTION_WALKING); break; - case SAMPLE_roll: + case SOUND_roll: PlayLevelSoundElementAction(x, y, element, ACTION_PUSHING); break; - case SAMPLE_stone: + case SOUND_stone: PlayLevelSoundElementAction(x, y, element, ACTION_IMPACT); break; - case SAMPLE_nut: + case SOUND_nut: PlayLevelSoundElementAction(x, y, element, ACTION_IMPACT); break; - case SAMPLE_crack: + case SOUND_crack: PlayLevelSoundElementAction(x, y, element, ACTION_BREAKING); break; - case SAMPLE_bug: + case SOUND_bug: PlayLevelSoundElementAction(x, y, element, ACTION_MOVING); break; - case SAMPLE_tank: + case SOUND_tank: PlayLevelSoundElementAction(x, y, element, ACTION_MOVING); break; - case SAMPLE_android_clone: + case SOUND_android_clone: PlayLevelSoundElementAction(x, y, element, ACTION_DROPPING); break; - case SAMPLE_android_move: + case SOUND_android_move: PlayLevelSoundElementAction(x, y, element, ACTION_MOVING); break; - case SAMPLE_spring: + case SOUND_spring: PlayLevelSoundElementAction(x, y, element, ACTION_IMPACT); break; - case SAMPLE_slurp: + case SOUND_slurp: PlayLevelSoundElementAction(x, y, element, ACTION_EATING); break; - case SAMPLE_eater: + case SOUND_eater: PlayLevelSoundElementAction(x, y, element, ACTION_WAITING); break; - case SAMPLE_eater_eat: + case SOUND_eater_eat: PlayLevelSoundElementAction(x, y, element, ACTION_DIGGING); break; - case SAMPLE_alien: + case SOUND_alien: PlayLevelSoundElementAction(x, y, element, ACTION_MOVING); break; - case SAMPLE_collect: + case SOUND_collect: PlayLevelSoundElementAction(x, y, element, ACTION_COLLECTING); break; - case SAMPLE_diamond: + case SOUND_diamond: PlayLevelSoundElementAction(x, y, element, ACTION_IMPACT); break; - case SAMPLE_squash: + case SOUND_squash: // !!! CHECK THIS !!! #if 1 PlayLevelSoundElementAction(x, y, element, ACTION_BREAKING); @@ -14781,75 +14789,75 @@ void PlayLevelSound_EM(int xx, int yy, int element_em, int sample) #endif break; - case SAMPLE_wonderfall: + case SOUND_wonderfall: PlayLevelSoundElementAction(x, y, element, ACTION_FILLING); break; - case SAMPLE_drip: + case SOUND_drip: PlayLevelSoundElementAction(x, y, element, ACTION_IMPACT); break; - case SAMPLE_push: + case SOUND_push: PlayLevelSoundElementAction(x, y, element, ACTION_PUSHING); break; - case SAMPLE_dirt: + case SOUND_dirt: PlayLevelSoundElementAction(x, y, element, ACTION_DIGGING); break; - case SAMPLE_acid: + case SOUND_acid: PlayLevelSoundElementAction(x, y, element, ACTION_SPLASHING); break; - case SAMPLE_ball: + case SOUND_ball: PlayLevelSoundElementAction(x, y, element, ACTION_DROPPING); break; - case SAMPLE_grow: + case SOUND_slide: PlayLevelSoundElementAction(x, y, element, ACTION_GROWING); break; - case SAMPLE_wonder: + case SOUND_wonder: PlayLevelSoundElementAction(x, y, element, ACTION_ACTIVE); break; - case SAMPLE_door: + case SOUND_door: PlayLevelSoundElementAction(x, y, element, ACTION_PASSING); break; - case SAMPLE_exit_open: + case SOUND_exit_open: PlayLevelSoundElementAction(x, y, element, ACTION_OPENING); break; - case SAMPLE_exit_leave: + case SOUND_exit_leave: PlayLevelSoundElementAction(x, y, element, ACTION_PASSING); break; - case SAMPLE_dynamite: + case SOUND_dynamite: PlayLevelSoundElementAction(x, y, element, ACTION_DROPPING); break; - case SAMPLE_tick: + case SOUND_tick: PlayLevelSoundElementAction(x, y, element, ACTION_ACTIVE); break; - case SAMPLE_press: + case SOUND_press: PlayLevelSoundElementAction(x, y, element, ACTION_ACTIVATING); break; - case SAMPLE_wheel: + case SOUND_wheel: PlayLevelSoundElementAction(x, y, element, ACTION_ACTIVE); break; - case SAMPLE_boom: + case SOUND_boom: PlayLevelSoundElementAction(x, y, element, ACTION_EXPLODING); break; - case SAMPLE_die: + case SOUND_die: PlayLevelSoundElementAction(x, y, element, ACTION_DYING); break; - case SAMPLE_time: + case SOUND_time: PlaySound(SND_GAME_RUNNING_OUT_OF_TIME); break;