X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=8d4fa2826875c6f1a0b6c967d56636b344f6fbe6;hb=983b7bc7f3493b1522d08d8e7bdecb3bd8e462eb;hp=6e48ea83955fab48cdd92f65c20050a10fbef4b9;hpb=fda8c9f42aa13663ad6b2f698da787a7280b9965;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 6e48ea83..8d4fa282 100644 --- a/src/screens.c +++ b/src/screens.c @@ -346,6 +346,7 @@ void DrawMainMenu() OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2); } +#if 0 static void gotoTopLevelDir() { /* move upwards to top level directory */ @@ -374,9 +375,11 @@ static void gotoTopLevelDir() leveldir_current = leveldir_current->node_parent; } } +#endif void HandleMainMenu(int mx, int my, int dx, int dy, int button) { + static unsigned long level_delay = 0; static int choice = 5; int x = 0; int y = choice; @@ -402,9 +405,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) if (y == 1 && ((x == 10 && level_nr > leveldir_current->first_level) || (x == 14 && level_nr < leveldir_current->last_level)) && - button) + button && DelayReached(&level_delay, GADGET_FRAME_DELAY)) { - static unsigned long level_delay = 0; int step = (button == 1 ? 1 : button == 2 ? 5 : 10); int old_level_nr = level_nr; int new_level_nr; @@ -415,11 +417,25 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) if (new_level_nr > leveldir_current->last_level) new_level_nr = leveldir_current->last_level; +#if 1 + if (setup.handicap && new_level_nr > leveldir_current->handicap_level) + { + /* skipping levels is only allowed when trying to skip single level */ + if (setup.skip_levels && step == 1 && + Request("Level still unsolved ! Skip despite handicap ?", REQ_ASK)) + { + leveldir_current->handicap_level++; + SaveLevelSetup_SeriesInfo(); + } + + new_level_nr = leveldir_current->handicap_level; + } +#else if (setup.handicap && new_level_nr > leveldir_current->handicap_level) new_level_nr = leveldir_current->handicap_level; +#endif - if (new_level_nr != old_level_nr && - DelayReached(&level_delay, GADGET_FRAME_DELAY)) + if (new_level_nr != old_level_nr) { level_nr = new_level_nr; @@ -466,7 +482,9 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) SaveLevelSetup_LastSeries(); SaveLevelSetup_SeriesInfo(); +#if 0 gotoTopLevelDir(); +#endif DrawChooseLevel(); } @@ -1944,6 +1962,7 @@ static struct TokenInfo setup_info_game[] = { { TYPE_SWITCH, &setup.team_mode, "Team-Mode:" }, { TYPE_SWITCH, &setup.handicap, "Handicap:" }, + { TYPE_SWITCH, &setup.skip_levels, "Skip Levels:" }, { TYPE_SWITCH, &setup.time_limit, "Timelimit:" }, { TYPE_SWITCH, &setup.autorecord, "Auto-Record:" }, { TYPE_EMPTY, NULL, "" }, @@ -3028,6 +3047,29 @@ void HandleGameActions() TimeFrames = 0; TapeTime++; + if (!level.use_step_counter) + { + TimePlayed++; + + if (TimeLeft > 0) + { + TimeLeft--; + + if (TimeLeft <= 10 && setup.time_limit) + PlaySoundStereo(SND_GAME_RUNNING_OUT_OF_TIME, SOUND_MIDDLE); + + DrawGameValue_Time(TimeLeft); + + if (!TimeLeft && setup.time_limit) + level.native_em_level->lev->killed_out_of_time = TRUE; + } + else if (level.time == 0 && level.native_em_level->lev->home > 0) + DrawGameValue_Time(TimePlayed); + + level.native_em_level->lev->time = + (level.time == 0 ? TimePlayed : TimeLeft); + } + if (tape.recording || tape.playing) DrawVideoDisplay(VIDEO_STATE_TIME_ON, TapeTime); }