rnd-20100402-1-src
[rocksndiamonds.git] / src / screens.c
index a9071d43b03806786e4247ec364ca38703436b61..9fbd5b1b487ea80e54320890e3389d04a3043a19 100644 (file)
 #define SETUP_MODE_SOUND               4
 #define SETUP_MODE_ARTWORK             5
 #define SETUP_MODE_INPUT               6
-#define SETUP_MODE_SHORTCUTS_1         7
-#define SETUP_MODE_SHORTCUTS_2         8
+#define SETUP_MODE_SHORTCUTS           7
+#define SETUP_MODE_SHORTCUTS_1         8
+#define SETUP_MODE_SHORTCUTS_2         9
+#define SETUP_MODE_SHORTCUTS_3         10
+#define SETUP_MODE_SHORTCUTS_4         11
 
 /* sub-screens on the setup screen (generic) */
-#define SETUP_MODE_CHOOSE_ARTWORK      9
-#define SETUP_MODE_CHOOSE_OTHER                10
+#define SETUP_MODE_CHOOSE_ARTWORK      12
+#define SETUP_MODE_CHOOSE_OTHER                13
 
 /* sub-screens on the setup screen (specific) */
-#define SETUP_MODE_CHOOSE_GAME_SPEED   11
-#define SETUP_MODE_CHOOSE_SCREEN_MODE  12
-#define SETUP_MODE_CHOOSE_SCROLL_DELAY 13
-#define SETUP_MODE_CHOOSE_GRAPHICS     14
-#define SETUP_MODE_CHOOSE_SOUNDS       15
-#define SETUP_MODE_CHOOSE_MUSIC                16
+#define SETUP_MODE_CHOOSE_GAME_SPEED   14
+#define SETUP_MODE_CHOOSE_SCREEN_MODE  15
+#define SETUP_MODE_CHOOSE_SCROLL_DELAY 16
+#define SETUP_MODE_CHOOSE_GRAPHICS     17
+#define SETUP_MODE_CHOOSE_SOUNDS       18
+#define SETUP_MODE_CHOOSE_MUSIC                19
 
-#define MAX_SETUP_MODES                        17
+#define MAX_SETUP_MODES                        20
 
 /* for input setup functions */
 #define SETUPINPUT_SCREEN_POS_START    0
@@ -232,7 +235,7 @@ static struct
                                 INFO_MODE_MAIN)
 
 #define DRAW_MODE_SETUP(i)     ((i) >= SETUP_MODE_MAIN &&              \
-                                (i) <= SETUP_MODE_SHORTCUTS_2 ? (i) :  \
+                                (i) <= SETUP_MODE_SHORTCUTS_4 ? (i) :  \
                                 (i) >= SETUP_MODE_CHOOSE_GRAPHICS &&   \
                                 (i) <= SETUP_MODE_CHOOSE_MUSIC ?       \
                                 SETUP_MODE_CHOOSE_ARTWORK :            \
@@ -757,10 +760,12 @@ static void InitializeTitleControls(boolean show_title_initial)
   num_title_screens = 0;
 
 #if 1
+  /* 1st step: initialize title screens for game start (only when starting) */
   if (show_title_initial)
     InitializeTitleControls_CheckTitleInfo(TRUE);
 #endif
 
+  /* 2nd step: initialize title screens for current level set */
   InitializeTitleControls_CheckTitleInfo(FALSE);
 
   /* sort title screens according to sort_priority and title number */
@@ -1261,6 +1266,8 @@ void DrawMainMenuExt(int fade_mask, boolean do_fading)
   /* store valid level series information */
   leveldir_last_valid = leveldir_current;
 
+  init_last = init;                    /* switch to new busy animation */
+
   /* needed if last screen (level choice) changed graphics, sounds or music */
   ReloadCustomArtwork(0);
 
@@ -1278,6 +1285,11 @@ void DrawMainMenuExt(int fade_mask, boolean do_fading)
 #endif
 #endif
 
+#if 1
+  /* needed if newly loaded custom artwork requires a different screen mode */
+  ChangeScreenModeIfNeeded();
+#endif
+
 #if defined(TARGET_SDL)
   SetDrawtoField(DRAW_BACKBUFFER);
 #endif
@@ -4079,6 +4091,13 @@ static void execSetupInput()
   DrawSetupScreen();
 }
 
+static void execSetupShortcuts()
+{
+  setup_mode = SETUP_MODE_SHORTCUTS;
+
+  DrawSetupScreen();
+}
+
 static void execSetupShortcuts1()
 {
   setup_mode = SETUP_MODE_SHORTCUTS_1;
@@ -4093,6 +4112,20 @@ static void execSetupShortcuts2()
   DrawSetupScreen();
 }
 
+static void execSetupShortcuts3()
+{
+  setup_mode = SETUP_MODE_SHORTCUTS_3;
+
+  DrawSetupScreen();
+}
+
+static void execSetupShortcuts4()
+{
+  setup_mode = SETUP_MODE_SHORTCUTS_4;
+
+  DrawSetupScreen();
+}
+
 static void execExitSetup()
 {
   game_status = GAME_MODE_MAIN;
@@ -4114,8 +4147,7 @@ static struct TokenInfo setup_info_main[] =
   { TYPE_ENTER_MENU,   execSetupSound,         "Sound & Music"         },
   { TYPE_ENTER_MENU,   execSetupArtwork,       "Custom Artwork"        },
   { TYPE_ENTER_MENU,   execSetupInput,         "Input Devices"         },
-  { TYPE_ENTER_MENU,   execSetupShortcuts1,    "Key Shortcuts 1"       },
-  { TYPE_ENTER_MENU,   execSetupShortcuts2,    "Key Shortcuts 2"       },
+  { TYPE_ENTER_MENU,   execSetupShortcuts,     "Key Shortcuts"         },
   { TYPE_EMPTY,                NULL,                   ""                      },
   { TYPE_LEAVE_MENU,   execExitSetup,          "Exit"                  },
   { TYPE_LEAVE_MENU,   execSaveAndExitSetup,   "Save and Exit"         },
@@ -4261,6 +4293,18 @@ static struct TokenInfo setup_info_input[] =
   { 0,                 NULL,                   NULL                    }
 };
 
