rnd-20020803-1-src
[rocksndiamonds.git] / src / events.c
index f67bc13ecac7dc8bb5d3aed4e151383cea5b7439..fc6140fc84a0c959d5eaaeb5966acdd1c3fa2d95 100644 (file)
@@ -1,7 +1,7 @@
 /***********************************************************
 * Rocks'n'Diamonds -- McDuffin Strikes Back!               *
 *----------------------------------------------------------*
-* (c) 1995-2001 Artsoft Entertainment                      *
+* (c) 1995-2002 Artsoft Entertainment                      *
 *               Holger Schemel                             *
 *               Detmolder Strasse 189                      *
 *               33604 Bielefeld                            *
@@ -423,6 +423,9 @@ void HandleKey(Key key, int key_status)
 
   if (game_status == 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 };
     int pnr;
 
     for (pnr=0; pnr<MAX_PLAYERS; pnr++)
@@ -439,10 +442,46 @@ void HandleKey(Key key, int key_status)
        if (key == *key_info[i].key_custom)
          key_action |= key_info[i].action;
 
+      if (tape.single_step && clear_button_2[pnr])
+      {
+       stored_player[pnr].action &= ~KEY_BUTTON_2;
+       clear_button_2[pnr] = FALSE;
+      }
+
       if (key_status == KEY_PRESSED)
        stored_player[pnr].action |= key_action;
       else
        stored_player[pnr].action &= ~key_action;
+
+      if (tape.single_step && tape.recording && tape.pausing)
+      {
+       if (key_status == KEY_PRESSED &&
+           (key_action & (KEY_MOTION | KEY_BUTTON_1)))
+       {
+         TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
+
+         if (key_action & KEY_MOTION)
+         {
+           if (stored_player[pnr].action & KEY_BUTTON_2)
+             bomb_placed[pnr] = TRUE;
+         }
+       }
+       else if (key_status == KEY_RELEASED &&
+                (key_action & KEY_BUTTON_2))
+       {
+         if (!bomb_placed[pnr])
+         {
+           TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
+
+           stored_player[pnr].action |= KEY_BUTTON_2;
+           clear_button_2[pnr] = TRUE;
+         }
+
+         bomb_placed[pnr] = FALSE;
+       }
+      }
+      else if (tape.recording && tape.pausing && (key_action & KEY_ACTION))
+       TapeTogglePause(TAPE_TOGGLE_MANUAL);
     }
   }
   else
@@ -470,7 +509,7 @@ void HandleKey(Key key, int key_status)
   if (key_status == KEY_RELEASED)
     return;
 
-  if ((key == KSYM_Return || key == KSYM_space) &&
+  if ((key == KSYM_Return || key == setup.shortcut.toggle_pause) &&
       game_status == PLAYING && AllPlayersGone)
   {
     CloseDoor(DOOR_CLOSE_1);
@@ -492,13 +531,15 @@ void HandleKey(Key key, int key_status)
     return;
   }
 
-  /* special shortcuts for quick game tape saving and loading */
+  /* special key shortcuts */
   if (game_status == MAINMENU || game_status == PLAYING)
   {
     if (key == setup.shortcut.save_game)
       TapeQuickSave();
     else if (key == setup.shortcut.load_game)
       TapeQuickLoad();
+    else if (key == setup.shortcut.toggle_pause)
+      TapeTogglePause(TAPE_TOGGLE_MANUAL);
   }
 
 
@@ -525,7 +566,6 @@ void HandleKey(Key key, int key_status)
       switch(key)
       {
        case KSYM_Return:
-       case KSYM_space:
          if (game_status == MAINMENU)
            HandleMainMenu(0,0, 0,0, MB_MENU_CHOICE);
           else if (game_status == CHOOSELEVEL)
@@ -544,11 +584,15 @@ void HandleKey(Key key, int key_status)
         case KSYM_Page_Up:
           if (game_status == CHOOSELEVEL)
             HandleChooseLevel(0,0, 0,-SCR_FIELDY, MB_MENU_MARK);
+         else if (game_status == SETUP)
+           HandleSetupScreen(0,0, 0,-SCR_FIELDY, MB_MENU_MARK);
          break;
 
         case KSYM_Page_Down:
           if (game_status == CHOOSELEVEL)
             HandleChooseLevel(0,0, 0,SCR_FIELDY, MB_MENU_MARK);
+         else if (game_status == SETUP)
+           HandleSetupScreen(0,0, 0,SCR_FIELDY, MB_MENU_MARK);
          break;
 
 #ifdef DEBUG
@@ -570,7 +614,6 @@ void HandleKey(Key key, int key_status)
       switch(key)
       {
        case KSYM_Return:
-       case KSYM_space:
          game_status = MAINMENU;
          DrawMainMenu();
          BackToFront();
@@ -811,11 +854,11 @@ void HandleJoystick()
          !DelayReached(&joystickmove_delay, GADGET_FRAME_DELAY))
        newbutton = dx = dy = 0;
 
-      if (game_status==MAINMENU)
+      if (game_status == MAINMENU)
        HandleMainMenu(0,0,dx,dy,newbutton ? MB_MENU_CHOICE : MB_MENU_MARK);
-      else if (game_status==CHOOSELEVEL)
+      else if (game_status == CHOOSELEVEL)
         HandleChooseLevel(0,0,dx,dy,newbutton ? MB_MENU_CHOICE : MB_MENU_MARK);
-      else if (game_status==SETUP)
+      else if (game_status == SETUP)
        HandleSetupScreen(0,0,dx,dy,newbutton ? MB_MENU_CHOICE : MB_MENU_MARK);
       break;
     }