home *** CD-ROM | disk | FTP | other *** search
/ Game Level Design / GLDesign.bin / Software / UnrealEngine2Runtime / UE2Runtime-22262001_Demo.exe / Engine / Classes / Actor.uc < prev    next >
Text File  |  2003-06-23  |  61KB  |  1,671 lines

  1. //=============================================================================
  2. // Actor: The base class of all actors.
  3. // Actor is the base class of all gameplay objects.  
  4. // A large number of properties, behaviors and interfaces are implemented in Actor, including:
  5. //
  6. // -    Display 
  7. // -    Animation
  8. // -    Physics and world interaction
  9. // -    Making sounds
  10. // -    Networking properties
  11. // -    Actor creation and destruction
  12. // -    Triggering and timers
  13. // -    Actor iterator functions
  14. // -    Message broadcasting
  15. //
  16. // This is a built-in Unreal class and it shouldn't be modified.
  17. //=============================================================================
  18. class Actor extends Object
  19.     abstract
  20.     native
  21.     nativereplication;
  22.  
  23. // Imported data (during full rebuild).
  24. #exec Texture Import File=Textures\S_Actor.pcx Name=S_Actor Mips=Off MASKED=1
  25. #exec Texture Import File=Textures\LockLocation.pcx Name=S_LockLocation Mips=Off MASKED=1
  26. #exec Texture Import File=Textures\AutoAlignToTerrain.pcx Name=S_AutoAlignToTerrain Mips=Off MASKED=1
  27.  
  28. // Light modulation.
  29. var(Lighting) enum ELightType
  30. {
  31.     LT_None,
  32.     LT_Steady,
  33.     LT_Pulse,
  34.     LT_Blink,
  35.     LT_Flicker,
  36.     LT_Strobe,
  37.     LT_BackdropLight,
  38.     LT_SubtlePulse,
  39.     LT_TexturePaletteOnce,
  40.     LT_TexturePaletteLoop,
  41.     LT_FadeOut
  42. } LightType;
  43.  
  44. // Spatial light effect to use.
  45. var(Lighting) enum ELightEffect
  46. {
  47.     LE_None,
  48.     LE_TorchWaver,
  49.     LE_FireWaver,
  50.     LE_WateryShimmer,
  51.     LE_Searchlight,
  52.     LE_SlowWave,
  53.     LE_FastWave,
  54.     LE_CloudCast,
  55.     LE_StaticSpot,
  56.     LE_Shock,
  57.     LE_Disco,
  58.     LE_Warp,
  59.     LE_Spotlight,
  60.     LE_NonIncidence,
  61.     LE_Shell,
  62.     LE_OmniBumpMap,
  63.     LE_Interference,
  64.     LE_Cylinder,
  65.     LE_Rotor,
  66.     LE_Sunlight,
  67.     LE_QuadraticNonIncidence
  68. } LightEffect;
  69.  
  70. // Lighting info.
  71. var(LightColor) float
  72.     LightBrightness;
  73. var(Lighting) float
  74.     LightRadius;
  75. var(LightColor) byte
  76.     LightHue,
  77.     LightSaturation;
  78. var(Lighting) byte
  79.     LightPeriod,
  80.     LightPhase,
  81.     LightCone;
  82.  
  83. // Priority Parameters
  84. // Actor's current physics mode.
  85. var(Movement) const enum EPhysics
  86. {
  87.     PHYS_None,
  88.     PHYS_Walking,
  89.     PHYS_Falling,
  90.     PHYS_Swimming,
  91.     PHYS_Flying,
  92.     PHYS_Rotating,
  93.     PHYS_Projectile,
  94.     PHYS_Interpolating,
  95.     PHYS_MovingBrush,
  96.     PHYS_Spider,
  97.     PHYS_Trailer,
  98.     PHYS_Ladder,
  99.     PHYS_RootMotion,
  100.     PHYS_Karma,
  101.     PHYS_KarmaRagDoll
  102. } Physics;
  103.  
  104. // Drawing effect.
  105. var(Display) const enum EDrawType
  106. {
  107.     DT_None,
  108.     DT_Sprite,
  109.     DT_Mesh,
  110.     DT_Brush,
  111.     DT_RopeSprite,
  112.     DT_VerticalSprite,
  113.     DT_Terraform,
  114.     DT_SpriteAnimOnce,
  115.     DT_StaticMesh,
  116.     DT_DrawType,
  117.     DT_Particle,
  118.     DT_AntiPortal,
  119.     DT_FluidSurface
  120. } DrawType;
  121.  
  122. var(Display) const StaticMesh StaticMesh;        // StaticMesh if DrawType=DT_StaticMesh
  123.  
  124. // Owner.
  125. var const Actor    Owner;            // Owner actor.
  126. var const Actor    Base;           // Actor we're standing on.
  127.  
  128. struct ActorRenderDataPtr { var int Ptr; };
  129. struct LightRenderDataPtr { var int Ptr; };
  130.  
  131. var const native ActorRenderDataPtr    ActorRenderData;
  132. var const native LightRenderDataPtr    LightRenderData;
  133. var const native int                RenderRevision;
  134.  
  135. enum EFilterState
  136. {
  137.     FS_Maybe,
  138.     FS_Yes,
  139.     FS_No
  140. };
  141.  
  142. var const native EFilterState    StaticFilterState;
  143.  
  144. struct BatchReference
  145. {
  146.     var int    BatchIndex,
  147.             ElementIndex;
  148. };
  149.  
  150. var const native array<BatchReference>    StaticSectionBatches;
  151.  
  152. var(Display) const name    ForcedVisibilityZoneTag; // Makes the visibility code treat the actor as if it was in the zone with the given tag.
  153.  
  154. // Lighting.
  155. var(Lighting) bool         bSpecialLit;            // Only affects special-lit surfaces.
  156. var(Lighting) bool         bActorShadows;            // Light casts actor shadows.
  157. var(Lighting) bool         bCorona;               // Light uses Skin as a corona.
  158. var(Lighting) bool         bLightingVisibility;    // Calculate lighting visibility for this actor with line checks.
  159. var(Display) bool         bUseDynamicLights;
  160. var bool                 bLightChanged;            // Recalculate this light's lighting now.
  161.  
  162. //    Detail mode enum.
  163.  
  164. enum EDetailMode
  165. {
  166.     DM_Low,
  167.     DM_High,
  168.     DM_SuperHigh
  169. };
  170.  
  171. // Flags.
  172. var              const bool    bStatic;            // Does not move or change over time. Don't let L.D.s change this - screws up net play
  173. var(Advanced)        bool    bHidden;            // Is hidden during gameplay.
  174. var(Advanced) const bool    bNoDelete;            // Cannot be deleted during play.
  175. var              const    bool    bDeleteMe;            // About to be deleted.
  176. var transient const bool    bTicked;            // Actor has been updated.
  177. var(Lighting)        bool    bDynamicLight;        // This light is dynamic.
  178. var                    bool    bTimerLoop;            // Timer loops (else is one-shot).
  179. var                    bool    bOnlyOwnerSee;        // Only owner can see this actor.
  180. var(Advanced)        bool    bHighDetail;        // Only show up in high or super high detail mode.
  181. var(Advanced)        bool    bSuperHighDetail;    // Only show up in super high detail mode.
  182. var                    bool    bOnlyDrawIfAttached;    // don't draw this actor if not attached (useful for net clients where attached actors and their bases' replication may not be synched)
  183. var(Advanced)        bool    bStasis;            // In StandAlone games, turn off if not in a recently rendered zone turned off if  bStasis  and physics = PHYS_None or PHYS_Rotating.
  184. var                    bool    bTrailerAllowRotation; // If PHYS_Trailer and want independent rotation control.
  185. var                    bool    bTrailerSameRotation; // If PHYS_Trailer and true, have same rotation as owner.
  186. var                    bool    bTrailerPrePivot;    // If PHYS_Trailer and true, offset from owner by PrePivot.
  187. var                    bool    bWorldGeometry;        // Collision and Physics treats this actor as world geometry
  188. var(Display)        bool    bAcceptsProjectors;    // Projectors can project onto this actor
  189. var                    bool    bOrientOnSlope;        // when landing, orient base on slope of floor
  190. var              const    bool    bOnlyAffectPawns;    // Optimisation - only test ovelap against pawns. Used for influences etc.
  191. var(Display)        bool    bDisableSorting;    // Manual override for translucent material sorting.
  192. var(Movement)        bool    bIgnoreEncroachers; // Ignore collisions between movers and 
  193.  
  194. var                    bool    bShowOctreeNodes;
  195. var                    bool    bWasSNFiltered;      // Mainly for debugging - the way this actor was inserted into Octree.
  196.  
  197. // Networking flags
  198. var              const    bool    bNetTemporary;                // Tear-off simulation in network play.
  199. var                    bool    bOnlyRelevantToOwner;            // this actor is only relevant to its owner.
  200. var transient const    bool    bNetDirty;                    // set when any attribute is assigned a value in unrealscript, reset when the actor is replicated
  201. var                    bool    bAlwaysRelevant;            // Always relevant for network.
  202. var                    bool    bReplicateInstigator;        // Replicate instigator to client (used by bNetTemporary projectiles).
  203. var                    bool    bReplicateMovement;            // if true, replicate movement/location related properties
  204. var                    bool    bSkipActorPropertyReplication; // if true, don't replicate actor class variables for this actor
  205. var                    bool    bUpdateSimulatedPosition;    // if true, update velocity/location after initialization for simulated proxies
  206. var                    bool    bTearOff;                    // if true, this actor is no longer replicated to new clients, and 
  207.                                                         // is "torn off" (becomes a ROLE_Authority) on clients to which it was being replicated.
  208. var                    bool    bOnlyDirtyReplication;        // if true, only replicate actor if bNetDirty is true - useful if no C++ changed attributes (such as physics) 
  209.                                                         // bOnlyDirtyReplication only used with bAlwaysRelevant actors
  210. var                    bool    bReplicateAnimations;        // Should replicate SimAnim
  211. var const           bool    bNetInitialRotation;        // Should replicate initial rotation
  212. var                    bool    bCompressedPosition;        // used by networking code to flag compressed position replication
  213. var                    bool    bAlwaysZeroBoneOffset;        // if true, offset always zero when attached to skeletalmesh
  214.  
  215. // Net variables.
  216. enum ENetRole
  217. {
  218.     ROLE_None,              // No role at all.
  219.     ROLE_DumbProxy,            // Dumb proxy of this actor.
  220.     ROLE_SimulatedProxy,    // Locally simulated proxy of this actor.
  221.     ROLE_AutonomousProxy,    // Locally autonomous proxy of this actor.
  222.     ROLE_Authority,            // Authoritative control over the actor.
  223. };
  224. var ENetRole RemoteRole, Role;
  225. var const transient int        NetTag;
  226. var const float NetUpdateTime;    // time of last update
  227. var float NetUpdateFrequency; // How many seconds between net updates.
  228. var float NetPriority; // Higher priorities means update it more frequently.
  229. var Pawn                  Instigator;    // Pawn responsible for damage caused by this actor.
  230. var(Sound) sound          AmbientSound;  // Ambient sound effect.
  231. var const name            AttachmentBone;        // name of bone to which actor is attached (if attached to center of base, =='')
  232.  
  233. var       const LevelInfo Level;         // Level this actor is on.
  234. var transient const Level    XLevel;            // Level object.
  235. var(Advanced)    float        LifeSpan;        // How old the object lives before dying, 0=forever.
  236.  
  237. //-----------------------------------------------------------------------------
  238. // Structures.
  239.  
  240. // Identifies a unique convex volume in the world.
  241. struct PointRegion
  242. {
  243.     var zoneinfo Zone;       // Zone.
  244.     var int      iLeaf;      // Bsp leaf.
  245.     var byte     ZoneNumber; // Zone number.
  246. };
  247.  
  248. //-----------------------------------------------------------------------------
  249. // Major actor properties.
  250.  
  251. // Scriptable.
  252. var const PointRegion     Region;        // Region this actor is in.
  253. var                float       TimerRate;        // Timer event, 0=no timer.
  254. var(Display) const mesh        Mesh;            // Mesh if DrawType=DT_Mesh.
  255. var transient float        LastRenderTime;    // last time this actor was rendered.
  256. var(Events) name            Tag;            // Actor's tag name.
  257. var transient array<int>  Leaves;         // BSP leaves this actor is in.
  258. var(Events) name          Event;         // The event this actor causes.
  259. var Inventory             Inventory;     // Inventory chain.
  260. var        const    float       TimerCounter;    // Counts up until it reaches TimerRate.
  261. var transient MeshInstance MeshInstance;    // Mesh instance.
  262. var(Display) float          LODBias;
  263. var(Object) name InitialState;
  264. var(Object) name Group;
  265.  
  266. // Internal.
  267. var const array<Actor>    Touching;         // List of touching actors.
  268. var const transient array<int>  OctreeNodes;// Array of nodes of the octree Actor is currently in. Internal use only.
  269. var const transient Box      OctreeBox;     // Actor bounding box cached when added to Octree. Internal use only.
  270. var const transient vector OctreeBoxCenter;
  271. var const transient vector OctreeBoxRadii;
  272. var const actor           Deleted;       // Next actor in just-deleted chain.
  273. var const float           LatentFloat;   // Internal latent function use.
  274.  
  275. // Internal tags.
  276. var const native int CollisionTag;
  277. var const transient int JoinedTag;
  278.  
  279. // The actor's position and rotation.
  280. var const    PhysicsVolume    PhysicsVolume;    // physics volume this actor is currently in
  281. var(Movement) const vector    Location;        // Actor's location; use Move to set.
  282. var(Movement) const rotator Rotation;        // Rotation.
  283. var(Movement) vector        Velocity;        // Velocity.
  284. var              vector        Acceleration;    // Acceleration.
  285.  
  286. var const vector CachedLocation;
  287. var const Rotator CachedRotation;
  288. var Matrix CachedLocalToWorld;
  289.  
  290. // Attachment related variables
  291. var(Movement)    name    AttachTag;
  292. var const array<Actor>  Attached;            // array of actors attached to this actor.
  293. var const vector        RelativeLocation;    // location relative to base/bone (valid if base exists)
  294. var const rotator        RelativeRotation;    // rotation relative to base/bone (valid if base exists)
  295.  
  296. var(Movement) bool bHardAttach;             // Uses 'hard' attachment code. bBlockActor and bBlockPlayer must also be false.
  297.                                             // This actor cannot then move relative to base (setlocation etc.).
  298.                                             // Dont set while currently based on something!
  299.                                             // 
  300. var const     Matrix    HardRelMatrix;        // Transform of actor in base's ref frame. Doesn't change after SetBase.
  301.  
  302. // Projectors
  303. struct ProjectorRenderInfoPtr { var int Ptr; };    // Hack to to fool C++ header generation...
  304. struct StaticMeshProjectorRenderInfoPtr { var int Ptr; };
  305. var const native array<ProjectorRenderInfoPtr> Projectors;// Projected textures on this actor
  306. var const native array<StaticMeshProjectorRenderInfoPtr>    StaticMeshProjectors;
  307.  
  308. //-----------------------------------------------------------------------------
  309. // Display properties.
  310.  
  311. var(Display) Material        Texture;            // Sprite texture.if DrawType=DT_Sprite
  312. var StaticMeshInstance        StaticMeshInstance; // Contains per-instance static mesh data, like static lighting data.
  313. var const export model        Brush;                // Brush if DrawType=DT_Brush.
  314. var(Display) const float    DrawScale;            // Scaling factor, 1.0=normal size.
  315. var(Display) const vector    DrawScale3D;        // Scaling vector, (1.0,1.0,1.0)=normal size.
  316. var(Display) vector            PrePivot;            // Offset from box center for drawing.
  317. var(Display) array<Material> Skins;                // Multiple skin support - not replicated.
  318. var            Material        RepSkin;            // replicated skin (sets Skins[0] if not none)
  319. var(Display) byte            AmbientGlow;        // Ambient brightness, or 255=pulsing.
  320. var(Display) byte           MaxLights;          // Limit to hardware lights active on this primitive.
  321. var(Display) ConvexVolume    AntiPortal;            // Convex volume used for DT_AntiPortal
  322. var(Display) float          CullDistance;       // 0 == no distance cull, < 0 only drawn at distance > 0 cull at distance
  323. var(Display) float            ScaleGlow;
  324.  
  325. // Style for rendering sprites, meshes.
  326. var(Display) enum ERenderStyle
  327. {
  328.     STY_None,
  329.     STY_Normal,
  330.     STY_Masked,
  331.     STY_Translucent,
  332.     STY_Modulated,
  333.     STY_Alpha,
  334.     STY_Additive,
  335.     STY_Subtractive,
  336.     STY_Particle,
  337.     STY_AlphaZ,
  338. } Style;
  339.  
  340. // Display.
  341. var(Display)  bool      bUnlit;                    // Lights don't affect actor.
  342. var(Display)  bool      bShadowCast;            // Casts static shadows.
  343. var(Display)  bool        bStaticLighting;        // Uses raytraced lighting.
  344. var(Display)  bool        bUseLightingFromBase;    // Use Unlit/AmbientGlow from Base
  345.  
  346. // Advanced.
  347. var              bool        bHurtEntry;                // keep HurtRadius from being reentrant
  348. var(Advanced) bool        bGameRelevant;            // Always relevant for game
  349. var(Advanced) bool        bCollideWhenPlacing;    // This actor collides with the world when placing.
  350. var              bool        bTravel;                // Actor is capable of travelling among servers.
  351. var(Advanced) bool        bMovable;                // Actor can be moved.
  352. var              bool        bDestroyInPainVolume;    // destroy this actor if it enters a pain volume
  353. var              bool        bCanBeDamaged;            // can take damage
  354. var(Advanced) bool        bShouldBaseAtStartup;    // if true, find base for this actor at level startup, if collides with world and PHYS_None or PHYS_Rotating
  355. var              bool        bPendingDelete;            // set when actor is about to be deleted (since endstate and other functions called 
  356.                                                 // during deletion process before bDeleteMe is set).
  357. var                    bool    bAnimByOwner;        // Animation dictated by owner.
  358. var                 bool    bOwnerNoSee;        // Everything but the owner can see this actor.
  359. var(Advanced)        bool    bCanTeleport;        // This actor can be teleported.
  360. var                    bool    bClientAnim;        // Don't replicate any animations - animation done client-side
  361. var                    bool    bDisturbFluidSurface; // Cause ripples when in contact with FluidSurface.
  362. var              const    bool    bAlwaysTick;        // Update even when players-only.
  363.  
  364. //-----------------------------------------------------------------------------
  365. // Sound.
  366.  
  367. // Ambient sound.
  368. var(Sound) float        SoundRadius;            // Radius of ambient sound.
  369. var(Sound) byte         SoundVolume;            // Volume of ambient sound.
  370. var(Sound) byte         SoundPitch;                // Sound pitch shift, 64.0=none.
  371.  
  372. // Sound occlusion
  373. enum ESoundOcclusion
  374. {
  375.     OCCLUSION_Default,
  376.     OCCLUSION_None,
  377.     OCCLUSION_BSP,
  378.     OCCLUSION_StaticMeshes,
  379. };
  380.  
  381. var(Sound) ESoundOcclusion SoundOcclusion;        // Sound occlusion approach.
  382. var(Sound) bool                bFullVolume;        // Whether to apply ambient attenuation.
  383.  
  384. // Sound slots for actors.
  385. enum ESoundSlot
  386. {
  387.     SLOT_None,
  388.     SLOT_Misc,
  389.     SLOT_Pain,
  390.     SLOT_Interact,
  391.     SLOT_Ambient,
  392.     SLOT_Talk,
  393.     SLOT_Interface,
  394. };
  395.  
  396. // Music transitions.
  397. enum EMusicTransition
  398. {
  399.     MTRAN_None,
  400.     MTRAN_Instant,
  401.     MTRAN_Segue,
  402.     MTRAN_Fade,
  403.     MTRAN_FastFade,
  404.     MTRAN_SlowFade,
  405. };
  406.  
  407. // Regular sounds.
  408. var(Sound) float TransientSoundVolume;    // default sound volume for regular sounds (can be overridden in playsound)
  409. var(Sound) float TransientSoundRadius;    // default sound radius for regular sounds (can be overridden in playsound)
  410.  
  411. //-----------------------------------------------------------------------------
  412. // Collision.
  413.  
  414. // Collision size.
  415. var(Collision) const float CollisionRadius;        // Radius of collision cyllinder.
  416. var(Collision) const float CollisionHeight;        // Half-height cyllinder.
  417.  
  418. // Collision flags.
  419. var(Collision) const bool bCollideActors;        // Collides with other actors.
  420. var(Collision) bool       bCollideWorld;        // Collides with the world.
  421. var(Collision) bool       bBlockActors;            // Blocks other nonplayer actors.
  422. var(Collision) bool       bBlockPlayers;        // Blocks other player actors.
  423. var(Collision) bool       bProjTarget;            // Projectiles should potentially target this actor.
  424. var(Collision) bool          bBlockZeroExtentTraces; // block zero extent actors/traces
  425. var(Collision) bool          bBlockNonZeroExtentTraces;    // block non-zero extent actors/traces
  426. var(Collision) bool       bAutoAlignToTerrain;  // Auto-align to terrain in the editor
  427. var(Collision) bool          bUseCylinderCollision;// Force axis aligned cylinder collision (useful for static mesh pickups, etc.)
  428. var(Collision) const bool bBlockKarma;            // Block actors being simulated with Karma.
  429. var                   bool    bNetNotify;                 // actor wishes to be notified of replication events
  430.  
  431. //-----------------------------------------------------------------------------
  432. // Physics.
  433.  
  434. // Options.
  435. var              bool          bIgnoreOutOfWorld; // Don't destroy if enters zone zero
  436. var(Movement) bool        bBounce;           // Bounces when hits ground fast.
  437. var(Movement) bool          bFixedRotationDir; // Fixed direction of rotation.
  438. var(Movement) bool          bRotateToDesired;  // Rotate to DesiredRotation.
  439. var           bool        bInterpolating;    // Performing interpolating.
  440. var              const bool  bJustTeleported;   // Used by engine physics - not valid for scripts.
  441.  
  442. // Physics properties.
  443. var(Movement) float       Mass;                // Mass of this actor.
  444. var(Movement) float       Buoyancy;            // Water buoyancy.
  445. var(Movement) rotator      RotationRate;        // Change in rotation per second.
  446. var(Movement) rotator     DesiredRotation;    // Physics will smoothly rotate actor to this rotation if bRotateToDesired.
  447. var              Actor          PendingTouch;        // Actor touched during move which wants to add an effect after the movement completes 
  448. var       const vector    ColLocation;        // Actor's old location one move ago. Only for debugging
  449.  
  450. const MAXSTEPHEIGHT = 35.0; // Maximum step height walkable by pawns
  451. const MINFLOORZ = 0.7; // minimum z value for floor normal (if less, not a walkable floor)
  452.                        // 0.7 ~= 45 degree angle for floor
  453.                        
  454. // ifdef WITH_KARMA
  455.  
  456. // Used to avoid compression
  457. struct KRBVec
  458. {
  459.     var float    X, Y, Z;
  460. };
  461.  
  462. struct KRigidBodyState
  463. {
  464.     var KRBVec    Position;
  465.     var Quat    Quaternion;
  466.     var KRBVec    LinVel;
  467.     var KRBVec    AngVel;
  468. };
  469.                        
  470. var(Karma) export editinline KarmaParamsCollision KParams; // Parameters for Karma Collision/Dynamics.
  471. var const native int KStepTag;
  472.  
  473. // endif
  474.  
  475. //-----------------------------------------------------------------------------
  476. // Animation replication (can be used to replicate channel 0 anims for dumb proxies)
  477. struct AnimRep
  478. {
  479.     var name AnimSequence; 
  480.     var bool bAnimLoop;    
  481.     var byte AnimRate;        // note that with compression, max replicated animrate is 4.0
  482.     var byte AnimFrame;
  483.     var byte TweenRate;        // note that with compression, max replicated tweentime is 4 seconds
  484. };
  485. var transient AnimRep          SimAnim;           // only replicated if bReplicateAnimations is true
  486.  
  487. //-----------------------------------------------------------------------------
  488. // Forces.
  489.  
  490. enum EForceType
  491. {
  492.     FT_None,
  493.     FT_DragAlong,
  494. };
  495.  
  496. var (Force) EForceType    ForceType;
  497. var (Force)    float        ForceRadius;
  498. var (Force) float        ForceScale;
  499.  
  500.  
  501. //-----------------------------------------------------------------------------
  502. // Networking.
  503.  
  504. // Symmetric network flags, valid during replication only.
  505. var const bool bNetInitial;       // Initial network update.
  506. var const bool bNetOwner;         // Player owns this actor.
  507. var const bool bNetRelevant;      // Actor is currently relevant. Only valid server side, only when replicating variables.
  508. var const bool bDemoRecording;      // True we are currently demo recording
  509. var const bool bClientDemoRecording;// True we are currently recording a client-side demo
  510. var const bool bRepClientDemo;        // True if remote client is recording demo
  511. var const bool bClientDemoNetFunc;// True if we're client-side demo recording and this call originated from the remote.
  512. var const bool bDemoOwner;            // Demo recording driver owns this actor.
  513. var bool       bNoRepMesh;            // don't replicate mesh
  514.  
  515. //Editing flags
  516. var(Advanced) bool        bHiddenEd;     // Is hidden during editing.
  517. var(Advanced) bool        bHiddenEdGroup;// Is hidden by the group brower.
  518. var(Advanced) bool        bDirectional;  // Actor shows direction arrow during editing.
  519. var const bool            bSelected;     // Selected in UnrealEd.
  520. var(Advanced) bool        bEdShouldSnap; // Snap to grid in editor.
  521. var transient bool        bEdSnap;       // Should snap to grid in UnrealEd.
  522. var transient const bool  bTempEditor;   // Internal UnrealEd.
  523. var    bool                  bObsolete;     // actor is obsolete - warn level designers to remove it
  524. var(Collision) bool          bPathColliding;// this actor should collide (if bWorldGeometry && bBlockActors is true) during path building (ignored if bStatic is true, as actor will always collide during path building)
  525. var transient bool          bPathTemp;     // Internal/path building
  526. var    bool                  bScriptInitialized; // set to prevent re-initializing of actors spawned during level startup
  527. var(Advanced) bool        bLockLocation; // Prevent the actor from being moved in the editor.
  528.  
  529. var class<LocalMessage> MessageClass;
  530.  
  531. //-----------------------------------------------------------------------------
  532. // Enums.
  533.  
  534. // Travelling from server to server.
  535. enum ETravelType
  536. {
  537.     TRAVEL_Absolute,    // Absolute URL.
  538.     TRAVEL_Partial,        // Partial (carry name, reset server).
  539.     TRAVEL_Relative,    // Relative URL.
  540. };
  541.  
  542.  
  543. // double click move direction.
  544. enum EDoubleClickDir
  545. {
  546.     DCLICK_None,
  547.     DCLICK_Left,
  548.     DCLICK_Right,
  549.     DCLICK_Forward,
  550.     DCLICK_Back,
  551.     DCLICK_Active,
  552.     DCLICK_Done
  553. };
  554.  
  555. enum eKillZType
  556. {
  557.     KILLZ_None,
  558.     KILLZ_Lava,
  559.     KILLZ_Suicide
  560. };
  561.  
  562. //-----------------------------------------------------------------------------
  563. // natives.
  564.  
  565. // Execute a console command in the context of the current level and game engine.
  566. native function string ConsoleCommand( string Command );
  567.  
  568. //-----------------------------------------------------------------------------
  569. // Network replication.
  570.  
  571. replication
  572. {
  573.     // Location
  574.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && bReplicateMovement
  575.                     && (((RemoteRole == ROLE_AutonomousProxy) && bNetInitial)
  576.                         || ((RemoteRole == ROLE_SimulatedProxy) && (bNetInitial || bUpdateSimulatedPosition) && ((Base == None) || Base.bWorldGeometry))
  577.                         || ((RemoteRole == ROLE_DumbProxy) && ((Base == None) || Base.bWorldGeometry))) )
  578.         Location;
  579.  
  580.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && bReplicateMovement 
  581.                     && ((DrawType == DT_Mesh) || (DrawType == DT_StaticMesh))
  582.                     && (((RemoteRole == ROLE_AutonomousProxy) && bNetInitial)
  583.                         || ((RemoteRole == ROLE_SimulatedProxy) && (bNetInitial || bUpdateSimulatedPosition) && ((Base == None) || Base.bWorldGeometry))
  584.                         || ((RemoteRole == ROLE_DumbProxy) && ((Base == None) || Base.bWorldGeometry))) )
  585.         Rotation;
  586.  
  587.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && bReplicateMovement 
  588.                     && RemoteRole<=ROLE_SimulatedProxy )
  589.         Base,bOnlyDrawIfAttached;
  590.  
  591.     unreliable if( (!bSkipActorPropertyReplication || bNetInitial) && bReplicateMovement 
  592.                     && RemoteRole<=ROLE_SimulatedProxy && (Base != None) && !Base.bWorldGeometry)
  593.         RelativeRotation, RelativeLocation, AttachmentBone;
  594.  
  595.     // Physics
  596.     unreliable if( (!bSkipActorPropertyReplication || bNetInitial) && bReplicateMovement 
  597.                     && (((RemoteRole == ROLE_SimulatedProxy) && (bNetInitial || bUpdateSimulatedPosition))
  598.                         || ((RemoteRole == ROLE_DumbProxy) && (Physics == PHYS_Falling))) )
  599.         Velocity;
  600.  
  601.     unreliable if( (!bSkipActorPropertyReplication || bNetInitial) && bReplicateMovement 
  602.                     && (((RemoteRole == ROLE_SimulatedProxy) && bNetInitial)
  603.                         || (RemoteRole == ROLE_DumbProxy)) )
  604.         Physics;
  605.  
  606.     unreliable if( (!bSkipActorPropertyReplication || bNetInitial) && bReplicateMovement 
  607.                     && (RemoteRole <= ROLE_SimulatedProxy) && (Physics == PHYS_Rotating) )
  608.         bFixedRotationDir, bRotateToDesired, RotationRate, DesiredRotation;
  609.  
  610.     // Ambient sound.
  611.     unreliable if( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) && (!bNetOwner || !bClientAnim) )
  612.         AmbientSound;
  613.  
  614.     unreliable if( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) && (!bNetOwner || !bClientAnim) 
  615.                     && (AmbientSound!=None) )
  616.         SoundRadius, SoundVolume, SoundPitch;
  617.  
  618.     // Animation. 
  619.     unreliable if( (!bSkipActorPropertyReplication || bNetInitial) 
  620.                 && (Role==ROLE_Authority) && (DrawType==DT_Mesh) && bReplicateAnimations )
  621.         SimAnim;
  622.  
  623.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) )
  624.         bHidden, bHardAttach;
  625.  
  626.     // Properties changed using accessor functions (Owner, rendering, and collision)
  627.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) && bNetDirty )
  628.         Owner, DrawScale, DrawType, bCollideActors,bCollideWorld,bOnlyOwnerSee,Texture,Style, RepSkin;
  629.  
  630.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) && bNetDirty 
  631.                     && (bCollideActors || bCollideWorld) )
  632.         bProjTarget, bBlockActors, bBlockPlayers, CollisionRadius, CollisionHeight;
  633.  
  634.     // Properties changed only when spawning or in script (relationships, rendering, lighting)
  635.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) )
  636.         Role,RemoteRole,bNetOwner,LightType,bTearOff;
  637.  
  638.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) 
  639.                     && bNetDirty && bNetOwner )
  640.         Inventory;
  641.  
  642.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) 
  643.                     && bNetDirty && bReplicateInstigator )
  644.         Instigator;
  645.  
  646.     // Infrequently changed mesh properties
  647.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) 
  648.                     && bNetDirty && (DrawType == DT_Mesh) )
  649.         AmbientGlow,bUnlit,PrePivot;
  650.  
  651.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) 
  652.                     && bNetDirty && !bNoRepMesh && (DrawType == DT_Mesh) )
  653.         Mesh;
  654.  
  655.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) 
  656.                 && bNetDirty && (DrawType == DT_StaticMesh) )
  657.         StaticMesh;
  658.  
  659.     // Infrequently changed lighting properties.
  660.     unreliable if ( (!bSkipActorPropertyReplication || bNetInitial) && (Role==ROLE_Authority) 
  661.                     && bNetDirty && (LightType != LT_None) )
  662.         LightEffect, LightBrightness, LightHue, LightSaturation,
  663.         LightRadius, LightPeriod, LightPhase, bSpecialLit;
  664.  
  665.     // replicated functions
  666.     unreliable if( bDemoRecording )
  667.         DemoPlaySound;
  668. }
  669.  
  670. //=============================================================================
  671. // Actor error handling.
  672.  
  673. // Handle an error and kill this one actor.
  674. native(233) final function Error( coerce string S );
  675.  
  676. //=============================================================================
  677. // General functions.
  678.  
  679. // Latent functions.
  680. native(256) final latent function Sleep( float Seconds );
  681.  
  682. // Collision.
  683. native(262) final function SetCollision( optional bool NewColActors, optional bool NewBlockActors, optional bool NewBlockPlayers );
  684. native(283) final function bool SetCollisionSize( float NewRadius, float NewHeight );
  685. native final function SetDrawScale(float NewScale);
  686. native final function SetDrawScale3D(vector NewScale3D);
  687. native final function SetStaticMesh(StaticMesh NewStaticMesh);
  688. native final function SetDrawType(EDrawType NewDrawType);
  689.  
  690. // Movement.
  691. native(266) final function bool Move( vector Delta );
  692. native(267) final function bool SetLocation( vector NewLocation );
  693. native(299) final function bool SetRotation( rotator NewRotation );
  694.  
  695. // SetRelativeRotation() sets the rotation relative to the actor's base
  696. native final function bool SetRelativeRotation( rotator NewRotation );
  697. native final function bool SetRelativeLocation( vector NewLocation );
  698.  
  699. native(3969) final function bool MoveSmooth( vector Delta );
  700. native(3971) final function AutonomousPhysics(float DeltaSeconds);
  701.  
  702. // Relations.
  703. native(298) final function SetBase( actor NewBase, optional vector NewFloor );
  704. native(272) final function SetOwner( actor NewOwner );
  705.  
  706. //=============================================================================
  707. // Animation.
  708.  
  709. native final function string GetMeshName();
  710.  
  711. // Animation functions.
  712. native(259) final function PlayAnim( name Sequence, optional float Rate, optional float TweenTime, optional int Channel );
  713. native(260) final function LoopAnim( name Sequence, optional float Rate, optional float TweenTime, optional int Channel );
  714. native(294) final function TweenAnim( name Sequence, float Time, optional int Channel );
  715. native(282) final function bool IsAnimating(optional int Channel);
  716. native(261) final latent function FinishAnim(optional int Channel);
  717. native(263) final function bool HasAnim( name Sequence );
  718. native final function StopAnimating( optional bool ClearAllButBase );
  719. native final function FreezeAnimAt( float Time, optional int Channel);
  720. native final function SetAnimFrame( float Time, optional int Channel, optional int UnitFlag );
  721.  
  722. native final function bool IsTweening(int Channel);
  723.  
  724. // Animation notifications.
  725. event AnimEnd( int Channel );
  726. native final function EnableChannelNotify ( int Channel, int Switch );
  727. native final function int GetNotifyChannel();
  728.  
  729. // Skeletal animation.
  730. simulated native final function LinkSkelAnim( MeshAnimation Anim, optional mesh NewMesh );
  731. simulated native final function LinkMesh( mesh NewMesh, optional bool bKeepAnim );
  732. native final function BoneRefresh();
  733.  
  734. native final function AnimBlendParams( int Stage, optional float BlendAlpha, optional float InTime, optional float OutTime, optional name BoneName, optional bool bGlobalPose);
  735. native final function AnimBlendToAlpha( int Stage, float TargetAlpha, float TimeInterval );
  736.  
  737. native final function coords  GetBoneCoords(   name BoneName );
  738. native final function rotator GetBoneRotation( name BoneName, optional int Space );
  739.  
  740. native final function vector  GetRootLocation();
  741. native final function rotator GetRootRotation();
  742. native final function vector  GetRootLocationDelta();
  743. native final function rotator GetRootRotationDelta();
  744.  
  745. native final function bool  AttachToBone( actor Attachment, name BoneName );
  746. native final function bool  DetachFromBone( actor Attachment );
  747.  
  748. native final function LockRootMotion( int Lock );
  749. native final function SetBoneScale( int Slot, optional float BoneScale, optional name BoneName );
  750.  
  751. native final function SetBoneDirection( name BoneName, rotator BoneTurn, optional vector BoneTrans, optional float Alpha, optional int Space );
  752. native final function SetBoneLocation( name BoneName, optional vector BoneTrans, optional float Alpha );
  753. native final function SetBoneRotation( name BoneName, optional rotator BoneTurn, optional int Space, optional float Alpha );
  754. native final function GetAnimParams( int Channel, out name OutSeqName, out float OutAnimFrame, out float OutAnimRate );
  755. native final function bool AnimIsInGroup( int Channel, name GroupName );  
  756.  
  757. //=========================================================================
  758. // Rendering.
  759.  
  760. native final function plane GetRenderBoundingSphere();
  761. native final function DrawDebugLine( vector LineStart, vector LineEnd, byte R, byte G, byte B); // SLOW! Use for debugging only!
  762.  
  763. //=========================================================================
  764. // Physics.
  765.  
  766. native final function DebugClock();
  767. native final function DebugUnclock();
  768.  
  769. // Physics control.
  770. native(301) final latent function FinishInterpolation();
  771. native(3970) final function SetPhysics( EPhysics newPhysics );
  772.  
  773. native final function OnlyAffectPawns(bool B);
  774.  
  775. // ifdef WITH_KARMA
  776. native final function quat KGetRBQuaternion();
  777.  
  778. native final function KGetRigidBodyState(out KRigidBodyState RBstate);
  779. native final function KDrawRigidBodyState(KRigidBodyState RBState, bool AltColour); // SLOW! Use for debugging only!
  780. native final function vector KRBVecToVector(KRBVec RBvec);
  781. native final function KRBVec KRBVecFromVector(vector v);
  782.  
  783. native final function KSetMass( float mass );
  784. native final function float KGetMass();
  785.  
  786. // Set inertia tensor assuming a mass of 1. Scaled by mass internally to calculate actual inertia tensor.
  787. native final function KSetInertiaTensor( vector it1, vector it2 );
  788. native final function KGetInertiaTensor( out vector it1, out vector it2 );
  789.  
  790. native final function KSetDampingProps( float lindamp, float angdamp );
  791. native final function KGetDampingProps( out float lindamp, out float angdamp );
  792.  
  793. native final function KSetFriction( float friction );
  794. native final function float KGetFriction();
  795.  
  796. native final function KSetRestitution( float rest );
  797. native final function float KGetRestitution();
  798.  
  799. native final function KSetCOMOffset( vector offset );
  800. native final function KGetCOMOffset( out vector offset );
  801. native final function KGetCOMPosition( out vector pos ); // get actual position of actors COM in world space
  802.  
  803. native final function KSetImpactThreshold( float thresh );
  804. native final function float KGetImpactThreshold();
  805.  
  806. native final function KWake();
  807. native final function bool KIsAwake();
  808. native final function KAddImpulse( vector Impulse, vector Position, optional name BoneName );
  809.  
  810. native final function KSetStayUpright( bool stayUpright, bool allowRotate );
  811. native final function KSetStayUprightParams( float stiffness, float damping );
  812.  
  813. native final function KSetBlockKarma( bool newBlock );
  814.  
  815. native final function KSetActorGravScale( float ActorGravScale );
  816. native final function float KGetActorGravScale();
  817.  
  818. // Disable/Enable Karma contact generation between this actor, and another actor.
  819. // Collision is on by default.
  820. native final function KDisableCollision( actor Other );
  821. native final function KEnableCollision( actor Other );
  822.  
  823. // Ragdoll-specific functions
  824. native final function KSetSkelVel( vector Velocity, optional vector AngVelocity, optional bool AddToCurrent );
  825. native final function float KGetSkelMass();
  826. native final function KFreezeRagdoll();
  827.  
  828. // You MUST turn collision off (KSetBlockKarma) before using bone lifters!
  829. native final function KAddBoneLifter( name BoneName, InterpCurve LiftVel, float LateralFriction, InterpCurve Softness ); 
  830. native final function KRemoveLifterFromBone( name BoneName ); 
  831. native final function KRemoveAllBoneLifters(); 
  832.  
  833. // Used for only allowing a fixed maximum number of ragdolls in action.
  834. native final function KMakeRagdollAvailable();
  835. native final function bool KIsRagdollAvailable();
  836.  
  837. // event called when Karmic actor hits with impact velocity over KImpactThreshold
  838. event KImpact(actor other, vector pos, vector impactVel, vector impactNorm); 
  839.  
  840. // event called when karma actor's velocity drops below KVelDropBelowThreshold;
  841. event KVelDropBelow();
  842.  
  843. // event called when a ragdoll convulses (see KarmaParamsSkel)
  844. event KSkelConvulse();
  845.  
  846. // event called just before sim to allow user to 
  847. // NOTE: you should ONLY put numbers into Force and Torque during this event!!!!
  848. event KApplyForce(out vector Force, out vector Torque);
  849.  
  850. // This is called from inside C++ physKarma at the appropriate time to update state of Karma rigid body.
  851. // If you return true, newState will be set into the rigid body. Return false and it will do nothing.
  852. event bool KUpdateState(out KRigidBodyState newState);
  853.  
  854. // endif
  855.  
  856. // Timing
  857. native final function Clock(out float time);
  858. native final function UnClock(out float time);
  859.  
  860. //=========================================================================
  861. // Music
  862.  
  863. native final function int PlayMusic( string Song, float FadeInTime );
  864. native final function StopMusic( int SongHandle, float FadeOutTime );
  865. native final function StopAllMusic( float FadeOutTime );
  866.  
  867.  
  868. //=========================================================================
  869. // Engine notification functions.
  870.  
  871. //
  872. // Major notifications.
  873. //
  874. event Destroyed();
  875. event GainedChild( Actor Other );
  876. event LostChild( Actor Other );
  877. event Tick( float DeltaTime );
  878. event PostNetReceive(); 
  879.  
  880. //
  881. // Triggers.
  882. //
  883. event Trigger( Actor Other, Pawn EventInstigator );
  884. event UnTrigger( Actor Other, Pawn EventInstigator );
  885. event BeginEvent();
  886. event EndEvent();
  887.  
  888. //
  889. // Physics & world interaction.
  890. //
  891. event Timer();
  892. event HitWall( vector HitNormal, actor HitWall );
  893. event Falling();
  894. event Landed( vector HitNormal );
  895. event ZoneChange( ZoneInfo NewZone );
  896. event PhysicsVolumeChange( PhysicsVolume NewVolume );
  897. event Touch( Actor Other );
  898. event PostTouch( Actor Other ); // called for PendingTouch actor after physics completes
  899. event UnTouch( Actor Other );
  900. event Bump( Actor Other );
  901. event BaseChange();
  902. event Attach( Actor Other );
  903. event Detach( Actor Other );
  904. event Actor SpecialHandling(Pawn Other);
  905. event bool EncroachingOn( actor Other );
  906. event EncroachedBy( actor Other );
  907. event FinishedInterpolation()
  908. {
  909.     bInterpolating = false;
  910. }
  911.  
  912. event EndedRotation();            // called when rotation completes
  913. event UsedBy( Pawn user ); // called if this Actor was touching a Pawn who pressed Use
  914.  
  915. simulated event FellOutOfWorld(eKillZType KillType)
  916. {
  917.     SetPhysics(PHYS_None);
  918.     Destroy();
  919. }    
  920.  
  921. //
  922. // Damage and kills.
  923. //
  924. event KilledBy( pawn EventInstigator );
  925. event TakeDamage( int Damage, Pawn EventInstigator, vector HitLocation, vector Momentum, class<DamageType> DamageType);
  926.  
  927. //
  928. // Trace a line and see what it collides with first.
  929. // Takes this actor's collision properties into account.
  930. // Returns first hit actor, Level if hit level, or None if hit nothing.
  931. //
  932. native(277) final function Actor Trace
  933. (
  934.     out vector      HitLocation,
  935.     out vector      HitNormal,
  936.     vector          TraceEnd,
  937.     optional vector TraceStart,
  938.     optional bool   bTraceActors,
  939.     optional vector Extent,
  940.     optional out material Material
  941. );
  942.  
  943. // returns true if did not hit world geometry
  944. native(548) final function bool FastTrace
  945. (
  946.     vector          TraceEnd,
  947.     optional vector TraceStart
  948. );
  949.  
  950. //
  951. // Spawn an actor. Returns an actor of the specified class, not
  952. // of class Actor (this is hardcoded in the compiler). Returns None
  953. // if the actor could not be spawned (either the actor wouldn't fit in
  954. // the specified location, or the actor list is full).
  955. // Defaults to spawning at the spawner's location.
  956. //
  957. native(278) final function actor Spawn
  958. (
  959.     class<actor>      SpawnClass,
  960.     optional actor      SpawnOwner,
  961.     optional name     SpawnTag,
  962.     optional vector   SpawnLocation,
  963.     optional rotator  SpawnRotation
  964. );
  965.  
  966. //
  967. // Destroy this actor. Returns true if destroyed, false if indestructable.
  968. // Destruction is latent. It occurs at the end of the tick.
  969. //
  970. native(279) final function bool Destroy();
  971.  
  972. // Networking - called on client when actor is torn off (bTearOff==true)
  973. event TornOff();
  974.  
  975. //=============================================================================
  976. // Timing.
  977.  
  978. // Causes Timer() events every NewTimerRate seconds.
  979. native(280) final function SetTimer( float NewTimerRate, bool bLoop );
  980.  
  981. //=============================================================================
  982. // Sound functions.
  983.  
  984. /* Play a sound effect.
  985. */
  986. native(264) final function PlaySound
  987. (
  988.     sound                Sound,
  989.     optional ESoundSlot Slot,
  990.     optional float        Volume,
  991.     optional bool        bNoOverride,
  992.     optional float        Radius,
  993.     optional float        Pitch,
  994.     optional bool        Attenuate
  995. );
  996.  
  997. /* play a sound effect, but don't propagate to a remote owner
  998.  (he is playing the sound clientside)
  999.  */
  1000. native simulated final function PlayOwnedSound
  1001. (
  1002.     sound                Sound,
  1003.     optional ESoundSlot Slot,
  1004.     optional float        Volume,
  1005.     optional bool        bNoOverride,
  1006.     optional float        Radius,
  1007.     optional float        Pitch,
  1008.     optional bool        Attenuate
  1009. );
  1010.  
  1011. native simulated event DemoPlaySound
  1012. (
  1013.     sound                Sound,
  1014.     optional ESoundSlot Slot,
  1015.     optional float        Volume,
  1016.     optional bool        bNoOverride,
  1017.     optional float        Radius,
  1018.     optional float        Pitch,
  1019.     optional bool        Attenuate
  1020. );
  1021.  
  1022. /* Get a sound duration.
  1023. */
  1024. native final function float GetSoundDuration( sound Sound );
  1025.  
  1026. //=============================================================================
  1027. // Force Feedback.
  1028. // jdf ---
  1029. native(566) final function PlayFeedbackEffect( String EffectName );
  1030. native(567) final function StopFeedbackEffect( optional String EffectName ); // Pass no parameter or "" to stop all
  1031. native(568) final function bool ForceFeedbackSupported( optional bool Enable );
  1032. // --- jdf
  1033.  
  1034. //=============================================================================
  1035. // AI functions.
  1036.  
  1037. /* Inform other creatures that you've made a noise
  1038.  they might hear (they are sent a HearNoise message)
  1039.  Senders of MakeNoise should have an instigator if they are not pawns.
  1040. */
  1041. native(512) final function MakeNoise( float Loudness );
  1042.  
  1043. /* PlayerCanSeeMe returns true if any player (server) or the local player (standalone
  1044. or client) has a line of sight to actor's location.
  1045. */
  1046. native(532) final function bool PlayerCanSeeMe();
  1047.  
  1048. native final function vector SuggestFallVelocity(vector Destination, vector Start, float MaxZ, float MaxXYSpeed);
  1049.  
  1050. //=============================================================================
  1051. // Regular engine functions.
  1052.  
  1053. // Teleportation.
  1054. event bool PreTeleport( Teleporter InTeleporter );
  1055. event PostTeleport( Teleporter OutTeleporter );
  1056.  
  1057. // Level state.
  1058. event BeginPlay();
  1059.  
  1060. //========================================================================
  1061. // Disk access.
  1062.  
  1063. // Find files.
  1064. native(539) final function string GetMapName( string NameEnding, string MapName, int Dir );
  1065. native(545) final function GetNextSkin( string Prefix, string CurrentSkin, int Dir, out string SkinName, out string SkinDesc );
  1066. native(547) final function string GetURLMap();
  1067. native final function string GetNextInt( string ClassName, int Num );
  1068. native final function GetNextIntDesc( string ClassName, int Num, out string Entry, out string Description );
  1069. native final function bool GetCacheEntry( int Num, out string GUID, out string Filename );
  1070. native final function bool MoveCacheEntry( string GUID, optional string NewFilename );  
  1071.  
  1072. //=============================================================================
  1073. // Iterator functions.
  1074.  
  1075. // Iterator functions for dealing with sets of actors.
  1076.  
  1077. /* AllActors() - avoid using AllActors() too often as it iterates through the whole actor list and is therefore slow
  1078. */
  1079. native(304) final iterator function AllActors     ( class<actor> BaseClass, out actor Actor, optional name MatchTag );
  1080.  
  1081. /* DynamicActors() only iterates through the non-static actors on the list (still relatively slow, bu
  1082.  much better than AllActors).  This should be used in most cases and replaces AllActors in most of 
  1083.  Epic's game code. 
  1084. */
  1085. native(313) final iterator function DynamicActors     ( class<actor> BaseClass, out actor Actor, optional name MatchTag );
  1086.  
  1087. /* ChildActors() returns all actors owned by this actor.  Slow like AllActors()
  1088. */
  1089. native(305) final iterator function ChildActors   ( class<actor> BaseClass, out actor Actor );
  1090.  
  1091. /* BasedActors() returns all actors based on the current actor (slow, like AllActors)
  1092. */
  1093. native(306) final iterator function BasedActors   ( class<actor> BaseClass, out actor Actor );
  1094.  
  1095. /* TouchingActors() returns all actors touching the current actor (fast)
  1096. */
  1097. native(307) final iterator function TouchingActors( class<actor> BaseClass, out actor Actor );
  1098.  
  1099. /* TraceActors() return all actors along a traced line.  Reasonably fast (like any trace)
  1100. */
  1101. native(309) final iterator function TraceActors   ( class<actor> BaseClass, out actor Actor, out vector HitLoc, out vector HitNorm, vector End, optional vector Start, optional vector Extent );
  1102.  
  1103. /* RadiusActors() returns all actors within a give radius.  Slow like AllActors().  Use CollidingActors() or VisibleCollidingActors() instead if desired actor types are visible
  1104. (not bHidden) and in the collision hash (bCollideActors is true)
  1105. */
  1106. native(310) final iterator function RadiusActors  ( class<actor> BaseClass, out actor Actor, float Radius, optional vector Loc );
  1107.  
  1108. /* VisibleActors() returns all visible actors within a radius.  Slow like AllActors().  Use VisibleCollidingActors() instead if desired actor types are 
  1109. in the collision hash (bCollideActors is true)
  1110. */
  1111. native(311) final iterator function VisibleActors ( class<actor> BaseClass, out actor Actor, optional float Radius, optional vector Loc );
  1112.  
  1113. /* VisibleCollidingActors() returns visible (not bHidden) colliding (bCollideActors==true) actors within a certain radius.
  1114. Much faster than AllActors() since it uses the collision hash
  1115. */
  1116. native(312) final iterator function VisibleCollidingActors ( class<actor> BaseClass, out actor Actor, float Radius, optional vector Loc, optional bool bIgnoreHidden );
  1117.  
  1118. /* CollidingActors() returns colliding (bCollideActors==true) actors within a certain radius.
  1119. Much faster than AllActors() for reasonably small radii since it uses the collision hash
  1120. */
  1121. native(321) final iterator function CollidingActors ( class<actor> BaseClass, out actor Actor, float Radius, optional vector Loc );
  1122.  
  1123. //=============================================================================
  1124. // Color functions
  1125. native(549) static final operator(20) color -     ( color A, color B );
  1126. native(550) static final operator(16) color *     ( float A, color B );
  1127. native(551) static final operator(20) color +     ( color A, color B );
  1128. native(552) static final operator(16) color *     ( color A, float B );
  1129.  
  1130. //=============================================================================
  1131. // Scripted Actor functions.
  1132.  
  1133. /* RenderOverlays()
  1134. called by player's hud to request drawing of actor specific overlays onto canvas
  1135. */
  1136. function RenderOverlays(Canvas Canvas);
  1137.  
  1138. // RenderTexture
  1139. event RenderTexture(ScriptedTexture Tex);
  1140.  
  1141. //
  1142. // Called immediately before gameplay begins.
  1143. //
  1144. event PreBeginPlay()
  1145. {
  1146.     // Handle autodestruction if desired.
  1147.     if( !bGameRelevant && (Level.NetMode != NM_Client) && !Level.Game.BaseMutator.CheckRelevance(Self) )
  1148.         Destroy();
  1149. }
  1150.  
  1151. //
  1152. // Broadcast a localized message to all players.
  1153. // Most message deal with 0 to 2 related PRIs.
  1154. // The LocalMessage class defines how the PRI's and optional actor are used.
  1155. //
  1156. event BroadcastLocalizedMessage( class<LocalMessage> MessageClass, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
  1157. {
  1158.     Level.Game.BroadcastLocalized( self, MessageClass, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
  1159. }
  1160.  
  1161. // Called immediately after gameplay begins.
  1162. //
  1163. event PostBeginPlay();
  1164.  
  1165. // Called after PostBeginPlay.
  1166. //
  1167. simulated event SetInitialState()
  1168. {
  1169.     bScriptInitialized = true;
  1170.     if( InitialState!='' )
  1171.         GotoState( InitialState );
  1172.     else
  1173.         GotoState( 'Auto' );
  1174. }
  1175.  
  1176. // called after PostBeginPlay.  On a net client, PostNetBeginPlay() is spawned after replicated variables have been initialized to
  1177. // their replicated values
  1178. event PostNetBeginPlay();
  1179.  
  1180. simulated function UpdatePrecacheMaterials()
  1181. {
  1182.     local int i;
  1183.     
  1184.     for ( i=0; i<Skins.Length; i++ )
  1185.         Level.AddPrecacheMaterial(Skins[i]);
  1186. }
  1187.  
  1188. simulated function UpdatePrecacheStaticMeshes()
  1189. {
  1190.     if ( (DrawType == DT_StaticMesh) && !bStatic && !bNoDelete )
  1191.         Level.AddPrecacheStaticMesh(StaticMesh);
  1192. }
  1193.  
  1194. /* HurtRadius()
  1195.  Hurt locally authoritative actors within the radius.
  1196. */
  1197. simulated final function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
  1198. {
  1199.     local actor Victims;
  1200.     local float damageScale, dist;
  1201.     local vector dir;
  1202.     
  1203.     if( bHurtEntry )
  1204.         return;
  1205.  
  1206.     bHurtEntry = true;
  1207.     foreach VisibleCollidingActors( class 'Actor', Victims, DamageRadius, HitLocation )
  1208.     {
  1209.         // don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag
  1210.         if( (Victims != self) && (Victims.Role == ROLE_Authority) && (!Victims.IsA('FluidSurfaceInfo')) )
  1211.         {
  1212.             dir = Victims.Location - HitLocation;
  1213.             dist = FMax(1,VSize(dir));
  1214.             dir = dir/dist; 
  1215.             damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius);
  1216.             Victims.TakeDamage
  1217.             (
  1218.                 damageScale * DamageAmount,
  1219.                 Instigator, 
  1220.                 Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir,
  1221.                 (damageScale * Momentum * dir),
  1222.                 DamageType
  1223.             );
  1224.         } 
  1225.     }
  1226.     bHurtEntry = false;
  1227. }
  1228.  
  1229. // Called when carried onto a new level, before AcceptInventory.
  1230. //
  1231. event TravelPreAccept();
  1232.  
  1233. // Called when carried into a new level, after AcceptInventory.
  1234. //
  1235. event TravelPostAccept();
  1236.  
  1237. // Called by PlayerController when this actor becomes its ViewTarget.
  1238. //
  1239. function BecomeViewTarget();
  1240.  
  1241. // Returns the string representation of the name of an object without the package
  1242. // prefixes.
  1243. //
  1244. function String GetItemName( string FullName )
  1245. {
  1246.     local int pos;
  1247.  
  1248.     pos = InStr(FullName, ".");
  1249.     While ( pos != -1 )
  1250.     {
  1251.         FullName = Right(FullName, Len(FullName) - pos - 1);
  1252.         pos = InStr(FullName, ".");
  1253.     }
  1254.  
  1255.     return FullName;
  1256. }
  1257.  
  1258. // Returns the human readable string representation of an object.
  1259. //
  1260. simulated function String GetHumanReadableName()
  1261. {
  1262.     return GetItemName(string(class));
  1263. }
  1264.  
  1265. final function ReplaceText(out string Text, string Replace, string With)
  1266. {
  1267.     local int i;
  1268.     local string Input;
  1269.         
  1270.     Input = Text;
  1271.     Text = "";
  1272.     i = InStr(Input, Replace);
  1273.     while(i != -1)
  1274.     {    
  1275.         Text = Text $ Left(Input, i) $ With;
  1276.         Input = Mid(Input, i + Len(Replace));    
  1277.         i = InStr(Input, Replace);
  1278.     }
  1279.     Text = Text $ Input;
  1280. }
  1281.  
  1282. // Set the display properties of an actor.  By setting them through this function, it allows
  1283. // the actor to modify other components (such as a Pawn's weapon) or to adjust the result
  1284. // based on other factors (such as a Pawn's other inventory wanting to affect the result)
  1285. function SetDisplayProperties(ERenderStyle NewStyle, Material NewTexture, bool bLighting )
  1286. {
  1287.     Style = NewStyle;
  1288.     texture = NewTexture;
  1289.     bUnlit = bLighting;
  1290. }
  1291.  
  1292. function SetDefaultDisplayProperties()
  1293. {
  1294.     Style = Default.Style;
  1295.     texture = Default.Texture;
  1296.     bUnlit = Default.bUnlit;
  1297. }
  1298.  
  1299. // Get localized message string associated with this actor
  1300. static function string GetLocalString(
  1301.     optional int Switch,
  1302.     optional PlayerReplicationInfo RelatedPRI_1, 
  1303.     optional PlayerReplicationInfo RelatedPRI_2
  1304.     )
  1305. {
  1306.     return "";
  1307. }
  1308.  
  1309. function MatchStarting(); // called when gameplay actually starts
  1310. function SetGRI(GameReplicationInfo GRI);
  1311.  
  1312. function String GetDebugName()
  1313. {
  1314.     return GetItemName(string(self));
  1315. }
  1316.  
  1317. /* DisplayDebug()
  1318. list important actor variable on canvas.  HUD will call DisplayDebug() on the current ViewTarget when
  1319. the ShowDebug exec is used
  1320. */
  1321. simulated function DisplayDebug(Canvas Canvas, out float YL, out float YPos)
  1322. {
  1323.     local string T;
  1324.     local float XL;
  1325.     local int i;
  1326.     local Actor A;
  1327.     local name anim;
  1328.     local float frame,rate;
  1329.  
  1330.     Canvas.Style = ERenderStyle.STY_Normal;
  1331.     Canvas.StrLen("TEST", XL, YL);
  1332.     YPos = YPos + YL;
  1333.     Canvas.SetPos(4,YPos);
  1334.     Canvas.SetDrawColor(255,0,0);
  1335.     T = GetDebugName();
  1336.     if ( bDeleteMe )
  1337.         T = T$" DELETED (bDeleteMe == true)";
  1338.  
  1339.     Canvas.DrawText(T, false);
  1340.     YPos += YL;
  1341.     Canvas.SetPos(4,YPos);
  1342.     Canvas.SetDrawColor(255,255,255);
  1343.  
  1344.     if ( Level.NetMode != NM_Standalone )
  1345.     {
  1346.         // networking attributes
  1347.         T = "ROLE ";
  1348.         Switch(Role)
  1349.         {
  1350.             case ROLE_None: T=T$"None"; break;
  1351.             case ROLE_DumbProxy: T=T$"DumbProxy"; break;
  1352.             case ROLE_SimulatedProxy: T=T$"SimulatedProxy"; break;
  1353.             case ROLE_AutonomousProxy: T=T$"AutonomousProxy"; break;
  1354.             case ROLE_Authority: T=T$"Authority"; break;
  1355.         }
  1356.         T = T$" REMOTE ROLE ";
  1357.         Switch(RemoteRole)
  1358.         {
  1359.             case ROLE_None: T=T$"None"; break;
  1360.             case ROLE_DumbProxy: T=T$"DumbProxy"; break;
  1361.             case ROLE_SimulatedProxy: T=T$"SimulatedProxy"; break;
  1362.             case ROLE_AutonomousProxy: T=T$"AutonomousProxy"; break;
  1363.             case ROLE_Authority: T=T$"Authority"; break;
  1364.         }
  1365.         if ( bTearOff )
  1366.             T = T$" Tear Off";
  1367.         Canvas.DrawText(T, false);
  1368.         YPos += YL;
  1369.         Canvas.SetPos(4,YPos);
  1370.     }
  1371.     T = "Physics ";
  1372.     Switch(PHYSICS)
  1373.     {
  1374.         case PHYS_None: T=T$"None"; break;
  1375.         case PHYS_Walking: T=T$"Walking"; break;
  1376.         case PHYS_Falling: T=T$"Falling"; break;
  1377.         case PHYS_Swimming: T=T$"Swimming"; break;
  1378.         case PHYS_Flying: T=T$"Flying"; break;
  1379.         case PHYS_Rotating: T=T$"Rotating"; break;
  1380.         case PHYS_Projectile: T=T$"Projectile"; break;
  1381.         case PHYS_Interpolating: T=T$"Interpolating"; break;
  1382.         case PHYS_MovingBrush: T=T$"MovingBrush"; break;
  1383.         case PHYS_Spider: T=T$"Spider"; break;
  1384.         case PHYS_Trailer: T=T$"Trailer"; break;
  1385.         case PHYS_Ladder: T=T$"Ladder"; break;
  1386.     }
  1387.     T = T$" in physicsvolume "$GetItemName(string(PhysicsVolume))$" on base "$GetItemName(string(Base));
  1388.     if ( bBounce )
  1389.         T = T$" - will bounce";
  1390.     Canvas.DrawText(T, false);
  1391.     YPos += YL;
  1392.     Canvas.SetPos(4,YPos);
  1393.  
  1394.     Canvas.DrawText("Location: "$Location$" Rotation "$Rotation, false);
  1395.     YPos += YL;
  1396.     Canvas.SetPos(4,YPos);
  1397.     Canvas.DrawText("Velocity: "$Velocity$" Speed "$VSize(Velocity), false);
  1398.     YPos += YL;
  1399.     Canvas.SetPos(4,YPos);
  1400.     Canvas.DrawText("Acceleration: "$Acceleration, false);
  1401.     YPos += YL;
  1402.     Canvas.SetPos(4,YPos);
  1403.     
  1404.     Canvas.DrawColor.B = 0;
  1405.     Canvas.DrawText("Collision Radius "$CollisionRadius$" Height "$CollisionHeight);
  1406.     YPos += YL;
  1407.     Canvas.SetPos(4,YPos);
  1408.  
  1409.     Canvas.DrawText("Collides with Actors "$bCollideActors$", world "$bCollideWorld$", proj. target "$bProjTarget);
  1410.     YPos += YL;
  1411.     Canvas.SetPos(4,YPos);
  1412.     Canvas.DrawText("Blocks Actors "$bBlockActors$", players "$bBlockPlayers);
  1413.     YPos += YL;
  1414.     Canvas.SetPos(4,YPos);
  1415.  
  1416.     T = "Touching ";
  1417.     ForEach TouchingActors(class'Actor', A)
  1418.         T = T$GetItemName(string(A))$" ";
  1419.     if ( T == "Touching ")
  1420.         T = "Touching nothing";
  1421.     Canvas.DrawText(T, false);
  1422.     YPos += YL;
  1423.     Canvas.SetPos(4,YPos);
  1424.  
  1425.     Canvas.DrawColor.R = 0;
  1426.     T = "Rendered: ";
  1427.     Switch(Style)
  1428.     {
  1429.         case STY_None: T=T; break;
  1430.         case STY_Normal: T=T$"Normal"; break;
  1431.         case STY_Masked: T=T$"Masked"; break;
  1432.         case STY_Translucent: T=T$"Translucent"; break;
  1433.         case STY_Modulated: T=T$"Modulated"; break;
  1434.         case STY_Alpha: T=T$"Alpha"; break;
  1435.     }        
  1436.  
  1437.     Switch(DrawType)
  1438.     {
  1439.         case DT_None: T=T$" None"; break;
  1440.         case DT_Sprite: T=T$" Sprite "; break;
  1441.         case DT_Mesh: T=T$" Mesh "; break;
  1442.         case DT_Brush: T=T$" Brush "; break;
  1443.         case DT_RopeSprite: T=T$" RopeSprite "; break;
  1444.         case DT_VerticalSprite: T=T$" VerticalSprite "; break;
  1445.         case DT_Terraform: T=T$" Terraform "; break;
  1446.         case DT_SpriteAnimOnce: T=T$" SpriteAnimOnce "; break;
  1447.         case DT_StaticMesh: T=T$" StaticMesh "; break;
  1448.     }
  1449.  
  1450.     if ( DrawType == DT_Mesh )
  1451.     {
  1452.         T = T$GetItemName(string(Mesh));
  1453.         if ( Skins.length > 0 )
  1454.         {
  1455.             T = T$" skins: ";
  1456.             for ( i=0; i<Skins.length; i++ )
  1457.             {
  1458.                 if ( skins[i] == None )
  1459.                     break;
  1460.                 else
  1461.                     T =T$GetItemName(string(skins[i]))$", ";
  1462.             }
  1463.         }
  1464.  
  1465.         Canvas.DrawText(T, false);
  1466.         YPos += YL;
  1467.         Canvas.SetPos(4,YPos);
  1468.         
  1469.         // mesh animation
  1470.         GetAnimParams(0,Anim,frame,rate);
  1471.         T = "AnimSequence "$Anim$" Frame "$frame$" Rate "$rate;
  1472.         if ( bAnimByOwner )
  1473.             T= T$" Anim by Owner";
  1474.     }
  1475.     else if ( (DrawType == DT_Sprite) || (DrawType == DT_SpriteAnimOnce) )
  1476.         T = T$Texture;
  1477.     else if ( DrawType == DT_Brush )
  1478.         T = T$Brush;
  1479.         
  1480.     Canvas.DrawText(T, false);
  1481.     YPos += YL;
  1482.     Canvas.SetPos(4,YPos);
  1483.     
  1484.     Canvas.DrawColor.B = 255;    
  1485.     Canvas.DrawText("Tag: "$Tag$" Event: "$Event$" STATE: "$GetStateName(), false);
  1486.     YPos += YL;
  1487.     Canvas.SetPos(4,YPos);
  1488.  
  1489.     Canvas.DrawText("Instigator "$GetItemName(string(Instigator))$" Owner "$GetItemName(string(Owner)));
  1490.     YPos += YL;
  1491.     Canvas.SetPos(4,YPos);
  1492.  
  1493.     Canvas.DrawText("Timer: "$TimerCounter$" LifeSpan "$LifeSpan$" AmbientSound "$AmbientSound);
  1494.     YPos += YL;
  1495.     Canvas.SetPos(4,YPos);
  1496. }
  1497.  
  1498. // NearSpot() returns true is spot is within collision cylinder
  1499. simulated final function bool NearSpot(vector Spot)
  1500. {
  1501.     local vector Dir;
  1502.  
  1503.     Dir = Location - Spot;
  1504.     
  1505.     if ( abs(Dir.Z) > CollisionHeight )
  1506.         return false;
  1507.  
  1508.     Dir.Z = 0;
  1509.     return ( VSize(Dir) <= CollisionRadius );
  1510. }
  1511.  
  1512. simulated final function bool TouchingActor(Actor A)
  1513. {
  1514.     local vector Dir;
  1515.  
  1516.     Dir = Location - A.Location;
  1517.     
  1518.     if ( abs(Dir.Z) > CollisionHeight + A.CollisionHeight )
  1519.         return false;
  1520.  
  1521.     Dir.Z = 0;
  1522.     return ( VSize(Dir) <= CollisionRadius + A.CollisionRadius );
  1523. }
  1524.  
  1525. /* StartInterpolation()
  1526. when this function is called, the actor will start moving along an interpolation path
  1527. beginning at Dest
  1528. */    
  1529. simulated function StartInterpolation()
  1530. {
  1531.     GotoState('');
  1532.     SetCollision(True,false,false);
  1533.     bCollideWorld = False;
  1534.     bInterpolating = true;
  1535.     SetPhysics(PHYS_None);
  1536. }
  1537.  
  1538. /* Reset() 
  1539. reset actor to initial state - used when restarting level without reloading.
  1540. */
  1541. function Reset();
  1542.  
  1543. /* 
  1544. Trigger an event
  1545. */
  1546. event TriggerEvent( Name EventName, Actor Other, Pawn EventInstigator )
  1547. {
  1548.     local Actor A;
  1549.  
  1550.     if ( EventName == '' )
  1551.         return;
  1552.  
  1553.     ForEach DynamicActors( class 'Actor', A, EventName )
  1554.         A.Trigger(Other, EventInstigator);
  1555. }
  1556.  
  1557. /*
  1558. Untrigger an event
  1559. */
  1560. function UntriggerEvent( Name EventName, Actor Other, Pawn EventInstigator )
  1561. {
  1562.     local Actor A;
  1563.  
  1564.     if ( EventName == '' )
  1565.         return;
  1566.  
  1567.     ForEach DynamicActors( class 'Actor', A, EventName )
  1568.         A.Untrigger(Other, EventInstigator);
  1569. }
  1570.  
  1571. function bool IsInVolume(Volume aVolume)
  1572. {
  1573.     local Volume V;
  1574.     
  1575.     ForEach TouchingActors(class'Volume',V)
  1576.         if ( V == aVolume )
  1577.             return true;
  1578.     return false;
  1579. }
  1580.      
  1581. function bool IsInPain()
  1582. {
  1583.     local PhysicsVolume V;
  1584.  
  1585.     ForEach TouchingActors(class'PhysicsVolume',V)
  1586.         if ( V.bPainCausing && (V.DamagePerSec > 0) )
  1587.             return true;
  1588.     return false;
  1589. }
  1590.  
  1591. function PlayTeleportEffect(bool bOut, bool bSound);
  1592.  
  1593. function bool CanSplash()
  1594. {
  1595.     return false;
  1596. }
  1597.  
  1598. function vector GetCollisionExtent()
  1599. {
  1600.     local vector Extent;
  1601.  
  1602.     Extent = CollisionRadius * vect(1,1,0);
  1603.     Extent.Z = CollisionHeight;
  1604.     return Extent;
  1605. }
  1606.  
  1607. simulated function bool EffectIsRelevant(vector SpawnLocation, bool bForceDedicated )
  1608. {
  1609.     local PlayerController P;
  1610.     local bool bResult;
  1611.     
  1612.     if ( Level.NetMode == NM_DedicatedServer )
  1613.         bResult = bForceDedicated;
  1614.     else if ( Level.NetMode == NM_Client )
  1615.         bResult = true;
  1616.     else if ( (Instigator != None) && Instigator.IsHumanControlled() )
  1617.         bResult =  true;
  1618.     else if ( SpawnLocation == Location )
  1619.         bResult = ( Level.TimeSeconds - LastRenderTime < 3 );
  1620.     else if ( (Instigator != None) && (Level.TimeSeconds - Instigator.LastRenderTime < 3) )
  1621.         bResult = true;
  1622.     else
  1623.     {    
  1624.         P = Level.GetLocalPlayerController();
  1625.         if ( P == None )
  1626.             bResult = false;
  1627.         else 
  1628.             bResult = ( (Vector(P.Rotation) Dot (SpawnLocation - P.ViewTarget.Location)) > 0.0 );
  1629.     }
  1630.     return bResult;
  1631. }
  1632.  
  1633. defaultproperties
  1634. {
  1635.      DrawType=DT_Sprite
  1636.      Texture=S_Actor
  1637.      DrawScale=+00001.000000
  1638.      MaxLights=4
  1639.      DrawScale3D=(X=1,Y=1,Z=1)
  1640.      SoundRadius=64
  1641.      SoundVolume=128
  1642.      SoundPitch=64
  1643.      ScaleGlow=1.0 
  1644.      TransientSoundVolume=0.3 
  1645.      TransientSoundRadius=300.0
  1646.      CollisionRadius=+00022.000000
  1647.      CollisionHeight=+00022.000000
  1648.      bJustTeleported=True
  1649.      Mass=+00100.000000
  1650.      Role=ROLE_Authority
  1651.      RemoteRole=ROLE_DumbProxy
  1652.      NetPriority=+00001.000000
  1653.      Style=STY_Normal
  1654.      bMovable=True
  1655.      bHighDetail=False
  1656.      bSuperHighDetail=False
  1657.      InitialState=None
  1658.      NetUpdateFrequency=100
  1659.      LODBias=1.0
  1660.      MessageClass=class'LocalMessage'
  1661.      bHiddenEdGroup=False
  1662.      bBlockZeroExtentTraces=true
  1663.      bBlockNonZeroExtentTraces=true
  1664.      bReplicateMovement=true
  1665.      CullDistance=0.0
  1666.      bAcceptsProjectors=True
  1667.      bLightingVisibility=True
  1668.      StaticFilterState=FS_Maybe
  1669.      bUseDynamicLights=True
  1670. }
  1671.