+static struct TokenInfo setup_info_shortcuts[] =
+{
+  { TYPE_ENTER_MENU,   execSetupShortcuts1,    "Various Keys"  },
+  { TYPE_ENTER_MENU,   execSetupShortcuts2,    "Player Focus"  },
+  { TYPE_ENTER_MENU,   execSetupShortcuts3,    "Tape Buttons"  },
+  { TYPE_ENTER_MENU,   execSetupShortcuts4,    "Sound & Music" },
+  { TYPE_EMPTY,                NULL,                   ""                      },
+  { TYPE_LEAVE_MENU,   execSetupMain,          "Back"                  },
+
+  { 0,                 NULL,                   NULL                    }
+};
+
 static struct TokenInfo setup_info_shortcuts_1[] =
 {
   { TYPE_KEYTEXT,      NULL,           "Quick Save Game to Tape:",     },
@@ -4273,7 +4317,7 @@ static struct TokenInfo setup_info_shortcuts_1[] =
   { TYPE_YES_NO,       &setup.ask_on_escape,   "Ask on 'Esc' Key:"     },
   { TYPE_YES_NO, &setup.ask_on_escape_editor,  "Ask on 'Esc' Key (Editor):" },
   { TYPE_EMPTY,                NULL,                   ""                      },
-  { TYPE_LEAVE_MENU,   execSetupMain,          "Back"                  },
+  { TYPE_LEAVE_MENU,   execSetupShortcuts,     "Back"                  },
 
   { 0,                 NULL,                   NULL                    }
 };
@@ -4291,7 +4335,39 @@ static struct TokenInfo setup_info_shortcuts_2[] =
   { TYPE_KEYTEXT,      NULL,           "Set Focus to All Players:",    },
   { TYPE_KEY,          &setup.shortcut.focus_player_all, ""            },
   { TYPE_EMPTY,                NULL,                   ""                      },
-  { TYPE_LEAVE_MENU,   execSetupMain,          "Back"                  },
+  { TYPE_LEAVE_MENU,   execSetupShortcuts,     "Back"                  },
+
+  { 0,                 NULL,                   NULL                    }
+};
+
+static struct TokenInfo setup_info_shortcuts_3[] =
+{
+  { TYPE_KEYTEXT,      NULL,                   "Tape Eject:",          },
+  { TYPE_KEY,          &setup.shortcut.tape_eject, ""                  },
+  { TYPE_KEYTEXT,      NULL,                   "Tape Stop:",           },
+  { TYPE_KEY,          &setup.shortcut.tape_stop, ""                   },
+  { TYPE_KEYTEXT,      NULL,                   "Tape Pause:",          },
+  { TYPE_KEY,          &setup.shortcut.tape_pause, ""                  },
+  { TYPE_KEYTEXT,      NULL,                   "Tape Record:",         },
+  { TYPE_KEY,          &setup.shortcut.tape_record, ""                 },
+  { TYPE_KEYTEXT,      NULL,                   "Tape Play:",           },
+  { TYPE_KEY,          &setup.shortcut.tape_play, ""                   },
+  { TYPE_EMPTY,                NULL,                   ""                      },
+  { TYPE_LEAVE_MENU,   execSetupShortcuts,     "Back"                  },
+
+  { 0,                 NULL,                   NULL                    }
+};
+
+static struct TokenInfo setup_info_shortcuts_4[] =
+{
+  { TYPE_KEYTEXT,      NULL,           "Sound Effects (Normal):",      },
+  { TYPE_KEY,          &setup.shortcut.sound_simple, ""                },
+  { TYPE_KEYTEXT,      NULL,           "Sound Effects (Looping):",     },
+  { TYPE_KEY,          &setup.shortcut.sound_loops, ""                 },
+  { TYPE_KEYTEXT,      NULL,           "Music:",                       },
+  { TYPE_KEY,          &setup.shortcut.sound_music, ""                 },
+  { TYPE_EMPTY,                NULL,                   ""                      },
+  { TYPE_LEAVE_MENU,   execSetupShortcuts,     "Back"                  },
 
   { 0,                 NULL,                   NULL                    }
 };
@@ -4574,6 +4650,11 @@ static void DrawSetupScreen_Generic()
     setup_info = setup_info_artwork;
     title_string = "Custom Artwork";
   }
+  else if (setup_mode == SETUP_MODE_SHORTCUTS)
+  {
+    setup_info = setup_info_shortcuts;
+    title_string = "Setup Shortcuts";
+  }
   else if (setup_mode == SETUP_MODE_SHORTCUTS_1)
   {
     setup_info = setup_info_shortcuts_1;
@@ -4584,6 +4665,16 @@ static void DrawSetupScreen_Generic()
     setup_info = setup_info_shortcuts_2;
     title_string = "Setup Shortcuts";
   }
+  else if (setup_mode == SETUP_MODE_SHORTCUTS_3)
+  {
+    setup_info = setup_info_shortcuts_3;
+    title_string = "Setup Shortcuts";
+  }
+  else if (setup_mode == SETUP_MODE_SHORTCUTS_4)
+  {
+    setup_info = setup_info_shortcuts_4;
+    title_string = "Setup Shortcuts";
+  }
 
   DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, title_string);