rnd-20060107-2-src
authorHolger Schemel <info@artsoft.org>
Sat, 7 Jan 2006 03:07:19 +0000 (04:07 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:50:18 +0000 (10:50 +0200)
* uploaded fixed pre-release version 3.2.0-6 binary and source code

ChangeLog
src/conftime.h
src/editor.c
src/game.c
src/libgame/gadgets.c

index f1ac350bd2f50631496058b591105d3a31a00e17..921fa6ad4f4cf63a838b19dbf74b4c205cd20a34 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,12 @@
+2006-01-07
+       * uploaded fixed pre-release version 3.2.0-6 binary and source code
+
 2006-01-07
        * fixed bug when using "CE can leave behind <trigger element>"
        * added new change condition "(after/when) creation of <element>"
        * added new change condition "(after/when) digging <element>"
+       * fixed bug accessing invalid gadget that caused crashes under Windows
+       * deactivated new possibility for multiple CE changes per frame
 
 2006-01-04
        * uploaded pre-release (test) version 3.2.0-6 binary and source code
index aa297a3664bdc1f7d67615aa2d7b27cdeb3b56ef..96bddd7f85e1a54a59c6b16b3ec64fd26be66692 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2006-01-07 01:18]"
+#define COMPILE_DATE_STRING "[2006-01-07 03:59]"
index fe1c0301fa921dfe7f2371c3d95533a8a39fd1b2..1f75066ab6f627b435b96cea1b5261470c4473cf 100644 (file)
@@ -4603,9 +4603,8 @@ static void ReinitializeElementList()
     }
   }
 
-  /* this function is also called before editor gadgets are initialized */
-  if (level_editor_gadget[GADGET_ID_SCROLL_LIST_VERTICAL] != NULL)
-    AdjustElementListScrollbar();
+  /* (this function is also called before editor gadgets are initialized!) */
+  AdjustElementListScrollbar();
 }
 
 void PrintEditorElementList()
@@ -5754,7 +5753,11 @@ void FreeLevelEditorGadgets()
   int i;
 
   for (i = 0; i < NUM_EDITOR_GADGETS; i++)
+  {
     FreeGadget(level_editor_gadget[i]);
+
+    level_editor_gadget[i] = NULL;
+  }
 }
 
 static void MapCounterButtons(int id)
index 40e92ffee47d8e0683f21abf1b84bb740186d50a..1f4d8a01a378252d1d5e1b75f6d4edd756cc2668 100644 (file)
@@ -607,10 +607,10 @@ static int playfield_scan_delta_x = 1;
 static int playfield_scan_delta_y = 1;
 
 #define SCAN_PLAYFIELD(x, y)   for ((y) = playfield_scan_start_y;      \
-                                    (y) >= 0 && (y) <= lev_fieldy;     \
+                                    (y) >= 0 && (y) <= lev_fieldy - 1; \
                                     (y) += playfield_scan_delta_y)     \
                                for ((x) = playfield_scan_start_x;      \
-                                    (x) >= 0 && (x) <= lev_fieldx;     \
+                                    (x) >= 0 && (x) <= lev_fieldx - 1; \
                                     (x) += playfield_scan_delta_x)     \
 
 static void InitPlayfieldScanModeVars()
index 2f980f3c1cf0065ec44b37312b6e6de90b5e0f05..1b368c569f703cb37f0245f1e09cf6d72b53bd12 100644 (file)
@@ -163,12 +163,16 @@ static void default_callback_action(void *ptr)
 
 static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct)
 {
+  struct GadgetDesign *gd;
   int state = (pressed ? GD_BUTTON_PRESSED : GD_BUTTON_UNPRESSED);
-  struct GadgetDesign *gd = (!gi->active ? &gi->alt_design[state] :
-                            gi->checked ? &gi->alt_design[state] :
-                            &gi->design[state]);
   boolean redraw_selectbox = FALSE;
 
+  if (gi == NULL)
+    return;
+
+  gd = (!gi->active ? &gi->alt_design[state] :
+       gi->checked ? &gi->alt_design[state] : &gi->design[state]);
+
   switch (gi->type)
   {
     case GD_TYPE_NORMAL_BUTTON:
@@ -686,6 +690,9 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap)
 {
   int tag = first_tag;
 
+  if (gi == NULL)
+    return;
+
   while (tag != GDI_END)
   {
     switch(tag)
@@ -1149,6 +1156,9 @@ void ModifyGadget(struct GadgetInfo *gi, int first_tag, ...)
 
 void RedrawGadget(struct GadgetInfo *gi)
 {
+  if (gi == NULL)
+    return;
+
   if (gi->mapped)
     DrawGadget(gi, gi->state, gi->direct_draw);
 }