Core.Object | +--Engine.Actor | +--Engine.Inventory | +--Engine.Weapon | +--UnrealShare.DispersionPistol
Pickup
Amp
float
Count,ChargeSize
int
PowerLevel
Sound
PowerUpSound
vector
WeaponPos
ChargeLight
cl1,cl2
void
AltFire(float Value)
BecomePickup()
bool
HandlePickupQuery(Inventory Item)
PlayFiring()
RateSelf(out int)
SuggestAttackStyle()
// return delta to combat style
PlaySelect()
TweenSelect()
TweenDown()
BeginState()
PutDown()
BringUp()
PlayIdleAnim()
///////////////////////////////////////////////////////////
AltFire(float F)
Fire(float F)
EndState()
Tick(float DeltaTime)
00001 //============================================================================= 00002 // DispersionPistol. 00003 //============================================================================= 00004 class DispersionPistol extends Weapon; 00005 00006 // player view version 00007 #exec MESH IMPORT MESH=DPistol ANIVFILE=MODELS\dgun_a.3D DATAFILE=MODELS\dgun_d.3D X=0 Y=0 Z=0 00008 #exec MESH ORIGIN MESH=DPistol X=0 Y=0 Z=0 YAW=-64 PITCH=0 00009 #exec MESHMAP SCALE MESHMAP=DPistol X=0.005 Y=0.005 Z=0.01 00010 #exec MESH SEQUENCE MESH=DPistol SEQ=All STARTFRAME=0 NUMFRAMES=141 00011 #exec MESH SEQUENCE MESH=DPistol SEQ=Select1 STARTFRAME=0 NUMFRAMES=11 GROUP=Select 00012 #exec MESH SEQUENCE MESH=DPistol SEQ=Shoot1 STARTFRAME=11 NUMFRAMES=3 00013 #exec MESH SEQUENCE MESH=DPistol SEQ=Idle1 STARTFRAME=14 NUMFRAMES=2 00014 #exec MESH SEQUENCE MESH=DPistol SEQ=Down1 STARTFRAME=16 NUMFRAMES=5 00015 #exec MESH SEQUENCE MESH=DPistol SEQ=PowerUp1 STARTFRAME=21 NUMFRAMES=4 00016 #exec MESH SEQUENCE MESH=DPistol SEQ=Still STARTFRAME=25 NUMFRAMES=5 00017 #exec MESH SEQUENCE MESH=DPistol SEQ=Select2 STARTFRAME=30 NUMFRAMES=11 GROUP=Select 00018 #exec MESH SEQUENCE MESH=DPistol SEQ=Shoot2 STARTFRAME=41 NUMFRAMES=3 00019 #exec MESH SEQUENCE MESH=DPistol SEQ=Idle2 STARTFRAME=44 NUMFRAMES=2 00020 #exec MESH SEQUENCE MESH=DPistol SEQ=Down2 STARTFRAME=46 NUMFRAMES=5 00021 #exec MESH SEQUENCE MESH=DPistol SEQ=PowerUp2 STARTFRAME=51 NUMFRAMES=9 00022 #exec MESH SEQUENCE MESH=DPistol SEQ=Select3 STARTFRAME=60 NUMFRAMES=11 GROUP=Select 00023 #exec MESH SEQUENCE MESH=DPistol SEQ=Shoot3 STARTFRAME=71 NUMFRAMES=3 00024 #exec MESH SEQUENCE MESH=DPistol SEQ=Idle3 STARTFRAME=74 NUMFRAMES=2 00025 #exec MESH SEQUENCE MESH=DPistol SEQ=Down3 STARTFRAME=76 NUMFRAMES=5 00026 #exec MESH SEQUENCE MESH=DPistol SEQ=PowerUp3 STARTFRAME=81 NUMFRAMES=9 00027 #exec MESH SEQUENCE MESH=DPistol SEQ=Select4 STARTFRAME=90 NUMFRAMES=11 GROUP=Select 00028 #exec MESH SEQUENCE MESH=DPistol SEQ=Shoot4 STARTFRAME=101 NUMFRAMES=3 00029 #exec MESH SEQUENCE MESH=DPistol SEQ=Idle4 STARTFRAME=104 NUMFRAMES=2 00030 #exec MESH SEQUENCE MESH=DPistol SEQ=Down4 STARTFRAME=106 NUMFRAMES=5 00031 #exec MESH SEQUENCE MESH=DPistol SEQ=PowerUp4 STARTFRAME=111 NUMFRAMES=9 00032 #exec MESH SEQUENCE MESH=DPistol SEQ=Select5 STARTFRAME=120 NUMFRAMES=11 GROUP=Select 00033 #exec MESH SEQUENCE MESH=DPistol SEQ=Shoot5 STARTFRAME=131 NUMFRAMES=3 00034 #exec MESH SEQUENCE MESH=DPistol SEQ=Idle5 STARTFRAME=134 NUMFRAMES=2 00035 #exec MESH SEQUENCE MESH=DPistol SEQ=Down5 STARTFRAME=136 NUMFRAMES=5 00036 00037 #exec TEXTURE IMPORT NAME=DPistol1 FILE=MODELS\dgun.PCX GROUP="Skins" 00038 #exec OBJ LOAD FILE=Textures\SmokeEffect2.utx PACKAGE=UnrealShare.SEffect2 00039 #exec MESHMAP SETTEXTURE MESHMAP=DPistol NUM=1 TEXTURE=DPistol1 00040 #exec MESHMAP SETTEXTURE MESHMAP=DPistol NUM=0 TEXTURE=UnrealShare.SEffect2.SmokeEffect2 00041 00042 00043 // pickup version 00044 #exec MESH IMPORT MESH=DPistolPick ANIVFILE=MODELS\dgunlo_a.3D DATAFILE=MODELS\dgunlo_d.3D X=0 Y=0 Z=0 00045 #exec MESH ORIGIN MESH=DPistolPick X=0 Y=0 Z=0 YAW=64 00046 #exec MESH SEQUENCE MESH=DPistolPick SEQ=All STARTFRAME=0 NUMFRAMES=1 00047 #exec TEXTURE IMPORT NAME=DPistol1 FILE=MODELS\dgun.PCX GROUP="Skins" 00048 #exec MESHMAP SCALE MESHMAP=DPistolPick X=0.04 Y=0.04 Z=0.08 00049 #exec MESHMAP SETTEXTURE MESHMAP=DPistolPick NUM=1 TEXTURE=DPistol1 00050 00051 // 3rd person perspective version 00052 #exec MESH IMPORT MESH=DPistol3rd ANIVFILE=MODELS\dgunlo_a.3D DATAFILE=MODELS\dgunlo_d.3D X=0 Y=0 Z=0 00053 #exec MESH ORIGIN MESH=DPistol3rd X=0 Y=-200 Z=-110 YAW=-64 ROLL=9 00054 #exec MESH SEQUENCE MESH=DPistol3rd SEQ=All STARTFRAME=0 NUMFRAMES=6 00055 #exec MESH SEQUENCE MESH=DPistol3rd SEQ=Still STARTFRAME=0 NUMFRAMES=1 00056 #exec MESH SEQUENCE MESH=DPistol3rd SEQ=Shoot1 STARTFRAME=0 NUMFRAMES=6 00057 #exec TEXTURE IMPORT NAME=DPistol1 FILE=MODELS\dgun.PCX GROUP="Skins" 00058 #exec MESHMAP SCALE MESHMAP=DPistol3rd X=0.025 Y=0.025 Z=0.05 00059 #exec MESHMAP SETTEXTURE MESHMAP=DPistol3rd NUM=1 TEXTURE=DPistol1 00060 00061 #exec AUDIO IMPORT FILE="Sounds\dispersion\Powerup3.WAV" NAME="PowerUp3" GROUP="Dispersion" 00062 #exec AUDIO IMPORT FILE="Sounds\dispersion\DShot1.WAV" NAME="DispShot" GROUP="Dispersion" 00063 #exec AUDIO IMPORT FILE="Sounds\dispersion\Dpickup2.WAV" NAME="DispPickup" GROUP="Dispersion" 00064 00065 var travel int PowerLevel; 00066 var vector WeaponPos; 00067 var float Count,ChargeSize; 00068 var ChargeLight cl1,cl2; 00069 var Pickup Amp; 00070 var Sound PowerUpSound; 00071 00072 function float RateSelf( out int bUseAltMode ) 00073 { 00074 local float rating; 00075 00076 if ( Amp != None ) 00077 rating = 6 * AIRating; 00078 else 00079 rating = AIRating; 00080 00081 if ( AmmoType.AmmoAmount <=0 ) 00082 return 0.05; 00083 if ( Pawn(Owner).Enemy == None ) 00084 { 00085 bUseAltMode = 0; 00086 return rating * (PowerLevel + 1); 00087 } 00088 00089 bUseAltMode = int( FRand() < 0.3 ); 00090 return rating * (PowerLevel + 1); 00091 } 00092 00093 // return delta to combat style 00094 function float SuggestAttackStyle() 00095 { 00096 local float EnemyDist; 00097 local Inventory Inv; 00098 00099 if ( !Pawn(Owner).bIsPlayer || (PowerLevel > 0) ) 00100 return 0; 00101 00102 return -0.3; 00103 } 00104 00105 function bool HandlePickupQuery( inventory Item ) 00106 { 00107 if ( Item.IsA('WeaponPowerup') ) 00108 { 00109 AmmoType.AddAmmo(AmmoType.MaxAmmo); 00110 Pawn(Owner).ClientMessage(Item.PickupMessage, 'Pickup'); 00111 Item.PlaySound (PickupSound); 00112 if ( PowerLevel<4 ) 00113 { 00114 ShakeVert = Default.ShakeVert + PowerLevel; 00115 PowerUpSound = Item.ActivateSound; 00116 if ( Pawn(Owner).Weapon == self ) 00117 { 00118 PowerLevel++; 00119 GotoState('PowerUp'); 00120 } 00121 else if ( (Pawn(Owner).Weapon != Self) && !Pawn(Owner).bNeverSwitchOnPickup ) 00122 { 00123 Pawn(Owner).Weapon.PutDown(); 00124 Pawn(Owner).PendingWeapon = self; 00125 GotoState('PowerUp', 'Waiting'); 00126 } 00127 else PowerLevel++; 00128 } 00129 Item.SetRespawn(); 00130 return true; 00131 } 00132 else 00133 return Super.HandlePickupQuery(Item); 00134 } 00135 00136 function BecomePickup() 00137 { 00138 Amp = None; 00139 Super.BecomePickup(); 00140 } 00141 00142 function PlayFiring() 00143 { 00144 AmmoType.GoToState('Idle2'); 00145 Owner.PlaySound(AltFireSound, SLOT_None, 1.8*Pawn(Owner).SoundDampening,,,1.2); 00146 if ( PlayerPawn(Owner) != None ) 00147 PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); 00148 if (PowerLevel==0) 00149 PlayAnim('Shoot1',0.4,0.2); 00150 else if (PowerLevel==1) 00151 PlayAnim('Shoot2',0.3,0.2); 00152 else if (PowerLevel==2) 00153 PlayAnim('Shoot3',0.2, 0.2); 00154 else if (PowerLevel==3) 00155 PlayAnim('Shoot4',0.1,0.2); 00156 else if (PowerLevel==4) 00157 PlayAnim('Shoot5',0.1,0.2); 00158 } 00159 00160 function Projectile ProjectileFire(class<projectile> ProjClass, float ProjSpeed, bool bWarn) 00161 { 00162 local Vector Start, X,Y,Z; 00163 local DispersionAmmo da; 00164 local float Mult; 00165 00166 Owner.MakeNoise(Pawn(Owner).SoundDampening); 00167 00168 if (Amp!=None) Mult = Amp.UseCharge(80); 00169 else Mult=1.0; 00170 00171 GetAxes(Pawn(owner).ViewRotation,X,Y,Z); 00172 Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; 00173 AdjustedAim = pawn(owner).AdjustAim(ProjSpeed, Start, AimError, True, (3.5*FRand()-1<PowerLevel)); 00174 if ( (PowerLevel == 0) || (AmmoType.AmmoAmount < 10) ) 00175 { 00176 da = DispersionAmmo(Spawn(ProjClass,,, Start,AdjustedAim)); 00177 if ( (AmmoType.AmmoAmount < 1) && Level.Game.bDeathMatch ) 00178 AmmoType.AmmoAmount = 1; 00179 } 00180 else 00181 { 00182 if ( (PowerLevel==1) && AmmoType.UseAmmo(2) ) 00183 da = Spawn(class'DAmmo2',,, Start,AdjustedAim); 00184 if ( (PowerLevel==2) && AmmoType.UseAmmo(4) ) 00185 da = Spawn(class'DAmmo3',,, Start,AdjustedAim); 00186 if ( (PowerLevel==3) && AmmoType.UseAmmo(5) ) 00187 da = Spawn(class'DAmmo4',,, Start ,AdjustedAim); 00188 if ( (PowerLevel>=4) && AmmoType.UseAmmo(6) ) 00189 da = Spawn(class'DAmmo5',,, Start,AdjustedAim); 00190 } 00191 if ( (da != None) && (Mult>1.0) ) 00192 da.InitSplash(Mult); 00193 } 00194 00195 function AltFire( float Value ) 00196 { 00197 bPointing=True; 00198 CheckVisibility(); 00199 GoToState('AltFiring'); 00200 } 00201 00202 //////////////////////////////////////////////////////// 00203 state AltFiring 00204 { 00205 ignores AltFire; 00206 00207 00208 function Tick( float DeltaTime ) 00209 { 00210 if ( Level.NetMode == NM_StandAlone ) 00211 { 00212 PlayerViewOffset.X = WeaponPos.X + FRand()*ChargeSize*7; 00213 PlayerViewOffset.Y = WeaponPos.Y + FRand()*ChargeSize*7; 00214 PlayerViewOffset.Z = WeaponPos.Z + FRand()*ChargeSize*7; 00215 } 00216 ChargeSize += DeltaTime; 00217 if( (pawn(Owner).bAltFire==0)) GoToState('ShootLoad'); 00218 Count += DeltaTime; 00219 if (Count > 0.3) 00220 { 00221 Count = 0.0; 00222 If (!AmmoType.UseAmmo(1)) GoToState('ShootLoad'); 00223 AmmoType.GoToState('Idle2'); 00224 } 00225 } 00226 00227 Function EndState() 00228 { 00229 PlayerviewOffset = WeaponPos; 00230 if (cl1!=None) cl1.Destroy(); 00231 if (cl2!=None) cl2.Destroy(); 00232 } 00233 00234 function BeginState() 00235 { 00236 WeaponPos = PlayerviewOffset; 00237 ChargeSize=0.0; 00238 } 00239 00240 Begin: 00241 if (AmmoType.UseAmmo(1)) 00242 { 00243 Owner.Playsound(Misc1Sound,SLOT_Misc, Pawn(Owner).SoundDampening*4.0); 00244 Count = 0.0; 00245 Sleep(2.0 + 0.6 * PowerLevel); 00246 GoToState('ShootLoad'); 00247 } 00248 else GotoState('Idle'); 00249 00250 } 00251 00252 /////////////////////////////////////////////////////////// 00253 state ShootLoad 00254 { 00255 function Fire(float F) {} 00256 function AltFire(float F) {} 00257 00258 function BeginState() 00259 { 00260 local DispersionAmmo d; 00261 local Vector Start, X,Y,Z; 00262 local float Mult; 00263 00264 if (Amp!=None) Mult = Amp.UseCharge(ChargeSize*50+50); 00265 else Mult=1.0; 00266 00267 Owner.PlaySound(AltFireSound, SLOT_Misc, 1.8*Pawn(Owner).SoundDampening); 00268 if ( PlayerPawn(Owner) != None ) 00269 PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag*ChargeSize, ShakeVert); 00270 if (PowerLevel==0) PlayAnim('Shoot1',0.2, 0.05); 00271 else if (PowerLevel==1) PlayAnim('Shoot2',0.2, 0.05); 00272 else if (PowerLevel==2) PlayAnim('Shoot3',0.2, 0.05); 00273 else if (PowerLevel==3) PlayAnim('Shoot4',0.2, 0.05); 00274 else if (PowerLevel==4) PlayAnim('Shoot5',0.2, 0.05); 00275 00276 Owner.MakeNoise(Pawn(Owner).SoundDampening); 00277 GetAxes(Pawn(owner).ViewRotation,X,Y,Z); 00278 Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; 00279 AdjustedAim = pawn(owner).AdjustAim(AltProjectileSpeed, Start, AimError, True, True); 00280 d = DispersionAmmo(Spawn(AltProjectileClass,,, Start,AdjustedAim)); 00281 if ( d != None ) 00282 { 00283 d.bAltFire = True; 00284 d.DrawScale = 0.5 + ChargeSize*0.6; 00285 d.InitSplash(d.DrawScale * Mult * 1.1); 00286 } 00287 } 00288 Begin: 00289 FinishAnim(); 00290 Finish(); 00291 } 00292 00293 00294 00295 /////////////////////////////////////////////////////////// 00296 function PlayIdleAnim() 00297 { 00298 if (PowerLevel==0) LoopAnim('Idle1',0.04,0.2); 00299 else if (PowerLevel==1) LoopAnim('Idle2',0.04,0.2); 00300 else if (PowerLevel==2) LoopAnim('Idle3',0.04,0.2); 00301 else if (PowerLevel==3) LoopAnim('Idle4',0.04,0.2); 00302 else if (PowerLevel==4) LoopAnim('Idle5',0.04,0.2); 00303 } 00304 00305 /////////////////////////////////////////////////////// 00306 state PowerUp 00307 { 00308 ignores fire, altfire; 00309 00310 function BringUp() 00311 { 00312 bWeaponUp = false; 00313 PlaySelect(); 00314 GotoState('Powerup', 'Raising'); 00315 } 00316 00317 function bool PutDown() 00318 { 00319 bChangeWeapon = true; 00320 return True; 00321 } 00322 00323 function BeginState() 00324 { 00325 bChangeWeapon = false; 00326 } 00327 00328 Raising: 00329 FinishAnim(); 00330 PowerLevel++; 00331 Begin: 00332 if (PowerLevel<5) 00333 { 00334 AmmoType.MaxAmmo += 10; 00335 AmmoType.AddAmmo(10); 00336 if ( PowerLevel < 5 ) 00337 Owner.PlaySound(PowerUpSound, SLOT_None, Pawn(Owner).SoundDampening); 00338 if (PowerLevel==1) 00339 PlayAnim('PowerUp1',0.1, 0.05); 00340 else if (PowerLevel==2) 00341 PlayAnim('PowerUp2',0.1, 0.05); 00342 else if (PowerLevel==3) 00343 PlayAnim('PowerUp3',0.1, 0.05); 00344 else if (PowerLevel==4) 00345 PlayAnim('PowerUp4',0.1, 0.05); 00346 FinishAnim(); 00347 if ( bChangeWeapon ) 00348 GotoState('DownWeapon'); 00349 Finish(); 00350 } 00351 Waiting: 00352 } 00353 00354 00355 function TweenDown() 00356 { 00357 if ( GetAnimGroup(AnimSequence) == 'Select' ) 00358 TweenAnim( AnimSequence, AnimFrame * 0.4 ); 00359 else 00360 { 00361 if (PowerLevel==0) PlayAnim('Down1', 1.0, 0.05); 00362 else if (PowerLevel==1) PlayAnim('Down2', 1.0, 0.05); 00363 else if (PowerLevel==2) PlayAnim('Down3', 1.0, 0.05); 00364 else if (PowerLevel==3) PlayAnim('Down4', 1.0, 0.05); 00365 else if (PowerLevel==4) PlayAnim('Down5', 1.0, 0.05); 00366 } 00367 } 00368 00369 function TweenSelect() 00370 { 00371 TweenAnim('Select1',0.001); 00372 } 00373 00374 function PlaySelect() 00375 { 00376 Owner.PlaySound(SelectSound, SLOT_None, Pawn(Owner).SoundDampening); 00377 if (PowerLevel==0) PlayAnim('Select1',0.5,0.0); 00378 else if (PowerLevel==1) PlayAnim('Select2',0.5,0.0); 00379 else if (PowerLevel==2) PlayAnim('Select3',0.5,0.0); 00380 else if (PowerLevel==3) PlayAnim('Select4',0.5,0.0); 00381 else if (PowerLevel==4) PlayAnim('Select5',0.5,0.0); 00382 } 00383 00384 defaultproperties 00385 { 00386 AmmoName=Class'UnrealShare.DefaultAmmo' 00387 PickupAmmoCount=50 00388 bAltWarnTarget=True 00389 FireOffset=(X=12.000000,Y=-8.000000,Z=-15.000000) 00390 ProjectileClass=Class'UnrealShare.DispersionAmmo' 00391 AltProjectileClass=Class'UnrealShare.DispersionAmmo' 00392 shakemag=200.000000 00393 shaketime=0.130000 00394 shakevert=2.000000 00395 RefireRate=0.850000 00396 AltRefireRate=0.300000 00397 FireSound=Sound'UnrealShare.Dispersion.DispShot' 00398 AltFireSound=Sound'UnrealShare.Dispersion.DispShot' 00399 SelectSound=Sound'UnrealShare.Dispersion.DispPickup' 00400 Misc1Sound=Sound'UnrealShare.Dispersion.PowerUp3' 00401 DeathMessage="%o was killed by %k's %w. What a loser!" 00402 PickupMessage="You got the Dispersion Pistol" 00403 ItemName="Dispersion Pistol" 00404 PlayerViewOffset=(X=3.800000,Y=-2.000000,Z=-2.000000) 00405 PlayerViewMesh=LodMesh'UnrealShare.DPistol' 00406 PickupViewMesh=LodMesh'UnrealShare.DPistolPick' 00407 ThirdPersonMesh=LodMesh'UnrealShare.DPistol3rd' 00408 PickupSound=Sound'UnrealShare.Pickups.WeaponPickup' 00409 Texture=None 00410 Mesh=LodMesh'UnrealShare.DPistolPick' 00411 bNoSmooth=False 00412 CollisionRadius=28.000000 00413 CollisionHeight=8.000000 00414 Mass=15.000000 00415 }