rnd-20061003-2-src
authorHolger Schemel <info@artsoft.org>
Tue, 3 Oct 2006 13:24:13 +0000 (15:24 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:53:13 +0000 (10:53 +0200)
* fixed bug with un-pausing a paused game by releasing still pressed key
* fixed bug with not redrawing screen when toggling to/from fullscreen
  mode while fast reloading tape (without redrawing playfield contents)
* fixed bug with quick-saving tape snapshot despite answering with "no"

ChangeLog
src/conftime.h
src/events.c
src/files.c
src/files.h
src/game.c
src/libgame/system.c
src/tape.c
src/tools.c

index 668f0616c3872311be8ba64ce8098f8ee1dae02d..1daa7ca895f4d898e1192303eb78019fcd4f83e1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2006-10-03
        * fixed bug with not unmapping main menu screen gadgets on other screens
+       * fixed bug with un-pausing a paused game by releasing still pressed key
+       * fixed bug with not redrawing screen when toggling to/from fullscreen
+         mode while fast reloading tape (without redrawing playfield contents)
+       * fixed bug with quick-saving tape snapshot despite answering with "no"
 
 2006-08-30
        * version number set to 3.2.3
index 6ff19d0f27b8b633329061fcb932444fe6690ab8..5a7ed31daa55f8cf6effbda439ef305dc37a54c5 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2006-10-03 09:59]"
+#define COMPILE_DATE_STRING "[2006-10-03 15:21]"
index 65b06803a9e62f2f7693939f74a6df4ae9f605e6..9bd812373723cef124767d39028f4419dcfbbbdc 100644 (file)
@@ -667,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
index deff36d69d6824171a8b05abd1aa573c420f5100..1287d1ecd2d1fe041f9edf408ffaa75944c49e17 100644 (file)
@@ -5276,6 +5276,25 @@ void SaveLevelTemplate()
   SaveLevelFromFilename(&level, filename);
 }
 
