static void Action(TAction * a) { TWatch *t; TCondition *c; for (;;) { switch (a->action) { case ACTION_NULL: return; case ACTION_SOUND: SoundPlayAt(a->tileFlags, a->x, a->y); break; case ACTION_SETTRIGGER: Map(a->x, a->y).flags |= TILE_TRIGGER; break; case ACTION_CLEARTRIGGER: Map(a->x, a->y).flags &= ~TILE_TRIGGER; break; case ACTION_CHANGETILE: Map(a->x, a->y).flags = a->tileFlags; Map(a->x, a->y).pic = a->tilePic; break; case ACTION_SETTIMEDWATCH: t = FindWatch(a->x); if (t) { c = t->conditions; while (c && c->condition != CONDITION_NULL) { if (c->condition == CONDITION_TIMEDDELAY) { c->x = a->y; break; } c++; } ActivateWatch(t->index); } break; case ACTION_ACTIVATEWATCH: ActivateWatch(a->x); break; case ACTION_DEACTIVATEWATCH: DeactivateWatch(a->x); break; } a++; } }
static void ActionRun(Action *a, CArray *mapTriggers) { int i; switch (a->action) { case ACTION_NULL: return; case ACTION_SOUND: SoundPlayAt(&gSoundDevice, a->a.Sound, a->u.pos); break; case ACTION_SETTRIGGER: for (i = 0; i < (int)mapTriggers->size; i++) { Trigger *tr = *(Trigger **)CArrayGet(mapTriggers, i); if (tr->id == a->u.index) { tr->isActive = 1; break; } } break; case ACTION_CLEARTRIGGER: for (i = 0; i < (int)mapTriggers->size; i++) { Trigger *tr = *(Trigger **)CArrayGet(mapTriggers, i); if (tr->id == a->u.index) { tr->isActive = 0; break; } } break; case ACTION_CHANGETILE: { Tile *t= MapGetTile(&gMap, a->u.pos); t->flags = a->a.tileFlags; t->pic = a->tilePic; t->picAlt = a->tilePicAlt; } break; case ACTION_ACTIVATEWATCH: ActivateWatch(a->u.index); break; case ACTION_DEACTIVATEWATCH: DeactivateWatch(a->u.index); break; } }