rnd-20061003-2-src
[rocksndiamonds.git] / src / events.c
index 4cb4b1098cf4986948122441f566b1f508cb25cd..9bd812373723cef124767d39028f4419dcfbbbdc 100644 (file)
@@ -1,7 +1,7 @@
 /***********************************************************
 * Rocks'n'Diamonds -- McDuffin Strikes Back!               *
 *----------------------------------------------------------*
-* (c) 1995-2002 Artsoft Entertainment                      *
+* (c) 1995-2006 Artsoft Entertainment                      *
 *               Holger Schemel                             *
 *               Detmolder Strasse 189                      *
 *               33604 Bielefeld                            *
@@ -24,6 +24,9 @@
 #include "network.h"
 
 
+#define        DEBUG_EVENTS            0
+
+
 static boolean cursor_inside_playfield = FALSE;
 static boolean playfield_cursor_set = FALSE;
 static unsigned long playfield_cursor_delay = 0;
@@ -242,7 +245,11 @@ void ClearEventQueue()
        break;
 
       case EVENT_KEYRELEASE:
+#if 1
+       ClearPlayerAction();
+#else
        key_joystick_mapping = 0;
+#endif
        break;
 
       default:
@@ -315,7 +322,7 @@ void HandleExposeEvent(ExposeEvent *event)
 
 void HandleButtonEvent(ButtonEvent *event)
 {
-#if 0
+#if DEBUG_EVENTS
   printf("::: BUTTON EVENT: button %d %s\n", event->button,
         event->type == EVENT_BUTTONPRESS ? "pressed" : "released");
 #endif
@@ -350,7 +357,7 @@ void HandleKeyEvent(KeyEvent *event)
   Key key = GetEventKey(event, with_modifiers);
   Key keymod = (with_modifiers ? GetEventKey(event, FALSE) : key);
 
-#if 0
+#if DEBUG_EVENTS
   printf("::: KEY EVENT: %d %s\n", GetEventKey(event, TRUE),
         event->type == EVENT_KEYPRESS ? "pressed" : "released");
 #endif
@@ -512,7 +519,7 @@ static void HandleKeysSpecial(Key key)
   cheat_input[cheat_input_len++] = letter;
   cheat_input[cheat_input_len] = '\0';
 
-#if 0
+#if DEBUG_EVENTS
   printf("::: '%s' [%d]\n", cheat_input, cheat_input_len);
 #endif
 
@@ -660,8 +667,18 @@ void HandleKey(Key key, int key_status)
          element_dropped[pnr] = FALSE;
        }
       }
+#if 1
+      else if (tape.recording && tape.pausing)
+      {
+       /* prevent key release events from un-pausing a paused game */
+       if (key_status == KEY_PRESSED &&
+           (key_action & KEY_ACTION))
+         TapeTogglePause(TAPE_TOGGLE_MANUAL);
+      }
+#else
       else if (tape.recording && tape.pausing && (key_action & KEY_ACTION))
        TapeTogglePause(TAPE_TOGGLE_MANUAL);
+#endif
     }
   }
   else
@@ -697,16 +714,16 @@ void HandleKey(Key key, int key_status)
     return;
   }
 
+#if 1
+  if (game_status == GAME_MODE_PLAYING &&
+      local_player->LevelSolved_GameEnd &&
+      (key == KSYM_Return || key == setup.shortcut.toggle_pause))
+#else
   if (game_status == GAME_MODE_PLAYING && AllPlayersGone &&
       (key == KSYM_Return || key == setup.shortcut.toggle_pause))
+#endif
   {
-#if 1
     GameEnd();
-#else
-    CloseDoor(DOOR_CLOSE_1);
-    game_status = GAME_MODE_MAIN;
-    DrawMainMenu();
-#endif
 
     return;
   }
@@ -837,38 +854,6 @@ void HandleKey(Key key, int key_status)
       }
       break;
 
-#if 0
-    case GAME_MODE_SCORES:
-      switch(key)
-      {
-       case KSYM_space:
-       case KSYM_Return:
-         HandleHallOfFame(0, 0, 0, 0, MB_MENU_CHOICE);
-         break;
-
-       case KSYM_Escape:
-#if 1
-         HandleHallOfFame(0, 0, 0, 0, MB_MENU_LEAVE);
-#else
-         game_status = GAME_MODE_MAIN;
-         DrawMainMenu();
-#endif
-         break;
-
-        case KSYM_Page_Up:
-         HandleHallOfFame(0, 0, 0, -1 * SCROLL_PAGE, MB_MENU_MARK);
-         break;
-
-        case KSYM_Page_Down:
-         HandleHallOfFame(0, 0, 0, +1 * SCROLL_PAGE, MB_MENU_MARK);
-         break;
-
-       default:
-         break;
-      }
-      break;
-#endif
-
     case GAME_MODE_EDITOR:
       if (!anyTextGadgetActiveOrJustFinished || key == KSYM_Escape)
        HandleLevelEditorKeyInput(key);
@@ -1080,15 +1065,13 @@ void HandleJoystick()
       if (tape.playing || keyboard)
        newbutton = ((joy & JOY_BUTTON) != 0);
 
-      if (AllPlayersGone && newbutton)
-      {
 #if 1
-       GameEnd();
+      if (local_player->LevelSolved_GameEnd && newbutton)
 #else
-       CloseDoor(DOOR_CLOSE_1);
-       game_status = GAME_MODE_MAIN;
-       DrawMainMenu();
+      if (AllPlayersGone && newbutton)
 #endif
+      {
+       GameEnd();
 
        return;
       }