// ============================================================ // ApplesInfinity2nd // ============================================================ class ApplesInfinity2nd extends Weapon; #exec MESH IMPORT MESH=Sniper ANIVFILE=MODELS\Sniper_a.3d DATAFILE=MODELS\Sniper_d.3d X=0 Y=0 Z=0 //Unmirror=1 #exec MESH ORIGIN MESH=Sniper X=0 Y=0 Z=0 YAW=128 #exec MESH SEQUENCE MESH=Sniper SEQ=All STARTFRAME=0 NUMFRAMES=35 #exec MESH SEQUENCE MESH=Sniper SEQ=Still STARTFRAME=0 NUMFRAMES=1 #exec MESH SEQUENCE MESH=Sniper SEQ=Down STARTFRAME=1 NUMFRAMES=4 RATE=16 #exec MESH SEQUENCE MESH=Sniper SEQ=Fire STARTFRAME=5 NUMFRAMES=4 RATE=21 #exec MESH SEQUENCE MESH=Sniper SEQ=Select STARTFRAME=9 NUMFRAMES=4 RATE=16 GROUP=Select #exec MESHMAP NEW MESHMAP=Sniper MESH=Sniper #exec MESHMAP SCALE MESHMAP=Sniper X=0.1 Y=0.1 Z=0.2 #exec TEXTURE IMPORT NAME=JSniper_01 FILE=Textures\JSniper_01.PCX GROUP=Skins LODSET=2 //Material #1 #exec TEXTURE IMPORT NAME=JSniper_02 FILE=Textures\JSniper_02.PCX GROUP=Skins LODSET=2 //2 #exec MESHMAP SETTEXTURE MESHMAP=Sniper NUM=0 TEXTURE=JSniper_01 #exec MESHMAP SETTEXTURE MESHMAP=Sniper NUM=1 TEXTURE=JSniper_02 //3rd person #exec MESH IMPORT MESH=Sniper3rd ANIVFILE=MODELS\Sniper3rd_a.3d DATAFILE=MODELS\Sniper3rd_d.3d X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=Sniper3rd X=-130 Y=0 Z=-10 #exec MESH SEQUENCE MESH=Sniper3rd SEQ=All STARTFRAME=0 NUMFRAMES=1 #exec MESH SEQUENCE MESH=Sniper3rd SEQ=still STARTFRAME=0 NUMFRAMES=1 #exec MESHMAP NEW MESHMAP=Sniper3rd MESH=Sniper3rd #exec MESHMAP SCALE MESHMAP=Sniper3rd X=0.1 Y=0.1 Z=0.2 #exec TEXTURE IMPORT NAME=JSniper3rd_01 FILE=Textures\JSniper3rd_01.PCX GROUP=Skins LODSET=2 //Material #1 #exec MESHMAP SETTEXTURE MESHMAP=Sniper3rd NUM=0 TEXTURE=JSniper3rd_01 //pickup #exec MESH IMPORT MESH=Sniperpickup ANIVFILE=MODELS\Sniperpickup_a.3d DATAFILE=MODELS\Sniperpickup_d.3d X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=Sniperpickup X=100 Y=0 Z=0 #exec MESH SEQUENCE MESH=Sniperpickup SEQ=All STARTFRAME=0 NUMFRAMES=1 #exec MESH SEQUENCE MESH=Sniperpickup SEQ=Still STARTFRAME=0 NUMFRAMES=1 #exec MESHMAP NEW MESHMAP=Sniperpickup MESH=Sniperpickup #exec MESHMAP SCALE MESHMAP=Sniperpickup X=0.1 Y=0.1 Z=0.2 #exec TEXTURE IMPORT NAME=JSniperpickup_01 FILE=Textures\JSniperpickup_01.PCX GROUP=Skins LODSET=2 //Material #1 #exec TEXTURE IMPORT NAME=usesniper FILE=Textures\useSniper.PCX GROUP="Icons" MIPS=OFF #exec MESHMAP SETTEXTURE MESHMAP=Sniperpickup NUM=0 TEXTURE=JSniperpickup_01 #exec TEXTURE IMPORT NAME=NightVision FILE=TEXTURES\NightVision.PCX GROUP="Icons" MIPS=OFF FLAGS=2 LODSET=2 #exec TEXTURE IMPORT NAME=ScopeCrosshair FILE=TEXTURES\ScopeCrosshair.PCX GROUP="Icons" MIPS=OFF FLAGS=2 LODSET=2 #exec AUDIO IMPORT FILE="Sounds\boom.wav" NAME="boom" GROUP="fire" var int NumFire; var name FireAnims[5]; var vector OwnerLocation; var float StillTime, StillStart; simulated function PostRender( canvas Canvas ) { local PlayerPawn P; local float Scale; local float Xlength; local float range; local vector HitLocation, HitNormal, StartTrace, EndTrace, X,Y,Z; local actor Other; local float radpitch; Super.PostRender(Canvas); P = PlayerPawn(Owner); if ( (P != None) && (P.DesiredFOV != P.DefaultFOV) ) { bOwnsCrossHair = true; // Calc range XLength=255.0; GetAxes(Pawn(owner).ViewRotation,X,Y,Z); if ((Pawn(Owner).ViewRotation.Pitch >= 0) && (Pawn(Owner).ViewRotation.Pitch <= 18000)) radpitch = float(Pawn(Owner).ViewRotation.Pitch) / float(182) * (Pi/float(180)); else radpitch = float(Pawn(Owner).ViewRotation.Pitch - 65535) / float(182) * (Pi/float(180)); StartTrace = Owner.Location + Pawn(Owner).EyeHeight*Z*cos(radpitch); AdjustedAim = pawn(owner).AdjustAim(1000000, StartTrace, 2.75*AimError, False, False); EndTrace = StartTrace +(10000 * vector(AdjustedAim)); Other = Pawn(Owner).TraceShot(HitLocation,HitNormal,EndTrace,StartTrace); range = Vsize(StartTrace-HitLocation)/48-0.25; Scale = Canvas.ClipX/256; Canvas.SetPos(0.5 * Canvas.ClipX - 128 * Scale, 0.5 * Canvas.ClipY - 128 * Scale ); Canvas.Style = ERenderStyle.STY_Modulated; Canvas.DrawIcon(Texture'NightVision', Scale); Scale = Canvas.ClipX/640; Canvas.SetPos(0.5 * Canvas.ClipX - 128 * Scale, 0.5 * Canvas.ClipY - 128 * Scale ); Canvas.DrawIcon(Texture'ScopeCrosshair', Scale); Canvas.SetPos(0.5 * Canvas.ClipX + 64 * Scale, 0.5 * Canvas.ClipY + 96 * Scale); Canvas.Style = ERenderStyle.STY_Translucent; Canvas.DrawColor.R = 0; Canvas.DrawColor.G = 255; Canvas.DrawColor.B = 0; Scale = P.DefaultFOV/P.DesiredFOV; Canvas.DrawText( "["$int(range)$"."$int(10*range-10*int(range))$" m] Sniper's Paradise ["$int(Scale)$"."$int(10 * Scale - 10 * int(Scale))$"x]" ); } else bOwnsCrossHair = false; } function float RateSelf( out int bUseAltMode ) { if ( AmmoType.AmmoAmount <=0 ) return -2; bUseAltMode = 0; return AIRating; } function AltFire( float Value ) { GoToState('AltFiring'); } /////////////////////////////////////////////////////// state NormalFire { function EndState() { Super.EndState(); OldFlashCount = FlashCount; } Begin: FlashCount++; ProjectileFire(ProjectileClass, ProjectileSpeed, bWarnTarget); PlayFiring(); FinishAnim(); Finish(); } function Timer() { local actor targ; local float bestAim, bestDist; local vector FireDir; local Pawn P; bestAim = 0.95; P = Pawn(Owner); if ( P == None ) { GotoState(''); return; } if ( VSize(P.Location - OwnerLocation) < 6 ) StillTime += FMin(2.0, Level.TimeSeconds - StillStart); else StillTime = 0; StillStart = Level.TimeSeconds; OwnerLocation = P.Location; FireDir = vector(P.ViewRotation); targ = P.PickTarget(bestAim, bestDist, FireDir, Owner.Location); if ( Pawn(targ) != None ) { SetTimer(1 + 4 * FRand(), false); bPointing = true; Pawn(targ).WarnTarget(P, 200, FireDir); } else { SetTimer(0.4 + 1.6 * FRand(), false); if ( (P.bFire == 0) && (P.bAltFire == 0) ) bPointing = false; } } function PlayAltFiring() { if ( PlayerPawn(Owner) != None ) PlayerPawn(Owner).shakeview(ShakeTime, ShakeMag, ShakeVert); Owner.PlaySound(FireSound, SLOT_None,Pawn(Owner).SoundDampening*3.0.0,,,0.9 + 0.2 * FRand()); PlayAnim('Fire', 2.0,0.05); } simulated function PlayFiring() { local int r; Owner.PlaySound(FireSound, SLOT_None, Pawn(Owner).SoundDampening*3.0.0); PlayAnim('Fire', 1.7 + 0.01); } function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) { if (Other == Level) Spawn(class'bunyel',,, HitLocation+HitNormal, Rotator(HitNormal)); else if ( (Other != self) && (Other != Owner) && (Other != None) ) { if ( Other.bIsPawn ) Other.PlaySound(Sound 'ChunkHit',, 4.0,,100); if ( Other.bIsPawn && (HitLocation.Z - Other.Location.Z > 0.62 * Other.CollisionHeight) && (instigator.IsA('PlayerPawn') || (instigator.skill > 1)) && (!Other.IsA('ScriptedPawn') || !ScriptedPawn(Other).bIsBoss) ) Other.TakeDamage(120, Pawn(Owner), HitLocation, 35000 * X, AltDamageType); else Other.TakeDamage(80, Pawn(Owner), HitLocation, 30000 * X, myDamageType); if ( !Other.bIsPawn && !Other.IsA('Carcass') ) spawn(class'bunyel',,,HitLocation+HitNormal*9); } } function Finish() { if ( (Pawn(Owner).bFire!=0) && (FRand() < 0.6) ) Timer(); Super.Finish(); } state Idle { function AltFire( float Value ) { GoToState('AltFiring'); } function Fire( float Value ) { if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } if (AmmoType.UseAmmo(1)) { GotoState('NormalFire'); if ( PlayerPawn(Owner) != None ) PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); bPointing=True; if ( Owner.IsA('Bots') ) { // simulate bot using zoom if ( Bots(Owner).bIsWuss && (FRand() < 0.65) ) AimError = AimError/FClamp(StillTime, 1.0, 8.0); else if ( VSize(Owner.Location - OwnerLocation) < 6 ) AimError = AimError/FClamp(0.5 * StillTime, 1.0, 3.0); else StillTime = 0; } Pawn(Owner).PlayRecoil(FiringSpeed); // ProjectileFire(ProjectileClass, 10000, False); AimError = Default.AimError; Fire(Value); } } function BeginState() { bPointing = false; SetTimer(0.4 + 1.6 * FRand(), false); Super.BeginState(); } function EndState() { SetTimer(0.0, false); Super.EndState(); } Begin: bPointing=False; if ( AmmoType.AmmoAmount<=0 ) Pawn(Owner).SwitchToBestWeapon(); //Goto Weapon that has Ammo if ( Pawn(Owner).bFire!=0 ) Fire(0.0); Disable('AnimEnd'); PlayIdleAnim(); } /////////////////////////////////////////////////////// state AltFiring { simulated function Tick(float DeltaTime) { if (Pawn(Owner).bAltFire == 0) { if (PlayerPawn(Owner) != None) PlayerPawn(Owner).StopZoom(); SetTimer(0.0,False); GoToState('Idle'); } } Begin: if ( Owner.IsA('PlayerPawn') ) { PlayerPawn(Owner).ToggleZoom(); SetTimer(0.075,True); } else { Pawn(Owner).bFire = 1; Pawn(Owner).bAltFire = 0; Global.Fire(0); } } /////////////////////////////////////////////////////////// simulated function PlayIdleAnim() { if ( Mesh != PickupViewMesh ) PlayAnim('Still',1.0, 0.05); } function Projectile ProjectileFire(class ProjClass, float ProjSpeed, bool bWarn) { local vector HitLocation, HitNormal, StartTrace, EndTrace, X,Y,Z, AimDir; local actor Other; Owner.MakeNoise(Pawn(Owner).SoundDampening); GetAxes(Pawn(owner).ViewRotation,X,Y,Z); StartTrace = Owner.Location + pawn(owner).Eyeheight * Z; //adjust for current accuracy of weapon and player AdjustedAim = pawn(owner).AdjustAim(ProjSpeed, StartTrace, 2*AimError, False, False); X = vector(AdjustedAim); EndTrace = StartTrace + 10000 * X; AimDir = vector(AdjustedAim); Other = Pawn(Owner).TraceShot(HitLocation,HitNormal,EndTrace,StartTrace); return Spawn(ProjClass,,, StartTrace,AdjustedAim); } defaultproperties { AmmoName=Class'CEY.moreammo' PickupAmmoCount=100 bInstantHit=True bAltInstantHit=True FiringSpeed=1.800000 FireOffset=(Y=-5.000000,Z=-2.000000) ProjectileClass=Class'CEY.ProjAC' MyDamageType="SHOT" AltDamageType="Decapitated" AIRating=0.540000 RefireRate=1.000000 AltRefireRate=0.000000 FireSound=Sound'CEY.Fire.boom' DeathMessage="%k just totally Blasted %o into Infinity." AutoSwitchPriority=5 InventoryGroup=9 bRotatingPickup=False PickupMessage="You picked up an Infinity2nd Rifle." ItemName="ApplesInfinity2nd Rifle" PlayerViewOffset=(X=6.200000,Y=-1.750000,Z=-4.400000) PlayerViewMesh=LodMesh'CEY.Sniper' PlayerViewScale=0.200000 PickupViewMesh=LodMesh'CEY.Sniperpickup' ThirdPersonMesh=LodMesh'CEY.Sniper3rd' ThirdPersonScale=0.680000 PickupSound=Sound'UnrealShare.Pickups.WeaponPickup' Mesh=LodMesh'CEY.Sniper3rd' CollisionRadius=32.000000 CollisionHeight=8.000000 }