/*=============================================================================
	UnActDll.uac: Unreal actor class definitions
	Corresponding to code in UnActDll.c

	Copyright 1996 Epic MegaGames, Inc. This software is a trade secret.
	Compiled with Visual C++ 4.0 using Tabs=4, Calling method=__fastcall

	Revision history:
		* Created by Tim Sweeney
=============================================================================*/

//
// Note: We generate actor classes this way so that both the C structures (used
// in the code for fast access), and the property descriptions, are always
// guaranteed to correspond properly.
//

/*-----------------------------------------------------------------------------
	Root actor class (Parent of all classes)
-----------------------------------------------------------------------------*/

//
// Root actor class.  Included for information only;  you can't change this
// because many engine internals rely on it.
//
BEGIN_ROOTCLASS
	MARKER(     "s_actor")
	//
	// All client parameters:
	//
	P_RESOURCE(	Class,RES_CLASS,ED|CONST,	"Actor's class")
	//
	P_VECTOR(   Location,ED,			"Location in the world")
	P_VECTOR(	Velocity,ED,			"Velocity vector")
	P_ROTATION(	DrawRot,ED,				"Rotation for drawing actor")
	P_ROTATION( ViewRot,ED,   			"Rotation for actor's first-person view")
	//
	P_RESOURCE(	Texture,RES_TEXTURE,ED,	"Texture to draw if it's a sprite")
	P_RESOURCE(	MeshMap,RES_MESHMAP,ED,	"Mesh map to draw if it's a mesh")
	P_RESOURCE(	Brush,RES_MODEL,ED,		"Brush to draw if it's a keyframe mover")
	P_RESOURCE(	AmbientSound,RES_AMBIENT,ED, "Ambient sound effect")
	P_FLOAT(	DrawScale,ED,			"Scaling, 1.0=default")
	P_FLOAT(	AnimRate,ED,			"Animation play rate")
	P_FLOAT(	AnimBase,ED,			"Animation base frame")
	P_FLOAT(	CollisionRadius,ED,		"Sphere radius during collision")
	P_FLOAT(	CollisionHeight,ED,		"Height of collision sphere above floor")
	P_BYTE(		AnimSeq,"",ED,			"Animation sequence number being drawn")
	P_BYTE(		DrawType,"EDrawType",ED,"Drawing type")
	P_BYTE(		BlitType,"EBlitType",ED,"Blit type affecting meshes and sprites")
	P_BYTE(		ParticleType,"EParticleType",ED,"Type of particle system effect")
	P_BYTE(		ParticleCount,"",ED,"Number of particles to animate, sprites only")
	P_BYTE(		ParticleRate,"",ED,"How fast the thing goes")
	P_BYTE(		LightType,"ELightType",ED,"Overall light effect")
	P_BYTE(		LightEffect,"ELightEffect",ED,"Localized lighting effect")
	P_BYTE(		LightBrightness,"",ED,"Brightness magnitude at center, 0=none, 32=max, 256=8x max")
	P_BYTE(		LightHue,"",ED,	"Hue (color) of light")
	P_BYTE(		LightSaturation,"",ED,"Saturation (nonwhiteness) of light")
	P_BYTE(		LightRadius,"",ED,"Constant light radius/10, 1 unit = 1 foot")
	P_BYTE(		LightPeriod,"",ED,"Period*10")
	P_BYTE(		LightPhase,"",ED,"Phase")
	P_BYTE(		LightCone,"",ED,	"Cone angle, 0=no cone effect")
	//
	P_BITFLAG(	bAnimLoop,ED,			"Animation loops at end, else animation holds at end")
	P_BITFLAG(	bMeshSmooth,ED,			"Normal-interpolated Gouraud shading, otherwise constant shaded")
	P_BITFLAG(	bMeshWet,ED,			"Reflects light, looks wet")
	P_BITFLAG(	bMeshShadowCast,ED,		"Actor mesh casts a shadow, only for LightG_ActorShadows lights")
	P_BITFLAG(	bMeshEnviroMap,ED,		"Actor mesh casts a shadow, only for LightG_ActorShadows lights")
	P_BITFLAG(	bSpriteRotates,ED,		"Sprite rotates about screen axis")
	P_BITFLAG(	bSpriteRope,ED,			"Sprite rotates like rope")
	P_BITFLAG(	bWorldShadows,ED,		"Casts global shadows on surroundings")
	P_BITFLAG(	bActorShadows,ED,		"Casts actor shadows on surroundings")
	P_BITFLAG(	bShinyReflect,ED,		"Light's sprite reflects off shiny floors")
	P_BITFLAG(	bSpecialLight,ED,		"Only affects PF_SPECIALLIT polys")
	P_BITFLAG(	bUnused0,0,				"Temporarily inhibit shadowing, used in editor")
	P_BITFLAG(	bHidden,ED,				"Hide during gameplay")
	P_BITFLAG(	bHiddenEd,0,			"Hide in editor")
	P_BITFLAG(	bDirectional,ED,		"Directional, show arrow in 2D views")
	P_BITFLAG(	bCollideActors,ED,		"Collides with other actors")
	P_BITFLAG(	bCollideWorld,ED,		"Collides with the world")
	P_BITFLAG(	bBlocksActors,ED,		"Blocks other actors during collision")
	P_BITFLAG(	bBehindView,0,			"Behind-the-player view")
	P_BITFLAG(	bStairLookUp,0,			"Looking up stairs")
	P_BITFLAG(	bStairLookDown,0,		"Looking down stairs")
	P_BITFLAG(	bAutoHoldPitch,0,		"Don't snap pitch back")
	P_BITFLAG(	bSelected,0,			"Selected in UnrealEd")
	P_BITFLAG(	bTempDynamicLight,0,	"Light is temporarily dynamic in UnrealEd")
	P_BITFLAG(	bDrawOnHorizon,ED,		"Draw far-away on horizon, for moon/sun")
	P_BITFLAG(	bClassPureVirtual,0,	"Whether this class is purely virtual")
	P_BITFLAG(	Unused1,0,				"")
	P_BITFLAG(	bUnused2,0,				"")
	P_BITFLAG(	bUnused3,0,				"")
	P_BITFLAG(	bUnused4,0,				"")
	P_BITFLAG(	bUnused5,0,				"")
	P_BITFLAG(	bUnused6,0,				"")
	P_BITFLAG(	bUnused7,0,				"")
	P_BITFLAG(	bUnused8,0,				"")
	//
	// Root class information used by server and editor:
	//
	P_RESOURCE(	User,RES_CAMERA,0,			"User controlling the actor")
	P_NAME(		Name,ED,				"The actor's name")
	P_NAME(		TagName,ED,				"Group name for event tags")
	//
	P_ACTOR(    iParent,ED,   			"The actor's parent")
	P_ACTOR(    iTarget,ED,   			"The actor's target")
	P_ACTOR(    iWeapon,ED,   			"The actor's weapon")
	P_ACTOR(    iMisc,0,   					"An unused actor link")
	P_FLOAT(	Mass,ED,				"Mass for momentum equation")
	//
	P_BITFLAG(	bInactive,ED,			"Execution is frozen")
	P_BITFLAG(	bPegged,ED,				"Actor isn't affected by physics")
	P_BITFLAG(	bGravity,ED,			"Actor is affected by gravity")
	P_BITFLAG(	bMomentum,ED,			"")
	P_BITFLAG(	bProjTarget,ED,			"Projectiles should consider targeting this actor")
	P_BITFLAG(	bCanPossess,ED,			"Players can possess it")
	P_BITFLAG(	bDifficulty1,ED,		"Appears on difficulty level 1")
	P_BITFLAG(	bDifficulty2,ED,		"Appears on difficulty level 2")
	P_BITFLAG(	bDifficulty3,ED,		"Appears on difficulty level 3")
	P_BITFLAG(	bDifficulty4,ED,		"Appears on difficulty level 4")
	P_BITFLAG(	bNet1,ED,				"Appears on network mode 1 (cooperative)")
	P_BITFLAG(	bNet2,ED,				"Appears on network mode 2 (competitive)")
	P_BITFLAG(	bNet3,ED,				"Appears on network mode 3 (team)")
	P_BITFLAG(	bNet4,ED,				"Appears on network mode 4 (unused)")
	P_BITFLAG(	bTempEditor,0,				"UnrealEd: Misc temporary work")
	//
	P_INT(		Misc1,PRIV,"")	// Private ACTOR_CAMERA_STATUS/ACTOR_AI_STATUS information
	P_INT(		Misc2,PRIV,"")
	P_INT(		Misc3,PRIV,"")
	P_INT(		Misc4,PRIV,"")
