- phase = (FrameCounter % (delay * frames)) / delay;
-
- if (mode & ANIM_REVERSE)
- phase = -phase;
-
- return phase;
-}
-
-int getNewGraphicAnimationFrame(int graphic, int sync_frame)
-{
- int num_frames = new_graphic_info[graphic].anim_frames;
- int delay = new_graphic_info[graphic].anim_delay;
- int mode = new_graphic_info[graphic].anim_mode;
- int frame = 0;
-
- /* animation synchronized with global frame counter, not move position */
- if (new_graphic_info[graphic].anim_global_sync || sync_frame < 0)
- sync_frame = FrameCounter;
-
- if (mode & ANIM_LOOP) /* normal, looping animation */
- {
- frame = (sync_frame % (delay * num_frames)) / delay;
- }
- else if (mode & ANIM_LINEAR) /* normal, non-looping animation */
- {
- frame = sync_frame / delay;
-
- if (frame > num_frames - 1)
- frame = num_frames - 1;
- }
- else if (mode & ANIM_PINGPONG) /* use border frames once */
- {
- int max_anim_frames = 2 * num_frames - 2;
-
- frame = (sync_frame % (delay * max_anim_frames)) / delay;
- frame = (frame < num_frames ? frame : max_anim_frames - frame);
- }
- else if (mode & ANIM_PINGPONG2) /* use border frames twice */
- {
- int max_anim_frames = 2 * num_frames;
-
- frame = (sync_frame % (delay * max_anim_frames)) / delay;
- frame = (frame < num_frames ? frame : max_anim_frames - frame - 1);
- }
-
- if (mode & ANIM_REVERSE) /* use reverse animation direction */
- frame = num_frames - frame - 1;
-
- return frame;