fixed bug with extremely slow envelopes when using "request.step_delay: 0"
authorHolger Schemel <info@artsoft.org>
Fri, 23 Mar 2018 20:19:12 +0000 (21:19 +0100)
committerHolger Schemel <info@artsoft.org>
Fri, 23 Mar 2018 20:24:59 +0000 (21:24 +0100)
Using a step delay of zero for envelope style requests (and also in-game
envelopes) resulted in extremely slow envelope animations (instead of very
fast animations, as could be expected), because "SkipUntilDelayReached()"
won't skip any frames in this case (which should probably be corrected,
too). This is fixed by never using a step delay value less than "1".

src/tools.c

index 8718bbe1055f1771ee7f869bfeafa1c72aa3756b..21f062b41cdc21fb2bfc3c257f08ffbefc87d9f7 100644 (file)
@@ -2511,7 +2511,7 @@ void AnimateEnvelope(int envelope_nr, int anim_mode, int action)
   boolean no_delay = (tape.warp_forward);
   unsigned int anim_delay = 0;
   int frame_delay_value = (ffwd_delay ? FfwdFrameDelay : GameFrameDelay);
   boolean no_delay = (tape.warp_forward);
   unsigned int anim_delay = 0;
   int frame_delay_value = (ffwd_delay ? FfwdFrameDelay : GameFrameDelay);
-  int anim_delay_value = (no_delay ? 0 : frame_delay_value) / 2;
+  int anim_delay_value = MAX(1, (no_delay ? 0 : frame_delay_value) / 2);
   int font_nr = FONT_ENVELOPE_1 + envelope_nr;
   int font_width = getFontWidth(font_nr);
   int font_height = getFontHeight(font_nr);
   int font_nr = FONT_ENVELOPE_1 + envelope_nr;
   int font_width = getFontWidth(font_nr);
   int font_height = getFontHeight(font_nr);
@@ -2768,7 +2768,7 @@ void AnimateEnvelopeRequest(int anim_mode, int action)
   boolean ffwd_delay = (tape.playing && tape.fast_forward);
   boolean no_delay = (tape.warp_forward);
   int delay_value = (ffwd_delay ? delay_value_fast : delay_value_normal);
   boolean ffwd_delay = (tape.playing && tape.fast_forward);
   boolean no_delay = (tape.warp_forward);
   int delay_value = (ffwd_delay ? delay_value_fast : delay_value_normal);
-  int anim_delay_value = (no_delay ? 0 : delay_value + 500 * 0) / 2;
+  int anim_delay_value = MAX(1, (no_delay ? 0 : delay_value + 500 * 0) / 2);
   unsigned int anim_delay = 0;
 
   int tile_size = MAX(request.step_offset, 1);
   unsigned int anim_delay = 0;
 
   int tile_size = MAX(request.step_offset, 1);