+ int nr;
+ int anim_nr;
+ int mode_nr;
+
+ int graphic;
+ struct GraphicInfo graphic_info;
+ struct GraphicInfo control_info;
+
+ int x, y;
+ int step_xoffset, step_yoffset;
+
+ unsigned int initial_anim_sync_frame;
+ unsigned int step_frames, step_frames_value;
+ unsigned int step_delay, step_delay_value;
+
+ unsigned int init_delay, init_delay_value;
+ unsigned int anim_delay, anim_delay_value;
+ unsigned int post_delay, post_delay_value;
+
+ int state;
+};
+
+struct GlobalAnimMainControlInfo
+{
+ struct GlobalAnimPartControlInfo base;
+ struct GlobalAnimPartControlInfo part[NUM_GLOBAL_ANIM_PARTS_AND_TOONS];
+
+ int nr;
+ int mode_nr;
+
+ struct GraphicInfo control_info;
+
+ int num_parts;
+ int part_counter;
+ int active_part_nr;
+
+ boolean has_base;
+
+ unsigned int init_delay, init_delay_value;
+
+ int state;
+};
+
+struct GlobalAnimControlInfo
+{
+ struct GlobalAnimMainControlInfo anim[NUM_GLOBAL_ANIMS_AND_TOONS];
+
+ int nr;
+ int num_anims;
+};
+
+
+/* forward declaration for internal use */
+static void DoAnimationExt(void);
+
+static struct GlobalAnimControlInfo global_anim_ctrl[NUM_SPECIAL_GFX_ARGS];
+static struct ToonInfo toons[MAX_NUM_TOONS];
+
+static unsigned int anim_sync_frame = 0;
+static unsigned int anim_sync_frame_delay = 0;
+static unsigned int anim_sync_frame_delay_value = GAME_FRAME_DELAY;
+
+static boolean do_animations = FALSE;
+
+
+static int getGlobalAnimationPart(struct GlobalAnimMainControlInfo *anim)
+{
+ struct GraphicInfo *c = &anim->control_info;
+ int last_anim_random_frame = gfx.anim_random_frame;
+ int part_nr;
+
+ gfx.anim_random_frame = -1; // (use simple, ad-hoc random numbers)
+
+ part_nr = getAnimationFrame(anim->num_parts, 1,
+ c->anim_mode, c->anim_start_frame,
+ anim->part_counter);
+
+ gfx.anim_random_frame = last_anim_random_frame;
+
+ return part_nr;
+}
+
+static void PrepareBackbuffer()
+{
+ if (game_status != GAME_MODE_PLAYING)
+ return;
+
+ BlitScreenToBitmap(backbuffer);
+}
+
+boolean ToonNeedsRedraw()
+{
+ return TRUE;
+}
+
+void InitToons()
+{
+ int num_toons = MAX_NUM_TOONS;
+ int i;
+
+ if (global.num_toons >= 0 && global.num_toons < MAX_NUM_TOONS)
+ num_toons = global.num_toons;
+
+ for (i = 0; i < num_toons; i++)