rnd-20100521-1-src
[rocksndiamonds.git] / src / screens.c
index 74690d7fd3ce52c2a6cc59228950b3a3ac41cde4..493e9984018ac836575dd459ebe1346de072a4d8 100644 (file)
 #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      11
-#define SETUP_MODE_CHOOSE_OTHER                12
+#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   13
-#define SETUP_MODE_CHOOSE_SCREEN_MODE  14
-#define SETUP_MODE_CHOOSE_SCROLL_DELAY 15
-#define SETUP_MODE_CHOOSE_GRAPHICS     16
-#define SETUP_MODE_CHOOSE_SOUNDS       17
-#define SETUP_MODE_CHOOSE_MUSIC                18
+#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                        19
+#define MAX_SETUP_MODES                        20
 
 /* for input setup functions */
 #define SETUPINPUT_SCREEN_POS_START    0
@@ -234,7 +235,7 @@ static struct
                                 INFO_MODE_MAIN)
 
 #define DRAW_MODE_SETUP(i)     ((i) >= SETUP_MODE_MAIN &&              \
-                                (i) <= SETUP_MODE_SHORTCUTS_3 ? (i) :  \
+                                (i) <= SETUP_MODE_SHORTCUTS_4 ? (i) :  \
                                 (i) >= SETUP_MODE_CHOOSE_GRAPHICS &&   \
                                 (i) <= SETUP_MODE_CHOOSE_MUSIC ?       \
                                 SETUP_MODE_CHOOSE_ARTWORK :            \
@@ -1024,7 +1025,11 @@ static boolean insideTextPosRect(struct TextPosInfo *rect, int x, int y)
 
 static void drawCursorExt(int xpos, int ypos, boolean active, int graphic)
 {
+#if 1
+  static int cursor_array[MAX_LEV_FIELDY];
+#else
   static int cursor_array[SCR_FIELDY];
+#endif
   int x = mSX + TILEX * xpos;
   int y = mSY + TILEY * (MENU_SCREEN_START_YPOS + ypos);
 
@@ -1185,7 +1190,7 @@ void DrawTitleScreenMessage(int nr, boolean initial)
   ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE);
 
   DrawTextFile(ALIGNED_TEXT_XPOS(tmi), ALIGNED_TEXT_YPOS(tmi),
-              filename, tmi->font, tmi->chars, -1, tmi->lines, -1,
+              filename, tmi->font, tmi->chars, -1, tmi->lines, 0, -1,
               tmi->autowrap, tmi->centered, tmi->parse_comments);
 
   game_status = last_game_status;      /* restore current game status */
@@ -1265,6 +1270,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);
 
@@ -1282,6 +1289,11 @@ void DrawMainMenuExt(int fade_mask, boolean do_fading)
 #endif
 #endif
 
+#if 1
+  /* needed if different viewport properties defined for menues */
+  ChangeViewportPropertiesIfNeeded();
+#endif
+
 #if defined(TARGET_SDL)
   SetDrawtoField(DRAW_BACKBUFFER);
 #endif
@@ -1769,6 +1781,11 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
 
        FadeSetEnterScreen();
 
+#if 0
+       /* needed if different viewport properties defined for editor */
+       ChangeViewportPropertiesIfNeeded();
+#endif
+
        DrawLevelEd();
       }
       else if (pos == MAIN_CONTROL_INFO)
@@ -2239,7 +2256,7 @@ void DrawInfoScreen_HelpText(int element, int action, int direction, int ypos)
     sy += getFontHeight(font_nr) / 2;
 
   DrawTextBuffer(sx, sy + ypos * ystep, text, font_nr,
-                max_chars_per_line, -1, max_lines_per_text, -1,
+                max_chars_per_line, -1, max_lines_per_text, 0, -1,
                 TRUE, FALSE, FALSE);
 }
 
@@ -3043,7 +3060,7 @@ void DrawInfoScreen_LevelSet()
 
   if (filename != NULL)
     DrawTextFile(mSX + ALIGNED_TEXT_XPOS(tmi), mSY + ALIGNED_TEXT_YPOS(tmi),
-                filename, tmi->font, tmi->chars, -1, tmi->lines, -1,
+                filename, tmi->font, tmi->chars, -1, tmi->lines, 0, -1,
                 tmi->autowrap, tmi->centered, tmi->parse_comments);
   else
     DrawTextCentered(mSY + ALIGNED_TEXT_YPOS(tmi), FONT_TEXT_2,
@@ -4111,6 +4128,13 @@ static void execSetupShortcuts3()
   DrawSetupScreen();
 }
 
