*&<H(ɐ`A+')1 &&&&&&NoneMaxRangeMinColor RelativeTimeAddPrecacheMaterialXYZ RangeVectorVector RelativeSizeOutValInValLifetimeRangeInitialParticlesPerSecondRespawnDeadParticlesAutomaticInitialSpawning MaxParticlesCoreOnslaughtFullEngineStartSizeRangeSystemUseRegularSizeScaleTexture UniformSizeSpinParticles SizeScale UseSizeScaleInitialDelayRangeUseColorScaleStartSpinRange ColorScaleAddPrecacheStaticMesh Onslaught StaticMeshStartLocationOffsetRelativeRevolutionStartLocationRangeFadeOutStartTimeMeshFadeOutTextureUSubdivisionsUseRotationFromTextureVSubdivisionsUseParticleColorFadeInEndTimeFadeInStartVelocityRangeBlendBetweenSubdivisionsPoints InterpCurveSpinsPerSecondRangeCoordinateSystem Emitters DrawStyleStartLocationShape WeaponBone VehicleClassKInertiaTensor HurtRadius bNoDeleteExplode BoneRollAxisOpacity BoneNameUseDirectionAsTick WheelRadiusbPoweredWheelStaticPrecache GetTeamNum DamageRadius ExplosionUpdatePrecacheMaterials GearRatios UnrealGame DrawScale AccelerationUser AutoDestroyONSAutoBomberSphereRadiusRangeBeginClientPlayForceFeedbackVehicleNameString SpinCCWorCWLandedDamageVehiclePositionStringTimer DestroyedRotator TakeDamageUpdatePrecacheStaticMeshesPostBeginPlayFireSoundClass FireInterval MyDamageType DetailMode XWeaponsSecondsBeforeInactiveWeaponPawnClassStartVelocityRadialRangeRedSkin BlueSkinGetVelocityDirectionFromUseMeshBlendMode AmbientGlowColorMultiplierRangeONSMobileAssaultStation bTrySplashbTossedWarnTargetPctProjectileClass aimerror WeaponClassWeaponFireAttachmentBoneExitPositions bLeadTarget SoundRadiusSpeed bInstantHitbFireOnRelease BoneOffset SteerTypebHandbrakeWheelRenderTwoSided RefireRateAltFireHealthFire PitchUpLimit Object83ScaleSizeByVelocityMultiplierClientPlaySound SoundVolumeCalcWeaponFireHitWall BeginState DrawTypeONSWeaponAIInfoKillLaserBeamCollisionRadiusMomentumTransferAIInfoBlowUpCanBombResetAfterChangeRelativeVelocityUseRevolutionScale RemoteRoleUseRandomSubdivisionbReplicateAnimations IsAltFirePhysics MaxSpeedRevolutionsPerSecondRangeSetTargetStateRevolutionScale BlowingUp ShakeView MaleSuicide FireForceFemaleSuicide DeathStringKill VehicleMassKImpactThresholdKLinearDamping UnDeployedKAngularDampingCollisionHeight VehicleFireYawBoneDriverDamageMult TPCamLookatTPCamDistanceFPCamViewOffset bNetNotifybFixedRotationDir FPCamPosDesiredRotation EntryRadiusKParams DamageTypebDrawMeshInFP PitchBoneKStartEnabledDiedbKNonSphericalInertiabHighDetailOnly bClientOnlybKDoubleTickRatebDestroyOnWorldPenetrate bDoSafetimeDisintegrationEffectClassDestructionEffectClassDestroyedVehicleMesh IdleSoundWeaponFireOffset bHasAltFire HealthMaxDriverWeaponsGetLocalPlayerController ShotDown TraceRange KFriction DamageMinExplosionDecal DamageMaxBeamEffectClassSpawnHitEffects SteerSpeedHandbrakeThreshStopThreshold TorqueCurve PlayReleaseProjectileFireModeSetEmitterStatusPassengerWeaponsEffectIsRelevant StartUpSoundShutDownSound StartUpForce AmbientSoundDisintegrationHealth CeaseFireDestructionLinearMomentumDestructionAngularMomentumDamagedEffectOffsetImpactDamageMultAltFireIntervalSetActiveWeaponVehicleDisintegratedWheelSoftnessWheelPenScaleWheelPenOffsetWheelRestitutionWheelLongFrictionFuncWheelLongSlipWheelLatSlipFunc TraceFireWheelLongFrictionScaleWheelLatFrictionScaleWheelHandbrakeSlipWheelHandbrakeFrictionWheelSuspensionTravelWheelSuspensionMaxRenderTravelFTScale ONSBomberDualFireOffsetChassisTorqueScaleMinBrakeFrictionMaxSteerAngleCurve TransRatioChangeUpPointChangeDownPoint LSDFactorEngineBrakeFactor AdjustAim bDirectionalEngineBrakeRPMScaleEngineInertiaIdleRPMEngineRPMSoundRangeRevMeterScalebAllowBigWheels ForceScaleDying PlayFiring ForceRadiusbDrawDriverInTP ForceTypeBombAllocateObject bKeyVehicleONSHoverTank_IonPlasma_WeaponFlashMuzzleFlash DrivePos ONSGenericSD WheelInertiaLeftFrontGunAttach RotationRateImplodeExplodeScaleSizeByVelocityMax SpawnBomberRotationDampingFactorRangeTPCamWorldOffsetStartLocationPolarRangeAddLocationFromOtherEmitterTouchPostNetReceive MomentumMultDampingFactorRange PlayChargeUpScaleSizeXByVelocityRanOverDamageTypeCrushedDamageType DampRotationbNetTemporaryUseRevolution HornSoundsBackup_Disabled Description UseCollisionUpdateLaserBeamLocation MinZDist GunClass DeployingSpawnLaserBeam Disabled Deployed RespawnTime MainGunBaseUT2k4AssaultFull LifeSpan UnDeployingWheelsMASmainGunDeploy StopFiringMASmainGunHideCancel AutoReset GibModifierbDetonatesGoop bArmorStopsMaxBrakeTorqueSkinsbUnlitbLocationalHitPlasmaEffectClass bSkeletizebKUseTearOffMomentumbDelayedDamage bNeverSeversFluidSurfaceShootStrengthMod FlashFogDamageOverlayMaterialDamageOverlayTimeGibPerterbationVehicleDamageScalingDeployedFPCamPos MaxLockRangeBlueBuildEffectClassRedBuildEffectClassUnDeployedFPCamPosDeployedTPCamWorldOffset DrawScale3D FireWeaponAtAccelerationMagnitudeClientSwitchToBestWeapon bHardAttachShakeOffsetRateShakeOffsetTime ShakeRotRate ShakeRotTimePlayStatusAnnouncementONSVehDeathMASAccelerationAddPerSec MaterialmaingunBarrelStopForceFeedbackPlayerViewOffsetPlayerViewPivotAttachmentClass ItemNameDeployedTPCamLookatFireModeClass ChargeBar PutDownAnimSelectAnimRatePutDownAnimRatePlasmaGunBarrel Object07 DisplayFOVSmallViewOffsetCenteredOffsetY CenteredRoll CenteredYaw GetAIRating GetViewAxesInventoryType SoundPitchPickupMessage Object08ONSBombSetWeaponOwnerTossZUpdateBeamLocation ImpactSoundbCollideActors Object05 ProcessTouchbUpdateSimulatedPositionbCollideWorld CameraBoneClientVehicleCeaseFire KMaxSpeed BankTorque PitchTorqueHoverForceCurvePostNetRecieve VehicleIconbAlwaysRelevant bIsGreyScale COMHeight ProbabilitySizeYPitch!ONSTankSecondaryTurret_IonPlasmaSizeX SVehicleIcon AlphaTest FlagBoneObjectiveGetOutDistShockMomentumMaxDesireability ShockRadiusSound ShockSound&DetermineVelocityByLocationDifferenceUnDeployedTPCamWorldOffset MovementUnDeployedTPCamLookatDamTypeIonTankBlastUseVelocityScale bBlockActorsVolumeDamTypeIonTankPancakeDamTypeIonTankRoadkillDamTypeMASCannon BeginPlayShadowCullDistanceLightBrightnessBumpYawStartConstraint MaxViewPitchLightSaturation BombRangeTPCamDistRange LightHue LightColor BombClassDyingEffectClass Lighting BomberClass bProjTarget MaxZDistCenterSpringForceDamTypeMASPancakeONSBombDropExplosionSoundsSpawningSoundSpawningSoundProbability bBlockKarmaRocketPackAttachDamTypeMASPlasmaXGameDamTypeMASRoadkill XEffectsFX_IonPlasmaTank_AimLaserKarmaFX_IonPlasmaTank_ShockWaveMutVehicleArenaVelocityScalebHoverOnGroundThrustAccelerationTrailShadeTypeTrailLocationMaxPointsPerTrailDistanceThresholdUseCrossedSheetsPointLifeTimeLeftRearGunAttachProjectionNormal%ONSTankSecondaryTurretPawn_IonPlasmaONSAutoBomberBombmaingunpostBase AirFactorBeamDistanceRangeDetermineEndPointByDragCoefficientCurveRightFrontgunAttachONSAutoBomberBombExplosionONSAutoBomberDeathFlamesRightRearGunAttachONSAutoBomberWarpEffect RocketPacksEntryPositionLiftCoefficientCurveForce SetupTreads MaxHoldTimeMaxPitchSpeedONSHoverTank_IonPlasma ShakeRotMagShakeOffsetMagbDriverHoldsFlag ONSHoverTank_IonPlasma_BeamFirebShowChargingBarONSMASBuildEffectBlueONSPainterPickupONSPainterFireKActorGravScaleONSPainterAttachmentONSMASBuildEffectRed ONSMASCannon ONSPainter ProjectileRocketPackFirePoint KCOMOffsetbHasHandbrake MaxThrustSpawnProjectileHoverCheckDistHoverPenScaleHoverSoftnessThrusterOffsetsYawEndConstraintMachineGunTurretLeftFrontTIRERightRearTIReRightFrontTIRE LeftRearTIRETankCannonWeaponAirRollDampingAirRollTorqueAirPitchDampingAirPitchTorqueAirTurnTorqueONSBombDropper bDoStuntInfoDaredevilThreshInAirDistanceDaredevilThreshInAirTimeDaredevilThreshInAirSpinServerPhysicsSteerBoneMaxAngleSteerBoneAxis EyePositionGunnerAttachmentBone AddVelocity TurnDampingONSBomberFactoryIsLocallyControlled IsFiringONSBomberRocketProjectile CanAttackFrontGunMountNumForwardGears RocketPivotFluidSurfaceInfo ChooseFireAt HideForce GroupNameRotationsPerSecondWheelSuspensionOffsetPitchDownLimitRadius GroundSpeed bInstantFirebDualIndependantTargeting DeployForce HideSoundbForceCenterAim bAimableSimulateTraceFirebDoOffsetTracebInheritVelocityFireIntervalAimLockVehicleExplosionWeight Incoming_air EnemyVisibleHeadlightCoronaMaxSizeIsShootingObjectiveHeadlightCoronaMaterialEffectEmitterClassImpactDamageThreshold bNeverResetbEnableProximityViewShakeArenaVehicleClassNameDamagedEffectScaleFireSoundVolume FriendlyNameTeam Object85ONSMASSideGunPawn FillPlayInfo DeselectONSMASSideGunViewShakeOffsetFreqViewShakeOffsetMagViewShakeRadiusShutDownForceAltFireSoundClass IsStationary%SetDelayedDamageInstigatorControllerONSMASRocketTrailEffectONSMASCannonBeamEffectONSMASCannonImplosionEffectONSMASFactory AltFireForceONSMASPlasmaProjectileVehicleDestroyedONSMASRocketProjectile MomentumDestroyAppearanceClientVehicleExplosion AttemptFire DeploySound ModeTickGetDescriptionTextDrivingStatusChangedHeadlightCoronaOffsetCloseSeatRotation SetTimerVehicleClassesSetFireRateModifier Collision MinSpeedAimAt Object02 Object03ChargingSoundPaintInstantFireModeSpawnBeamEffectClientStopFireClientStartFire PickupClassExplosionEffectClassONSMASRocketPackLockAimReallyConsumeAmmoArenaDescTextArenaDisplayText AvrilFire01 MASBIGFire01Laser24Horns LevHorn02Horn04Horn05 LevHorn01SpriteEmitter1SpriteEmitter2SpriteEmitter4 MeshEmitter0SpriteEmitter27EmitterTextures MultiFrame rockchunks02SpriteEmitter3 MeshEmitter1 MeshEmitter2SpriteEmitter21SpriteEmitter18WeaponStaticMesh GrenadeMesh RocketProjPainterPickupRocketShellTex WeaponSkinsSpriteEmitter44SpriteEmitter55 XWeapons_rc SniperBorder SniperFocus SniperArrowsUT2004WeaponsShockHitShader MenuSoundsdenied1 InitialDirDamTypeAssaultGrenadeDamTypeRedeemerDamTypeRocket IonCannonPainterPainterAttachmentPainterBeamEffect PainterFireRedeemerProjectileAVRiL MASDeploy01 SmokeTrail StartTrace EndEffect MarkLocation MASEng01fX bLockedOn MASStop01 MASStart01RVEng01 ForceDirVelMag RVStart01RVMAS ReflectNum Flying02Laser17bDoHit EndTrace bValidMark bInitialMarkbAlreadyMarked bMarkStarted MarkTimePaintDuration TAGFireForce TAGMarkForceTAGAquiredForce HoverTank LaserSoundsONSVehicleSounds-SSpriteEmitter0TC RocketFlare painter_beamIonShock XEffectMat VehicleFX DustyCloud2RexptFireCountdownredeemer_explosionsound EnginePitch KParams0 TranslocatorRocketLauncher VMStructures CoreGroupONSstructureTexturesCoreBreachGroup CoreShieldSMCoreBreachFrontDISCCoreBreachShockRINGorangeVMParticleTexturesVehicleExplosionssmokeCloudTEXDirtKICKGROUP dirtKICKTEXLeviathanParticleEffectsrainbowSpikes darkEnergydotzLeviathanMGUNFlare LEVsingBLIPLEVmainPartBeamVMExp2_framesANIM buildEffectsPC_buildStreaksPC_buildBorderNewAS_Weapons_SM ShockRingBomberAS_Vehicles_SMAS_Vehicles_TXIonPlasmaTankIonTankDestroyedIonTankTreadDEAD IonTankTreadIonTankBody_CIonTankTurret IonTankBodyIonTankTurretDEADIonTankBodyDEADAssaultSounds IonPowerUp VMWeaponsTXPlayerWeaponsGroup bomberBombtrailsEmitterREDSpriteEmitter34SpriteEmitter35TrailEmitter0SpriteEmitter15SpriteEmitter26SpriteEmitter51SpriteEmitter53FX_Turret_IonCannon_BeamFire AssaultRifleFX_Turret_IonCannon_LaserBeam HomingTargetSpriteEmitter17SpriteEmitter11SpriteEmitter22SpriteEmitter20SpriteEmitter14 BeamEmitter2RocketLauncherFireTranslocatorModuleRegeneration BExplosion5RocketLauncherProjectileONSWheeledCraft ONSVehicleONSWeaponAmbientEmitterONSWeaponPawn ONSWeaponONSPlaneCraftDamTypePancakeDamTypeRoadkillDamTypeONSAVRiLRocketDamTypeONSVehicleDamTypePRVLaserNoneONSVehicleBuildEffectONSVehicleFactoryONSPlasmaProjectile ONSAVRiLONSAVRiLRocketExplosionONSGreenPlasmaSmallFireEffectNone ONSHoverTankONSHoverTankCannonNoneONSRocketScorchNoneONSSmallVehicleExplosionEffectONSTankSecondaryTurretONSTankSecondaryTurretPawnONSVehicleExplosionEffectONSVehicleIonExplosionEffectBaseImpactAndExplosions BExplosion3Misc PGrenFloor1 P1GrenFloor1 WeaponSoundsComplexExplosionRingParticleMeshes Fireball4Part_explode2AW-2004Explosions exp2_framesP we1_framesSmokeReOrderedFramed exp2_frames ExplosionTexRocketTrailSmoke RocketMark RocketCoronaExplosionSoundsExplosionSoundVolumeExplosionSoundRadiusRedeemerExplosionNewRedeemerTrailNewExplosionAIonCoreGrenadeSmokeTrailRocketExplosionExplosionCrap TargetDist NodeHealRing PurpleSwellbFinalDestructionEffect AirBlastP PlasmaSphere GrenExpl HardSpotDebris Veh_Debris1 Veh_Debris2 LargeSpot SparkHeadShapes AirBlast BurnFlare PlasmaStar2 NapalmSpot PlasmaHead BlastMarkWeapons SmokePanels1 PlasmaStar PlasmaShaftEclipseCircleEnergyAW-2004ParticlesZoomFX fulloverlay scanline OBJ_IonTank XGameShaders AssaultHUD Laser_Flare Trail_BlueTrailsIcons AS_FX_TX Grad_FalloffIonBurn FlickerFlareMaelstrom01aw SprayFire1 FlashFlare1HotSpot SmokepuffWhiteStreak01aw BurnFlare1SmokeShadersBeamsFlares SoftFlareEpicParticlesSquadObjectiveSquadVehicleDamageTypeSquadAIAim ThisModeNumLeftTreadPannerRightTreadPanner bIsFiring WhiteTexturePanRateBeamTrail Particles HitCountParticleTimeScaleFlyingmRegenCorona RandSpin ONSWeapons-AInstigatorControllerBot EffectOffset AIRating FireModeSkillbEnableGUIForceFeedbackbestAim PlasmaGunEnemyONSDeadVehicles-SM RVexplodedRvtireRVrailRVgunFocusnextController bAltFire VMWeaponsSM AVRiLGroupAVRiLprojectileSM bWaterVolumeGRADIENT_Fade SoundNumVMVehicleSounds-SIncomingShellSmokeTrailEffect bWasAltFireDriverbWeaponisFiring bDrivingWeaponFireLocationWeaponFireRotationWall HitActorF"DelayedDamageInstigatorControllerPendingWeapon FlashCount bStationaryControllerListNetMode TimeSecondsbAmbientFireSoundStartLocation bIsAltFireLLastHitLocation instigatedBy ViewTargetAmbientEffectEmitterKiller BestDist RulesGroupdist damageScaleVictimsEndDirStartExtent HitLocation HitNormalEventInstigatorStartHoldTime bHoldingFireRRWheelLRWheelRFWheelLFWheelSpriteEmitter12SpriteEmitter39SetBoneRotation DeltaSeconds SetDrawScale bNetOwner bNetInitialbBlockZeroExtentTracesTransientSoundVolumeBomberChassisFinalBLUE BomberGroupBomberChassisFinalRED UT2K4SP_MainbLow bEnableTC InstigatorAS_VehiclesFull_MIonTankTurretSimpleIonTankChassisSimpleIONTankMachineGun EndLocationNetUpdateTime EPhysics bTearOff bNetDirtybOnlyRelevantToOwnerbWorldGeometrybHiddenBaseOwnerdtbCancelPC DeltaTimeTempOther ObjectPoolEffectsTargetDynamicLoadObject PropNamei ReturnValue Velocity Rotation LocationRScaleCBA ScriptText xEmitterKarmaParamsRBFullWeapon WeaponFire LevelInfoHUD AIController ControllerPlayerControllerSVehicleFactoryPhysicsVolumeMutator BeamEmitterLevelArenaVehicleClassShaderVehicleOptionsONSFullTexturesTargetPainterTEX MASGroup MASredSHAD MASblueSHADbomberNOcolorBomberColorRed LEVnoColor LEVcolorBlue LEVcolorRED CombinerSeatRotVariableTexPanner Modifier MeshEmitterEmitter PlayInfo bDeployed bOldDeployed SkeletalMeshSpriteEmitterPawnVehicle SVehicleSVehicleWheel TerrainInfoParticleEmitter WeaponOwner TrailEmitterONSFullStaticMeshesTargetPainterleviathanDEAD SideFlap LEVexplodedBayDoorMainGunTargetPainterStaticInfoActor NeededRadius SoundGroupProceduralSound bFireMode BeamCount OldBeamCount InitialState AimLaserRoleClassPackage DistScaleLev_Particles CoreShine HardBurn3 PrismShardSuck LevShell GHitLocation GHitNormalDamRadBombTargetCenterFactory TextBuffer bShotDownObject DyingEffectEnum FunctionStateStructBombDirection BomberStart BomberStart2GUI2K4 GenericSDToiletCarBlue ToiletCar TCTextureTCdeadONSFullAnimations MASchassis Vehicles StrPropertyStructPropertyArrayPropertyClassProperty NamePropertyObjectPropertyFloatProperty BoolProperty IntProperty ByteProperty MASmainGunMASPassengerGunMASrocketPackTargetPainter_3rdSpriteEmitter77SpriteEmitter78SpriteEmitter50MeshEmitter34MeshEmitter39MeshEmitter35MeshEmitter37MeshEmitter38MeshEmitter27MeshEmitter40MeshEmitter41 exp1_framesNonebCannotBeBased bMovableNoneNoneNoneNoneNoneNoneNoneNoneNoneNoneNone MayUndeploy IsArtilleryDefendBotDesireabilityShouldTargetMissileImportantVehicleNavigationPointRangeLegitimateTargetOfVehicleClassNames GetOrders bSuperSize IsDeployedDeployUpsideDownDamage TeamIndexcn ObjectivePS ONSPowerCoreNoneNoneNoneNoneNoneEEEEEEEEEWEE9EEEEEEEECEEEE)EEEEEApS1-9:9:$-9:9:$G&E؃ʁ)3}3} u uʁ) u3}ܜ܄3},e,e,e _,eh,e,e,e,eh,e,e,eȵ3}h3}3} uh,e}L}Lʁ){$@Fn $Dy$@E}iD"K Z$zCJ$DR$PCHdr: zCe: @Ef$@s: Ac: HCd$ A~dNVL]Y*Q$HCn$BIMmIuEEEEEEEEhEEEEkEEI EEOEE5EE EEEEEEx EErEE|EE2EEEEEEvEEaECM B Y6%$?堅$QvvNGRSxY1HCCHCCk: y$Ct: @ Bs$Br: Bq$=[]in a Leviathan turretW]Leviathan TurretEEEEPEEAEEmEIz_ d-9:9:$G+* ȵ3} u uʁ)ʁ)ʁ)ʁ)3}vvbQ v{$@E^$@EZ$HBJ$zCR$@FdSN%c~$@^: ?>>n`R$ AJv]:^Px:^ SQ$BN$@EEEEQ@EEhEElEEaEEE[fW&- -9:9:$G1!bP3}hʁ)hh,ehhhhh3}3}3},Ƅ3}cV23}h3}$UVo$@b$;Dd$Dr fjkc$?j$?C bR"T"P$@FtSZO+rSqy|S}Su$Ds$p}?B$p}?E*Apz$DEElEEpEE-EEEEEBep9:9:$GB Y6:7*zR~f3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3} u u uRe7Re7 u u uRe7Re7 u||\fF|\fFG /٢|\fF u\fF$Qd ut] MASDeployk] MASDeployZ j: HCh: HCq: B]: HD\: pCX: Dm$ #=n$?o$ #4Y9$ $E$B $?E$HC $fff?E$P $fff?EEr$o:sZ5>4Y9$ $E$A $t4Y9$ $BE$HC $@E$D $@E$@E $EEM$LML>g"A$G=B$DC$zDD$?E$o;H$=I$AW$BY$BX$HCI$?J$zDK$E\[$BL$zEMR$4BMYv~;JEvI;`E^Y)h%;eEh%;\Eh%;hEh%;\EKSjkI`ab= MASStartUpT ] MASShutDownS $zDR : 333?,@Q $@HGFgd$fZ$$tH$PHEgZ$B$CEz$CH $ @h: C9CF E `h Y CCB @ $B@Y WXYZi$ A|VtSY: 5^A"!‡BxY1HCCHCCy$Cw: pCs$CDr: HCb: HCzZ$$@EEw"0us$Dg$ #CL$@ED"[*z$CQ$Cn$pBuzVEE EEKEEEEFE*Eb EEEEKEEEcELEE:EEEE@ EEYEcrZB Y6E ǰR~f3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}$Qi "@m$u4Y9$ $E$B $?E$HC $fff?E$P $fff?EEr$o:sZ5>4Y9$ $E$A $t4Y9$ $AE$HC $ AE$D $0AE$/E $EEM$M>Mff&?MY?M̌?A$>B$DC$zDD$?E$8H$=I$AW$ C`$ BY$BX$HCI$=J$CK$ FL$zEY$4CX$@W$AVMT$ BS$\BR$ BQ$ BP$ BKSjkI`ab] RVStartUpH GFd$fZ$PCH$|HEgZ$B$CEh: Ai$o:@Y RSTUi$`@R|BY: ABxY1%B%CB%%Cy$ Cw: @PBs$CC] SpringONSSRVr: b: Bq$L?[= indisposedW] TC-1200pYq$kDL$CD",[*JQ$Bn$ BzQEE3EE@EE;EEB EEEEEEEAl~6M8Jn-h||ʁ)|ʁ)|h|h||h|h|hfQu$@ErrtO u$ffF@v$333@rmjhThe Target Painter, similar to the Ion Painter, fires a harmless, low power laser with its primary fire. Unlike the Ion Painter, however, this weapon calls in a bomber that launches a string of bombs in the direction the user is facing, centered on the painted target. The bombs will easily incinerate the target and any unfortunates that happen to be nearby.y$4Bz: BA{$|"}" x pm: BAn:^^ospMTarget Painter* O$?n@Ea{qB Y6/NWתuτ3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}Ե3}Ե;h;h;h;h$QMY v1;OE^9hk;JEKjkHGFVvw: Ct: A[]in an Ion Plasma TankW]Ion Plasma TankksluUZ^%j$$]$BZ$BWE*JYEE6EEEEREE E1EXEE!EEYEEEEEEUEEiEEEEd EEdEENEEwEEEE.EET EIuO $9:9:$--G@cV2ss1}EE EE,EEEE EEv@EEgEE0EEZEEEEEE E}i@olĜ8Y ijklR?SEEUEEEDy6rMNqYԋhhhqYԃʁ)h3}M8E؄3}hhJn-h,eτ3}hh,eh,eh|hh|h3}3}Jn-ϿqYԿqYτ3}E؎EؿqYԎEؿqYԿqYԿqYEf@u$@EB$@FP$`jFEEEE EEEEEEuEEyEEzEE{EE|EE}EE~EEEEwEEFEE^EEZEE@EEMEEEEXEEEEeEEEEFEEEEJEETEEjEEPEEEEOEEMEEUEEEEEEEEEEEEEEEE8@pE[@pE\pE]pEEEmEEEEZET@EEc@EEEE\@@E{h@gq8YABCDEFGHIJKLMNR?SEEjS|\i02@$J$pB*EEnS}^B Y6kEErSEtS@{sN0fL* O$333>EEuSE"EEnP  vIzRe73}3}3}3}3}3}3}3}3}3}$pG}GF":wL ^GJ$A}$ Ayc$>j$>bU e] Laser01\ ] Laser01{R"T"tB* EEEEEGX @yڍ"8Y@R?S] bGEEEEEE{EEH_;vx"wD*=D-=iWr=*=I9:Y UuU%q!O GJfz ~|Re7* ,e* ,e3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}$Y$`F{ $y?ph}jF"PFw@}$Bsc$33>be]RocketLauncherFiret*SZO+rSqy|S}Su$Ds$B$fff?E* Q$pBEEDEEEEBEK] *B2d# }?$M`$@F{$C^$`jFZ$AJ$BdmESZ @CF8Ypqrstuvwxyz{|}~R?SnKSJz$DEEHEERUL`X ?99:9:$a o a<"@a G EIETsY -9:9:$G@G`)ܓ jv jv jv jv jv8YmnoR{xt$C?SuEEE\i 8?8w*!w.*w*I9:Y.@c3r*be_ C3ap ծp#@9P#F# GWS}1IhRe7ʁ)ʁ)ʁ)ʁ)hhʁ)ʁ)ʁ)ʁ)3}~(~(3},Ɣ}L}Lh}Lh3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}$UGJ$ Ep|}|F"'wkJ$Am$>rv{$?c$@bI $De= MASBIGFire{qR"T"P$PF` $$ISZO+rSqSyS|S}Su$s$B$p}?ESO+rSqSyS|S}Su$s$B$p}?E[* EX|@J(p 2V$8Y_`aEEPEEEEKEEMEENEEOEEHZE~XVCUV399V39?@F GEEYw@SΕ2V$8Y\]^EE^jOG E[E`uV*l}{vEEMOX-g'-(o$U9:9:$"auUw"*"a* GEdEE?EEYEEEEbfY q!b GeCd H9:9:$G+]}ȵhhhٵhٵʁ)3}3}bQ Bvi$E{$C^$`jFZ$BJ$BR$PCGdSN%nSc~$@O$>n`Jz$BAv]:^Px:^0uSQ$BN$@EEEvw|B Y6_s HG#3}$Qp$HElZ54Y $4 $E$ $E$ $>E$@ $L?E$ A $?E$@A $33?E$A $L?E$pB $?E$B $E$4C $EEdZ54Y $4 $E$ $?E$ $=E$ $33>E$ $ #E$ A $=E$pA $>E$pB $?E$B $?E$4C $EEa$Q8C$BU$pBTX$ASZ504Y+$ $CE$A $/DE$zC $EEHY%HC AHC AH AG$fff?F$?E$CR$/DQ$/DM9v`;fEjkID $zDi$bt]*EEsExE@b IhdNO$@@EEE~g@d'8Ygh?SEEBEf@f8YefR?SnYEEAEEnE@`_;idJE!pfy fZ$DJ$%D%EHQ@jYvv8YbcdR?SYGEJM3k.<$N<7EEnEKK3mJcGN<%g]'&%k's Leviathan turret plasmanated %o.f]%o wasted herself.d]%o wasted himself.GPS: /DEEEE4WLD3p3V!$N<7EMq2qKpGN<7g]%o was VAPORIZED by %k!f]%o was VAPORIZED!d]%o was VAPORIZED!HSLSOQF$@V$?EE>ENp3s2wg<$N<NEEEOo3u3UV!$N<NEPk3vQfoGN<Ng]%o was OBLITERATED by %kf]%o was OBLITERATEDd]%o was OBLITERATEDHSGNF$TU$?W$@EEEEEE{xTW*>xb? GEyG@_[a   @_(a  G@9?,9P@LNwL**L 9?a  G@9?,9P@TGa GE|^KOVSw^(^a/!^-@w#? GE}tYJw@t GE~`\6 r<* < b9?%`@?``9?,a+9P GEa[9:9:$Ta y!a !@!b99b-?a=' GE<]:wT*Th1w!*!a GEEE@EEgEEDe_p &#e%@g# GEEcEe M.#v!EJUc GEF#\E#9:9:$w*w*w.*-[.-d.-[( -[ wd*#d ##333?vv#9?,#a+9P GEGA@2'Ua   @D9:9:$a  A9P^TAa GEH[Y-@[ GEIa^z79:9:$Sa Xa 99h-?a=' GES]<wS*S-(3wX*Xa GEo]aP GEJP"$*a $C ( GEKi(<Z GEL[-|$*a $C ( GEMX3,a^9:9:$^\ IBBIa!E? G ENP\B=#b-- GEEEOcJ\ GEQSsP90- 4--6 GEEERPu Z4QPao PO5K%P*Po NM GEXQ@*kTQa   @e_(a b Q9P#?a Q9PRa GEEEVEEYWL%@#? GEZLY LL* GE^aW99:9:$Ja  T9:9:$PF GETxa #K?a c  GE[Pg !w?*?a?* GE\Lts LKLIJ#xLIJF GEJ] %wJ*J-( GEM%>-'o$a(((c!O;w*a GEa_Oma >?a?>a UEG\Ec\  GE]Dc ~ "--HD-H GEr  GEhL#B                                         GEEEbx\`GEAw --B--Bx-Bl9:9:$ 9?%- '4a-(ua(A-B GEH                                          #  G E EEg\O- M9:9:$ -- '4a-( - (a(9:9:$PKPw*]'tIX GEj|v M|-{A- - (VBioRifleFirea( GEri~ .*r * A OwaC@  #D  (*CUr *26 6      #@wU@r.  *= GEEEkoE`9?&-(]- i4- 'a-(x GEEEnqC%9?&-'5 aY$CC  @(a j 5a*/a8 n5ww**II9:9:$ 56u??#?w?un_իwh10 GEEEw U*b$ w#? (M)9?%r.r%*' #Bb$ #?) $b$ #) $b$ #?) $b$ #)  GEtT-tD GEtD>-t'-'.,-'6.,?6.,?6%.,@@6%.,h GEvG'$wR*Rt GERE`R.1 GEzoEbT9:9:$qBlB9CqBCo GEpyeDPA- %9:9:$[a(- ( GEEElg 4-u!Ev!E G E|LW ]                                   GE}`P  #  GEGH3                                     #  G EEEmH                          G E~EEL                          GEA`3Z  GEBel 9 'e@ GE@EEC]tB *j99N0]jw.*w.*.-(6aO0]'.-'6aO0]'r6*0a#NV6O GED(8 GEHF^ *==a |#??a@@a UEG,EIn. U . U &,&, GEJaOF-a GE_C_ GELL%                         GEV`m #  #  #  #  #  GEENe\6$#w*](3-* GEEEMPFm  GEQEEEEO]r w * a GER^t aL?79:9:$a C 29Pla33@K>a?K>aL>K33>aL>Kff&?aL>K33S?aL>K? ^EGEUV|9:9:$K am 9PD6.& D6.& D2DlYq !^ GEDEE\Hb #  #  #  #  #                          G EEETEKA9:9:$ /a8 E2w w9:9:$a/!i 2K?K6@9?KEOw.*&.II9o_9D99? ի?ի910 GEWEEYEEZ+ GE][l0!a@?a UEGE`Rb <7%M7aM$ -Rx9:9:$Ta q!l G EX_C GEEEaQ %-'o$ QOP GEcww*o$8$-(-'w.*. I^.-. V\a!Aap]@&a!Aa;7@&-(k&-({|~-(-'q!z UEGES H                      #  G Eit w*dw.*. I]d.-. V[&-'&a!Ca33@a!Ca@-'o$ 8$ -(k%yz}-'-(q!l UEGEbL/                     GEd`*^ #  GEeg\B GEHE6Z;.*D(w;*Rw.H*;<HFU;<HbFX99S GEcVo -Vq!-' GEkhzY GE_Woz ]R-WHw.*pA. I Oq!wZ-' GEojl( GE+Hg+  +  +  +  +   G EEElLm           GEpmj]E GEXZoWR74-Zw.*. I  GE^f"c59:89:-9:89:$ o8--x{-{|~-(yz}-'-x- G EsL7               GEt`,m #  #  #  #  #  GEuHF #  #  #  #  #                G Eb`E?`&-6mb!Jm%? G E@EExhf >u6'zhArenaVehicleClassNamech G(EyeN !de'%}'7TQ'T swQ*7P7P&7P&PQ''%'7P{,aB,;aB,pp9V'P;'P'# -aB,ppp;9V E; Ee5bArenaVehicleClassNamed$$Select, G Effa *U\f Lw\*/a0 fKf\10 GE_class ONSVehDeathMAS extends Emitter; #exec OBJ LOAD FILE="..\Textures\ExplosionTex.utx" #exec OBJ LOAD FILE="..\StaticMeshes\ONSFullStaticMeshes.usx" Ev//============================================================================= // ONSTankSecondaryTurret_IonPlasma //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class ONSTankSecondaryTurret_IonPlasma extends ONSTankSecondaryTurret; EB//============================================================================= // ONSTankSecondaryTurretPawn_IonPlasma //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class ONSTankSecondaryTurretPawn_IonPlasma extends ONSTankSecondaryTurretPawn; Er5class ONSPainterPickup extends PainterPickup; #exec OBJ LOAD FILE=..\Textures\VMWeaponsTX.utx #exec OBJ LOAD FILE=..\Textures\VMParticleTextures.utx #exec OBJ LOAD FILE=..\StaticMeshes\VMWeaponsSM.usx static function StaticPrecache(LevelInfo L) { L.AddPrecacheMaterial(Texture'VMWeaponsTX.PlayerWeaponsGroup.bomberBomb'); L.AddPrecacheMaterial(Texture'ONSFullTextures.PlayerWeaponsGroup.TargetPainterTEX'); L.AddPrecacheMaterial(Texture'VMWeaponsTX.PlayerWeaponsGroup.trailsEmitterRED'); L.AddPrecacheMaterial(Texture'XEffectMat.Ion.painter_beam'); L.AddPrecacheMaterial(Texture'XGameShaders.ZoomFX.fulloverlay'); L.AddPrecacheMaterial(Texture'XGameShaders.ZoomFX.scanline'); L.AddPrecacheMaterial(Texture'XWeapons_rc.Icons.SniperBorder'); L.AddPrecacheMaterial(Texture'XWeapons_rc.Icons.SniperFocus'); L.AddPrecacheMaterial(Texture'XWeapons_rc.Icons.SniperArrows'); L.AddPrecacheMaterial(Texture'Engine.WhiteTexture'); L.AddPrecacheMaterial(Texture'VMParticleTextures.LeviathanParticleEffects.rainbowSpikes'); L.AddPrecacheMaterial(Texture'VMParticleTextures.LeviathanParticleEffects.darkEnergy'); L.AddPrecacheMaterial(Texture'VMParticleTextures.LeviathanParticleEffects.LEVsingBLIP'); L.AddPrecacheMaterial(Texture'ONSFullTextures.BomberGroup.BomberColorRed'); L.AddPrecacheMaterial(Texture'ONSFullTextures.BomberGroup.bomberNOcolor'); L.AddPrecacheMaterial(Texture'AW-2004Explosions.Fire.Part_explode2'); L.AddPrecacheMaterial(Texture'EpicParticles.Smoke.Smokepuff'); L.AddPrecacheMaterial(Texture'EpicParticles.Shaders.Grad_Falloff'); L.AddPrecacheMaterial(Texture'EpicParticles.Fire.IonBurn'); L.AddPrecacheMaterial(Texture'EpicParticles.Beams.WhiteStreak01aw'); L.AddPrecacheStaticMesh(StaticMesh'VMWeaponsSM.PlayerWeaponsGroup.bomberBomb'); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial(Texture'VMWeaponsTX.PlayerWeaponsGroup.bomberBomb'); Level.AddPrecacheMaterial(Texture'ONSFullTextures.PlayerWeaponsGroup.TargetPainterTEX'); Level.AddPrecacheMaterial(Texture'VMWeaponsTX.PlayerWeaponsGroup.trailsEmitterRED'); Level.AddPrecacheMaterial(Texture'XEffectMat.Ion.painter_beam'); Level.AddPrecacheMaterial(Texture'XGameShaders.ZoomFX.fulloverlay'); Level.AddPrecacheMaterial(Texture'XGameShaders.ZoomFX.scanline'); Level.AddPrecacheMaterial(Texture'XWeapons_rc.Icons.SniperBorder'); Level.AddPrecacheMaterial(Texture'XWeapons_rc.Icons.SniperFocus'); Level.AddPrecacheMaterial(Texture'XWeapons_rc.Icons.SniperArrows'); Level.AddPrecacheMaterial(Texture'VMParticleTextures.LeviathanParticleEffects.rainbowSpikes'); Level.AddPrecacheMaterial(Texture'VMParticleTextures.LeviathanParticleEffects.darkEnergy'); Level.AddPrecacheMaterial(Texture'VMParticleTextures.LeviathanParticleEffects.LEVsingBLIP'); Level.AddPrecacheMaterial(Texture'Engine.WhiteTexture'); Level.AddPrecacheMaterial(Texture'ONSFullTextures.BomberGroup.bomberNOcolor'); Level.AddPrecacheMaterial(Texture'ONSFullTextures.BomberGroup.BomberColorRed'); Level.AddPrecacheMaterial(Texture'AW-2004Explosions.Fire.Part_explode2'); Level.AddPrecacheMaterial(Texture'EpicParticles.Smoke.Smokepuff'); Level.AddPrecacheMaterial(Texture'EpicParticles.Shaders.Grad_Falloff'); Level.AddPrecacheMaterial(Texture'EpicParticles.Fire.IonBurn'); Level.AddPrecacheMaterial(Texture'EpicParticles.Beams.WhiteStreak01aw'); super.UpdatePrecacheMaterials(); } Eu]class ONSPainterFire extends PainterFire; var class BomberClass; var float MinZDist, MaxZDist; function bool SpawnBomber(rotator BombDirection) { local vector BomberStart, BomberStart2, BombTargetCenter, HitNormal, Extent, Temp; local ONSAutoBomber Bomber; BombDirection.Pitch = 0; Extent = BomberClass.default.CollisionRadius * vect(1,1,0); Extent.Z = BomberClass.default.CollisionHeight; if (Weapon.Trace(BombTargetCenter, HitNormal, MarkLocation + MaxZDist * vect(0,0,1), MarkLocation + Extent.Z * vect(0,0,2), false, Extent) == None) BombTargetCenter = MarkLocation + MaxZDist * vect(0,0,1); BombTargetCenter.Z -= BomberClass.default.CollisionHeight; if (VSize(BombTargetCenter - MarkLocation) < MinZDist) return false; if (Weapon.Trace(BomberStart, HitNormal, BombTargetCenter - vector(BombDirection) * 100000, BombTargetCenter, false, Extent) == None) BomberStart = BombTargetCenter - vector(BombDirection) * 100000; if (Weapon.Trace(BomberStart2, HitNormal, BombTargetCenter + vector(BombDirection) * 100000, BombTargetCenter, false, Extent) == None) BomberStart2 = BombTargetCenter + vector(BombDirection) * 100000; if (VSize(BomberStart - BombTargetCenter) < VSize(BomberStart2 - BombTargetCenter)) { Temp = BomberStart; BomberStart = BomberStart2; BomberStart2 = Temp; } Bomber = Weapon.spawn(BomberClass, Instigator,, BomberStart, rotator(BombTargetCenter - BomberStart)); if (Bomber == None) return false; Bomber.Bomb(BombTargetCenter); return true; } state Paint { function BeginState() { IonCannon = None; if (Weapon.Role == ROLE_Authority) { if (Beam == None) { Beam = Weapon.Spawn(class'PainterBeamEffect', Instigator); Beam.bOnlyRelevantToOwner = true; Beam.EffectOffset = vect(-25, 35, 14); } bInitialMark = true; bValidMark = false; MarkTime = Level.TimeSeconds; SetTimer(0.25, true); } ClientPlayForceFeedback(TAGFireForce); } function ModeTick(float dt) { local Vector StartTrace, EndTrace, X,Y,Z; local Vector HitLocation, HitNormal; local Actor Other; local Rotator Aim; if (!bIsFiring) { StopFiring(); } Weapon.GetViewAxes(X,Y,Z); // the to-hit trace always starts right in front of the eye StartTrace = Instigator.Location + Instigator.EyePosition() + X*Instigator.CollisionRadius; Aim = AdjustAim(StartTrace, AimError); X = Vector(Aim); EndTrace = StartTrace + TraceRange * X; Other = Weapon.Trace(HitLocation, HitNormal, EndTrace, StartTrace, false); if (Other != None && Other != Instigator) { if ( bDoHit ) { bValidMark = false; if (Other.bWorldGeometry) { if (VSize(HitLocation - MarkLocation) < 50.0) { Instigator.MakeNoise(3.0); if (Level.TimeSeconds - MarkTime > 0.3) { bValidMark = ONSPainter(Weapon).CanBomb(HitLocation, BomberClass.default.CollisionRadius); if (bValidMark) { if (Level.TimeSeconds - MarkTime > PaintDuration && SpawnBomber(Instigator.Rotation)) { Instigator.PendingWeapon = None; Painter(Weapon).ReallyConsumeAmmo(ThisModeNum, 1); Instigator.Controller.ClientSwitchToBestWeapon(); if (Beam != None) Beam.SetTargetState(PTS_Aquired); StopForceFeedback(TAGMarkForce); ClientPlayForceFeedback(TAGAquiredForce); StopFiring(); } else { if (!bMarkStarted) { bMarkStarted = true; ClientPlayForceFeedback(TAGMarkForce); } } } else { MarkTime = Level.TimeSeconds; bMarkStarted = false; if ( Bot(Instigator.Controller) != None ) { Instigator.Controller.Focus = Instigator.Controller.Enemy; MarkLocation = Bot(Instigator.Controller).Enemy.Location - Bot(Instigator.Controller).Enemy.CollisionHeight * vect(0,0,2); } } } } else { bAlreadyMarked = true; MarkTime = Level.TimeSeconds; MarkLocation = HitLocation; bValidMark = false; bMarkStarted = false; } } else { MarkTime = Level.TimeSeconds; bValidMark = false; bMarkStarted = false; } bDoHit = false; } EndEffect = HitLocation; } else { EndEffect = EndTrace; } Painter(Weapon).EndEffect = EndEffect; if (Beam != None) { Beam.EndEffect = EndEffect; if (bValidMark) Beam.SetTargetState(PTS_Marked); else Beam.SetTargetState(PTS_Aiming); } } } E:class ONSPainterAttachment extends PainterAttachment; Exclass ONSPainter extends Painter; var float MinZDist; function bool CanBomb(vector MarkLocation, float NeededRadius) { if (!FastTrace(MarkLocation + MinZDist * vect(0,0,1), MarkLocation)) return false; if (NeededRadius <= 0 || ONSPainterFire(FireMode[0]) == None) return true; MarkLocation += vect(0,0,100); return ( FastTrace(MarkLocation + vect(1,0,0) * NeededRadius, MarkLocation) && FastTrace(MarkLocation + vect(-1,0,0) * NeededRadius, MarkLocation) && FastTrace(MarkLocation + vect(0,1,0) * NeededRadius, MarkLocation) && FastTrace(MarkLocation + vect(0,-1,0) * NeededRadius, MarkLocation) ); } function float GetAIRating() { local Bot B; local vector HitLocation, HitNormal; B = Bot(Instigator.Controller); if ( B == None ) return AIRating; if ( B.IsShootingObjective() && Trace(HitLocation, HitNormal, B.Target.Location - vect(0,0,2000), B.Target.Location, false) != None ) { MarkLocation = HitLocation; if ( CanBomb(MarkLocation, 0) ) return AIRating; } if ( (B.Enemy == None) || (Instigator.Location.Z < B.Enemy.Location.Z) || !B.EnemyVisible() ) return 0; MarkLocation = B.Enemy.Location - B.Enemy.CollisionHeight * vect(0,0,2); if ( CanBomb(MarkLocation, 0) ) return 2.0; if ( TerrainInfo(B.Enemy.Base) == None ) return 0; return 0.1; } EL//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMobileAssaultStation extends ONSWheeledCraft; #exec OBJ LOAD FILE=..\Sounds\MenuSounds.uax #exec OBJ LOAD FILE=..\Textures\ONSFullTextures.utx var() sound DeploySound; var() sound HideSound; var() string DeployForce; var() string HideForce; var EPhysics ServerPhysics; var bool bDeployed; var bool bOldDeployed; var vector UnDeployedTPCamLookat; var vector UnDeployedTPCamWorldOffset; var vector DeployedTPCamLookat; var vector DeployedTPCamWorldOffset; var vector UnDeployedFPCamPos; var vector DeployedFPCamPos; replication { unreliable if(Role==ROLE_Authority) ServerPhysics, bDeployed; } simulated event PostNetReceive() { Super.PostNetReceive(); if (ServerPhysics != Physics) { bMovable = (ServerPhysics == PHYS_Karma); SetPhysics(ServerPhysics); } if( bDeployed != bOldDeployed ) { if(bDeployed) { TPCamLookat = DeployedTPCamLookat; TPCamWorldOffset = DeployedTPCamWorldOffset; FPCamPos = DeployedFPCamPos; bEnableProximityViewShake = False; } else { TPCamLookat = UnDeployedTPCamLookat; TPCamWorldOffset = UnDeployedTPCamWorldOffset; FPCamPos = UnDeployedFPCamPos; bEnableProximityViewShake = True; } bOldDeployed = bDeployed; } } function bool ImportantVehicle() { return true; } function bool IsArtillery() { return true; } function float BotDesireability(Actor S, int TeamIndex, Actor Objective) { local SquadAI Squad; Squad = SquadAI(S); if ( Squad.GetOrders() == 'Defend' ) return 0; return super.BotDesireability(S,TeamIndex,Objective); } function VehicleFire(bool bWasAltFire) { if (bWasAltFire && PlayerController(Controller) != None) PlayerController(Controller).ClientPlaySound(sound'MenuSounds.Denied1'); } function ChooseFireAt(Actor A) { Fire(0); } auto state UnDeployed { function Deploy() { AltFire(0); } function ChooseFireAt(Actor A) { local Bot B; B = Bot(Controller); if ( B == None || B.Squad == None || ONSPowerCore(B.Squad.SquadObjective) == None ) { Fire(0); return; } if ( ONSPowerCore(B.Squad.SquadObjective).LegitimateTargetOf(B) && CanAttack(B.Squad.SquadObjective) ) AltFire(0); else Fire(0); } function VehicleFire(bool bWasAltFire) { if (bWasAltFire) { if (PlayerController(Controller) != None && VSize(Velocity) > 15.0) PlayerController(Controller).ClientPlaySound(sound'MenuSounds.Denied1'); else GotoState('Deploying'); } else bWeaponIsFiring = True; } } state Deployed { function MayUndeploy() { GotoState('UnDeploying'); } function bool IsDeployed() { return true; } function VehicleFire(bool bWasAltFire) { if (bWasAltFire) GotoState('UnDeploying'); else bWeaponIsFiring = True; } } state UnDeploying { Begin: if (Controller != None) { if (PlayerController(Controller) != None) { PlayerController(Controller).ClientPlaySound(HideSound); if (PlayerController(Controller).bEnableGUIForceFeedback) PlayerController(Controller).ClientPlayForceFeedback(HideForce); } Weapons[1].bForceCenterAim = True; Weapons[1].PlayAnim('MASMainGunHide'); sleep(2.3); PlayAnim('MASMainGunHide'); sleep(4.03); bMovable = True; SetPhysics(PHYS_Karma); ServerPhysics = PHYS_Karma; bStationary = False; SetActiveWeapon(0); TPCamLookat = UnDeployedTPCamLookat; TPCamWorldOffset = UnDeployedTPCamWorldOffset; FPCamPos = UnDeployedFPCamPos; bEnableProximityViewShake = True; bDeployed = False; GotoState('UnDeployed'); } } state Deploying { Begin: if (Controller != None) { SetPhysics(PHYS_None); ServerPhysics = PHYS_None; bMovable = False; bStationary = True; if (PlayerController(Controller) != None) { PlayerController(Controller).ClientPlaySound(DeploySound); if (PlayerController(Controller).bEnableGUIForceFeedback) PlayerController(Controller).ClientPlayForceFeedback(DeployForce); } PlayAnim('MASMainGunDeploy'); sleep(3.46); Weapons[1].PlayAnim('MASMainGunDeploy'); sleep(2.873); Weapons[1].bForceCenterAim = False; SetActiveWeapon(1); bWeaponisFiring = false; //so bots don't immediately fire until the gun has a chance to move TPCamLookat = DeployedTPCamLookat; TPCamWorldOffset = DeployedTPCamWorldOffset; FPCamPos = DeployedFPCamPos; bEnableProximityViewShake = False; bDeployed = True; GotoState('Deployed'); } } function Died(Controller Killer, class damageType, vector HitLocation) { bMovable = True; SetPhysics(PHYS_Karma); Super.Died(Killer, damageType, HitLocation); } simulated event ClientVehicleExplosion(bool bFinal) { local int SoundNum; local Actor DestructionEffect; // Explosion effect if(ExplosionSounds.Length > 0) { SoundNum = Rand(ExplosionSounds.Length); PlaySound(ExplosionSounds[SoundNum], SLOT_None, ExplosionSoundVolume*TransientSoundVolume,, ExplosionSoundRadius); } if (bFinal) { if (Level.NetMode != NM_DedicatedServer) DestructionEffect = spawn(DisintegrationEffectClass,,, Location, Rotation); GotoState('VehicleDisintegrated'); } } state VehicleDisintegrated { function Died(Controller Killer, class damageType, vector HitLocation) { } Begin: sleep(0.75); Destroy(); } static function StaticPrecache(LevelInfo L) { Super.StaticPrecache(L); L.AddPrecacheStaticMesh(StaticMesh'ParticleMeshes.Complex.ExplosionRing'); L.AddPrecacheStaticMesh(StaticMesh'ONSFullStaticMeshes.LEVexploded.BayDoor'); L.AddPrecacheStaticMesh(StaticMesh'ONSFullStaticMeshes.LEVexploded.MainGun'); L.AddPrecacheStaticMesh(StaticMesh'ONSFullStaticMeshes.LEVexploded.SideFlap'); L.AddPrecacheStaticMesh(StaticMesh'AW-2004Particles.Debris.Veh_Debris1'); L.AddPrecacheMaterial(Material'AW-2004Particles.Energy.SparkHead'); L.AddPrecacheMaterial(Material'ExplosionTex.Framed.exp2_frames'); L.AddPrecacheMaterial(Material'ExplosionTex.Framed.exp1_frames'); L.AddPrecacheMaterial(Material'ExplosionTex.Framed.we1_frames'); L.AddPrecacheMaterial(Material'AW-2004Particles.Fire.NapalmSpot'); L.AddPrecacheMaterial(Material'EpicParticles.Fire.SprayFire1'); L.AddPrecacheMaterial(Material'ONSFullTextures.MASGroup.LEVcolorRED'); L.AddPrecacheMaterial(Material'ONSFullTextures.MASGroup.LEVnoColor'); L.AddPrecacheMaterial(Material'ONSFullTextures.MASGroup.LEVcolorBlue'); L.AddPrecacheMaterial(Material'VehicleFX.Particles.DustyCloud2'); L.AddPrecacheMaterial(Material'VMParticleTextures.DirtKICKGROUP.dirtKICKTEX'); L.AddPrecacheMaterial(Material'Engine.GRADIENT_Fade'); } simulated function UpdatePrecacheStaticMeshes() { Level.AddPrecacheStaticMesh(StaticMesh'ParticleMeshes.Complex.ExplosionRing'); Level.AddPrecacheStaticMesh(StaticMesh'ONSFullStaticMeshes.LEVexploded.BayDoor'); Level.AddPrecacheStaticMesh(StaticMesh'ONSFullStaticMeshes.LEVexploded.MainGun'); Level.AddPrecacheStaticMesh(StaticMesh'ONSFullStaticMeshes.LEVexploded.SideFlap'); Level.AddPrecacheStaticMesh(StaticMesh'AW-2004Particles.Debris.Veh_Debris1'); Super.UpdatePrecacheStaticMeshes(); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial(Material'AW-2004Particles.Energy.SparkHead'); Level.AddPrecacheMaterial(Material'ExplosionTex.Framed.exp2_frames'); Level.AddPrecacheMaterial(Material'ExplosionTex.Framed.exp1_frames'); Level.AddPrecacheMaterial(Material'ExplosionTex.Framed.we1_frames'); Level.AddPrecacheMaterial(Material'AW-2004Particles.Fire.NapalmSpot'); Level.AddPrecacheMaterial(Material'EpicParticles.Fire.SprayFire1'); Level.AddPrecacheMaterial(Material'ONSFullTextures.MASGroup.LEVcolorRED'); Level.AddPrecacheMaterial(Material'ONSFullTextures.MASGroup.LEVnoColor'); Level.AddPrecacheMaterial(Material'ONSFullTextures.MASGroup.LEVcolorBlue'); Level.AddPrecacheMaterial(Material'VehicleFX.Particles.DustyCloud2'); Level.AddPrecacheMaterial(Material'VMParticleTextures.DirtKICKGROUP.dirtKICKTEX'); Level.AddPrecacheMaterial(Material'Engine.GRADIENT_Fade'); Super.UpdatePrecacheMaterials(); } function ShouldTargetMissile(Projectile P) { } Eu//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASSideGunPawn extends ONSWeaponPawn; EC&e&:w.&*.&:_.&*& # _U.&#  GEB//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASSideGun extends ONSWeapon; static function StaticPrecache(LevelInfo L) { L.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.PlasmaStar'); L.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.PlasmaHead'); L.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.SmokePanels1'); L.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.PlasmaStar2'); L.AddPrecacheMaterial(Material'EpicParticles.Flares.FlashFlare1'); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.PlasmaStar'); Level.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.PlasmaHead'); Level.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.SmokePanels1'); Level.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.PlasmaStar2'); Level.AddPrecacheMaterial(Material'EpicParticles.Flares.FlashFlare1'); Super.UpdatePrecacheMaterials(); } EDxu/Kex GEY//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASRocketTrailEffect extends Emitter; #exec OBJ LOAD FILE=AS_FX_TX.utx EFzW 4iz GEy(//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASRocketProjectile extends Projectile; #exec OBJ LOAD FILE=..\Sounds\VMVehicleSounds-S.uax var Actor HomingTarget; var vector InitialDir; var Emitter SmokeTrailEffect; var Effects Corona; replication { reliable if (bNetInitial && Role == ROLE_Authority) InitialDir, HomingTarget; } simulated function Destroyed() { if ( SmokeTrailEffect != None ) SmokeTrailEffect.Kill(); if ( Corona != None ) Corona.Destroy(); Super.Destroyed(); } simulated function PostBeginPlay() { if (Level.NetMode != NM_DedicatedServer) { SmokeTrailEffect = Spawn(class'ONSMASRocketTrailEffect',self); Corona = Spawn(class'RocketCorona',self); Corona.SetDrawScale(4.5 * Corona.default.DrawScale); } InitialDir = vector(Rotation); Velocity = InitialDir * Speed; if (PhysicsVolume.bWaterVolume) Velocity = 0.6 * Velocity; SetTimer(0.1, true); Super.PostBeginPlay(); } simulated function Timer() { local float VelMag; local vector ForceDir; if (HomingTarget == None) return; ForceDir = Normal(HomingTarget.Location - Location); if (ForceDir dot InitialDir > 0) { // Do normal guidance to target. VelMag = VSize(Velocity); ForceDir = Normal(ForceDir * 0.75 * VelMag + Velocity); Velocity = VelMag * ForceDir; Acceleration = 5 * ForceDir; // Update rocket so it faces in the direction its going. SetRotation(rotator(Velocity)); } } simulated function Landed( vector HitNormal ) { Explode(Location,HitNormal); } simulated function ProcessTouch (Actor Other, Vector HitLocation) { if ( (Other != instigator) && (!Other.IsA('Projectile') || Other.bProjTarget) ) { Explode(HitLocation, vect(0,0,1)); } } function BlowUp(vector HitLocation) { HurtRadius(Damage, DamageRadius, MyDamageType, MomentumTransfer, HitLocation ); MakeNoise(1.0); } simulated function Explode(vector HitLocation, vector HitNormal) { local PlayerController PC; PlaySound(sound'WeaponSounds.BExplosion3',,2.5*TransientSoundVolume); if ( EffectIsRelevant(Location,false) ) { Spawn(class'NewExplosionA',,,HitLocation + HitNormal*20,rotator(HitNormal)); PC = Level.GetLocalPlayerController(); if ( (PC.ViewTarget != None) && VSize(PC.ViewTarget.Location - Location) < 5000 ) Spawn(class'ExplosionCrap',,, HitLocation + HitNormal*20, rotator(HitNormal)); } BlowUp(HitLocation); Destroy(); } Ej&//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASRocketPack extends ONSWeapon; var float MaxLockRange, LockAim; static function StaticPrecache(LevelInfo L) { L.AddPrecacheMaterial(Material'XEffects.RocketFlare'); L.AddPrecacheMaterial(Material'AS_FX_TX.Trails.Trail_Blue'); L.AddPrecacheMaterial(Material'EpicParticles.Flares.FlickerFlare'); L.AddPrecacheMaterial(Material'WeaponSkins.Skins.RocketShellTex'); L.AddPrecacheMaterial(Material'XEffects.RocketFlare'); L.AddPrecacheMaterial(Material'AS_FX_TX.Trails.Trail_Blue'); L.AddPrecacheMaterial(Material'ExplosionTex.Framed.SmokeReOrdered'); L.AddPrecacheMaterial(Material'ExplosionTex.Framed.exp2_frames'); L.AddPrecacheMaterial(Material'XEffects.Skins.Rexpt'); L.AddPrecacheMaterial(Material'EmitterTextures.MultiFrame.rockchunks02'); L.AddPrecacheStaticMesh(StaticMesh'WeaponStaticMesh.RocketProj'); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial(Material'XEffects.RocketFlare'); Level.AddPrecacheMaterial(Material'AS_FX_TX.Trails.Trail_Blue'); Level.AddPrecacheMaterial(Material'EpicParticles.Flares.FlickerFlare'); Level.AddPrecacheMaterial(Material'WeaponSkins.Skins.RocketShellTex'); Level.AddPrecacheMaterial(Material'XEffects.RocketFlare'); Level.AddPrecacheMaterial(Material'AS_FX_TX.Trails.Trail_Blue'); Level.AddPrecacheMaterial(Material'ExplosionTex.Framed.SmokeReOrdered'); Level.AddPrecacheMaterial(Material'ExplosionTex.Framed.exp2_frames'); Level.AddPrecacheMaterial(Material'XEffects.Skins.Rexpt'); Level.AddPrecacheMaterial(Material'EmitterTextures.MultiFrame.rockchunks02'); Super.UpdatePrecacheMaterials(); } simulated function UpdatePrecacheStaticMeshes() { Level.AddPrecacheStaticMesh(StaticMesh'WeaponStaticMesh.RocketProj'); Super.UpdatePrecacheStaticMeshes(); } state ProjectileFireMode { function Fire(Controller C) { local ONSMASRocketProjectile R; local float BestAim, BestDist; R = ONSMASRocketProjectile(SpawnProjectile(ProjectileClass, False)); if (R != None) { if (AIController(C) != None) R.HomingTarget = C.Enemy; else { BestAim = LockAim; R.HomingTarget = C.PickTarget(BestAim, BestDist, vector(WeaponFireRotation), WeaponFireLocation, MaxLockRange); } } } } E@//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASPlasmaProjectile extends ONSPlasmaProjectile; Eu//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASFactory extends ONSVehicleFactory; ENEEOEE=EL[ @Pub)M${$B[JZS<7*EE}aJ:9:9:$ w*Y9=I9:9:$a o a<"@Ng!~$' GEQGTXF cCGa+9PG99C39?@Fa>' GEq//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASCannonImplosionEffect extends Emitter; #exec OBJ LOAD FILE=..\Textures\AW-2004Particles.utx EO //----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASCannonBeamEffect extends Emitter; var bool bCancel; replication { reliable if (bNetDirty && Role == ROLE_Authority) bCancel; } simulated function Cancel() { bCancel = True; bTearOff = True; SpriteEmitter(Emitters[2]).FadeOut = True; SpriteEmitter(Emitters[2]).LifeTimeRange.Min = 0.5; SpriteEmitter(Emitters[2]).LifeTimeRange.Max = 0.5; SpriteEmitter(Emitters[2]).SizeScale[0].RelativeTime = 3.0; SpriteEmitter(Emitters[2]).SizeScale[0].RelativeSize = 0.0; Kill(); } function PostNetRecieve() { if (bCancel) Cancel(); } EVEEEEEk//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASCannon extends ONSWeapon; #exec OBJ LOAD FILE=..\Animations\ONSWeapons-A.ukx #exec OBJ LOAD FILE=..\Textures\Lev_Particles.utx var class BeamEffectClass; var Emitter Beam; var vector GHitLocation, GHitNormal; var float DamageRadius; static function StaticPrecache(LevelInfo L) { L.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.PlasmaStar2'); L.AddPrecacheMaterial(Material'VMParticleTextures.LeviathanParticleEffects.LEVmainPartBeam'); L.AddPrecacheMaterial(Material'VMParticleTextures.LeviathanParticleEffects.LeviathanMGUNFlare'); L.AddPrecacheMaterial(Material'Lev_Particles.Suck.PrismShard'); L.AddPrecacheMaterial(Material'Lev_Particles.Suck.HardBurn3'); L.AddPrecacheMaterial(Material'Lev_Particles.Suck.CoreShine'); L.AddPrecacheMaterial(Material'Lev_Particles.bLow.LevShell'); L.AddPrecacheMaterial(Material'VMParticleTextures.LeviathanParticleEffects.dotz'); L.AddPrecacheMaterial(Material'AW-2004Particles.Energy.BurnFlare'); L.AddPrecacheMaterial(Material'EpicParticles.Flares.BurnFlare1'); L.AddPrecacheMaterial(Material'EpicParticles.Fire.SprayFire1'); L.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.SmokePanels1'); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.PlasmaStar2'); Level.AddPrecacheMaterial(Material'VMParticleTextures.LeviathanParticleEffects.LEVmainPartBeam'); Level.AddPrecacheMaterial(Material'VMParticleTextures.LeviathanParticleEffects.LeviathanMGUNFlare'); Level.AddPrecacheMaterial(Material'Lev_Particles.Suck.PrismShard'); Level.AddPrecacheMaterial(Material'Lev_Particles.Suck.HardBurn3'); Level.AddPrecacheMaterial(Material'Lev_Particles.Suck.CoreShine'); Level.AddPrecacheMaterial(Material'Lev_Particles.bLow.LevShell'); Level.AddPrecacheMaterial(Material'VMParticleTextures.LeviathanParticleEffects.dotz'); Level.AddPrecacheMaterial(Material'AW-2004Particles.Energy.BurnFlare'); Level.AddPrecacheMaterial(Material'EpicParticles.Flares.BurnFlare1'); Level.AddPrecacheMaterial(Material'EpicParticles.Fire.SprayFire1'); Level.AddPrecacheMaterial(Material'AW-2004Particles.Weapons.SmokePanels1'); Super.UpdatePrecacheMaterials(); } simulated function UpdatePrecacheStaticMeshes() { // Level.AddPrecacheStaticMesh(StaticMesh'Lev_Particles.bLow.LevSphere'); Super.UpdatePrecacheStaticMeshes(); } simulated function SetFireRateModifier(float Modifier) { //unfortunately, this gun doesn't work with a really high fire rate :( FireInterval = FMax(default.FireInterval / Modifier, 4.5); AltFireInterval = FireInterval; } function TraceFire(Vector Start, Rotator Dir) { local Vector X, End, HitLocation, HitNormal; local Actor Other; X = Vector(Dir); End = Start + TraceRange * X; //skip past vehicle driver if (Vehicle(Instigator) != None && Vehicle(Instigator).Driver != None) { Vehicle(Instigator).Driver.bBlockZeroExtentTraces = False; Other = Trace(HitLocation, HitNormal, End, Start, True); Vehicle(Instigator).Driver.bBlockZeroExtentTraces = true; } else Other = Trace(HitLocation, HitNormal, End, Start, True); if (Other == None) HitLocation = End; // Pull the HitLocation back a bit along the beam HitLocation += vect(-500,0,0) >> Dir; HitCount++; LastHitLocation = HitLocation; SpawnHitEffects(Other, HitLocation, HitNormal); } function CeaseFire(Controller C) { FlashCount = 0; if (AmbientEffectEmitter != None) { AmbientEffectEmitter.SetEmitterStatus(false); } if (bAmbientFireSound) { AmbientSound = None; } } function rotator AdjustAim(bool bAltFire) { //because this is a REALLY BIG GUN, it's very obvious if the player/bot isn't shooting in exactly the direction it's pointing //(due to player autoaim or bot aiming), so don't adjust the aim at all for this weapon return WeaponFireRotation; } function Destroyed() { Super.Destroyed(); if (Beam != None) Beam.Destroy(); } simulated state InstantFireMode { simulated function SpawnHitEffects(actor HitActor, vector HitLocation, vector HitNormal) { if (Level.NetMode != NM_DedicatedServer) { CalcWeaponFire(); Beam = Spawn(BeamEffectClass,,, WeaponFireLocation, rotator(WeaponFireLocation - HitLocation)); BeamEmitter(Beam.Emitters[1]).BeamDistanceRange.Min = VSize(HitLocation - WeaponFireLocation); BeamEmitter(Beam.Emitters[1]).BeamDistanceRange.Max = VSize(HitLocation - WeaponFireLocation); } GHitLocation = HitLocation; GHitNormal = HitNormal; GotoState(,'ImplodeExplode'); } function Explosion(float DamRad) { local actor Victims; local float damageScale, dist; local vector Dir; if (Role < ROLE_Authority) return; foreach VisibleCollidingActors(class 'Actor', Victims, DamRad, GHitLocation) { if( (Victims != self) && (Victims != Instigator) && (Victims.Role == ROLE_Authority) && (!Victims.IsA('FluidSurfaceInfo')) ) { Dir = Victims.Location - GHitLocation; dist = FMax(1,VSize(Dir)); Dir = Dir/dist; Dir.Z *= 5.0; Dir = Normal(Dir); damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamRad); //log(Victims$" receives "$damageScale * DamageMax$" from "$dist$" units away..."); if (Pawn(Victims) != None && Pawn(Victims).GetTeamNum() == Instigator.GetTeamNum()) damageScale = 0; Victims.TakeDamage( damageScale * DamageMax, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * Dir, (damageScale * Momentum * Dir), DamageType ); } } } function AltFire(Controller C) { } ImplodeExplode: Sleep(0.8); if (Level.NetMode != NM_DedicatedServer) Spawn(class'ONSMASCannonImplosionEffect',,, GHitLocation, rotator(GHitNormal)); Sleep(2.3); Explosion(DamageRadius*0.125); Sleep(0.5); Explosion(DamageRadius*0.300); Sleep(0.2); Explosion(DamageRadius*0.475); Sleep(0.2); Explosion(DamageRadius*0.650); Sleep(0.2); Explosion(DamageRadius*0.825); Sleep(0.2); Explosion(DamageRadius*1.000); } E@//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASBuildEffectRed extends ONSVehicleBuildEffect; EA//----------------------------------------------------------- // //----------------------------------------------------------- class ONSMASBuildEffectBlue extends ONSVehicleBuildEffect; EVEEfi//============================================================================= // ONSHoverTank_IonPlasma_Weapon //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class ONSHoverTank_IonPlasma_Weapon extends ONSHoverTankCannon; var() class BeamEffectClass; var float StartHoldTime, MaxHoldTime, ShockMomentum, ShockRadius; var bool bHoldingFire, bFireMode; var int BeamCount, OldBeamCount; var sound ChargingSound, ShockSound; var FX_IonPlasmaTank_AimLaser AimLaser; replication { reliable if ( bNetDirty && !bNetOwner && Role == ROLE_Authority ) bFireMode, BeamCount; } simulated function Destroyed() { KillLaserBeam(); super.Destroyed(); } function PlayFiring() { AmbientSound = None; PlaySound(sound'WeaponSounds.BExplosion5', SLOT_None, FireSoundVolume/255.0,,,, False); } function PlayChargeUp() { AmbientSound = ChargingSound; } function PlayRelease() { AmbientSound = None; PlaySound(sound'WeaponSounds.TranslocatorModuleRegeneration', SLOT_None, FireSoundVolume/255.0,,,, False); } simulated event FlashMuzzleFlash() { super.FlashMuzzleFlash(); if ( Level.NetMode != NM_DedicatedServer ) { if ( !IsAltFire() && BeamCount != OldBeamCount ) { OldBeamCount = BeamCount; PlayAnim('Fire', 0.5, 0); super.ShakeView(); } } } simulated function bool IsAltFire() { if ( Instigator.IsLocallyControlled() ) return bIsAltFire; return bFireMode; } simulated function ShakeView() { if ( IsAltFire() ) super.ShakeView(); } simulated function float ChargeBar() { if ( bHoldingFire ) return (FMin(Level.TimeSeconds - StartHoldTime, MaxHoldTime) / MaxHoldTime); else return 0; } function SpawnBeamEffect(Vector Start, Rotator Dir, Vector HitLocation, Vector HitNormal, int ReflectNum) { local FX_Turret_IonCannon_BeamFire Beam; Beam = Spawn(BeamEffectClass,,, Start, Dir); if (ReflectNum != 0) Beam.Instigator = None; // prevents client side repositioning of beam start Beam.AimAt(HitLocation, HitNormal); } function SpawnLaserBeam() { CalcWeaponFire(); AimLaser = Spawn(class'FX_IonPlasmaTank_AimLaser', Self,, WeaponFireLocation, WeaponFireRotation); } function KillLaserBeam() { if ( AimLaser != None ) { AimLaser.Destroy(); AimLaser = None; } } simulated function UpdateLaserBeamLocation( out vector Start, out vector HitLocation ) { local vector HitNormal; local rotator Dir; CalcWeaponFire(); Start = WeaponFireLocation; Dir = WeaponFireRotation; HitLocation = vect(0,0,0); SimulateTraceFire( Start, Dir, HitLocation, HitNormal ); //log("UpdateLaserBeamLocation WFL:" @ WeaponFireLocation @ "WFR:" @ WeaponFireRotation // @ "Start:" @ Start @ "HL:" @ HitLocation ); } event bool AttemptFire( Controller C, bool bAltFire ) { bFireMode = bAltFire; return super.AttemptFire( C, bAltFire ); } state ProjectileFireMode { simulated function ClientStartFire(Controller C, bool bAltFire) { bFireMode = bAltFire; bIsAltFire = bAltFire; //log("ClientStartFire"); if ( !bAltFire ) { if ( Role < ROLE_Authority && FireCountdown <= 0 ) { bHoldingFire = true; StartHoldTime = Level.TimeSeconds; SetTimer( MaxHoldTime, false ); } else SetTimer( FireCountDown, false ); // synch to starthold matches server (done in timer) //super.ClientStartFire(C, bAltFire); } else { super.ClientStartFire(C, bAltFire); } } simulated function Timer() { if ( !bHoldingFire ) { if ( Role < Role_Authority && !bFireMode ) { bHoldingFire = true; StartHoldTime = Level.TimeSeconds; SetTimer( MaxHoldTime, false ); } return; } bHoldingFire = false; FireCountdown = FireInterval; SetTimer(FireInterval, false); if ( Role == ROLE_Authority ) { KillLaserBeam(); CalcWeaponFire(); FlashCount++; PlayFiring(); if ( AmbientEffectEmitter != None ) AmbientEffectEmitter.SetEmitterStatus( true ); TraceFire(WeaponFireLocation, WeaponFireRotation); } BeamCount++; FlashMuzzleFlash(); } simulated function ClientStopFire(Controller C, bool bWasAltFire) { //log("ClientStopFire"); super.ClientStopFire(C, bWasAltFire); if ( bHoldingFire ) { bHoldingFire = false; FireCountdown = FireInterval; ClientPlayForceFeedback("BioRifleFire"); } SetTimer(0, false); } function Fire(Controller C) { NetUpdateTime = Level.TimeSeconds - 1; bFireMode = false; //log("Fire"); if ( !bHoldingFire ) { PlayChargeUp(); StartHoldTime = Level.TimeSeconds; bHoldingFire = true; SetTimer( MaxHoldTime, false ); SpawnLaserBeam(); } } function AltFire(Controller C) { local actor Shock; local float DistScale, dist; local vector dir, StartLocation; local Pawn Victims; NetUpdateTime = Level.TimeSeconds - 1; bFireMode = true; //log("AltFire"); StartLocation = Instigator.Location; PlaySound(ShockSound, SLOT_None, 128/255.0,,, 2.5, False); Shock = Spawn(class'FX_IonPlasmaTank_ShockWave', Self,, StartLocation); Shock.SetBase( Instigator ); foreach VisibleCollidingActors( class'Pawn', Victims, ShockRadius, StartLocation ) { //log("found:" @ Victims.GetHumanReadableName() ); // don't let Shock affect fluid - VisibleCollisingActors doesn't really work for them - jag if( (Victims != Instigator) && (Victims.Controller != None) && (Victims.Controller.GetTeamNum() != Instigator.GetTeamNum()) && (Victims.Role == ROLE_Authority) ) { dir = Victims.Location - StartLocation; dir.Z = 0; dist = FMax(1,VSize(dir)); dir = Normal(Dir)*0.5 + vect(0,0,1); DistScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/ShockRadius); Victims.AddVelocity( DistScale * ShockMomentum * dir ); //Victims.Velocity = (DistScale * ShockMomentum * dir); //Victims.TakeDamage(0, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir, //(DistScale * ShockMomentum * dir), None ); //log("Victims:" @ Victims.GetHumanReadableName() @ "DistScale:" @ DistScale ); } } } function CeaseFire(Controller C) { //log("CeaseFire"); KillLaserBeam(); if ( bHoldingFire ) { if ( Role == Role_Authority ) PlayRelease(); SetTimer(0, false); bHoldingFire = false; FireCountdown = FireInterval; } } } EQfU-gq!O GE\]w"*"h GE]_V ( GEEEz//============================================================================= // ONSHoverTank_IonPlasma_BeamFire //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class ONSHoverTank_IonPlasma_BeamFire extends FX_Turret_IonCannon_BeamFire; EjG//============================================================================= // ONSHoverTank_IonPlasma //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class ONSHoverTank_IonPlasma extends ONSHoverTank; #exec OBJ LOAD FILE=AS_Vehicles_TX.utx function AltFire(optional float F) { super(ONSVehicle).AltFire( F ); } function ClientVehicleCeaseFire(bool bWasAltFire) { super(ONSVehicle).ClientVehicleCeaseFire( bWasAltFire ); } simulated function SetupTreads() { LeftTreadPanner = VariableTexPanner(Level.ObjectPool.AllocateObject(class'VariableTexPanner')); RightTreadPanner = VariableTexPanner(Level.ObjectPool.AllocateObject(class'VariableTexPanner')); LeftTreadPanner.Material = Skins[1]; RightTreadPanner.Material = Skins[2]; LeftTreadPanner.PanRate = 0; RightTreadPanner.PanRate = 0; //LeftTreadPanner.PanDirection = rot(0, 16384, 0); //RightTreadPanner.PanDirection = rot(0, 16384, 0); Skins[1] = LeftTreadPanner; Skins[2] = RightTreadPanner; } state VehicleDestroyed { function Died(Controller Killer, class damageType, vector HitLocation) { } Begin: DestroyAppearance(); VehicleExplosion(vect(0,0,1), 1.0); sleep(3.0); Destroy(); } static function StaticPrecache(LevelInfo L) { super(ONSTreadCraft).StaticPrecache(L); L.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankBody'); L.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankTread'); L.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankTurret'); L.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankBodyDead'); L.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankTreadDead'); L.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankTurretDead'); L.AddPrecacheMaterial(Texture'AS_FX_TX.HUD.AssaultHUD'); // FX L.AddPrecacheMaterial( Material'AW-2004Particles.Weapons.HardSpot' ); L.AddPrecacheMaterial( Material'AW-2004Particles.Energy.AirBlastP' ); L.AddPrecacheMaterial( Material'AW-2004Particles.Energy.PurpleSwell' ); L.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp2_framesP' ); L.AddPrecacheMaterial( Texture'EpicParticles.Flares.SoftFlare' ); L.AddPrecacheMaterial( Texture'EpicParticles.Beams.WhiteStreak01aw' ); L.AddPrecacheMaterial( Texture'AW-2004Particles.Energy.EclipseCircle' ); L.AddPrecacheMaterial( Texture'EpicParticles.Flares.HotSpot' ); L.AddPrecacheMaterial( Material'AW-2004Particles.Weapons.GrenExpl' ); L.AddPrecacheMaterial( Material'AS_FX_TX.Flares.Laser_Flare' ); L.AddPrecacheMaterial( Material'AW-2004Particles.Weapons.PlasmaStar' ); L.AddPrecacheStaticMesh( StaticMesh'AW-2004Particles.Weapons.PlasmaSphere' ); } simulated function UpdatePrecacheStaticMeshes() { Level.AddPrecacheStaticMesh( StaticMesh'AW-2004Particles.Weapons.PlasmaSphere' ); super.UpdatePrecacheStaticMeshes(); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankBody'); Level.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankTread'); Level.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankTurret'); Level.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankBodyDead'); Level.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankTreadDead'); Level.AddPrecacheMaterial(Material'AS_Vehicles_TX.IonPlasmaTank.IonTankTurretDead'); // FX Level.AddPrecacheMaterial( Material'AW-2004Particles.Weapons.HardSpot' ); Level.AddPrecacheMaterial( Material'AW-2004Particles.Energy.AirBlastP' ); Level.AddPrecacheMaterial( Material'AW-2004Particles.Energy.PurpleSwell' ); Level.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp2_framesP' ); Level.AddPrecacheMaterial( Texture'EpicParticles.Flares.SoftFlare' ); Level.AddPrecacheMaterial( Texture'EpicParticles.Beams.WhiteStreak01aw' ); Level.AddPrecacheMaterial( Texture'AW-2004Particles.Energy.EclipseCircle' ); Level.AddPrecacheMaterial( Texture'EpicParticles.Flares.HotSpot' ); Level.AddPrecacheMaterial( Material'AW-2004Particles.Weapons.GrenExpl' ); Level.AddPrecacheMaterial( Material'AS_FX_TX.Flares.Laser_Flare' ); Level.AddPrecacheMaterial( Material'AW-2004Particles.Weapons.PlasmaStar' ); super.UpdatePrecacheMaterials(); } EEWXLYX GEc(//----------------------------------------------------------- // //----------------------------------------------------------- class ONSGenericSD extends ONSWheeledCraft; #exec OBJ LOAD FILE=..\sounds\ONSVehicleSounds-S.uax #exec OBJ LOAD FILE=..\textures\ONSFullTextures.utx var() int CloseSeatRotation; simulated event Tick(float DeltaSeconds) { local rotator SeatRot; Super.Tick(DeltaSeconds); if(!bDriving) SeatRot.Pitch = CloseSeatRotation; SetBoneRotation('Object05', SeatRot, 0, 1.0); } static function StaticPrecache(LevelInfo L) { Super.StaticPrecache(L); L.AddPrecacheStaticMesh(StaticMesh'ONSDeadVehicles-SM.RVexploded.RVgun'); L.AddPrecacheStaticMesh(StaticMesh'ONSDeadVehicles-SM.RVexploded.RVrail'); L.AddPrecacheStaticMesh(StaticMesh'ONSDeadVehicles-SM.RVexploded.Rvtire'); L.AddPrecacheStaticMesh(StaticMesh'AW-2004Particles.Debris.Veh_Debris2'); L.AddPrecacheStaticMesh(StaticMesh'AW-2004Particles.Debris.Veh_Debris1'); L.AddPrecacheMaterial(Material'ExplosionTex.Framed.exp2_frames'); L.AddPrecacheMaterial(Material'ExplosionTex.Framed.exp1_frames'); L.AddPrecacheMaterial(Material'ExplosionTex.Framed.we1_frames'); L.AddPrecacheMaterial(Material'ExplosionTex.Framed.SmokeReOrdered'); L.AddPrecacheMaterial(Material'AW-2004Particles.Fire.NapalmSpot'); L.AddPrecacheMaterial(Material'EpicParticles.Fire.SprayFire1'); L.AddPrecacheMaterial(Material'Engine.GRADIENT_Fade'); } simulated function UpdatePrecacheStaticMeshes() { Level.AddPrecacheStaticMesh(StaticMesh'ONSDeadVehicles-SM.RVexploded.RVgun'); Level.AddPrecacheStaticMesh(StaticMesh'ONSDeadVehicles-SM.RVexploded.RVrail'); Level.AddPrecacheStaticMesh(StaticMesh'ONSDeadVehicles-SM.RVexploded.Rvtire'); Level.AddPrecacheStaticMesh(StaticMesh'AW-2004Particles.Debris.Veh_Debris2'); Level.AddPrecacheStaticMesh(StaticMesh'AW-2004Particles.Debris.Veh_Debris1'); Super.UpdatePrecacheStaticMeshes(); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial(Material'ExplosionTex.Framed.exp2_frames'); Level.AddPrecacheMaterial(Material'ExplosionTex.Framed.exp1_frames'); Level.AddPrecacheMaterial(Material'ExplosionTex.Framed.we1_frames'); Level.AddPrecacheMaterial(Material'ExplosionTex.Framed.SmokeReOrdered'); Level.AddPrecacheMaterial(Material'AW-2004Particles.Fire.NapalmSpot'); Level.AddPrecacheMaterial(Material'EpicParticles.Fire.SprayFire1'); Level.AddPrecacheMaterial(Material'Engine.GRADIENT_Fade'); Super.UpdatePrecacheMaterials(); } EEEN1//----------------------------------------------------------- // //----------------------------------------------------------- class ONSBomberRocketProjectile extends Projectile; var xEmitter SmokeTrail; var Effects Corona; var float AccelerationAddPerSec; var bool bLockedOn; var Actor HomingTarget; replication { reliable if (Role == ROLE_Authority) HomingTarget, bLockedOn; } simulated function Destroyed() { if ( SmokeTrail != None ) SmokeTrail.mRegen = False; if ( Corona != None ) Corona.Destroy(); Super.Destroyed(); } simulated function PostBeginPlay() { if ( Level.NetMode != NM_DedicatedServer) { SmokeTrail = Spawn(class'RocketTrailSmoke',self); Corona = Spawn(class'RocketCorona',self); } Acceleration = vector(Rotation); if (PhysicsVolume.bWaterVolume) Velocity=0.6*Velocity; SetTimer(0.1, True); Super.PostBeginPlay(); } simulated function Landed( vector HitNormal ) { Explode(Location,HitNormal); } simulated function Explode(vector HitLocation, vector HitNormal) { PlaySound(sound'WeaponSounds.BExplosion3',,2.5*TransientSoundVolume); // if ( EffectIsRelevant(Location,false) ) // { // Spawn(class'NewExplosionA',,,HitLocation + HitNormal*20,rotator(HitNormal)); // Spawn(class'ExplosionCrap',,, HitLocation + HitNormal*20, rotator(HitNormal)); // if ( (ExplosionDecal != None) && (Level.NetMode != NM_DedicatedServer) ) // Spawn(ExplosionDecal,self,,Location, rotator(-HitNormal)); // } if (Level.NetMode != NM_Client) spawn(class'ONSAVRiLRocketExplosion',,,HitLocation,rotator(HitNormal)); BlowUp(HitLocation); Destroy(); } simulated function Timer() { local vector ForceDir; local float VelMag; if (Role == ROLE_Authority) { // Dampen Lateral Velocity // VelMag = VSize(Velocity); //// Velocity -= Normal(Velocity) * 0.1 * (Velocity Dot vector(Rotation));\ // Velocity -= Normal(Velocity - Vector(Rotation) * (Velocity Dot Vector(Rotation))) * 250.0; if (Instigator != None && Instigator.Controller != None && ONSAVRiL(Instigator.Weapon) != None) { bLockedOn = ONSAVRiL(Instigator.Weapon).bLockedOn; HomingTarget = ONSAVRiL(Instigator.Weapon).HomingTarget; } else bLockedOn = False; } if (bLockedOn && HomingTarget != None) { // Do normal guidance to target. ForceDir = Normal(HomingTarget.Location - Location); ForceDir = Normal(ForceDir * 0.7 * VelMag + Velocity); Velocity = VelMag * ForceDir; Acceleration += 5 * ForceDir; // Update rocket so it faces in the direction its going. SetRotation(rotator(Velocity)); } } simulated function Tick(float deltaTime) { if (VSize(Velocity) >= MaxSpeed) { Acceleration = vect(0,0,0); disable('Tick'); } else Acceleration += Normal(Velocity) * (AccelerationAddPerSec * deltaTime); } function TakeDamage(int Damage, Pawn instigatedBy, Vector hitlocation, Vector momentum, class damageType) { if (Damage > 0) Explode(HitLocation, vect(0,0,0)); } EEEQ\hE" a+9P GEEEHg\\ GE}ik_ GElEEmEEnEEoEEEETTsb-a > >a?> >aL>> 33>aL>> ff&?aL>> 33S?aL>> ?a UEG E\rY5 GEEEWq(Mk!bc9:9:$a  9?,d"@a  b?-'o$a((((Nhw(*w(*A( hA @ A :?-: @A (2ch:jnq:rt GEx//----------------------------------------------------------- // //----------------------------------------------------------- class ONSBomberFactory extends ONSVehicleFactory; ta@u>)M$<_*EEf //----------------------------------------------------------- // //----------------------------------------------------------- class ONSBomber extends ONSPlaneCraft; #exec OBJ LOAD FILE=..\Animations\ONSVehicles-A.ukx var() float MaxPitchSpeed; simulated event DrivingStatusChanged() { if (bDriving) Enable('Tick'); else Disable('Tick'); } simulated function Tick(float DeltaTime) { local float EnginePitch; if(Level.NetMode != NM_DedicatedServer) { EnginePitch = 96.0 + VSize(Velocity)/MaxPitchSpeed * 32.0; SoundPitch = FClamp(EnginePitch, 96, 128); } Super.Tick(DeltaTime); } EV //----------------------------------------------------------- // //----------------------------------------------------------- class ONSBombDropper extends ONSWeapon; #exec OBJ LOAD FILE=..\Animations\ONSWeapons-A.ukx //state ProjectileFireMode //{ // function SpawnProjectile(class ProjClass) // { // local Projectile P; // // P = spawn(ProjClass, self, , WeaponFireLocation, WeaponFireRotation); // // if (P != None) // { // P.Velocity = Instigator.Velocity + (vect(0,0,-1000) << Owner.Rotation); // // // Play firing noise // PlaySound(FireSoundClass, SLOT_None, FireSoundVolume/255.0,,,, false); // } // } //} Ez//----------------------------------------------------------- // //----------------------------------------------------------- class ONSBombDropExplosion extends RocketExplosion; EG//----------------------------------------------------------- // //----------------------------------------------------------- class ONSBomb extends Projectile; var xEmitter Trail; simulated function Destroyed() { if ( Trail != None ) Trail.mRegen = false; // stop the emitter from regenerating Super.Destroyed(); } simulated function PostBeginPlay() { Super.PostBeginPlay(); if ( Level.NetMode != NM_DedicatedServer) { Trail = Spawn(class'GrenadeSmokeTrail', self,, Location, Rotation); } if ( Role == ROLE_Authority ) { RandSpin(25000); } } simulated function Landed( vector HitNormal ) { HitWall( HitNormal, None ); } simulated function HitWall( vector HitNormal, actor Wall ) { Explode(Location, vect(0,0,1)); } simulated function Explode(vector HitLocation, vector HitNormal) { BlowUp(HitLocation); PlaySound(sound'WeaponSounds.BExplosion3',,2.5*TransientSoundVolume); if ( EffectIsRelevant(Location,false) ) { Spawn(class'ONSBombDropExplosion',,, HitLocation, rotator(vect(0,0,1))); Spawn(ExplosionDecal,self,,HitLocation, rotator(-HitNormal)); } Destroy(); } E$` H6%$#??6$rNaWs#?6#@(*s#?6$a(Ur/aW999?(*999?r/aW999?(*999?kkZ!a$ 9P/rZ*(Z T' GyUD*{Gȵ3}BF$Z$BJ$DR$|GdHSN%]O$Andvx:^." EEEEkclass ONSAutoBomberWarpEffect extends Emitter; #exec OBJ LOAD FILE=..\StaticMeshes\VMStructures.usx Eaclass ONSAutoBomberDeathFlames extends Emitter; #exec OBJ LOAD FILE=AW-2004Explosions.utx Efclass ONSAutoBomberBombExplosion extends Emitter; #exec OBJ LOAD FILE=ONSstructureTextures.utx Em class ONSAutoBomberBomb extends RedeemerProjectile; //we don't have bots shoot bomber bombs because we'd rather they shoot the bomber itself instead function BeginPlay() { Super(Projectile).BeginPlay(); } function Timer() { } state Dying { function BeginState() { bHidden = true; SetPhysics(PHYS_None); SetCollision(false,false,false); ShakeView(); InitialState = 'Dying'; if ( SmokeTrail != None ) SmokeTrail.Destroy(); } Begin: PlaySound(sound'WeaponSounds.redeemer_explosionsound'); HurtRadius(Damage, DamageRadius*0.500, MyDamageType, MomentumTransfer, Location); Sleep(0.5); HurtRadius(Damage, DamageRadius, MyDamageType, MomentumTransfer, Location); Destroy(); } Edeclass ONSAutoBomber extends Actor; var vector BombTargetCenter; var float Speed, MinSpeed, BombRange; var class BombClass; var int Health; var byte Team; var Controller DelayedDamageInstigatorController; var bool bShotDown; // Damage attributes. var float Damage; var float DamageRadius; var float MomentumTransfer; var class MyDamageType; // camera shakes // var() vector ShakeRotMag; // how far to rot view var() vector ShakeRotRate; // how fast to rot view var() float ShakeRotTime; // how much time to rot the instigator's view var() vector ShakeOffsetMag; // max view offset vertically var() vector ShakeOffsetRate; // how fast to offset view vertically var() float ShakeOffsetTime; // how much time to offset view var class DyingEffectClass; var Emitter DyingEffect; replication { reliable if (bNetInitial && Role == ROLE_Authority) BombTargetCenter; reliable if (bNetDirty && Role == ROLE_Authority) bShotDown; } function Touch(Actor Other) { if (Vehicle(Other) != None) { Vehicle(Other).TakeDamage(Vehicle(Other).Health, None, Other.Location, vect(0,0,0), class'DamTypeONSVehicle'); TakeDamage(Health, Pawn(Other), Location, vect(0,0,0), class'DamTypeONSVehicle'); } } function Bump(Actor Other) { Touch(Other); } function SetDelayedDamageInstigatorController(Controller C) { DelayedDamageInstigatorController = C; } function TakeDamage(int Damage, Pawn EventInstigator, vector HitLocation, vector Momentum, class DamageType) { local Controller InstigatorController; if (EventInstigator != None) InstigatorController = EventInstigator.Controller; else InstigatorController = DelayedDamageInstigatorController; if (InstigatorController == None || InstigatorController.GetTeamNum() == Team) return; Health -= Damage; if (Health <= 0) GotoState('ShotDown'); } simulated function PostBeginPlay() { Super.PostBeginPlay(); if (Role == ROLE_Authority && Instigator != None) Team = Instigator.GetTeamNum(); if (Level.NetMode != NM_DedicatedServer) { spawn(class'ONSAutoBomberWarpEffect',,,, Rotation + rot(0,16384,0)); Level.GetLocalPlayerController().PlayStatusAnnouncement('Incoming_air', 0, true); } } function Bomb(vector Target) { BombTargetCenter = Target; SetRotation(rotator(Target - Location)); Velocity = vector(Rotation) * ((VSize(Location - BombTargetCenter) - BombRange) / 100000 * Speed + MinSpeed); SetTimer(0.33, true); } simulated event HitWall(vector HitNormal, Actor HitWall) { if (Level.NetMode != NM_DedicatedServer) spawn(class'ONSAutoBomberWarpEffect',,,, Rotation + rot(0,16384,0)); Destroy(); } function Timer() { local Controller C; if (FRand() < 0.5) { //high skill enemies who don't have anything else to shoot at will try to shoot bomber down for (C = Level.ControllerList; C != None; C = C.NextController) if ( AIController(C) != None && C.Pawn != None && C.GetTeamNum() != Team && AIController(C).Skill >= 5.0 && !C.Pawn.IsFiring() && (C.Enemy == None || !C.LineOfSightTo(C.Enemy)) && C.Pawn.CanAttack(self) ) { C.Focus = self; C.FireWeaponAt(self); } } if (VSize(Location - BombTargetCenter) < BombRange) { //drop a bomb spawn(BombClass,,, Location - ((CollisionHeight + BombClass.default.CollisionHeight) * vect(0,0,2)), rotator(vect(0,0,-1))); Velocity = Normal(Velocity) * MinSpeed; Acceleration = vect(0,0,0); } } simulated function Tick(float deltaTime) { local float TargetDist; //start out really fast, slow down when near target TargetDist = VSize(Location - BombTargetCenter); if (TargetDist > BombRange) Velocity = vector(Rotation) * ((TargetDist - BombRange) / 100000 * Speed + MinSpeed); } simulated function PostNetReceive() { if (bShotDown) GotoState('ShotDown'); } simulated function Destroyed() { if (DyingEffect != None) DyingEffect.Kill(); } function bool IsStationary() { return false; } state ShotDown { simulated function BeginState() { bShotDown = true; bNetNotify = false; SetPhysics(PHYS_Falling); if (Level.NetMode != NM_DedicatedServer) { DyingEffect = spawn(DyingEffectClass, self); if (DyingEffect != None) DyingEffect.SetBase(self); } } simulated function HitWall(vector HitNormal, Actor HitWall) { Landed(HitNormal); } simulated function Landed(vector HitNormal) { GotoState('BlowingUp'); } simulated function Tick(float deltaTime) { SetRotation(rotator(Velocity)); } function Timer() {} function TakeDamage(int Damage, Pawn EventInstigator, vector HitLocation, vector Momentum, class DamageType) {} } state BlowingUp extends ShotDown { simulated function Landed(vector HitNormal) {} simulated function BeginState() { local PlayerController PC; local float Dist, Scale; InitialState = 'BlowingUp'; if (Level.NetMode != NM_DedicatedServer) { Spawn(class'RedeemerExplosion',,, Location - 100 * Normal(Velocity), Rot(0,16384,0)); Spawn(class'IonCore',,, Location, Rotation); } MakeNoise(1.0); bHidden = true; SetPhysics(PHYS_None); SetCollision(false,false,false); //shakeview PC = Level.GetLocalPlayerController(); if (PC != None && PC.ViewTarget != None) { Dist = VSize(Location - PC.ViewTarget.Location); if (Dist < DamageRadius * 2.0) { if (Dist < DamageRadius) Scale = 1.0; else Scale = (DamageRadius*2.0 - Dist) / (DamageRadius); PC.ShakeView(ShakeRotMag*Scale, ShakeRotRate, ShakeRotTime, ShakeOffsetMag*Scale, ShakeOffsetRate, ShakeOffsetTime); } } } Begin: PlaySound(sound'WeaponSounds.redeemer_explosionsound'); HurtRadius(Damage, DamageRadius*0.125, MyDamageType, MomentumTransfer, Location); Sleep(0.5); HurtRadius(Damage, DamageRadius*0.300, MyDamageType, MomentumTransfer, Location); Sleep(0.2); HurtRadius(Damage, DamageRadius*0.475, MyDamageType, MomentumTransfer, Location); Sleep(0.2); HurtRadius(Damage, DamageRadius*0.650, MyDamageType, MomentumTransfer, Location); Sleep(0.2); HurtRadius(Damage, DamageRadius*0.825, MyDamageType, MomentumTransfer, Location); Sleep(0.2); HurtRadius(Damage, DamageRadius*1.000, MyDamageType, MomentumTransfer, Location); Destroy(); } Euclass MutVehicleArena extends Mutator config; var config string ArenaVehicleClassName; var class ArenaVehicleClass; var localized string ArenaDisplayText, ArenaDescText; var array VehicleClassNames; function PostBeginPlay() { local ONSVehicleFactory Factory; ArenaVehicleClass = class( DynamicLoadObject(ArenaVehicleClassName,class'Class') ); if(ArenaVehicleClass != None) { foreach AllActors( class 'ONSVehicleFactory', Factory ) { Factory.VehicleClass = ArenaVehicleClass; } } Super.PostBeginPlay(); } static function FillPlayInfo(PlayInfo PlayInfo) { local string VehicleOptions; local class cn; local int i; local array > VehicleClasses; Super.FillPlayInfo(PlayInfo); for (i=0;i( DynamicLoadObject(default.VehicleClassNames[i],class'class') ); if (cn!=None) { VehicleClasses.Length = VehicleClasses.Length + 1; VehicleClasses[VehicleClasses.Length-1] = cn; } } for (i=0; i'V GEEGe D/ -B.ln/  ].KF/.99Ka/.>ara/(w>* w>--(h>-.HBb@@+>-.MU$f-E` *.| ?a&w*`$lVBcc--'V+-(+w.*. .#@e-'-(-(-(-(-(a. w* -`$`$ GE/EE}//============================================================================= // FX_IonPlasmaTank_ShockWave //============================================================================= // Created by Laurent Delayen (C) 2003 Epic Games //============================================================================= class FX_IonPlasmaTank_ShockWave extends Emitter; Ek //============================================================================= // FX_IonPlasmaTank_AimLaser //============================================================================= // Created by Laurent Delayen (C) 2003 Epic Games //============================================================================= class FX_IonPlasmaTank_AimLaser extends FX_Turret_IonCannon_LaserBeam; var ONSHoverTank_IonPlasma_Weapon WeaponOwner; replication { unreliable if ( Role == ROLE_Authority && bNetInitial && bNetOwner ) WeaponOwner; } simulated function SetWeaponOwner() { WeaponOwner = ONSHoverTank_IonPlasma_Weapon(Owner); } simulated function UpdateBeamLocation() { if ( WeaponOwner != None ) WeaponOwner.UpdateLaserBeamLocation(StartLocation, EndLocation); } ECclass DamTypeMASRoadkill extends DamTypeRoadkill abstract; EF//----------------------------------------------------------- // //----------------------------------------------------------- class DamTypeMASPlasma extends VehicleDamageType abstract; E?class DamTypeMASPancake extends DamTypePancake abstract; Ex//----------------------------------------------------------- // //----------------------------------------------------------- class DamTypeMASCannon extends VehicleDamageType; EGclass DamTypeIonTankRoadkill extends DamTypeRoadkill abstract; ECclass DamTypeIonTankPancake extends DamTypePancake abstract; EDclass DamTypeIonTankBlast extends VehicleDamageType abstract; =$?=@@=@@k$L=m$L=~@ASBSCDEQ$?j$/DEG@Cp A~: @F$PAEG@CxA~: F$PAEGCq A~: @F$ AEGCCA~: F$ AE=$G?=^fF@=@k$L=m$L=~@P$"DASBSCDEQ$?j$CEG@CLAF$BEG@CNAF$BEGCMAF$BEGCKAF$BE=$`@= A=PAA: ff&?k$m$?~@z$@P$zEASBSCDEQ$?j$CED +1SSS"Y$*E$?*E)$=0$L="2(Z 8Z$$CEZ$z$zCE Z$$EEZ 8Z$A$HBEZ$C$HCE Z$B$BEEH: = ף;?_$@E$pBZ$>$>EZ$@$@E2Z 8Z$$EZ$$E Z$D$@EEEED +1SSS"Y$*E$?*E)$>0$=7"#&: H(Z 8Z$$EZ$$E Z$H$HEE-Y$? $@?EZ 8Z$HD$HDEZ$"D$"DE Z$B$BEE$pAZ$>$>E2Z 8Z$$EZ$$E Z$D$DEEE%A/ +1SS"Y$*E$?*E)$?0$=7"&: (Z 8Z$$EZ$$E Z$$EE-!Z 8Z$ȶ>$rH?EZ$$E Z$$EEZ 8Z$@$@EZ$?$?E Z$?$?EE$pBZ$?$?EZ$@$@EED +1SSS"Y$*E$?*E)$=0$L="2(Z 8Z$$CEZ$z$zCE Z$$EEZ 8Z$A$HBEZ$C$HCE Z$B$BEEH: = ף;?_$@E$pBZ$>$>EZ$@$@E2Z 8Z$$EZ$$E Z$D$@EEEED +1SSS"Y$*E$?*E)$>0$=7"#&: H(Z 8Z$$EZ$$E Z$H$HEE-Y$? $@?EZ 8Z$HD$HDEZ$"D$"DE Z$B$BEE$pAZ$>$>E2Z 8Z$$EZ$$E Z$D$DEEE%A/ +1SS"Y$*E$?*E)$?0$=7"&: (Z 8Z$$EZ$$E Z$$EE-!Z 8Z$ȶ>$rH?EZ$$E Z$$EEZ 8Z$@$@EZ$?$?E Z$?$?EE$pBZ$?$?EZ$@$@EED SSS"Y=$*E$>*E$+?*E$?*EB$+?7"&: (Z 8Z$$EZ$$E Z$$AEE!Z 8Z$$?EZ$$E Z$$EEY$ $?E$? $ AEZ 8Z$B$BEZ$B$BE Z$B$BEE$@g$Z$+?$+?EE%A/ SSS"Y=$*E$>*E$+?*E$?*EB$L>7"(Z 8Z$$EZ$$E Z$$BEE!Z 8Z$$?EZ$$?E Z$$?EEY$ $?E$? $pAEZ 8Z$>$+?EZ$>$+?E Z$?$?EE$Ag$Z$+?$+?EE SSS"Y=$*E$>*E$+?*E$?*EB$fff?7"6Z 8Z$$L>EZ$$E Z$$EE!Z 8Z$$?EZ$$E Z$$EEY$ $?E$? $AEZ 8Z$HB$BEZ$B$BE Z$B$BEE$@g$Z$+?$+?EE SSS:TZ$H$HCE!Z 8Z$= ?$R@EZ$$E Z$$EEY$@@ $@EZ 8Z$C$CEZ$B$BE Z$B$BEE$D,"."Z$?$?EE +SSS)$="Y$? $ AE$AZ$?$?EE+1VESZ)$,@0$,@"Y$@@ $AEZ 8Z$zC$zCEZ$B$BE Z$B$BEE9,"."2Z 8Z$$EZ$$E Z$zC$zCEEE+1ES3ZP: C)$?0$?"6Z 8Z$L=$=EZ$$E Z$$EEY$? $AEZ 8Z$HB$BEZ$B$BE Z$B$BEEZ$@$@EE+1SSS)$333?0$=-!Z 8Z$=$L?EZ$$E Z$$EEZ 8Z$zC$zDEZ$$E Z$$EE$BZ$L=$u$>EZ$>$>E Z$>$>EE$BZ$?$?EE+1VSSSZ)$L>0$="!Z 8Z$+>$Y?EZ$$E Z$$EEY$? $@EZ 8Z$HB$HBEZ$B$BE Z$B$BEE$C9,"."Z$33>$33>E2Z 8Z$zC$zEZ$zC$zE Z$zC$zEEE+1VSSS)$L>0$="Y$? $@EZ 8Z$C$CEZ$B$BE Z$B$BEE$AZ$>$>EZ$=$=EESS)$)\=0$<"P!Z 8Z$@?$@EZ$$E Z$$EEZ 8Z$"D$"DEZ$B$BE Z$B$BEE$ BZ$ ף<$ ף$LEEaY$': L>E$L>': L>E$>': E$?': L>E$L?': 333E$?': EZ 8Z$ $ EZ$B$BE Z$B$BEEH: #<??$BZ$33?$33?EiZ$;D$;DElE SSS"Y=$*E$L>*E$L?*E$?*E"Y$ $E$? $@EZ 8Z$C$CEZ$B$BE Z$B$BEE$@E9Z$@@$@@EED SoXjS"Y=$*E$>*E$L?*ӫE$?*EB$>":cZ 8Z$$GEZ$F$zEE Z$D$DEE_Z 8Z$$EZ$$E Z$L>$LEEaY$': L>E$L>': L>E$>': E$?': L>E$L?': 333E$?': EZ 8Z$$EZ$B$BE Z$B$BEEH: ;??$PCGZ$@$@EiZ$zD$zDElE SSS"Y=$*E$L>*@E$L?*JE$?*E"!Z 8Z$$?EZ$$E Z$$EEY$ $?E$? $EZ 8Z$HC$HCEZ$B$BE Z$B$BEE$ AZ$?$?EE SSS"Y=$*E$L>*@E$L?*JE$?*E"!Z 8Z$$?EZ$$E Z$$EEY$ $?E$? $EZ 8Z$HC$HCEZ$B$BE Z$B$BEE$@Z$fff?$fff?EZ$>$>EE SSS"YL$*E$=*UE$Y?*[E$fff?*YE$?*EB$333?"6Z 8Z$̽$=EZ$$E Z$$EE!Z 8Z$$?EZ$$E Z$$EEY9$ $?E$333? $@E$Y? $@E$? $@AEZ 8Z$B$CEZ$B$BE Z$B$BEE$AZ$33?$33?EZ$?$?EED SXSgSl"Y=$*E$?*E$L?*E$?*E",(Z 8Z$$EZ$$E Z$$?EE:TZ$@$@E_Z 8Z$$EZ$$E Z$$?EEaY]$': E$>': E$>': L>L>L>E$?': ???E-Y9$ $?E$> $@@E$? $@AE$? $@@EZ 8Z$ A$ AEZ$B$BE Z$B$BEE$`FZ$?$?EZ$?$?EiZ$H$HElSYa$W: ???E$>W: ???E$>W: #< #< #EZ$$E Z$$EE!Z 8Z$$?EZ$$E Z$$EEY9$ $=E$= $?E$> $?E$? $@?EZ 8Z$B$HCEZ$B$BE Z$B$BEE$HBg$Z$@$@EZ$L=$L=EESSS3(Z 8Z$$CEZ$H$HCE Z$H$CEE-!Z 8Z$$?EZ$$E Z$$EEY$ $?E$? $@E$A,"."Z$?$?EESSS3"e(Z 8Z$$CEZ$H$HCE Z$H$CEE-!Z 8Z$$?EZ$$E Z$$EEY$ $?E$? $@E$B,"."Z$?$?EZ$333?$333?EESSS3"(Z 8Z$$CEZ$H$HCE Z$H$CEE-!Z 8Z$$?EZ$$E Z$$EEY$ $?E$? $@E$B,"."Z$?$?EZ$333?$333?EiZ$ $HElESSS3"e&: B(Z 8Z$H$HBEZ$$E Z$$EE-!Z 8Z$$?EZ$$E Z$$EEY$ $>E$? $@EZ 8Z$C$CEZ$B$BE Z$B$BEE$A,"."Z$333?$333?EZ$?$?EE%/ SyqSS"Y.$*E$Y?*E$?*E"Y$ $?E$? $AE$CZ$?$?EZ$?$?EE%/ SSS"Y.$*E$Y?*E$?*E"&: BY$ $?E$? $AE$CZ$?$?EZ$333?$333?EE%mS/ SSP: a"Y.$*E$33s?*E$?*E"e&: BC-X: ??6Z 8Z$$EZ$$E Z$?$?EE$C9Z$@$@EZ$ ?$ ?E2Z 8Z$$EZ$HC$CE Z$HD$zDEEE%mS/ SSP: a"Y.$*E$33s?*E$?*E"e&: C-X: ???6Z 8Z$$EZ$$E Z$?$?EE$C9Z$@$@EZ$ ?$ ?E2Z 8Z$$EZ$H$E Z$HD$zDEEE%mS/ SSP: a"Y.$*E$fff?*E$?*E"e&: B-X: ???6Z 8Z$$EZ$>$?E Z$$?EE$C9Z$@$@EZ$333?$333?E2Z 8Z$B$HCEZ$$E Z$D$DEEE%mS/s SmSP: HhZ 8Z$L>$L>EZ$L>$L>E Z$=$=EE"Y=$*E$L>*E$Y?*E$?*E"&: HCX: ???6Z 8Z$$EZ$$E Z$?$?EEaZ 8Z$?$?EZ$?$?E Z$L>$L>EE$C9Z$?$?EZ$333?$333?E2Z 8Z$$EZ$D$HDE Z$C$CEEESSS3"&: (Z 8Z$ $ AEZ$$E Z$ $ AEEd" !Z 8Z$$?EZ$$E Z$$EEY$ $?E$? $?EZ 8Z$B$CEZ$B$BE Z$B$BEE$ B,"."Z$?$?EZ$333?$333?EE%mS/s SmSP: HhZ 8Z$L>$L>EZ$L>$L>E Z$=$=EE"Y=$*E$L>*E$Y?*E$?*E"&: HX: ??6Z 8Z$$EZ$$E Z$?$?EEaZ 8Z$?$?EZ$?$?E Z$L>$L>EEZ 8Z$$EZ$?$?E Z$?$?EE$C9Z$?$?EZ$333?$333?E2Z 8Z$$EZ$$HE Z$C$CEEESSS3"&: A(Z 8Z$ $ AEZ$$E Z$ $ AEEd" !Z 8Z$$?EZ$$E Z$$EEY$ $?E$? $?EZ 8Z$B$CEZ$B$BE Z$B$BEE$ B,"."Z$?$?EZ$333?$333?EE%/ SSP: "Y.$*E$L?*E$?*E"(Z 8Z$$CEZ$H$HCE Z$$EE6Z 8Z$$?EZ$$?E Z$$?EE!Z 8Z$$?EZ$$?E Z$$?EEZ 8Z$>$@EZ$?$?E Z$?$?EE$@E9Z$?$?EZ$?$?E2Z 8Z$H$HDEZ$H$HDE Z$C$DEEEEEE@E]E'EEEEUEE@EaEVEE\EEEEYSpMHR.S/Rv!oSUV GE[WnF"' GEEEqZrA' GEREEEEydDC GEo^`jkO.brO*rO* r.O*E .O tOeOCE GEOEE@EEm_ q! GEbdx ' GEEEKfq7" GEEddcYcfd$cscvJodfcd cHx cFcccJcl cidw cGcIcqcKF[dNca ccecBcjdN dL dRJicidg cLdq J}FYdNNbcs dO dl dscHd| J}d{ dv NQdPcwcAdPd}KRci dB cMJqJdcddTcdBJ^FZck x^cEdBcVM ducJcKdfdEcm FGde cMKncncm co G8^I c{v]Fs KcK d~ LD cUKH cSGJovLcbdAvadxd\ drFPdEdscR KQcT c` djKZ d} %f cW w\LG J cXm chvHd@ FHJT%Sdt cecf ~cg cl dix La u Kvr s JYGJv]Fr d| Jcn K YKHFbxFrdE dB d`C %^D Fs Fwd}dOGq dMH LF %UcldT R JZv`v`vadG vLJYJZv\vYJSe~ d_ dMGR vcLFdN vfv@wt Hdd9EEdH KRKJKZccc@JdvHws d` d|JHc/zLtm d~n %Vq r p Fy JDdzLE%SV o d %g d"H l i WI a %I t %b ^ p c Lu ~ tz ty dPWJ cZ %v%u%tLvJlLUcP vLI`LsQKCLd{kDJI;G v`NNvECdJDdNtd e^ dH [E\ yv_vEe[ {|Y dV dT S \gdL dM N K]dY dJhX LI] ^ _ Jjwlw^ vFbdb ec iFGKI vw cj cRdZ@xbvUe@ Lde@A eo vLJp Kbvv wOvc d} c{ KbLB xcz cy vEcx M[vevXct KkLnEK JTvN cn cmdW d`X JwLT}d0a ci vf %d vEzc@dh dj k ce JRzu zv LOwzB wlA o cCcc cb FCvpEWcNLFcG~ C D cQ dE %}} d|Ddz %zx dyu dw i s dqa %se ch d0c cj db v1e v1MEL cp cq EJ KI KPcv Jh LF LE Fjc| Fr ey e| vMe_D dn e] v\vrvHet ex ew e_F e_C e@A e_E v~Fr dceO@ cg HFcf KS KT ce vyvmvj%SU vCvOvxvb q=a vd;Nvd` \9A d@ eE_ [6] d^ vnvCvOvH;F cO dgF/pcU cV cW cX cY vf c[ k Lv JU %"] dj h d"{% |d@dM eA} dg{ LSdAFWDFNaKuKjMXL[L+H{MTKPK` Htvl K KvfvTvFvLv=Cv=VvKHSvCK^K{Jlvtvu vsKmJxH<L-|vnvrvqvg F*@F*AF*}@ vovovoFTFBvEvGdS eF MDJMJPE]vV vW vrvuqyqwvevLqwqvvp%RvrLuLANAdQ%WKON]uDLELGLHJJJKFZQ vM~%ZAckcLcOFRFQFOFQFP(VV=VeVVt^CoRX`btVq?V@bVO,_^1in2s |JKXbYSV h0`~zMz \dkJ}EdK1][Eel0b|ZKRY{g7DveGyW^h*ewtGz Vr@fM ZwQQxW`No2Z_ CNlVQxr`1oo~q NEa^WfmlSyc1hr0T@EQOpj^7ZHX_Z]ig\w*U GhYQh1axfH^X'yfotTeFZTVn jexg^H1^W_hX^xNF~B UqQ WEfh^weGcNWp h*ByDH\ WfeetK Ey Uv dpuEcGQWE{ gC u*d DOIVU _xCpyp@rPwV`LoEPNm^u~m1d}iqK}|7\ MyU [rBpM~0^N{ \0ej7Ey7jH7hX7qh7]x7\H7XX0U g{weF1_V,eeguXnEgoSTb"yqb@ePW`cp]@EbO`{``er`[A]_ QY`]` o{ ~hCLjCZg\hTfvpCE7kS7ta7up7d AJKRuq`ICoEi }} K~ ZC@iG whEFrK\l[eG^oWpFUTfd7OsxLBsNc^{ond]~lP u|MuqQX yN^G+CV+^d_ytz ]mZJ,fY'^h] NxZ ZF"^`LWpfGY DW\p[}w K|kB mf|fKe[bkc|E`Lflwk{O2fiXuggMcNfq1fA1r QfbY*qdy[fT|C cU]fruCEiRO{giIZrfuAev1bF_DUQwYMfPvKXF ^1UmDf~qNdfrpgAfhogwkZ^exeG*T?V*@BU*KgW*Y.~*\Kl*aaw*]LX{d` uXE_BUE]W\ot@ccY.Fa}t]Qq1],B1P>n1i*l1[>V1XlT1\:@Xz1c/H1sIwX@1u \N@vjI`foL8Y-wabd1x8F1P8~1tWv]>M MRKO|]\$Y1c 9}r'vLX]"Xu1\3C&w FvH_|,X[&\ti&v ]]M~Wz2XQ&Ea_.^@&C]O0^lMUj|T.fDiTcG>}cE-{Eoh&eUW8^lg 8{NLtsN`4gNHN[FeiHtxF{lLx~`(vl ?^F[]tdmG$QN^ fuNnn[NO-INC+v7Lxa7`dYeL}M^IF)XOyAOXP]9`t kYSVlDTJp7Hv@[evSK[E[{`[[r\$B7lNf7b AtSC%u^^Z7=i7wwfHh]7qEL`v`4V\3JfEE}io