END_ROOTCLASS

/*-----------------------------------------------------------------------------
	Camera actor class (editor only)
-----------------------------------------------------------------------------*/

//
// Root::Camera
//
BEGIN_CLASS(Camera,Root)
	MARKER(		"s_camera")
END_CLASS(Camera,Root)

/*-----------------------------------------------------------------------------
	Projectiles
	Special characteristics: Hard-coded hit and kill credit detection
-----------------------------------------------------------------------------*/

//
// Root::Projectile
//
#define PROJ_VSEEK	1 /* Seeks a target vertically */
#define PROJ_BOUNCE	2 /* Bounces off walls */
#define PROJ_VCONST	4 /* Try to keep a constant vertical height, climb stairs */
//
BEGIN_CLASS(Projectile,Root)
	MARKER(		"s_camera")
	//
	P_INT(		LiveTicks,ED,			"Ticks before the projectile expires")
	P_BITFLAG(	bVerticalSeek,ED,		"Auto-seeks targets vertically")
	P_BITFLAG(	bFollowFloor,ED,		"Follors floors and terrain")
	P_BITFLAG(	bBounce,ED,				"Bounces upon collision")
END_CLASS(Projectile,Root)

//
// Root::Projectile::Fireball
//
BEGIN_CLASS(Fireball,Projectile)
	MARKER(		"s_camera")
