}
else if (mode & ANIM_LEVEL_NR) // play frames by level number
{
- int level_pos = level_nr - leveldir_current->first_level;
+ int level_pos = level_nr - gfx.anim_first_level;
frame = level_pos % num_frames;
}
(struct GlobalAnimPartControlInfo *)obj2;
int compare_result;
- if (o1->control_info.draw_order != o2->control_info.draw_order)
- compare_result = o1->control_info.draw_order - o2->control_info.draw_order;
- else
- compare_result = o1->nr - o2->nr;
+ // do not sort animations parts by draw order (as it would be confusing)
+ compare_result = o1->nr - o2->nr;
return compare_result;
}
anim->has_base = TRUE;
}
- // apply special settings for pointer-style animations
- if (part->control_info.class == get_hash_from_key("pointer"))
- {
- // force animation to be on top (must set anim and part control)
- if (anim->control_info.draw_order == 0)
- anim->control_info.draw_order = 1000000;
- if (part->control_info.draw_order == 0)
- part->control_info.draw_order = 1000000;
-
- // force animation to pass-through clicks (must set part control)
- if (part->control_info.style == STYLE_DEFAULT)
- part->control_info.style |= STYLE_PASSTHROUGH;
- }
+ // force pointer-style animations to pass-through clicks
+ if (part->control_info.class == get_hash_from_key("pointer") &&
+ part->control_info.style == STYLE_DEFAULT)
+ part->control_info.style |= STYLE_PASSTHROUGH;
}
if (anim->num_parts > 0 || anim->has_base)
int mode_nr;
int i;
- for (mode_nr = 0; mode_nr < NUM_GAME_MODES; mode_nr++)
+ // check game modes in reverse draw order (to stop when clicked)
+ for (mode_nr = NUM_GAME_MODES - 1; mode_nr >= 0; mode_nr--)
{
struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[mode_nr];
int anim_nr;