+static void execSetupShortcuts4()
+{
+  setup_mode = SETUP_MODE_SHORTCUTS_4;
+
+  DrawSetupScreen();
+}
+
 static void execExitSetup()
 {
   game_status = GAME_MODE_MAIN;
@@ -4283,6 +4307,7 @@ 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"                  },
 
@@ -4326,15 +4351,15 @@ static struct TokenInfo setup_info_shortcuts_2[] =
 
 static struct TokenInfo setup_info_shortcuts_3[] =
 {
-  { TYPE_KEYTEXT,      NULL,           "Tape Eject:",                  },
+  { TYPE_KEYTEXT,      NULL,                   "Tape Eject:",          },
   { TYPE_KEY,          &setup.shortcut.tape_eject, ""                  },
-  { TYPE_KEYTEXT,      NULL,           "Tape Stop:",                   },
+  { TYPE_KEYTEXT,      NULL,                   "Tape Stop:",           },
   { TYPE_KEY,          &setup.shortcut.tape_stop, ""                   },
-  { TYPE_KEYTEXT,      NULL,           "Tape Pause:",                  },
+  { TYPE_KEYTEXT,      NULL,                   "Tape Pause:",          },
   { TYPE_KEY,          &setup.shortcut.tape_pause, ""                  },
-  { TYPE_KEYTEXT,      NULL,           "Tape Record:",                 },
+  { TYPE_KEYTEXT,      NULL,                   "Tape Record:",         },
   { TYPE_KEY,          &setup.shortcut.tape_record, ""                 },
-  { TYPE_KEYTEXT,      NULL,           "Tape Play:",                   },
+  { TYPE_KEYTEXT,      NULL,                   "Tape Play:",           },
   { TYPE_KEY,          &setup.shortcut.tape_play, ""                   },
   { TYPE_EMPTY,                NULL,                   ""                      },
   { TYPE_LEAVE_MENU,   execSetupShortcuts,     "Back"                  },
@@ -4342,6 +4367,20 @@ static struct TokenInfo setup_info_shortcuts_3[] =
   { 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                    }
+};
+
 static Key getSetupKey()
 {
   Key key = KSYM_UNDEFINED;
@@ -4640,6 +4679,11 @@ static void DrawSetupScreen_Generic()
     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);
 
@@ -5638,13 +5682,21 @@ static struct
 {
   {
     IMG_MENU_BUTTON_UP, IMG_MENU_BUTTON_UP_ACTIVE,
+#if 1
+    -1, -1,    /* these values are not constant, but can change at runtime */
+#else
     SC_SCROLL_UP_XPOS, SC_SCROLL_UP_YPOS,
+#endif
     SCREEN_CTRL_ID_SCROLL_UP,
     "scroll up"
   },
   {
     IMG_MENU_BUTTON_DOWN, IMG_MENU_BUTTON_DOWN_ACTIVE,
+#if 1
+    -1, -1,    /* these values are not constant, but can change at runtime */
+#else
     SC_SCROLL_DOWN_XPOS, SC_SCROLL_DOWN_YPOS,
+#endif
     SCREEN_CTRL_ID_SCROLL_DOWN,
     "scroll down"
   }
@@ -5670,8 +5722,13 @@ static struct
 #else
     IMG_MENU_SCROLLBAR, IMG_MENU_SCROLLBAR_ACTIVE,
 #endif
+#if 1
+    -1, -1,    /* these values are not constant, but can change at runtime */
+    -1, -1,    /* these values are not constant, but can change at runtime */
+#else
     SC_SCROLL_VERTICAL_XPOS, SC_SCROLL_VERTICAL_YPOS,
     SC_SCROLL_VERTICAL_XSIZE, SC_SCROLL_VERTICAL_YSIZE,
+#endif
     GD_TYPE_SCROLLBAR_VERTICAL,
     SCREEN_CTRL_ID_SCROLL_VERTICAL,
     "scroll level series vertically"
@@ -5737,6 +5794,12 @@ static void CreateScreenScrollbuttons()
   unsigned long event_mask;
   int i;
 
+  /* these values are not constant, but can change at runtime */
+  scrollbutton_info[0].x = SC_SCROLL_UP_XPOS;
+  scrollbutton_info[0].y = SC_SCROLL_UP_YPOS;
+  scrollbutton_info[1].x = SC_SCROLL_DOWN_XPOS;
+  scrollbutton_info[1].y = SC_SCROLL_DOWN_YPOS;
+
   for (i = 0; i < NUM_SCREEN_SCROLLBUTTONS; i++)
   {
     Bitmap *gd_bitmap_unpressed, *gd_bitmap_pressed;
@@ -5792,6 +5855,12 @@ static void CreateScreenScrollbars()
 {
   int i;
 
+  /* these values are not constant, but can change at runtime */
+  scrollbar_info[0].x = SC_SCROLL_VERTICAL_XPOS;
+  scrollbar_info[0].y = SC_SCROLL_VERTICAL_YPOS;
+  scrollbar_info[0].width  = SC_SCROLL_VERTICAL_XSIZE;
+  scrollbar_info[0].height = SC_SCROLL_VERTICAL_YSIZE;
+
   for (i = 0; i < NUM_SCREEN_SCROLLBARS; i++)
   {
     Bitmap *gd_bitmap_unpressed, *gd_bitmap_pressed;