#define SCRIPT_VERSION 3

#define NUM_PARMS 16

enum OpCodes
{
	CODE_NEW_GLOBAL = 0,
	CODE_NEW_GLOBAL_PLUS_ASSIGNMENT,
	CODE_NEW_LOCAL,
	CODE_NEW_LOCAL_PLUS_ASSIGNMENT,
	CODE_NEW_PARAMETER,
	CODE_NEW_PARAMETER_PLUS_DEFAULT,
	CODE_FIELD,
	CODE_ASSIGNMENT,
	CODE_ADD,
	CODE_SUBTRACT,
	CODE_MULTIPLY,
	CODE_DIVIDE,
	CODE_ADD_ASSIGNMENT,
	CODE_SUBTRACT_ASSIGNMENT,
	CODE_MULTIPLY_ASSIGNMENT,
	CODE_DIVIDE_ASSIGNMENT,
	CODE_GOTO,
	CODE_PUSH,
	CODE_POP,
	CODE_IF,
	CODE_EXIT,
	CODE_SUSPEND,
	CODE_WAIT_SECONDS,
	CODE_WAIT_ALL,
	CODE_WAIT_ANY,
	CODE_MOVE,
	CODE_DEBUG,
	CODE_USE,
	CODE_ROTATE,
	CODE_PRINT,
	CODE_PLAY_SOUND,
	CODE_ENABLE,
	CODE_DISABLE,
	CODE_ANIMATE,
	CODE_DEBUG_STATEMENT,
	CODE_CACHE_SOUND,
	CODE_COPY_PLAYER_ATTRIBUTES,
	CODE_SET_VIEW_ANGLES,
	CODE_SET_CACHE_SIZE,
	CODE_REMOVE,
	CODE_HELICOPTER,
	CODE_MOVEROTATE,
	CODE_PLAYSONG,
	CODE_SETCVAR,
	CODE_UNLOAD_SOUND,
	CODE_TANK,
	CODE_SNOWCAT,
	CODE_CACHE_ROFF,
	CODE_CACHE_STRING_PACKAGE,
	CODE_CONSOLE_COMMAND,
	CODE_UNLOAD_ROFF,
	CODE_ON,
	CODE_RESUME,
	CODE_RESET_AI,
};

enum PushTypes
{
	PUSH_CONST_INT = 0,
	PUSH_CONST_FLOAT,
	PUSH_CONST_VECTOR,
	PUSH_CONST_ENTITY,
	PUSH_CONST_STRING,
	PUSH_VAR,
	PUSH_VAR_WITH_FIELD,
	PUSH_FUNCTION,
};

enum ConditionTypes
{
	COND_EQUAL = 0,
	COND_LESS_THAN,
	COND_LESS_THAN_EQUAL,
	COND_GREATER_THAN,
	COND_GREATER_THAN_EQUAL,
	COND_NOT_EQUAL,
};

enum FunctionTypes
{
	FUNC_FIND_ENTITY_WITH_TARGET = 0,
	FUNC_SIN,
	FUNC_COS,
	FUNC_FIND_ENTITY_WITH_SCRIPT,
	FUNC_FIND_PLAYER,
	FUNC_SPAWN,
	FUNC_GET_OTHER,
	FUNC_GET_ACTIVATOR,
	FUNC_RANDOM,
	FUNC_GET_PLAYER,
};

enum VariableT 
{ 
	TypeINT = 0, 
	TypeFLOAT, 
	TypeVECTOR, 
	TypeENTITY, 
	TypeSTRING,
	TypeUNKNOWN, 
};

enum FeatureTypes
{
	FEATURE_TRIGGER = 0,
	FEATURE_AMBIENT_SOUNDS,
	FEATURE_CINEMATICS,
	FEATURE_PLAGUE_SKINS,
};

#define VAR_LENGTH 64

// Command Flags
// Move
#define MOVE_DURATION	0x01
#define MOVE_RATE		0x02
#define MOVE_SIGNALER	0x04
#define MOVE_ABSOLUTE	0x08

// Rotate
#define ROTATE_DURATION	0x01
#define ROTATE_RATE		0x02
#define ROTATE_SIGNALER	0x04
#define ROTATE_ABSOLUTE	0x08


// MoveRotate (disk-file command)
#define MOVEROTATE_SIGNALER 0x01

// Wait
#define WAIT_CLEAR		0x80

// Print
#define PRINT_ENTITY	0x01
#define PRINT_CENTERED	0x02
#define PRINT_LEVEL		0x04
#define PRINT_CAPTIONED	0x08

// Play Sound
#define PLAY_SOUND_ENTITY		0x01
#define PLAY_SOUND_VOLUME		0x02
#define PLAY_SOUND_ATTENUATION	0x04
#define PLAY_SOUND_CHANNEL		0x08
#define PLAY_SOUND_TIMEDELAY	0x10

// Animate
#define ANIMATE_REPEAT		0x001
#define ANIMATE_TURNING		0x002
#define ANIMATE_MOVING		0x004
#define ANIMATE_SIGNALER	0x008
#define ANIMATE_SOURCE		0x010
#define ANIMATE_MOVING_ABS	0x020
#define ANIMATE_HOLD		0x040
#define	ANIMATE_TARGET		0x080
#define ANIMATE_KILL		0x100
#define ANIMATE_NULLTARGET	0x200
#define ANIMATE_EMOTION		0x400

// Debug
#define DEBUG_ENABLE		0x01
#define DEBUG_MOVE			0x02
#define DEBUG_ROTATE		0x04
#define DEBUG_TIME			0x08
#define DEBUG_MOVEROTATE	0x10

//Helicopter
#define HELICOPTER_TARG		0x01
#define HELICOPTER_VECT		0x02
#define HELICOPTER_FLOAT	0x04
#define HELICOPTER_SIGNALER	0x08

//Tank
#define TANK_TARG			0x01
#define TANK_VECT			0x02
#define TANK_FLOAT			0x04
#define TANK_SIGNALER		0x08

//Snowcat
#define SNOWCAT_TARG		0x01
#define SNOWCAT_VECT		0x02
#define SNOWCAT_FLOAT		0x04
#define SNOWCAT_SIGNALER	0x08
