rnd-20040103-1-src
[rocksndiamonds.git] / src / events.c
index 19c47763e05236c491659fbd15d9b772ecf204f1..366acd1a4fa83215d053491484e12c7006501020 100644 (file)
@@ -487,23 +487,60 @@ static void HandleKeysCheating(Key key)
   printf("::: '%s' [%d]\n", cheat_input, cheat_input_len);
 #endif
 
-#if 1
-  if (is_string_suffix(cheat_input, ":insert solution tape"))
-    InsertSolutionTape();
-#else
-  if (is_string_suffix(cheat_input, ":ist"))
-    InsertSolutionTape();
-#endif
-
+  if (game_status == GAME_MODE_MAIN)
+  {
+    if (is_string_suffix(cheat_input, ":insert-solution-tape") ||
+       is_string_suffix(cheat_input, ":ist"))
+    {
+      InsertSolutionTape();
+    }
+    else if (is_string_suffix(cheat_input, ":reload-graphics") ||
+            is_string_suffix(cheat_input, ":rg"))
+    {
+      ReloadCustomArtwork(1 << ARTWORK_TYPE_GRAPHICS);
+      DrawMainMenu();
+    }
+    else if (is_string_suffix(cheat_input, ":reload-sounds") ||
+            is_string_suffix(cheat_input, ":rs"))
+    {
+      ReloadCustomArtwork(1 << ARTWORK_TYPE_SOUNDS);
+      DrawMainMenu();
+    }
+    else if (is_string_suffix(cheat_input, ":reload-music") ||
+            is_string_suffix(cheat_input, ":rm"))
+    {
+      ReloadCustomArtwork(1 << ARTWORK_TYPE_MUSIC);
+      DrawMainMenu();
+    }
+    else if (is_string_suffix(cheat_input, ":reload-artwork") ||
+            is_string_suffix(cheat_input, ":ra"))
+    {
+      ReloadCustomArtwork(1 << ARTWORK_TYPE_GRAPHICS |
+                         1 << ARTWORK_TYPE_SOUNDS |
+                         1 << ARTWORK_TYPE_MUSIC);
+      DrawMainMenu();
+    }
+    else if (is_string_suffix(cheat_input, ":dump-level") ||
+            is_string_suffix(cheat_input, ":dl"))
+    {
+      DumpLevel(&level);
+    }
+    else if (is_string_suffix(cheat_input, ":dump-tape") ||
+            is_string_suffix(cheat_input, ":dt"))
+    {
+      DumpTape(&tape);
+    }
+  }
+  else if (game_status == GAME_MODE_PLAYING)
+  {
 #ifdef DEBUG
-  else if (is_string_suffix(cheat_input, ":dump tape"))
-    DumpTape(&tape);
-  else if (is_string_suffix(cheat_input, ".q"))
-    for (i = 0; i < MAX_INVENTORY_SIZE; i++)
-      if (local_player->inventory_size < MAX_INVENTORY_SIZE)
-       local_player->inventory_element[local_player->inventory_size++] =
-         EL_DYNAMITE;
+    if (is_string_suffix(cheat_input, ".q"))
+      for (i = 0; i < MAX_INVENTORY_SIZE; i++)
+       if (local_player->inventory_size < MAX_INVENTORY_SIZE)
+         local_player->inventory_element[local_player->inventory_size++] =
+           EL_DYNAMITE;
 #endif
+  }
 }
 
 void HandleKey(Key key, int key_status)
@@ -523,14 +560,14 @@ void HandleKey(Key key, int key_status)
     { &custom_key.up,    DEFAULT_KEY_UP,    JOY_UP       },
     { &custom_key.down,  DEFAULT_KEY_DOWN,  JOY_DOWN     },
     { &custom_key.snap,  DEFAULT_KEY_SNAP,  JOY_BUTTON_1 },
-    { &custom_key.bomb,  DEFAULT_KEY_BOMB,  JOY_BUTTON_2 }
+    { &custom_key.drop,  DEFAULT_KEY_DROP,  JOY_BUTTON_2 }
   };
 
   if (game_status == GAME_MODE_PLAYING)
   {
     /* only needed for single-step tape recording mode */
     static boolean clear_button_2[MAX_PLAYERS] = { FALSE,FALSE,FALSE,FALSE };
-    static boolean bomb_placed[MAX_PLAYERS] = { FALSE,FALSE,FALSE,FALSE };
+    static boolean element_dropped[MAX_PLAYERS] = { FALSE,FALSE,FALSE,FALSE };
     int pnr;
 
     for (pnr = 0; pnr < MAX_PLAYERS; pnr++)
@@ -568,13 +605,13 @@ void HandleKey(Key key, int key_status)
          if (key_action & KEY_MOTION)
          {
            if (stored_player[pnr].action & KEY_BUTTON_2)
-             bomb_placed[pnr] = TRUE;
+             element_dropped[pnr] = TRUE;
          }
        }
        else if (key_status == KEY_RELEASED &&
                 (key_action & KEY_BUTTON_2))
        {
-         if (!bomb_placed[pnr])
+         if (!element_dropped[pnr])
          {
            TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
 
@@ -582,7 +619,7 @@ void HandleKey(Key key, int key_status)
            clear_button_2[pnr] = TRUE;
          }
 
-         bomb_placed[pnr] = FALSE;
+         element_dropped[pnr] = FALSE;
        }
       }
       else if (tape.recording && tape.pausing && (key_action & KEY_ACTION))
@@ -614,16 +651,35 @@ void HandleKey(Key key, int key_status)
   if (key_status == KEY_RELEASED)
     return;
 
-  if ((key == KSYM_Return || key == setup.shortcut.toggle_pause) &&
-      game_status == GAME_MODE_PLAYING && AllPlayersGone)
+  if (game_status == GAME_MODE_PLAYING && AllPlayersGone &&
+      (key == KSYM_Return || key == setup.shortcut.toggle_pause))
   {
     CloseDoor(DOOR_CLOSE_1);
     game_status = GAME_MODE_MAIN;
     DrawMainMenu();
+
+    return;
+  }
+
+  if (game_status == GAME_MODE_MAIN && key == setup.shortcut.toggle_pause)
+  {
+    if (setup.autorecord)
+      TapeStartRecording();
+
+#if defined(PLATFORM_UNIX)
+    if (options.network)
+      SendToServer_StartPlaying();
+    else
+#endif
+    {
+      game_status = GAME_MODE_PLAYING;
+      StopAnimation();
+      InitGame();
+    }
+
     return;
   }
 
-  /* special key shortcuts */
   if (game_status == GAME_MODE_MAIN || game_status == GAME_MODE_PLAYING)
   {
     if (key == setup.shortcut.save_game)