Core.Object | +--Engine.Actor | +--Engine.Inventory | +--Engine.Weapon | +--UnrealI.Rifle
int
NumFire
void
AltFire(float Value)
float
RateSelf(out int)
PlayIdleAnim()
///////////////////////////////////////////////////////////
Timer()
EndState()
BeginState()
Fire(float Value)
Finish()
ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)
PlayFiring()
PlayAltFiring()
AltFire(float F)
Fire(float F)
00001 //============================================================================= 00002 // Rifle. 00003 //============================================================================= 00004 class Rifle extends Weapon; 00005 00006 #exec MESH IMPORT MESH=RifleM ANIVFILE=MODELS\Rifle_a.3D DATAFILE=MODELS\Rifle_d.3D X=0 Y=0 Z=0 unmirror=1 00007 #exec MESH ORIGIN MESH=RifleM X=0 Y=0 Z=0 YAW=-64 PITCH=0 ROLL=0 00008 #exec MESH SEQUENCE MESH=RifleM SEQ=All STARTFRAME=0 NUMFRAMES=101 00009 #exec MESH SEQUENCE MESH=RifleM SEQ=Select STARTFRAME=0 NUMFRAMES=20 RATE=27 GROUP=Select 00010 #exec MESH SEQUENCE MESH=RifleM SEQ=Still STARTFRAME=20 NUMFRAMES=1 00011 #exec MESH SEQUENCE MESH=RifleM SEQ=Fire STARTFRAME=21 NUMFRAMES=10 RATE=24 00012 #exec MESH SEQUENCE MESH=RifleM SEQ=ScopeFire STARTFRAME=31 NUMFRAMES=10 00013 #exec MESH SEQUENCE MESH=RifleM SEQ=ScopeUp STARTFRAME=41 NUMFRAMES=14 00014 #exec MESH SEQUENCE MESH=RifleM SEQ=StillScope STARTFRAME=55 NUMFRAMES=1 00015 #exec MESH SEQUENCE MESH=RifleM SEQ=DownWScope STARTFRAME=56 NUMFRAMES=15 00016 #exec MESH SEQUENCE MESH=RifleM SEQ=Down STARTFRAME=71 NUMFRAMES=15 00017 #exec MESH SEQUENCE MESH=RifleM SEQ=ScopeDown STARTFRAME=86 NUMFRAMES=15 00018 #exec TEXTURE IMPORT NAME=JRifle1 FILE=MODELS\Rifle.PCX GROUP=Skins 00019 #exec OBJ LOAD FILE=..\UnrealShare\textures\FireEffect18.utx PACKAGE=UNREALSHARE.Effect18 00020 #exec MESHMAP SCALE MESHMAP=RifleM X=0.005 Y=0.004 Z=0.01 00021 #exec MESHMAP SETTEXTURE MESHMAP=RifleM NUM=1 TEXTURE=JRifle1 00022 #exec MESHMAP SETTEXTURE MESHMAP=RifleM NUM=0 TEXTURE=UnrealShare.Effect18.FireEffect18 00023 00024 #exec MESH IMPORT MESH=RiPick ANIVFILE=MODELS\RiPick_a.3D DATAFILE=MODELS\RiPick_d.3D X=0 Y=0 Z=0 00025 #exec MESH ORIGIN MESH=RiPick X=0 Y=0 Z=0 YAW=-64 00026 #exec MESH SEQUENCE MESH=RiPick SEQ=All STARTFRAME=0 NUMFRAMES=1 00027 #exec MESH SEQUENCE MESH=RiPick SEQ=Still STARTFRAME=0 NUMFRAMES=1 00028 #exec TEXTURE IMPORT NAME=JRifle1 FILE=MODELS\Rifle.PCX GROUP=Skins 00029 #exec MESHMAP SCALE MESHMAP=RiPick X=0.06 Y=0.06 Z=0.12 00030 #exec MESHMAP SETTEXTURE MESHMAP=RiPick NUM=1 TEXTURE=JRifle1 00031 00032 #exec MESH IMPORT MESH=Rifle3rd ANIVFILE=MODELS\Rifle3_a.3D DATAFILE=MODELS\Rifle3_d.3D X=0 Y=0 Z=0 00033 #exec MESH ORIGIN MESH=Rifle3rd X=0 Y=-550 Z=-45 YAW=-64 ROLL=9 00034 #exec MESH SEQUENCE MESH=Rifle3rd SEQ=All STARTFRAME=0 NUMFRAMES=10 00035 #exec MESH SEQUENCE MESH=Rifle3rd SEQ=Still STARTFRAME=0 NUMFRAMES=1 00036 #exec MESH SEQUENCE MESH=Rifle3rd SEQ=Fire STARTFRAME=1 NUMFRAMES=9 00037 #exec MESHMAP SCALE MESHMAP=Rifle3rd X=0.05 Y=0.05 Z=0.1 00038 #exec MESHMAP SETTEXTURE MESHMAP=Rifle3rd NUM=1 TEXTURE=JRifle1 00039 #exec MESHMAP SETTEXTURE MESHMAP=Rifle3rd NUM=0 TEXTURE=UnrealShare.Effect18.FireEffect18 00040 00041 #exec AUDIO IMPORT FILE="Sounds\rifle\RPICKUP1.WAV" NAME="RiflePickup" GROUP="Rifle" 00042 #exec AUDIO IMPORT FILE="Sounds\rifle\RSHOT9.WAV" NAME="RifleShot" GROUP="Rifle" 00043 00044 var int NumFire; 00045 00046 function float RateSelf( out int bUseAltMode ) 00047 { 00048 if ( AmmoType.AmmoAmount <=0 ) 00049 return -2; 00050 00051 bUseAltMode = 0; 00052 return AIRating; 00053 00054 } 00055 00056 function AltFire( float Value ) 00057 { 00058 GoToState('AltFiring'); 00059 00060 } 00061 00062 /////////////////////////////////////////////////////// 00063 state NormalFire 00064 { 00065 function Fire(float F) 00066 { 00067 } 00068 00069 function AltFire(float F) 00070 { 00071 } 00072 00073 Begin: 00074 FinishAnim(); 00075 Finish(); 00076 } 00077 00078 function Timer() 00079 { 00080 local actor targ; 00081 local float bestAim, bestDist; 00082 local vector FireDir; 00083 00084 bestAim = 0.95; 00085 if ( Pawn(Owner) == None ) 00086 { 00087 GotoState(''); 00088 return; 00089 } 00090 FireDir = vector(Pawn(Owner).ViewRotation); 00091 targ = Pawn(Owner).PickTarget(bestAim, bestDist, FireDir, Owner.Location); 00092 if ( Pawn(targ) != None ) 00093 { 00094 SetTimer(1 + 4 * FRand(), false); 00095 bPointing = true; 00096 Pawn(targ).WarnTarget(Pawn(Owner), 200, FireDir); 00097 } 00098 else 00099 { 00100 SetTimer(0.4 + 1.6 * FRand(), false); 00101 bPointing = false; 00102 } 00103 } 00104 00105 function PlayAltFiring() 00106 { 00107 if ( PlayerPawn(Owner) != None ) 00108 PlayerPawn(Owner).shakeview(ShakeTime, ShakeMag, ShakeVert); 00109 Owner.PlaySound(FireSound, SLOT_None,Pawn(Owner).SoundDampening*3.0,,,0.9 + 0.2 * FRand()); 00110 PlayAnim('Fire', 2.0,0.05); 00111 } 00112 00113 function PlayFiring() 00114 { 00115 Owner.PlaySound(FireSound, SLOT_None, Pawn(Owner).SoundDampening*3.0); 00116 PlayAnim('Fire', 0.7,0.05); 00117 } 00118 00119 function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) 00120 { 00121 local shellcase s; 00122 00123 if ( PlayerPawn(Owner) != None ) 00124 { 00125 PlayerPawn(Owner).ClientInstantFlash( -0.4, vect(650, 450, 190)); 00126 if ( PlayerPawn(Owner).DesiredFOV == PlayerPawn(Owner).DefaultFOV ) 00127 bMuzzleFlash++; 00128 } 00129 00130 s = Spawn(class'ShellCase',Pawn(Owner), '', Owner.Location + CalcDrawOffset() + 30 * X + (2.8 * FireOffset.Y+5.0) * Y - Z * 1); 00131 if ( s != None ) 00132 { 00133 s.DrawScale = 2.0; 00134 s.Eject(((FRand()*0.3+0.4)*X + (FRand()*0.2+0.2)*Y + (FRand()*0.3+1.0) * Z)*160); 00135 } 00136 if (Other == Level) 00137 Spawn(class'HeavyWallHitEffect',,, HitLocation+HitNormal*9, Rotator(HitNormal)); 00138 else if ( (Other != self) && (Other != Owner) && (Other != None) ) 00139 { 00140 if ( Other.IsA('Pawn') && (HitLocation.Z - Other.Location.Z > 0.62 * Other.CollisionHeight) 00141 && (instigator.IsA('PlayerPawn') || (instigator.skill > 1)) 00142 && (!Other.IsA('ScriptedPawn') || !ScriptedPawn(Other).bIsBoss) ) 00143 Other.TakeDamage(100, Pawn(Owner), HitLocation, 35000 * X, 'decapitated'); 00144 else 00145 Other.TakeDamage(45, Pawn(Owner), HitLocation, 30000.0*X, 'shot'); 00146 if ( !Other.IsA('Pawn') && !Other.IsA('Carcass') ) 00147 spawn(class'SpriteSmokePuff',,,HitLocation+HitNormal*9); 00148 } 00149 } 00150 00151 function Finish() 00152 { 00153 //bMuzzleFlash = 0; 00154 if ( ((Pawn(Owner).bFire!=0) || (Pawn(Owner).bAltFire!=0)) && (FRand() < 0.6) ) 00155 Timer(); 00156 Super.Finish(); 00157 } 00158 00159 state Idle 00160 { 00161 00162 function AltFire( float Value ) 00163 { 00164 GoToState('AltFiring'); 00165 } 00166 00167 function Fire( float Value ) 00168 { 00169 if (AmmoType.UseAmmo(1)) 00170 { 00171 GotoState('NormalFire'); 00172 if ( PlayerPawn(Owner) != None ) 00173 PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); 00174 bPointing=True; 00175 TraceFire(0.0); 00176 PlayFiring(); 00177 CheckVisibility(); 00178 } 00179 } 00180 00181 00182 function BeginState() 00183 { 00184 if (Pawn(Owner).bFire!=0) Fire(0.0); 00185 bPointing = false; 00186 SetTimer(0.4 + 1.6 * FRand(), false); 00187 Super.BeginState(); 00188 } 00189 00190 function EndState() 00191 { 00192 SetTimer(0.0, false); 00193 Super.EndState(); 00194 } 00195 00196 Begin: 00197 bPointing=False; 00198 if ( (AmmoType != None) && (AmmoType.AmmoAmount<=0) ) 00199 Pawn(Owner).SwitchToBestWeapon(); //Goto Weapon that has Ammo 00200 if ( Pawn(Owner).bFire!=0 ) Fire(0.0); 00201 Disable('AnimEnd'); 00202 PlayIdleAnim(); 00203 } 00204 00205 /////////////////////////////////////////////////////// 00206 state AltFiring 00207 { 00208 00209 function Timer() 00210 { 00211 if (Pawn(Owner).bAltFire == 0) 00212 { 00213 if (PlayerPawn(Owner) != None) 00214 PlayerPawn(Owner).StopZoom(); 00215 SetTimer(0.0,False); 00216 GoToState('Idle'); 00217 } 00218 } 00219 00220 Begin: 00221 if ( Owner.IsA('PlayerPawn') ) 00222 { 00223 PlayerPawn(Owner).ToggleZoom(); 00224 SetTimer(0.075,True); 00225 } 00226 else 00227 { 00228 Pawn(Owner).bFire = 1; 00229 Pawn(Owner).bAltFire = 0; 00230 Global.Fire(0); 00231 } 00232 } 00233 00234 /////////////////////////////////////////////////////////// 00235 function PlayIdleAnim() 00236 { 00237 PlayAnim('Still',1.0, 0.05); 00238 } 00239 00240 defaultproperties 00241 { 00242 AmmoName=Class'UnrealI.RifleAmmo' 00243 PickupAmmoCount=8 00244 bInstantHit=True 00245 bAltInstantHit=True 00246 FireOffset=(Y=-5.000000,Z=-2.000000) 00247 shakemag=400.000000 00248 shaketime=0.150000 00249 shakevert=8.000000 00250 AIRating=0.700000 00251 RefireRate=0.600000 00252 AltRefireRate=0.300000 00253 FireSound=Sound'UnrealI.Rifle.RifleShot' 00254 SelectSound=Sound'UnrealI.Rifle.RiflePickup' 00255 DeathMessage="%k put a bullet through %o's head." 00256 AutoSwitchPriority=9 00257 InventoryGroup=9 00258 PickupMessage="You got the Rifle" 00259 ItemName="Sniper Rifle" 00260 PlayerViewOffset=(X=3.200000,Y=-1.200000,Z=-1.700000) 00261 PlayerViewMesh=LodMesh'UnrealI.RifleM' 00262 PickupViewMesh=LodMesh'UnrealI.RiPick' 00263 ThirdPersonMesh=LodMesh'UnrealI.Rifle3rd' 00264 PickupSound=Sound'UnrealShare.Pickups.WeaponPickup' 00265 Mesh=LodMesh'UnrealI.RiPick' 00266 bNoSmooth=False 00267 CollisionRadius=28.000000 00268 CollisionHeight=8.000000 00269 }