00001 //=============================================================================
00002 // UT_FlakCannon.
00003 //=============================================================================
00004 class UT_FlakCannon extends TournamentWeapon;
00005
00006 #exec MESH IMPORT MESH=flakm ANIVFILE=MODELS\flakcannon_a.3D DATAFILE=MODELS\flakcannon_d.3D X=0 Y=0 Z=0
00007 #exec MESH ORIGIN MESH=flakm X=40 Y=0 Z=0 YAW=64 ROLL=124 PITCH=128
00008 #exec MESH SEQUENCE MESH=Flakm SEQ=All STARTFRAME=0 NUMFRAMES=96
00009 #exec MESH SEQUENCE MESH=Flakm SEQ=Select STARTFRAME=0 NUMFRAMES=30 RATE=48 GROUP=Select
00010 #exec MESH SEQUENCE MESH=Flakm SEQ=Loading STARTFRAME=30 NUMFRAMES=15
00011 #exec MESH SEQUENCE MESH=Flakm SEQ=Still STARTFRAME=45 NUMFRAMES=1
00012 #exec MESH SEQUENCE MESH=Flakm SEQ=Fire STARTFRAME=46 NUMFRAMES=10
00013 #exec MESH SEQUENCE MESH=Flakm SEQ=AltFire STARTFRAME=57 NUMFRAMES=10 RATE=24
00014 #exec MESH SEQUENCE MESH=Flakm SEQ=Sway STARTFRAME=80 NUMFRAMES=2
00015 #exec MESH SEQUENCE MESH=Flakm SEQ=Down STARTFRAME=82 NUMFRAMES=10
00016 #exec TEXTURE IMPORT NAME=Flak_t FILE=MODELS\Flak.PCX GROUP="Skins" LODSET=2
00017 #exec TEXTURE IMPORT NAME=Flak_t1 FILE=MODELS\Flak1.PCX GROUP="Skins" LODSET=2
00018 #exec TEXTURE IMPORT NAME=Flak_t2 FILE=MODELS\Flak2.PCX GROUP="Skins" LODSET=2
00019 #exec TEXTURE IMPORT NAME=Flak_t3 FILE=MODELS\Flak3.PCX GROUP="Skins" LODSET=2
00020 #exec TEXTURE IMPORT NAME=Flak_t4 FILE=MODELS\Flak4.PCX GROUP="Skins" LODSET=2
00021 #exec MESHMAP SCALE MESHMAP=flakm X=0.007 Y=0.003 Z=0.014
00022 #exec MESHMAP SETTEXTURE MESHMAP=flakm NUM=0 TEXTURE=Flak_t1
00023 #exec MESHMAP SETTEXTURE MESHMAP=flakm NUM=1 TEXTURE=Flak_t2
00024 #exec MESHMAP SETTEXTURE MESHMAP=flakm NUM=2 TEXTURE=Flak_t3
00025 #exec MESHMAP SETTEXTURE MESHMAP=flakm NUM=3 TEXTURE=Flak_t4
00026 #exec MESHMAP SETTEXTURE MESHMAP=flakm NUM=4 TEXTURE=Botpack.Ammocount.flakAmmoled
00027
00028 #exec OBJ LOAD FILE=Textures\Ammocount.utx PACKAGE=Botpack.Ammocount
00029 #exec TEXTURE IMPORT NAME=Flakmuz FILE=MODELS\FlakFlash.PCX GROUP="Skins" LODSET=2
00030
00031 #exec MESH IMPORT MESH=Flak2Pick ANIVFILE=MODELS\FlakPick2_a.3D DATAFILE=MODELS\FlakPick2_d.3D X=0 Y=0 Z=0
00032 #exec MESH ORIGIN MESH=Flak2Pick X=0 Y=-540 Z=0 YAW=64
00033 #exec MESH SEQUENCE MESH=Flak2Pick SEQ=All STARTFRAME=0 NUMFRAMES=1
00034 #exec MESH SEQUENCE MESH=Flak2Pick SEQ=Still STARTFRAME=0 NUMFRAMES=1
00035 #exec MESHMAP SCALE MESHMAP=Flak2Pick X=0.07 Y=0.07 Z=0.14
00036 #exec MESHMAP SETTEXTURE MESHMAP=Flak2Pick NUM=1 TEXTURE=Flak_t
00037
00038 #exec MESH IMPORT MESH=FlakHand ANIVFILE=MODELS\flakhand_a.3D DATAFILE=MODELS\flakhand_d.3D X=0 Y=0 Z=0
00039 #exec MESH ORIGIN MESH=FlakHand X=20 Y=-230 Z=-55 YAW=-64 ROLL=0 PITCH=0
00040 #exec MESH SEQUENCE MESH=FlakHand SEQ=All STARTFRAME=0 NUMFRAMES=10
00041 #exec MESH SEQUENCE MESH=FlakHand SEQ=Still STARTFRAME=0 NUMFRAMES=1
00042 #exec MESH SEQUENCE MESH=FlakHand SEQ=Fire STARTFRAME=1 NUMFRAMES=9 RATE=40.0
00043 #exec MESHMAP SCALE MESHMAP=FlakHand X=0.04 Y=0.04 Z=0.08
00044 #exec MESHMAP SETTEXTURE MESHMAP=FlakHand NUM=1 TEXTURE=Flak_t
00045
00046 #exec TEXTURE IMPORT NAME=IconFlak FILE=TEXTURES\HUD\WpnFlak.PCX GROUP="Icons" MIPS=OFF
00047 #exec TEXTURE IMPORT NAME=UseFlak FILE=TEXTURES\HUD\UseFlak.PCX GROUP="Icons" MIPS=OFF
00048
00049 #exec MESH IMPORT MESH=muzzFF3 ANIVFILE=MODELS\flakflash_a.3d DATAFILE=MODELS\flakflash_d.3d X=0 Y=0 Z=0
00050 #exec MESH LODPARAMS MESH=muzzFF3 MINVERTS=8 STRENGTH=0.7 ZDISP=800.0
00051 #exec MESH ORIGIN MESH=muzzFF3 X=0 Y=740 Z=-90 YAW=64
00052 #exec MESH SEQUENCE MESH=muzzFF3 SEQ=All STARTFRAME=0 NUMFRAMES=1
00053 #exec MESHMAP NEW MESHMAP=muzzFF3 MESH=muzzFF3
00054 #exec MESHMAP SCALE MESHMAP=muzzFF3 X=0.03 Y=0.075 Z=0.06
00055 #exec TEXTURE IMPORT NAME=MuzzyFlak FILE=MODELS\flakflash2.PCX GROUP=Skins LODSET=2
00056
00057 // return delta to combat style
00058 function float SuggestAttackStyle()
00059 {
00060 local bot B;
00061
00062 B = Bot(Owner);
00063 if ( (B != None) && B.bNovice )
00064 return 0.2;
00065 return 0.4;
00066 }
00067
00068 function float SuggestDefenseStyle()
00069 {
00070 return -0.3;
00071 }
00072
00073 simulated event RenderTexture(ScriptedTexture Tex)
00074 {
00075 local Color C;
00076 local string Temp;
00077
00078 if ( AmmoType != None )
00079 Temp = String(AmmoType.AmmoAmount);
00080
00081 while(Len(Temp) < 3) Temp = "0"$Temp;
00082
00083 C.R = 255;
00084 C.G = 0;
00085 C.B = 0;
00086
00087 Tex.DrawColoredText( 30, 10, Temp, Font'LEDFont2', C );
00088 }
00089
00090
00091 function float RateSelf( out int bUseAltMode )
00092 {
00093 local float EnemyDist, rating;
00094 local vector EnemyDir;
00095
00096 if ( AmmoType.AmmoAmount <=0 )
00097 return -2;
00098 if ( Pawn(Owner).Enemy == None )
00099 {
00100 bUseAltMode = 0;
00101 return AIRating;
00102 }
00103 EnemyDir = Pawn(Owner).Enemy.Location - Owner.Location;
00104 EnemyDist = VSize(EnemyDir);
00105 rating = FClamp(AIRating - (EnemyDist - 450) * 0.001, 0.2, AIRating);
00106 if ( Pawn(Owner).Enemy.IsA('StationaryPawn') )
00107 {
00108 bUseAltMode = 0;
00109 return AIRating + 0.3;
00110 }
00111 if ( EnemyDist > 900 )
00112 {
00113 bUseAltMode = 0;
00114 if ( EnemyDist > 2000 )
00115 {
00116 if ( EnemyDist > 3500 )
00117 return 0.2;
00118 return (AIRating - 0.3);
00119 }
00120 if ( EnemyDir.Z < -0.5 * EnemyDist )
00121 {
00122 bUseAltMode = 1;
00123 return (AIRating - 0.3);
00124 }
00125 }
00126 else if ( (EnemyDist < 750) && (Pawn(Owner).Enemy.Weapon != None) && Pawn(Owner).Enemy.Weapon.bMeleeWeapon )
00127 {
00128 bUseAltMode = 0;
00129 return (AIRating + 0.3);
00130 }
00131 else if ( (EnemyDist < 340) || (EnemyDir.Z > 30) )
00132 {
00133 bUseAltMode = 0;
00134 return (AIRating + 0.2);
00135 }
00136 else
00137 bUseAltMode = int( FRand() < 0.65 );
00138 return rating;
00139 }
00140
00141
00142 simulated event RenderOverlays( canvas Canvas )
00143 {
00144 Texture'FlakAmmoled'.NotifyActor = Self;
00145 Super.RenderOverlays(Canvas);
00146 Texture'FlakAmmoled'.NotifyActor = None;
00147 }
00148
00149
00150 // Fire chunks
00151 function Fire( float Value )
00152 {
00153 local Vector Start, X,Y,Z;
00154 local Bot B;
00155 local Pawn P;
00156
00157 if ( AmmoType == None )
00158 {
00159 // ammocheck
00160 GiveAmmo(Pawn(Owner));
00161 }
00162 if (AmmoType.UseAmmo(1))
00163 {
00164 bCanClientFire = true;
00165 bPointing=True;
00166 Start = Owner.Location + CalcDrawOffset();
00167 B = Bot(Owner);
00168 P = Pawn(Owner);
00169 P.PlayRecoil(FiringSpeed);
00170 Owner.MakeNoise(2.0 * P.SoundDampening);
00171 AdjustedAim = P.AdjustAim(AltProjectileSpeed, Start, AimError, True, bWarnTarget);
00172 GetAxes(AdjustedAim,X,Y,Z);
00173 Spawn(class'WeaponLight',,'',Start+X*20,rot(0,0,0));
00174 Start = Start + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z;
00175 Spawn( class 'UTChunk1',, '', Start, AdjustedAim);
00176 Spawn( class 'UTChunk2',, '', Start - Z, AdjustedAim);
00177 Spawn( class 'UTChunk3',, '', Start + 2 * Y + Z, AdjustedAim);
00178 Spawn( class 'UTChunk4',, '', Start - Y, AdjustedAim);
00179 Spawn( class 'UTChunk1',, '', Start + 2 * Y - Z, AdjustedAim);
00180 Spawn( class 'UTChunk2',, '', Start, AdjustedAim);
00181
00182 // lower skill bots fire less flak chunks
00183 if ( (B == None) || !B.bNovice || ((B.Enemy != None) && (B.Enemy.Weapon != None) && B.Enemy.Weapon.bMeleeWeapon) )
00184 {
00185 Spawn( class 'UTChunk3',, '', Start + Y - Z, AdjustedAim);
00186 Spawn( class 'UTChunk4',, '', Start + 2 * Y + Z, AdjustedAim);
00187 }
00188 else if ( B.Skill > 1 )
00189 Spawn( class 'UTChunk3',, '', Start + Y - Z, AdjustedAim);
00190
00191 ClientFire(Value);
00192 GoToState('NormalFire');
00193 }
00194 }
00195
00196 simulated function PlayFiring()
00197 {
00198 PlayAnim( 'Fire', 0.9, 0.05);
00199 PlayOwnedSound(FireSound, SLOT_Misc,Pawn(Owner).SoundDampening*4.0);
00200 bMuzzleFlash++;
00201 }
00202
00203 simulated function PlayAltFiring()
00204 {
00205 PlayOwnedSound(AltFireSound, SLOT_Misc,Pawn(Owner).SoundDampening*4.0);
00206 PlayAnim('AltFire', 1.3, 0.05);
00207 bMuzzleFlash++;
00208 }
00209
00210 function AltFire( float Value )
00211 {
00212 local Vector Start, X,Y,Z;
00213
00214 if ( AmmoType == None )
00215 {
00216 // ammocheck
00217 GiveAmmo(Pawn(Owner));
00218 }
00219 if (AmmoType.UseAmmo(1))
00220 {
00221 Pawn(Owner).PlayRecoil(FiringSpeed);
00222 bPointing=True;
00223 bCanClientFire = true;
00224 Owner.MakeNoise(Pawn(Owner).SoundDampening);
00225 GetAxes(Pawn(owner).ViewRotation,X,Y,Z);
00226 Start = Owner.Location + CalcDrawOffset();
00227 Spawn(class'WeaponLight',,'',Start+X*20,rot(0,0,0));
00228 Start = Start + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z;
00229 AdjustedAim = pawn(owner).AdjustToss(AltProjectileSpeed, Start, AimError, True, bAltWarnTarget);
00230 Spawn(class'FlakSlug',,, Start,AdjustedAim);
00231 ClientAltFire(Value);
00232 GoToState('AltFiring');
00233 }
00234 }
00235
00236 ////////////////////////////////////////////////////////////
00237 state AltFiring
00238 {
00239 function EndState()
00240 {
00241 Super.EndState();
00242 OldFlashCount = FlashCount;
00243 }
00244
00245 function AnimEnd()
00246 {
00247 if ( (AnimSequence != 'Loading') && (AmmoType.AmmoAmount > 0) )
00248 PlayReloading();
00249 else
00250 Finish();
00251 }
00252
00253 Begin:
00254 FlashCount++;
00255 }
00256
00257 /////////////////////////////////////////////////////////////
00258 simulated function PlayReloading()
00259 {
00260 PlayAnim('Loading',0.7, 0.05);
00261 Owner.PlayOwnedSound(CockingSound, SLOT_None,0.5*Pawn(Owner).SoundDampening);
00262 }
00263
00264 simulated function PlayFastReloading()
00265 {
00266 PlayAnim('Loading',1.4, 0.05);
00267 Owner.PlayOwnedSound(CockingSound, SLOT_None,0.5*Pawn(Owner).SoundDampening);
00268 }
00269
00270 state ClientReload
00271 {
00272 simulated function bool ClientFire(float Value)
00273 {
00274 bForceFire = bForceFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) );
00275 return bForceFire;
00276 }
00277
00278 simulated function bool ClientAltFire(float Value)
00279 {
00280 bForceAltFire = bForceAltFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) );
00281 return bForceAltFire;
00282 }
00283
00284 simulated function AnimEnd()
00285 {
00286 if ( bCanClientFire && (PlayerPawn(Owner) != None) && (AmmoType.AmmoAmount > 0) )
00287 {
00288 if ( bForceFire || (Pawn(Owner).bFire != 0) )
00289 {
00290 Global.ClientFire(0);
00291 return;
00292 }
00293 else if ( bForceAltFire || (Pawn(Owner).bAltFire != 0) )
00294 {
00295 Global.ClientAltFire(0);
00296 return;
00297 }
00298 }
00299 GotoState('');
00300 Global.AnimEnd();
00301 }
00302
00303 simulated function EndState()
00304 {
00305 bForceFire = false;
00306 bForceAltFire = false;
00307 }
00308
00309 simulated function BeginState()
00310 {
00311 bForceFire = false;
00312 bForceAltFire = false;
00313 }
00314 }
00315
00316 state ClientFiring
00317 {
00318 simulated function AnimEnd()
00319 {
00320 if ( (Pawn(Owner) == None) || (Ammotype.AmmoAmount <= 0) )
00321 {
00322 PlayIdleAnim();
00323 GotoState('');
00324 }
00325 else if ( !bCanClientFire )
00326 GotoState('');
00327 else
00328 {
00329 PlayFastReloading();
00330 GotoState('ClientReload');
00331 }
00332 }
00333 }
00334
00335 state ClientAltFiring
00336 {
00337 simulated function AnimEnd()
00338 {
00339 if ( (Pawn(Owner) == None) || (Ammotype.AmmoAmount <= 0) )
00340 {
00341 PlayIdleAnim();
00342 GotoState('');
00343 }
00344 else if ( !bCanClientFire )
00345 GotoState('');
00346 else
00347 {
00348 PlayReloading();
00349 GotoState('ClientReload');
00350 }
00351
00352 }
00353 }
00354
00355 state NormalFire
00356 {
00357 function EndState()
00358 {
00359 Super.EndState();
00360 OldFlashCount = FlashCount;
00361 }
00362
00363 function AnimEnd()
00364 {
00365 if ( (AnimSequence != 'Loading') && (AmmoType.AmmoAmount > 0) )
00366 PlayFastReloading();
00367 else
00368 Finish();
00369 }
00370
00371 Begin:
00372 FlashCount++;
00373 }
00374
00375 ///////////////////////////////////////////////////////////
00376 simulated function TweenDown()
00377 {
00378 if ( IsAnimating() && (AnimSequence != '') && (GetAnimGroup(AnimSequence) == 'Select') )
00379 TweenAnim( AnimSequence, AnimFrame * 0.4 );
00380 else if ( AmmoType.AmmoAmount < 1 )
00381 TweenAnim('Select', 0.5);
00382 else
00383 PlayAnim('Down',1.0, 0.05);
00384 }
00385
00386 simulated function PlayIdleAnim()
00387 {
00388 }
00389
00390 simulated function PlayPostSelect()
00391 {
00392 PlayAnim('Loading', 1.3, 0.05);
00393 Owner.PlayOwnedSound(Misc2Sound, SLOT_None,1.3*Pawn(Owner).SoundDampening);
00394 }
00395
00396 defaultproperties
00397 {
00398 WeaponDescription="Classification: Heavy Shrapnel\n\nPrimary Fire: White hot chunks of scrap metal are sprayed forth, shotgun style.\n\nSecondary Fire: A grenade full of shrapnel is lobbed at the enemy.\n\nTechniques: The Flak Cannon is far more useful in close range combat situations."
00399 InstFlash=-0.400000
00400 InstFog=(X=650.000000,Y=450.000000,Z=190.000000)
00401 AmmoName=Class'Botpack.FlakAmmo'
00402 PickupAmmoCount=10
00403 bWarnTarget=True
00404 bAltWarnTarget=True
00405 bSplashDamage=True
00406 FiringSpeed=1.000000
00407 FireOffset=(X=10.000000,Y=-11.000000,Z=-15.000000)
00408 ProjectileClass=Class'Botpack.UTChunk'
00409 AltProjectileClass=Class'Botpack.flakslug'
00410 aimerror=700.000000
00411 shakemag=350.000000
00412 shaketime=0.150000
00413 shakevert=8.500000
00414 AIRating=0.750000
00415 FireSound=Sound'UnrealShare.flak.shot1'
00416 AltFireSound=Sound'UnrealShare.flak.Explode1'
00417 CockingSound=Sound'UnrealI.flak.load1'
00418 SelectSound=Sound'UnrealI.flak.pdown'
00419 Misc2Sound=Sound'UnrealI.flak.Hidraul2'
00420 DeathMessage="%o was ripped to shreds by %k's %w."
00421 NameColor=(G=96,B=0)
00422 bDrawMuzzleFlash=True
00423 MuzzleScale=2.000000
00424 FlashY=0.160000
00425 FlashO=0.015000
00426 FlashC=0.100000
00427 FlashLength=0.020000
00428 FlashS=256
00429 MFTexture=Texture'Botpack.Skins.Flakmuz'
00430 AutoSwitchPriority=8
00431 InventoryGroup=8
00432 PickupMessage="You got the Flak Cannon."
00433 ItemName="Flak Cannon"
00434 PlayerViewOffset=(X=1.500000,Y=-1.000000,Z=-1.650000)
00435 PlayerViewMesh=LodMesh'Botpack.flakm'
00436 PlayerViewScale=1.200000
00437 BobDamping=0.972000
00438 PickupViewMesh=LodMesh'Botpack.Flak2Pick'
00439 ThirdPersonMesh=LodMesh'Botpack.FlakHand'
00440 StatusIcon=Texture'Botpack.Icons.UseFlak'
00441 bMuzzleFlashParticles=True
00442 MuzzleFlashStyle=STY_Translucent
00443 MuzzleFlashMesh=LodMesh'Botpack.muzzFF3'
00444 MuzzleFlashScale=0.400000
00445 MuzzleFlashTexture=Texture'Botpack.Skins.MuzzyFlak'
00446 PickupSound=Sound'UnrealShare.Pickups.WeaponPickup'
00447 Icon=Texture'Botpack.Icons.UseFlak'
00448 Mesh=LodMesh'Botpack.Flak2Pick'
00449 bNoSmooth=False
00450 CollisionRadius=32.000000
00451 CollisionHeight=23.000000
00452 LightBrightness=228
00453 LightHue=30
00454 LightSaturation=71
00455 LightRadius=14
00456 }
|