}
}
-static void InitGlobalAnim_Triggered_ByCustomElement(int nr, int page)
+static void InitGlobalAnim_Triggered_ByCustomElement(int nr, int page,
+ int x, int y)
{
struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[GAME_MODE_PLAYING];
if (isClickablePart(part2, mask))
{
+ struct GraphicInfo *c = &part2->control_info;
+
+ if (c->position == POS_CE)
+ {
+ part2->x = c->x + x;
+ part2->y = c->y + y;
+ }
+
part2->triggered = TRUE;
#if 0
return anim_sync_frame;
}
-void HandleGlobalAnimEventByElementChange(int element, int page)
+void HandleGlobalAnimEventByElementChange(int element, int page, int x, int y)
{
if (!IS_CUSTOM_ELEMENT(element))
return;
// custom element stored as 0 to 255, change page stored as 1 to 32
- InitGlobalAnim_Triggered_ByCustomElement(element - EL_CUSTOM_START, page + 1);
+ InitGlobalAnim_Triggered_ByCustomElement(element - EL_CUSTOM_START, page + 1,
+ x, y);
}
void RestartGlobalAnimsByStatus(int);
boolean HandleGlobalAnimClicks(int, int, int, boolean);
-void HandleGlobalAnimEventByElementChange(int, int);
+void HandleGlobalAnimEventByElementChange(int, int, int, int);
int getGlobalAnimSyncFrame(void);
strEqual(value, "lower") ? POS_LOWER :
strEqual(value, "bottom") ? POS_BOTTOM :
strEqual(value, "any") ? POS_ANY :
+ strEqual(value, "ce") ? POS_CE :
strEqual(value, "last") ? POS_LAST : POS_UNDEFINED);
}
else if (strEqual(suffix, ".align"))
ChangeCount[x][y]++; // count number of changes in the same frame
if (ei->has_anim_event)
- HandleGlobalAnimEventByElementChange(element, page);
+ {
+ int fx = getFieldbufferOffsetX_RND(ScreenMovDir, ScreenGfxPos);
+ int fy = getFieldbufferOffsetY_RND(ScreenMovDir, ScreenGfxPos);
+ int sx = FX + SCREENX(x) * TILEX_VAR;
+ int sy = FY + SCREENY(y) * TILEY_VAR;
+
+ HandleGlobalAnimEventByElementChange(element, page, sx - fx, sy - fy);
+ }
if (change->explode)
{
#define POS_LOWER 5
#define POS_BOTTOM 6
#define POS_ANY 7
-#define POS_LAST 8
+#define POS_CE 8
+#define POS_LAST 9
// values for text alignment
#define ALIGN_LEFT (1 << 0)