X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=7d783a9b21a3f672e3f5c13ce5574d63db856b8a;hb=4b1b5a2a67227d3023ff6da4596be31eae8eaefc;hp=10a7cd5791c52521b60d7b29c19a6a26673b590b;hpb=3fb9d9cf97f3d4da6066f3c6b2ce84c81b768982;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 10a7cd57..7d783a9b 100644 --- a/src/screens.c +++ b/src/screens.c @@ -97,12 +97,13 @@ static struct GadgetInfo *screen_gadget[NUM_SCREEN_GADGETS]; static int setup_mode = SETUP_MODE_MAIN; static int info_mode = INFO_MODE_MAIN; -#define mSX (SX + (game_status >= GAME_MODE_MAIN && \ - game_status <= GAME_MODE_SETUP ? \ - menu.draw_xoffset[game_status] : menu.draw_xoffset_default)) -#define mSY (SY + (game_status >= GAME_MODE_MAIN && \ - game_status <= GAME_MODE_SETUP ? \ - menu.draw_yoffset[game_status] : menu.draw_yoffset_default)) +#define DRAW_OFFSET_MODE(x) (x >= GAME_MODE_MAIN && \ + x <= GAME_MODE_SETUP ? x : \ + x == GAME_MODE_PSEUDO_TYPENAME ? \ + GAME_MODE_MAIN : GAME_MODE_DEFAULT) + +#define mSX (SX + menu.draw_xoffset[DRAW_OFFSET_MODE(game_status)]) +#define mSY (SY + menu.draw_yoffset[DRAW_OFFSET_MODE(game_status)]) #define NUM_MENU_ENTRIES_ON_SCREEN (menu.list_size[game_status] > 2 ? \ menu.list_size[game_status] : \ @@ -379,6 +380,7 @@ static void gotoTopLevelDir() 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; @@ -404,9 +406,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; @@ -418,13 +419,10 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) new_level_nr = leveldir_current->last_level; #if 1 - if (setup.handicap && new_level_nr > leveldir_current->handicap_level + 1) - new_level_nr = leveldir_current->handicap_level; - - if (setup.handicap && new_level_nr > leveldir_current->handicap_level && - leveldir_current->handicap_level < leveldir_current->last_level) + if (setup.handicap && new_level_nr > leveldir_current->handicap_level) { - if (setup.skip_levels && + /* 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++; @@ -438,8 +436,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) 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;