Core.Object | +--Engine.Actor | +--Engine.Pawn | +--UnrealShare.ScriptedPawn | +--UnrealShare.Fly
void
Falling()
PlayChallenge()
PlayDying(name DamageType, vector HitLocation)
PlayInAir()
PlayLanded(float impactVel)
PlayMeleeAttack()
PlayMovingAttack()
PlayPatrolStop()
PlayRangedAttack()
PlayRunning()
PlayTakeHit(float tweentime, vector HitLoc, int damage)
PlayThreatening()
PlayTurning()
PlayVictoryDance()
PlayWaiting()
PlayWaitingAmbush()
PlayWalking()
PreSetMovement()
//----------------------------------------------------------------------------- // Fly functions.
SetMovementPhysics()
TweenToFalling()
TweenToFighter(float tweentime)
TweenToPatrolStop(float tweentime)
TweenToRunning(float tweentime)
TweenToWaiting(float tweentime)
TweenToWalking(float tweentime)
ZoneChange(ZoneInfo newZone)
PickDestination()
00001 //============================================================================= 00002 // Fly. 00003 //============================================================================= 00004 class Fly extends ScriptedPawn; 00005 00006 #exec MESH IMPORT MESH=FlyM ANIVFILE=MODELS\fly_a.3D DATAFILE=MODELS\fly_d.3D LODSTYLE=2 00007 #exec MESH ORIGIN MESH=FlyM X=0 Y=-30 Z=70 YAW=64 ROLL=-62 00008 00009 #exec MESH SEQUENCE MESH=FlyM SEQ=All STARTFRAME=0 NUMFRAMES=97 00010 #exec MESH SEQUENCE MESH=FlyM SEQ=Dead STARTFRAME=0 NUMFRAMES=16 00011 #exec MESH SEQUENCE MESH=FlyM SEQ=TakeHit STARTFRAME=0 NUMFRAMES=1 00012 #exec MESH SEQUENCE MESH=FlyM SEQ=Flying STARTFRAME=16 NUMFRAMES=10 RATE=15 00013 #exec MESH SEQUENCE MESH=FlyM SEQ=Land STARTFRAME=26 NUMFRAMES=11 RATE=15 00014 #exec MESH SEQUENCE MESH=FlyM SEQ=Shoot1 STARTFRAME=37 NUMFRAMES=25 RATE=40 Group=Attack 00015 #exec MESH SEQUENCE MESH=FlyM SEQ=Shoot2 STARTFRAME=62 NUMFRAMES=10 Group=Attack 00016 #exec MESH SEQUENCE MESH=FlyM SEQ=Takeoff STARTFRAME=72 NUMFRAMES=15 00017 #exec MESH SEQUENCE MESH=FlyM SEQ=Walking STARTFRAME=87 NUMFRAMES=10 RATE=15 00018 #exec MESH SEQUENCE MESH=FlyM SEQ=Waiting STARTFRAME=88 NUMFRAMES=1 00019 00020 #exec TEXTURE IMPORT NAME=JFly1 FILE=MODELS\fly.PCX GROUP=Skins FLAGS=2 00021 #exec MESHMAP SCALE MESHMAP=flyM X=0.06 Y=0.06 Z=0.12 00022 #exec MESHMAP SETTEXTURE MESHMAP=flyM NUM=1 TEXTURE=Jfly1 00023 00024 #exec AUDIO IMPORT FILE="Sounds\Razorfly\buzz3rf.WAV" NAME="buzz3rf" GROUP="Razorfly" 00025 #exec AUDIO IMPORT FILE="Sounds\Razorfly\injur1rf.WAV" NAME="injur1rf" GROUP="Razorfly" 00026 #exec AUDIO IMPORT FILE="Sounds\Razorfly\injur2rf.WAV" NAME="injur2rf" GROUP="Razorfly" 00027 #exec AUDIO IMPORT FILE="Sounds\Razorfly\death1rf.WAV" NAME="death1rf" GROUP="Razorfly" 00028 00029 00030 //----------------------------------------------------------------------------- 00031 // Fly variables. 00032 00033 //----------------------------------------------------------------------------- 00034 // Fly functions. 00035 00036 function PreSetMovement() 00037 { 00038 bCanJump = true; 00039 bCanWalk = true; 00040 bCanSwim = false; 00041 bCanFly = true; 00042 MinHitWall = -0.6; 00043 bCanOpenDoors = false; 00044 bCanDoSpecial = false; 00045 } 00046 00047 function ZoneChange(ZoneInfo newZone) 00048 { 00049 local vector jumpDir; 00050 00051 if ( newZone.bWaterZone ) 00052 { 00053 MoveTimer = -1.0; 00054 if ( (Enemy != None) && (Enemy.Location.Z < Location.Z) ) 00055 GotoState('TacticalMove', 'BackOff'); 00056 else 00057 Acceleration = Accelrate * vect(0,0,1); 00058 } 00059 00060 } 00061 00062 function SetMovementPhysics() 00063 { 00064 if (Enemy != None) 00065 SetPhysics(PHYS_Flying); 00066 else if (Physics != PHYS_Falling) 00067 SetPhysics(PHYS_Walking); 00068 } 00069 00070 singular function Falling() 00071 { 00072 SetPhysics(PHYS_Flying); 00073 if (bIsPlayer) 00074 { 00075 PlayInAir(); 00076 return; 00077 } 00078 00079 if (health > 0) 00080 SetFall(); 00081 } 00082 00083 function PlayWaiting() 00084 { 00085 if ( Physics == PHYS_Walking ) 00086 TweenAnim('Waiting', 10.0); 00087 else 00088 LoopAnim('Flying', 0.75); 00089 } 00090 00091 function PlayPatrolStop() 00092 { 00093 PlayWaiting(); 00094 } 00095 00096 function PlayWaitingAmbush() 00097 { 00098 PlayWaiting(); 00099 } 00100 00101 function PlayChallenge() 00102 { 00103 PlayAnim('Shoot1', 1.0, 0.1); 00104 } 00105 00106 function TweenToFighter(float tweentime) 00107 { 00108 TweenAnim('Flying', tweentime); 00109 } 00110 00111 function TweenToRunning(float tweentime) 00112 { 00113 if ( (AnimSequence != 'Flying') || !bAnimLoop ) 00114 TweenAnim('Flying', tweentime); 00115 } 00116 00117 function TweenToWalking(float tweentime) 00118 { 00119 if (Physics == PHYS_Walking) 00120 TweenAnim('Walking', tweentime); 00121 else if ( (AnimSequence != 'Flying') || !bAnimLoop ) 00122 TweenAnim('Flying', tweentime); 00123 } 00124 00125 function TweenToWaiting(float tweentime) 00126 { 00127 PlayAnim('Land', 0.2 + 0.5 * FRand()); 00128 SetPhysics(PHYS_Falling); 00129 } 00130 00131 function TweenToPatrolStop(float tweentime) 00132 { 00133 TweenAnim('Flying', tweentime); 00134 } 00135 00136 function PlayRunning() 00137 { 00138 LoopAnim('Flying'); 00139 } 00140 00141 function PlayWalking() 00142 { 00143 if (Physics == PHYS_Walking) 00144 LoopAnim('Walking', -1.0/GroundSpeed,, 0.4); 00145 else 00146 LoopAnim('Flying'); 00147 } 00148 00149 function PlayThreatening() 00150 { 00151 if ( FRand() < 0.8 ) 00152 LoopAnim('Flying'); 00153 else 00154 LoopAnim('Shoot1', 0.4); 00155 } 00156 00157 function PlayTurning() 00158 { 00159 if (Physics == PHYS_Walking) 00160 LoopAnim('Walking'); 00161 else 00162 LoopAnim('Flying'); 00163 } 00164 00165 function PlayDying(name DamageType, vector HitLocation) 00166 { 00167 PlaySound(Die, SLOT_Talk, 2.5 * TransientSoundVolume); 00168 PlayAnim('Dead', 0.7, 0.1); 00169 } 00170 00171 function PlayTakeHit(float tweentime, vector HitLoc, int damage) 00172 { 00173 TweenAnim('TakeHit', tweentime); 00174 } 00175 00176 function TweenToFalling() 00177 { 00178 TweenAnim('Flying', 0.2); 00179 } 00180 00181 function PlayInAir() 00182 { 00183 LoopAnim('Flying'); 00184 } 00185 00186 function PlayLanded(float impactVel) 00187 { 00188 PlayAnim('Land'); 00189 } 00190 00191 function PlayVictoryDance() 00192 { 00193 if ( FRand() < 0.4 ) 00194 TweenToWaiting(0.25); 00195 else 00196 PlayAnim('Flying',1.0, 0.05); 00197 } 00198 00199 function PlayMeleeAttack() 00200 { 00201 PlayAnim('Shoot1'); 00202 if ( MeleeDamageTarget(15, (15 * 1000.0 * Normal(Target.Location - Location))) ) 00203 PlaySound(Threaten, SLOT_Talk); //FIXME - stingdamage instead of projectile 00204 GotoState('TacticalMove', 'BackOff'); 00205 } 00206 00207 function PlayRangedAttack() 00208 { 00209 local vector projStart; 00210 local vector adjust; 00211 00212 PlayAnim('Shoot1'); 00213 /* 00214 adjust = vect(0,0,0); 00215 adjust.Z = Target.CollisionHeight + 20; 00216 Acceleration = AccelRate * Normal(Target.Location - Location + adjust); 00217 projStart = Location - 0.5 * CollisionHeight * vect(0,0,1); 00218 spawn(RangedProjectile ,self,'',projStart,AdjustAim(ProjectileSpeed, projStart, 400, false, false)); 00219 */ 00220 } 00221 00222 function PlayMovingAttack() 00223 { 00224 PlayRangedAttack(); 00225 } 00226 00227 state TacticalMove 00228 { 00229 ignores SeePlayer, HearNoise; 00230 00231 BackOff: 00232 Acceleration = AccelRate * Normal(Location - Enemy.Location); 00233 Acceleration.Z *= 0.5; 00234 Destination = Location; 00235 Sleep(0.5); 00236 SetTimer(TimeBetweenAttacks, false); 00237 Goto('TacticalTick'); 00238 } 00239 00240 state Roaming 00241 { 00242 function PickDestination() 00243 { 00244 GotoState('Wandering'); 00245 } 00246 00247 Begin: 00248 GotoState('Wandering'); 00249 } 00250 00251 defaultproperties 00252 { 00253 CarcassType=Class'UnrealShare.FlyCarcass' 00254 Aggressiveness=0.700000 00255 RefireRate=0.700000 00256 WalkingSpeed=1.000000 00257 bCanStrafe=True 00258 MeleeRange=40.000000 00259 GroundSpeed=100.000000 00260 AirSpeed=240.000000 00261 AccelRate=600.000000 00262 JumpZ=10.000000 00263 Visibility=100 00264 SightRadius=1000.000000 00265 PeripheralVision=-0.500000 00266 Health=30 00267 HitSound1=Sound'UnrealShare.Razorfly.injur1rf' 00268 HitSound2=Sound'UnrealShare.Razorfly.injur2rf' 00269 Land=None 00270 Die=Sound'UnrealShare.Razorfly.death1rf' 00271 CombatStyle=0.400000 00272 AmbientSound=Sound'UnrealShare.Razorfly.buzz3rf' 00273 DrawType=DT_Mesh 00274 Mesh=LodMesh'UnrealShare.FlyM' 00275 CollisionRadius=20.000000 00276 CollisionHeight=12.000000 00277 Buoyancy=110.000000 00278 RotationRate=(Pitch=6000,Yaw=65000,Roll=8192) 00279 }