Core.Object | +--Engine.Actor | +--Engine.Pawn | +--Botpack.StationaryPawn | +--Botpack.TeamCannon | +--Botpack.MinigunCannon
Actor
MuzzFlash
void
ActivateComplete()
Name
PickAnim()
PlayDeactivate()
PostBeginPlay()
ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)
Shoot()
simulated
SpawnBase()
StartDeactivate()
EndState()
BeginState()
Timer()
00001 //============================================================================= 00002 // MinigunCannon. 00003 //============================================================================= 00004 class MinigunCannon extends TeamCannon; 00005 00006 #exec MESH IMPORT MESH=grfinalgunM ANIVFILE=MODELS\grfinalgun_a.3D DATAFILE=MODELS\grfinalgun_d.3D X=0 Y=0 Z=0 00007 #exec MESH ORIGIN MESH=grfinalgunM X=0 Y=0 Z=0 PITCH=0 YAW=128 ROLL=-64 00008 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=All STARTFRAME=0 NUMFRAMES=20 00009 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=Activate STARTFRAME=0 NUMFRAMES=1 00010 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire1 STARTFRAME=0 NUMFRAMES=3 00011 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire2 STARTFRAME=3 NUMFRAMES=2 00012 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire3 STARTFRAME=4 NUMFRAMES=3 00013 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire4 STARTFRAME=6 NUMFRAMES=2 00014 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire5 STARTFRAME=7 NUMFRAMES=3 00015 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire6 STARTFRAME=10 NUMFRAMES=2 00016 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire7 STARTFRAME=11 NUMFRAMES=3 00017 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire8 STARTFRAME=14 NUMFRAMES=2 00018 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire9 STARTFRAME=15 NUMFRAMES=3 00019 #exec MESH SEQUENCE MESH=grfinalgunM SEQ=Fire10 STARTFRAME=18 NUMFRAMES=2 00020 #exec TEXTURE IMPORT NAME=jgrfinalgun FILE=MODELS\grmain.pcx GROUP=Skins 00021 #exec MESHMAP SCALE MESHMAP=grfinalgunM X=0.1 Y=0.1 Z=0.2 00022 #exec MESHMAP SETTEXTURE MESHMAP=grfinalgunM NUM=1 TEXTURE=jgrfinalgun 00023 00024 #exec MESH IMPORT MESH=grmockgunM ANIVFILE=MODELS\aniv01.3D DATAFILE=MODELS\data01.3D X=0 Y=0 Z=0 00025 #exec MESH ORIGIN MESH=grmockgunM X=0 Y=0 Z=0 PITCH=0 YAW=128 ROLL=-64 00026 #exec MESH SEQUENCE MESH=grmockgunM SEQ=All STARTFRAME=0 NUMFRAMES=20 00027 #exec MESH SEQUENCE MESH=grmockgunM SEQ=Activate STARTFRAME=1 NUMFRAMES=20 00028 #exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire1 STARTFRAME=0 NUMFRAMES=1 00029 #exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire2 STARTFRAME=0 NUMFRAMES=1 00030 #exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire3 STARTFRAME=0 NUMFRAMES=1 00031 #exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire4 STARTFRAME=0 NUMFRAMES=1 00032 #exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire5 STARTFRAME=0 NUMFRAMES=1 00033 #exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire6 STARTFRAME=0 NUMFRAMES=1 00034 #exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire7 STARTFRAME=0 NUMFRAMES=1 00035 #exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire8 STARTFRAME=0 NUMFRAMES=1 00036 #exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire9 STARTFRAME=0 NUMFRAMES=1 00037 #exec MESH SEQUENCE MESH=grmockgunM SEQ=Fire10 STARTFRAME=0 NUMFRAMES=1 00038 #exec TEXTURE IMPORT NAME=jgrmockgun FILE=MODELS\grmain.pcx GROUP=Skins 00039 #exec MESHMAP SCALE MESHMAP=grmockgunM X=0.1 Y=0.1 Z=0.2 00040 #exec MESHMAP SETTEXTURE MESHMAP=grmockgunM NUM=1 TEXTURE=jgrfinalgun 00041 00042 var Actor MuzzFlash; 00043 00044 function PostBeginPlay() 00045 { 00046 Super.PostBeginPlay(); 00047 MuzzFlash = Spawn(class'CannonMuzzle'); 00048 MuzzFlash.SetBase(self); 00049 } 00050 00051 function Name PickAnim() 00052 { 00053 Drop = 0; 00054 if (DesiredRotation.Pitch < -1000 ) 00055 { 00056 if ( DesiredRotation.Pitch < -4000 ) 00057 return 'Fire5'; 00058 else 00059 return 'Fire3'; 00060 } 00061 else if (DesiredRotation.Pitch > 1000 ) 00062 { 00063 if ( DesiredRotation.Pitch > 4000 ) 00064 return 'Fire9'; 00065 else 00066 return 'Fire7'; 00067 } 00068 else 00069 return 'Fire1'; 00070 } 00071 00072 simulated function SpawnBase() 00073 { 00074 GunBase = Spawn(class'GrBase', self); 00075 GunBase.bAnimByOwner = true; 00076 } 00077 00078 function PlayDeactivate() 00079 { 00080 TweenAnim('Activate', 1.5); 00081 } 00082 00083 function StartDeactivate() 00084 { 00085 PlaySound(ActivateSound, SLOT_None,5.0); 00086 Mesh = mesh'Botpack.GrMockGunM'; 00087 AnimSequence = 'Fire1'; 00088 AnimFrame = 0.0; 00089 SetPhysics(PHYS_Rotating); 00090 DesiredRotation = StartingRotation; 00091 PrePivot = vect(0,0,0); 00092 } 00093 00094 function ActivateComplete() 00095 { 00096 Mesh = mesh'Botpack.GrFinalGunM'; 00097 PrePivot = vect(0,0,40); 00098 } 00099 00100 function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) 00101 { 00102 local int rndDam; 00103 local UT_Shellcase s; 00104 00105 s = Spawn(class'UT_ShellCase',, '', PrePivot + Location + 20 * X + 10 * Y + 30 * Z); 00106 if ( s != None ) 00107 s.Eject(((FRand()*0.3+0.4)*X + (FRand()*0.2+0.2)*Y + (FRand()*0.3+1.0) * Z)*160); 00108 if (Other == Level) 00109 Spawn(class'UT_LightWallHitEffect',,, HitLocation+HitNormal, Rotator(HitNormal)); 00110 else if ( (Other!=self) && (Other != None) ) 00111 { 00112 if ( !Other.bIsPawn && !Other.IsA('Carcass') ) 00113 spawn(class'UT_SpriteSmokePuff',,,HitLocation+HitNormal*9); 00114 rndDam = 5 + Rand(4); 00115 if ( DeathMatchPlus(Level.Game).bNoviceMode ) 00116 rnddam *= (0.4 + 0.15 * Level.game.Difficulty); 00117 Other.TakeDamage(rndDam, self, HitLocation, rndDam*500.0*X, 'shot'); 00118 } 00119 } 00120 00121 function Shoot() 00122 { 00123 local Actor HitActor; 00124 local Vector HitLocation, HitNormal, EndTrace, ProjStart, X,Y,Z; 00125 local rotator ShootRot; 00126 if (DesiredRotation.Pitch < -10000) Return; 00127 if ( AmbientSound == None ) 00128 PlaySound(FireSound, SLOT_None,5.0); 00129 00130 GetAxes(Rotation,X,Y,Z); 00131 ProjStart = PrePivot + Location + X*20 + 12 * Y + 16 * Z; 00132 ShootRot = rotator(Enemy.Location - ProjStart); 00133 ShootRot.Yaw = ShootRot.Yaw + 1024 - Rand(2048); 00134 DesiredRotation = ShootRot; 00135 ShootRot.Pitch = ShootRot.Pitch + 256 - Rand(512); 00136 GetAxes(ShootRot,X,Y,Z); 00137 PlayAnim(PickAnim()); 00138 MuzzFlash.SetLocation(ProjStart); 00139 if ( FRand() < 0.4 ) 00140 Spawn(class'MTracer',,, ProjStart, ShootRot); 00141 HitActor = TraceShot(HitLocation,HitNormal,ProjStart + 10000 * X,ProjStart); 00142 ProcessTraceHit(HitActor, HitLocation, HitNormal, X,Y,Z); 00143 bShoot = false; 00144 ShootRot.Pitch = ShootRot.Pitch & 65535; 00145 if ( ShootRot.Pitch < 32768 ) 00146 ShootRot.Pitch = Min(ShootRot.Pitch, 5000); 00147 else 00148 ShootRot.Pitch = Max(ShootRot.Pitch, 60535); 00149 MuzzFlash.SetRotation(ShootRot); 00150 ShootRot.Pitch = 0; 00151 SetRotation(ShootRot); 00152 } 00153 00154 state ActiveCannon 00155 { 00156 ignores SeePlayer; 00157 00158 function Timer() 00159 { 00160 local Pawn P; 00161 00162 DesiredRotation = rotator(Enemy.Location - Location - PrePivot); 00163 DesiredRotation.Yaw = DesiredRotation.Yaw & 65535; 00164 MuzzFlash.bHidden = false; 00165 if ( bShoot ) 00166 Shoot(); 00167 else 00168 { 00169 TweenAnim(PickAnim(), 0.2); 00170 bShoot=True; 00171 SetTimer(SampleTime,True); 00172 } 00173 00174 } 00175 00176 function BeginState() 00177 { 00178 Super.BeginState(); 00179 } 00180 00181 function EndState() 00182 { 00183 AmbientSound = None; 00184 MuzzFlash.bHidden = true; 00185 } 00186 00187 Begin: 00188 Disable('Timer'); 00189 FinishAnim(); 00190 PlayActivate(); 00191 FinishAnim(); 00192 ActivateComplete(); 00193 Enable('Timer'); 00194 SetTimer(SampleTime,True); 00195 RotationRate.Yaw = TrackingRate; 00196 SetPhysics(PHYS_Rotating); 00197 AmbientSound = Class'Minigun2'.Default.FireSound; 00198 bShoot=True; 00199 00200 FaceEnemy: 00201 TurnToward(Enemy); 00202 Goto('FaceEnemy'); 00203 } 00204 00205 defaultproperties 00206 { 00207 FireSound=Sound'UnrealI.Rifle.RifleShot' 00208 SampleTime=0.100000 00209 Mesh=LodMesh'Botpack.grmockgunM' 00210 SoundRadius=96 00211 SoundVolume=255 00212 CollisionHeight=24.000000 00213 }