END_CLASS(Fireball,Projectile)

/*-----------------------------------------------------------------------------
	Pawns (monsters and players)
	Special characteristics: Can handle player controls
-----------------------------------------------------------------------------*/

//
// Root::Pawn
//
BEGIN_CLASS(Pawn,Root)
	MARKER(		"s_actor")
	//
	P_INT(		YawSpeed,ED,			"Yaw rotational speed")
	P_INT(		PitchSpeed,ED,			"Pitch rotational speed")
	P_INT(		RollSpeed,ED,			"Roll rotational speed")
	P_FLOAT(	EyeHeight,ED,			"Eyeheight vertical distance from location")
	P_INT(      FixFrame,ED,			"Temporary")
END_CLASS(Pawn,Root)

//
// Root::Pawn::Player
//
BEGIN_CLASS(Player,Pawn)
	MARKER(		"s_actor")
END_CLASS(Player,Pawn)

//
// Root::Pawn::Player::Woman
//
BEGIN_CLASS(Woman,Player)
	MARKER(		"s_actor")
END_CLASS(Woman,Player)

//
// Root::Pawn::Monster
//
BEGIN_CLASS(Monster,Pawn)
	MARKER(		"s_actor")
END_CLASS(Monster,Pawn)

//
//	Root::Pawn::Monster::Dragon
//
BEGIN_CLASS(Dragon,Monster)
	MARKER(		"s_actor")
END_CLASS(Dragon,Monster)

//
//	Root::Pawn::Monster::Gargoyle
//
BEGIN_CLASS(Gargoyle,Monster)
	MARKER(		"s_actor")
END_CLASS(Gargoyle,Monster)

//
//	Root::Pawn::Monster::Wizard
//
BEGIN_CLASS(Wizard,Monster)
	MARKER(		"s_actor")
END_CLASS(Wizard,Monster)

//
//	Root::Pawn::Monster::Wizard
//
BEGIN_CLASS(BigMan,Monster)
	MARKER(		"s_actor")
END_CLASS(BigMan,Monster)

/*-----------------------------------------------------------------------------
	Lights
	Special characteristics: Are static and can't be deleted
-----------------------------------------------------------------------------*/

//
// Root::Light
//
BEGIN_CLASS(Light,Root)
	MARKER(		"s_light")
END_CLASS(Light,Root)

/*-----------------------------------------------------------------------------
	Pickups
	Special characteristics: Built-in periodic respawn, etc.
-----------------------------------------------------------------------------*/

//
// Root::Pickup
//
BEGIN_CLASS(Pickup,Root)
	MARKER(		"s_pickup")
END_CLASS(Pickup,Root)

/*-----------------------------------------------------------------------------
	Keypoints
	Special characteristics: None?
-----------------------------------------------------------------------------*/

//
// Root::Keypoint
//
BEGIN_CLASS(Keypoint,Root)
	MARKER(		"s_actor")
END_CLASS(Keypoint,Root)

//
// Root::Keypoint::PlayerStart
//
BEGIN_CLASS(PlayerStart,Keypoint)
	MARKER(		"s_player")
END_CLASS(PlayerStart,Keypoint)

//
// Root::Keypoint::Teleporter
//
BEGIN_CLASS(Teleporter,Keypoint)
	MARKER(		"s_player")
END_CLASS(Teleporter,Keypoint)

/*-----------------------------------------------------------------------------
	Keyframe movers
	Special characteristics: Stores array of key positions, has hardcoded
		logic to move between them, can orchestrate moving brushes and their
		interaction with actors.
-----------------------------------------------------------------------------*/

//
// Root::Mover
//
BEGIN_CLASS(Mover,Root)
	MARKER(		"s_actor")
	//
	P_INT(		Time,ED,			"Time to move")
	P_INT(		Speed,ED,			"Speed to move")
	P_BYTE(		Accel,"",ED,		"Default accel: 0=none, 1=start, 2=stop, 3=both")
	P_BYTE(		MoveMode,"",ED,		"Default move mode: Continue, Hold, Wait, Lock")
	P_BYTE(		CrushMode,"",ED,	"0=Kill crushee and proceed, 1=Ignore and proceed, 2=Stop moving")
END_CLASS(Mover,Root)

/*-----------------------------------------------------------------------------
	Weapons
	Special characteristics: Contain hardcoded logic to attach themselves to
		actors for both first-person and third-person display.
-----------------------------------------------------------------------------*/

//
// Root::Weapon
//
BEGIN_CLASS(Weapon,Root)
	MARKER(		"s_actor")
END_CLASS(Mover,Root)

/*-----------------------------------------------------------------------------
	Event triggers
	Special characteristics: Contain hardcoded logic for sending simple 
		messages according to their tag name.
-----------------------------------------------------------------------------*/

//
// Root::Trigger
//
BEGIN_CLASS(Trigger,Root)
	MARKER(		"s_actor")
END_CLASS(Trigger,Root)

//
// The end
//
