rnd-20030503-1-src
authorHolger Schemel <info@artsoft.org>
Fri, 2 May 2003 23:55:30 +0000 (01:55 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:41:42 +0000 (10:41 +0200)
src/conftime.h
src/editor.c
src/game.c
src/libgame/misc.c

index a1c7eb1ebbb97d3cb91b4dace568697a7ca10fd8..d8967827cc7be4defd362ad27361d91e196b42e4 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2003-05-02 20:55]"
+#define COMPILE_DATE_STRING "[2003-05-03 01:52]"
index a726f9139671e95d179840c3a14ce2ae93ef4dfb..4fc9d68fc503bbae10aab70ce277c72a5237243c 100644 (file)
@@ -3336,7 +3336,6 @@ static void DrawCustomChangedArea()
   int area_y = ypos / MINI_TILEY;
   int area_sx = SX + xpos;
   int area_sy = SY + ypos;
-  int i = properties_element - EL_CUSTOM_START;
 
   if (!IS_CUSTOM_ELEMENT(properties_element))
   {
@@ -3346,7 +3345,7 @@ static void DrawCustomChangedArea()
     return;
   }
 
-  ElementContent[0][0][0] = level.custom_element[i].change.successor;
+  ElementContent[0][0][0] = custom_element_change.successor;
 
   DrawElementBorder(area_sx, area_sy, MINI_TILEX, MINI_TILEY);
   DrawMiniElement(area_x, area_y, ElementContent[0][0][0]);
@@ -4756,7 +4755,8 @@ static void HandleDrawingAreas(struct GadgetInfo *gi)
        {
          int i = properties_element - EL_CUSTOM_START;
 
-         level.custom_element[i].change.successor = new_element;
+         custom_element_change.successor = new_element;
+         level.custom_element[i].change = custom_element_change;
        }
        else if (id == GADGET_ID_RANDOM_BACKGROUND)
          random_placement_background_element = new_element;
index 38445772bead7746bf5fc0738298e8611e1ab154..5a63c25ea5fc04c0c8c90389daa48c5023acacb2 100644 (file)
@@ -698,7 +698,7 @@ static void InitGameEngine()
 
     changing_element[element].base_element = element;
     changing_element[element].next_element = change->successor;
-    changing_element[i].change_delay = 0;
+    changing_element[element].change_delay = 0;
 
     if (HAS_CHANGE_EVENT(element, CE_DELAY_FIXED))
       changing_element[element].change_delay +=
@@ -4593,6 +4593,11 @@ static void ChangeElement(int x, int y)
     ResetGfxAnimation(x, y);
     ResetRandomAnimationValue(x, y);
 
+#if 1
+    InitField(x, y, FALSE);
+    if (CAN_MOVE(element))
+      InitMovDir(x, y);
+#endif
     DrawLevelField(x, y);
 
     if (changing_element[element].post_change_function)
@@ -4796,6 +4801,15 @@ void GameActions()
     element = Feld[x][y];
     graphic = el2img(element);
 
+#if 0
+    if (element == -1)
+    {
+      printf("::: %d,%d: %d [%d]\n", x, y, element, FrameCounter);
+
+      element = graphic = 0;
+    }
+#endif
+
     if (graphic_info[graphic].anim_global_sync)
       GfxFrame[x][y] = FrameCounter;
 
@@ -4878,11 +4892,12 @@ void GameActions()
 #endif
     else if (element == EL_EXPLOSION)
       ;        /* drawing of correct explosion animation is handled separately */
-    else if (IS_ANIMATED(graphic))
+    else if (IS_ANIMATED(graphic) && !IS_AUTO_CHANGING(element))
       DrawLevelGraphicAnimationIfNeeded(x, y, graphic);
 
 #if 1
-    if (IS_AUTO_CHANGING(element))
+    /* this may take place after moving, therefore element may have changed */
+    if (IS_AUTO_CHANGING(Feld[x][y]))
       ChangeElement(x, y);
 #endif
 
index 10656e46a208fdcc0cf746b226c3345374eece9f..60aff1cca96ed5772fbe1475ddb86091a56c853e 100644 (file)
@@ -324,7 +324,7 @@ unsigned int init_random_number(int nr, long seed)
 
 unsigned int get_random_number(int nr, unsigned int max)
 {
-  return (random_linux_libc(nr) % max);
+  return (max > 0 ? random_linux_libc(nr) % max : 0);
 }