+boolean SaveLevelChecked(int nr)
+{
+  char *filename = getDefaultLevelFilename(nr);
+  boolean new_level = !fileExists(filename);
+  boolean level_saved = FALSE;
+
+  if (new_level || Request("Save this level and kill the old ?", REQ_ASK))
+  {
+    SaveLevel(nr);
+
+    if (new_level)
+      Request("Level saved !", REQ_CONFIRM);
+
+    level_saved = TRUE;
+  }
+
+  return level_saved;
+}
+
 void DumpLevel(struct LevelInfo *level)
 {
   if (level->no_valid_file)
@@ -5704,7 +5723,9 @@ void SaveTape(int nr)
 {
   char *filename = getTapeFilename(nr);
   FILE *file;
+#if 0
   boolean new_tape = TRUE;
+#endif
   int num_participating_players = 0;
   int info_chunk_size;
   int body_chunk_size;
@@ -5712,6 +5733,7 @@ void SaveTape(int nr)
 
   InitTapeDirectory(leveldir_current->subdir);
 
+#if 0
   /* if a tape still exists, ask to overwrite it */
   if (fileExists(filename))
   {
@@ -5719,6 +5741,7 @@ void SaveTape(int nr)
     if (!Request("Replace old tape ?", REQ_ASK))
       return;
   }
+#endif
 
   if (!(file = fopen(filename, MODE_WRITE)))
   {
@@ -5758,8 +5781,29 @@ void SaveTape(int nr)
 
   tape.changed = FALSE;
 
+#if 0
   if (new_tape)
     Request("Tape saved !", REQ_CONFIRM);
+#endif
+}
+
+boolean SaveTapeChecked(int nr)
+{
+  char *filename = getTapeFilename(nr);
+  boolean new_tape = !fileExists(filename);
+  boolean tape_saved = FALSE;
+
+  if (new_tape || Request("Replace old tape ?", REQ_ASK))
+  {
+    SaveTape(nr);
+
+    if (new_tape)
+      Request("Tape saved !", REQ_CONFIRM);
+
+    tape_saved = TRUE;
+  }
+
+  return tape_saved;
 }
 
 void DumpTape(struct TapeInfo *tape)
index a3781bed2ea7fb2cc06b493bdf97c74366764aa9..41939ac2aa3c6a7ec75607a46f4ecef4d0564adb 100644 (file)
@@ -39,6 +39,7 @@ void LoadLevelTemplate(int);
 void SaveLevel(int);
 void SaveLevelTemplate();
 void DumpLevel(struct LevelInfo *);
+boolean SaveLevelChecked(int);
 
 void CopyNativeLevel_RND_to_Native(struct LevelInfo *);
 void CopyNativeLevel_Native_to_RND(struct LevelInfo *);
@@ -48,6 +49,7 @@ void LoadTape(int);
 void LoadSolutionTape(int);
 void SaveTape(int);
 void DumpTape(struct TapeInfo *);
+boolean SaveTapeChecked(int);
 
 void LoadScore(int);
 void SaveScore(int);
index a6e1449d700868daf5494ad911fe74cca9cdd6ba..00dff5ed483e1e6b23e21934daf10c7915072d99 100644 (file)
@@ -2800,7 +2800,11 @@ void GameEnd()
     TapeStop();
 #endif
 
+#if 1
+    SaveTapeChecked(tape.level_nr);    /* ask to save tape */
+#else
     SaveTape(tape.level_nr);           /* ask to save tape */
+#endif
   }
 
   if (level_editor_test_game)
index f3696277749fe3c6a987c18e77118d1306a0247d..6e3eaaba10804489e8f082a5e8303dcffc87a580 100644 (file)
@@ -424,13 +424,16 @@ inline static boolean CheckDrawingArea(int x, int y, int width, int height,
   if (draw_mask & REDRAW_ALL)
     return TRUE;
 
-  if ((draw_mask & REDRAW_FIELD) && x < gfx.real_sx + gfx.full_sxsize)
+  if ((draw_mask & REDRAW_FIELD) &&
+      x >= gfx.real_sx && x < gfx.real_sx + gfx.full_sxsize)
     return TRUE;
 
-  if ((draw_mask & REDRAW_DOOR_1) && x >= gfx.dx && y < gfx.dy + gfx.dysize)
+  if ((draw_mask & REDRAW_DOOR_1) &&
+      x >= gfx.dx && y < gfx.dy + gfx.dysize)
     return TRUE;
 
-  if ((draw_mask & REDRAW_DOOR_2) && x >= gfx.dx && y >= gfx.vy)
+  if ((draw_mask & REDRAW_DOOR_2) &&
+      x >= gfx.dx && y >= gfx.vy)
     return TRUE;
 
   return FALSE;
index eb03967adfc04a84e5e34e5c2bd0999781632911..0bdff1530a11888b825a7bf4d13be7b484168703 100644 (file)
@@ -919,11 +919,14 @@ void TapeQuickSave()
     TapeHaltRecording();       /* prepare tape for saving on-the-fly */
 
   if (TAPE_IS_EMPTY(tape))
+  {
     Request("No tape that can be saved !", REQ_CONFIRM);
-  else
-    SaveTape(tape.level_nr);
 
-  SaveEngineSnapshot();
+    return;
+  }
+
+  if (SaveTapeChecked(tape.level_nr))
+    SaveEngineSnapshot();
 }
 
 void TapeQuickLoad()
@@ -954,6 +957,8 @@ void TapeQuickLoad()
 
     LoadEngineSnapshot();
 
+    DrawCompleteVideoDisplay();
+
     tape.playing = TRUE;
     tape.pausing = TRUE;
 
@@ -1296,18 +1301,22 @@ static void HandleTapeButtons(struct GadgetInfo *gi)
   {
     case TAPE_CTRL_ID_EJECT:
       TapeStop();
+
       if (TAPE_IS_EMPTY(tape))
       {
        LoadTape(level_nr);
+
        if (TAPE_IS_EMPTY(tape))
          Request("No tape for this level !", REQ_CONFIRM);
       }
       else
       {
        if (tape.changed)
-         SaveTape(tape.level_nr);
+         SaveTapeChecked(tape.level_nr);
+
        TapeErase();
       }
+
       DrawCompleteVideoDisplay();
       break;
 
@@ -1325,6 +1334,7 @@ static void HandleTapeButtons(struct GadgetInfo *gi)
       }
       else if (tape.recording)
        TapeSingleStep();
+
       break;
 
     case TAPE_CTRL_ID_STOP:
index 7a2fd3e29793c249ffe6c43a5c4fc5dd527edb38..7da6d255c83ac159006baf1ae5849bd83f7effa4 100644 (file)
@@ -6026,6 +6026,11 @@ void ToggleFullscreenIfNeeded()
 
     FreeBitmap(tmp_backbuffer);
 
+#if 1
+    /* update visible window/screen */
+    BlitBitmap(backbuffer, window, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
+#else
     redraw_mask = REDRAW_ALL;
+#endif
   }
 }