function actionStep() constructor {
	type = "";
	data = {};
	
	static trigger = function() {}
	
	static serialize = function() { return { type, data }; }
	
	static deserialize = function(map) {
		type = map.type;
		data = map.data;
		
		return self;
	}
}

function actionObject() constructor {
	name	= "";
	spr		= noone;
	
	isPlaying = false;
	playStep  = 0;
	
	actions   = [];
	
	static step = function() {
		actions[playStep].trigger();
		playStep++;
		
		if(playStep == array_length(actions)) {
			isPlaying = false;
			return true;
		}
		
		return false;
	}
	
	static play = function() {
		if(isPlaying) return;
		
		isPlaying = true;
		playStep  = 0;
	}
	
	static serialize = function() {
		var map = {};
		
		map.name    = name;
		map.actions = [];
		
		for( var i = 0, n = array_length(actions); i < n; i++ ) 
			map.actions[i] = actions[i].serialize();
		
		return map;
	}
	
	static deserialize = function(map) {
		name    = map.name;
		actions = [];
		
		for( var i = 0, n = array_length(map.actions); i < n; i++ )
			actions[i] = new actionStep().deserialize(map.actions[i]);
		
		return self;
	}
}