ACTOR Actor native //: Thinker
{
	Scale 1
	Health 1000
	Reactiontime 8
	Radius 20
	Height 16
	Mass 100
	RenderStyle Normal
	Alpha 1
	MinMissileChance 200
	MeleeRange 44
	MaxDropoffHeight 24
	MaxStepHeight 24
	BounceFactor 0.7
	WallBounceFactor 0.75
	BounceCount -1
	FloatSpeed 4
	Gravity 1
	DamageFactor 1.0
	PushFactor 0.25
	WeaveIndexXY 0
	WeaveIndexZ 16
	DesignatedTeam 255


	// Variables for the expression evaluator
	// NOTE: fixed_t and angle_t are only used here to ensure proper conversion
	// Internally they are handled as floats.
	// Variables must be native.
	native fixed_t alpha;
	native angle_t angle;
	native int args[5];
	native fixed_t ceilingz;
	native fixed_t floorz;
	native int health;
	native angle_t pitch;
	native int special;
	native int tid;
	native int TIDtoHate;
	native int waterlevel;
	native int damage;
	native fixed_t x;
	native fixed_t y;
	native fixed_t z;
	native fixed_t velx;
	native fixed_t vely;
	native fixed_t velz;
	native fixed_t momx;	// alias for velx
	native fixed_t momy;	// alias for vely
	native fixed_t momz;	// alias for velz
	native int score;

	// Meh, MBF redundant functions. Only for DeHackEd support.
	action native A_Turn(float angle = 0);
	action native A_LineEffect(int boomspecial = 0, int tag = 0);
	// End of MBF redundant functions.

	action native A_MonsterRail();
	action native A_BFGSpray(class<Actor> spraytype = "BFGExtra", int numrays = 40, int damagecount = 15);
	action native A_Pain();
	action native A_NoBlocking();
	action native A_XScream();
	action native A_Look();
	action native A_Chase(state melee = "*", state missile = "none", int flags = 0);
	action native A_FaceTarget(float max_turn = 0);
	action native A_PosAttack();
	action native A_Scream();
	action native A_SPosAttack();
	action native A_SPosAttackUseAtkSound();
	action native A_VileChase();
	action native A_VileStart();
	action native A_VileTarget(class<Actor> fire = "ArchvileFire");
	action native A_VileAttack(sound snd = "vile/stop", int initialdmg = 20, int blastdmg = 70, int blastradius = 70, float thrustfac = 1.0, name damagetype = "Fire");
	action native A_StartFire();
	action native A_Fire(float spawnheight = 0);
	action native A_FireCrackle();
	action native A_Tracer();
	action native A_SkelWhoosh();
	action native A_SkelFist();
	action native A_SkelMissile();
	action native A_FatRaise();
	action native A_FatAttack1(class<Actor> spawntype = "FatShot");
	action native A_FatAttack2(class<Actor> spawntype = "FatShot");
	action native A_FatAttack3(class<Actor> spawntype = "FatShot");
	action native A_BossDeath();
	action native A_CPosAttack();
	action native A_CPosRefire();
	action native A_TroopAttack();
	action native A_SargAttack();
	action native A_HeadAttack();
	action native A_BruisAttack();
	action native A_SkullAttack(float speed = 20);
	action native A_BetaSkullAttack();
	action native A_Metal();
	action native A_SpidRefire();
	action native A_BabyMetal();
	action native A_BspiAttack();
	action native A_Hoof();
	action native A_CyberAttack();
	action native A_PainAttack(class<Actor> spawntype = "LostSoul");
	action native A_DualPainAttack(class<Actor> spawntype = "LostSoul");
	action native A_PainDie(class<Actor> spawntype = "LostSoul");
	action native A_KeenDie(int doortag = 666);
	action native A_BrainPain();
	action native A_BrainScream();
	action native A_BrainDie();
	action native A_BrainAwake();
	action native A_BrainSpit(class<Actor> spawntype = "none");	// needs special treatment for default
	action native A_SpawnSound();
	action native A_SpawnFly(class<Actor> spawntype = "none");	// needs special treatment for default
	action native A_BrainExplode();
	action native A_Die(name damagetype = "none");
	action native A_Detonate();
	action native A_Mushroom(class<Actor> spawntype = "FatShot", int numspawns = 0, int flags = 0, float vrange = 4.0, float hrange = 0.5);
	action native A_CallSpecial(int special, int arg1=0, int arg2=0, int arg3=0, int arg4=0, int arg5=0);

	action native A_SetFloorClip();
	action native A_UnSetFloorClip();
	action native A_HideThing();
	action native A_UnHideThing();
	action native A_SetInvulnerable();
	action native A_UnSetInvulnerable();
	action native A_SetReflective();
	action native A_UnSetReflective();
	action native A_SetReflectiveInvulnerable();
	action native A_UnSetReflectiveInvulnerable();
	action native A_SetShootable();
	action native A_UnSetShootable();
	action native A_NoGravity();
	action native A_Gravity();
	action native A_LowGravity();
	action native A_SetGravity(float gravity);
	action native A_Fall();
	action native A_SetSolid();
	action native A_UnsetSolid();
	action native A_SetFloat();
	action native A_UnsetFloat();

	action native A_M_Saw(sound fullsound = "weapons/sawfull", sound hitsound = "weapons/sawhit", int damage = 2, class<Actor> pufftype = "BulletPuff");

	action native A_ScreamAndUnblock();
	action native A_ActiveAndUnblock();
	action native A_ActiveSound();

	action native A_FastChase();
	action native A_FreezeDeath();
	action native A_FreezeDeathChunks();
	action native A_GenericFreezeDeath();
	action native A_IceGuyDie();
	action native A_CentaurDefend();
	action native A_BishopMissileWeave();
	action native A_CStaffMissileSlither();
	action native A_PlayerScream();
	action native A_SkullPop(class<Actor> skulltype = "BloodySkull");
	action native A_CheckPlayerDone();

	action native A_Wander();
	action native A_Look2();
	action native A_TossGib();
	action native A_SentinelBob();
	action native A_SentinelRefire();
	action native A_Tracer2();
	action native A_SetShadow();
	action native A_ClearShadow();
	action native A_GetHurt();
	action native A_TurretLook();
	action native A_KlaxonBlare();
	action native A_Countdown();
	action native A_AlertMonsters();
	action native A_ClearSoundTarget();
	action native A_FireAssaultGun();
	action native A_CheckTerrain();
	action native A_FaceConsolePlayer(float MaxTurnAngle = 0); // [Dusk]

	action native A_MissileAttack();
	action native A_MeleeAttack();
	action native A_ComboAttack();
	action native A_BulletAttack();
	action native A_PlaySound(sound whattoplay = "weapons/pistol", int slot = CHAN_BODY, float volume = 1.0, bool looping = false, float attenuation = ATTN_NORM);
	action native A_PlayWeaponSound(sound whattoplay);
	action native A_FLoopActiveSound();
	action native A_LoopActiveSound();
	action native A_StopSound(int slot = CHAN_VOICE);	// Bad default but that's what is originally was...
	action native A_PlaySoundEx(sound whattoplay, coerce name slot, bool looping = false, int attenuation = 0);
	action native A_StopSoundEx(coerce name slot);
	action native A_SeekerMissile(int threshold, int turnmax, int flags = 0, int chance = 50, int distance = 10);
	action native A_Jump(int chance = 256, state label, ...);
	action native A_CustomMissile(class<Actor> missiletype, float spawnheight = 32, int spawnofs_xy = 0, float angle = 0, int flags = 0, float pitch = 0);
	action native A_CustomBulletAttack(float spread_xy, float spread_z, int	numbullets, int damageperbullet, class<Actor> pufftype = "BulletPuff", float range = 0, int flags = 0);
	action native A_CustomRailgun(int damage, int spawnofs_xy = 0, color color1 = "", color color2 = "", int flags = 0, bool aim = false, float maxdiff = 0, class<Actor> pufftype = "BulletPuff", float spread_xy = 0, float spread_z = 0);
	action native A_JumpIfHealthLower(int health, state label);
	action native A_JumpIfCloser(float distance, state label);
	action native A_JumpIfTracerCloser(float distance, state label);
	action native A_JumpIfMasterCloser(float distance, state label);
	action native A_JumpIfInventory(class<Inventory> itemtype, int itemamount, state label, int owner = AAPTR_DEFAULT);
	action native A_JumpIfArmorType(string Type, state label, int amount = 1);
	action native A_GiveInventory(class<Inventory> itemtype, int amount = 0, int giveto = AAPTR_DEFAULT);
	action native A_TakeInventory(class<Inventory> itemtype, int amount = 0, int flags = 0, int giveto = AAPTR_DEFAULT);
	action native A_SpawnItem(class<Actor> itemtype = "Unknown", float distance = 0, float zheight = 0, bool useammo = true, bool transfer_translation = false);
	action native A_SpawnItemEx(class<Actor> itemtype, float xofs = 0, float yofs = 0, float zofs = 0, float xvel = 0, float yvel = 0, float zvel = 0, float angle = 0, int flags = 0, int failchance = 0);
	action native A_Print(string whattoprint, float time = 0, string fontname = "");
	action native A_PrintBold(string whattoprint, float time = 0, string fontname = "");
	action native A_Log(string whattoprint);
	action native A_LogInt(int whattoprint);
	action native A_SetTranslucent(float alpha, int style = 0);
	action native A_FadeIn(float reduce = 0.1);
	action native A_FadeOut(float reduce = 0.1, bool remove = true);
	action native A_FadeTo(float target, float amount = 0.1, bool remove = false);
	action native A_SpawnDebris(class<Actor> spawntype, bool transfer_translation = false, float mult_h = 1, float mult_v = 1);
	action native A_CheckSight(state label);
	action native A_ExtChase(bool usemelee, bool usemissile, bool playactive = true, bool nightmarefast = false);
	action native A_DropInventory(class<Inventory> itemtype);
	action native A_SetBlend(color color1, float alpha, int tics, color color2 = "");
	action native A_ChangeFlag(string flagname, bool value);
	action native A_CheckFlag(string flagname, state label, int check_pointer = AAPTR_DEFAULT);
	action native A_JumpIf(bool expression, state label);
	action native A_RemoveMaster();
	action native A_RemoveChildren(bool removeall = false);
	action native A_RemoveSiblings(bool removeall = false);
	action native A_KillMaster(name damagetype = "none");
	action native A_KillChildren(name damagetype = "none");
	action native A_KillSiblings(name damagetype = "none");
	action native A_RaiseMaster();
	action native A_RaiseChildren();
	action native A_RaiseSiblings();
	action native A_CheckFloor(state label);
	action native A_CheckCeiling(state label);
	action native A_PlayerSkinCheck(state label);
	action native A_BasicAttack(int meleedamage, sound meleesound, class<actor> missiletype, float missileheight);
	action native A_Teleport(state teleportstate = "", class<SpecialSpot> targettype = "BossSpot", class<Actor> fogtype = "TeleportFog", int flags = 0, float mindist = 128, float maxdist = 0);
	action native A_ThrowGrenade(class<Actor> itemtype, float zheight = 0, float xyvel = 0, float zvel = 0, bool useammo = true);
	action native A_Weave(int xspeed, int yspeed, float xdist, float ydist);

	action native A_Recoil(float xyvel);
	action native A_JumpIfInTargetInventory(class<Inventory> itemtype, int amount, state label, int forward_ptr = AAPTR_DEFAULT);
	action native A_GiveToTarget(class<Inventory> itemtype, int amount = 0, int forward_ptr = AAPTR_DEFAULT);
	action native A_TakeFromTarget(class<Inventory> itemtype, int amount = 0, int flags = 0, int forward_ptr = AAPTR_DEFAULT);
	action native A_CountdownArg(int argnum, state targstate = "");
	action native A_CustomMeleeAttack(int damage = 0, sound meleesound = "", sound misssound = "", name damagetype = "none", bool bleed = true);
	action native A_CustomComboAttack(class<Actor> missiletype, float spawnheight, int damage, sound meleesound = "", name damagetype = "none", bool bleed = true);
	action native A_Burst(class<Actor> chunktype);
	action native A_Blast(int flags = 0, int strength = 255, int radius = 255, float speed = 20, class<Actor> blasteffect = "BlastEffect", sound blastsound = "BlastRadius");
	action native A_RadiusThrust(int force = 128, int distance = -1, bool affectsource = true);
	action native A_Explode(int damage = -1, int distance = -1, bool hurtsource = true, bool alert = false, int fulldamagedistance = 0, int nails = 0, int naildamage = 10);
	action native A_Stop();
	action native A_Respawn(int flags = 1);
	action native A_BarrelDestroy();
	action native A_QueueCorpse();
	action native A_DeQueueCorpse();
	action native A_LookEx(int flags = 0, float minseedist = 0, float maxseedist = 0, float maxheardist = 0, float fov = 0, state label = "");
	action native A_ClearTarget();
	action native A_JumpIfTargetInLOS (state label, float fov = 0, int flags = 0, float dist_max = 0, float dist_close = 0);
	action native A_JumpIfInTargetLOS (state label, float fov = 0, int flags = 0, float dist_max = 0, float dist_close = 0);
	action native A_DamageMaster(int amount, name damagetype = "none");
	action native A_DamageChildren(int amount, name damagetype = "none");
	action native A_DamageSiblings(int amount, name damagetype = "none");
	action native A_SelectWeapon(class<Weapon> whichweapon);
	action native A_Punch();
	action native A_Feathers();
	action native A_ClassBossHealth();
	action native A_ShootGun();
	action native A_RocketInFlight();
	action native A_Bang4Cloud();
	action native A_DropFire();
	action native A_GiveQuestItem(int itemno);
	action native A_RemoveForcefield();
	action native A_DropWeaponPieces(class<Actor> p1, class<Actor> p2, class<Actor> p3);
	action native A_PigPain ();
	action native A_MonsterRefire(int chance, state label);
	action native A_SetAngle(float angle = 0);
	action native A_SetPitch(float pitch);
	action native A_ScaleVelocity(float scale);
	action native A_ChangeVelocity(float x = 0, float y = 0, float z = 0, int flags = 0);
	action native A_SetArg(int pos, int value);
	action native A_SetUserVar(name varname, int value);
	action native A_SetUserArray(name varname, int index, int value);
	action native A_SetSpecial(int spec, int arg0 = 0, int arg1 = 0, int arg2 = 0, int arg3 = 0, int arg4 = 0);
	action native A_Quake(int intensity, int duration, int damrad, int tremrad, sound sfx = "world/quake");

	action native A_CheckSightOrRange(float distance, state label);

	action native A_RearrangePointers(int newtarget, int newmaster = AAPTR_DEFAULT, int newtracer = AAPTR_DEFAULT, int flags=0);
	action native A_TransferPointer(int ptr_source, int ptr_recepient, int sourcefield, int recepientfield=AAPTR_DEFAULT, int flags=0);
	action native A_CopyFriendliness(int ptr_source = AAPTR_MASTER);

	States
	{
	Spawn:
		TNT1 A -1
		Stop
	Null:
		TNT1 A 1
		Stop
	GenericFreezeDeath:
		// Generic freeze death frames. Woo!
		"####" "#" 5 A_GenericFreezeDeath
		"----" A 1 A_FreezeDeathChunks
		Wait
	GenericCrush:
		POL5 A -1
		Stop
	}
}




