This is the current interface of Action in AngelScript (but it is not in its final state):
interface Action
{
	Action@ GetSuperAction();
	void SetSuperAction(Action@ action);
	Action@ AddSubAction(Action@ action);
	Action@[] GetSubActions();
	void CollectListeningActions(Action@[]& collection);
	Action@ And(Action@ andAction);
	Action@ If(Condition@ condition);
	Action@ IfNot(Condition@ condition);
	void PerformAndAction(Critter& critter, Critter@ otherCritter, Item@ item);
	bool Check(Critter& critter, Critter@ otherCritter, Item@ item);
	bool IsRunning();
	void SetRunning(bool running);
	bool IsListening();
	void SetListening(bool listening);
	
	bool Start(Critter& critter);
	void Perform(Critter& critter);
	void Finish(Critter& critter);
	void Cancel(Critter& critter);
	void StartNextAction(Critter& critter);
	
	string GetInfo();
	void IdleEvent(Critter& critter);
	void ShowCritterEvent(Critter& critter, Critter& showCritter);
	void HideCritterEvent(Critter& critter, Critter& hideCritter);
	bool AttackEvent(Critter& critter, Critter& target);
	bool AttackedEvent(Critter& critter, Critter& attacker);
	void DeadEvent(Critter& critter, Critter@ killer);
	void MessageEvent(Critter& critter, Critter& messenger, int message, int value);
	void SeeSomeoneAttackEvent(Critter& critter, Critter& attacker, Critter& attacked);
	void SeeSomeoneDeadEvent(Critter& critter, Critter& killed, Critter@ killer);
	void SeeSomeoneAttackedEvent(Critter& critter, Critter& attacked, Critter& attacker);
	void SeeSomeoneStealingEvent(Critter& critter, Critter& victim, Critter& thief, bool success, Item& item, uint count);
	void SeeSomeoneUseSkill(Critter& critter, Critter& skillCritter, int skill, Critter@ onCritter, Item@ onItem, Scenery@ onScenery);
	int PlaneBeginEvent(Critter& critter, NpcPlane& plane, int reason, Critter@ someCr, Item@ someItem);
	int PlaneRunEvent(Critter& critter, NpcPlane& plane, int reason, uint& result0, uint& result1, uint& result2);
	int PlaneEndEvent(Critter& critter, NpcPlane& plane, int reason, Critter@ someCr, Item@ someItem);
}
And Manager has void Start(Critter& critter, Action& action) function, which starts the action for specified critter.