*pkY;FߋID0yck_k`kakbkckdkekfkgkhkikjkkklkmknkokpNoneMaxRangeMinAddPrecacheMaterialColor RelativeTimeVectorZX RangeVectorYUT2k4AssaultFullEngineCoreSystem RelativeSizeAddPrecacheStaticMeshLifetimeRange MaxParticlesTextureStartSizeRangeUseColorScale UniformSizeInitialParticlesPerSecond ColorScaleSecondsBeforeInactiveSpinParticlesAutomaticInitialSpawningCoordinateSystemStartSpinRangeFX_Turret_IonCannon_BeamFire SizeScale GetFireStart UseSizeScaleUseRegularSizeScale AmbientGlow DrawScale DrawType StaticMeshOpacityRespawnDeadParticlesSpinsPerSecondRange PlayFiringUser UT2k4Assault HurtRadiusMeshExplode Destroyed XWeapons bNoDelete UnrealGame EmittersSphereRadiusRangeStartLocationShape VehicleClass AutoDestroyCalcWeaponFirePostBeginPlay bDirectionalUpdateLinkColorStartLocationOffsetFireModeClass GetFireModeTick RemoteRoleSetBrightnessWarmupTicksPerSecond GetTeamNum AmmoClassStartVelocityRangeInitialDelayRange SetLinkColor SetRedColor bHardAttachRelativeWarmupTimeBotRefireRate DeathString DoFireEffect AllowFireTimerSpawnProjectileFemaleSuicide SoundRadius MaleSuicide SetScale FireRate FireSoundEffectIsRelevant StopChargeFX LifeSpan AmbientSound TakeDamageUpdatePrecacheStaticMeshesSmallViewOffset SpinCCWorCWDamageMomentumTransferGetVelocityDirectionFrom FireForceSetupProjectileStaticPrecacheStartVelocityRadialRangeGetGYRColorRampPostNetBeginPlayPlayerViewOffset ShakeRotTimeTextureUSubdivisions PlayReleaseShakeOffsetTimeShakeOffsetRate GetTeamColorUpdateInstigatorBlendBetweenSubdivisionsDefaultWeaponClassNameTextureVSubdivisions PlayChargeShakeOffsetMagUpdatePrecacheMaterialsWeaponInfoTextureXGameGenericShieldEffectVehicleProjSpawnOffset ShakeRotRateVehicleNameStringAttachmentClass ItemNameIsLocallyControlled IsFiring MyDamageType Priority ModeDoFireMyGetFireStart%SetDelayedDamageInstigatorController bCanThrowbNoInstagibReplace ProjectileDrawWeaponInfo SetTimer MaxSpeedWarnTargetPct ProcessTouch DamageType ForceScale ForceRadius ForceType bNetNotifyCollisionHeightTransientSoundRadiusTransientSoundVolumeAimAtUpdateShieldColorColorMultiplierRangeSkins ShakeRotMagStartLocationRange DrawStylebReplicateInstigator SoundVolumebHiddenPostNetReceive0AnimateSkelMeshDriverRadiusDamageMuzzleFlashEffectUpdateSingleChargeBeambAlwaysRelevantVehiclePositionString FireEndAnimASVehicle_SpaceFighter_Skaarj FireLoopAnim FPCamPos SpawnEffectsSpawnExplodeFXbDetonatesGoopDamageOverlayMaterialDamageOverlayTimeSetYellowColor DrawScale3D ShakeView StopFiringSetGreenColorbUnlitUpdateLaserBeamLocationFireHighFrequencyPointsThirdPersonEffectsLowFrequencyPoints AmmoAmountHasAmmo PlayFireFXCollisionRadius AIRatingCurrentRating CenteredRollRotatingSheetsDetermineEndPointBy ConsumeAmmo BestModeTurretBaseClassDrawHealthInfoDrawVehicleHUD DamageRadiusRotatorFlyingRelativeVelocityTakeHitFluidSurfaceInfo LinkAdjustFlashFadeOutStartTimeVehicleFM_Turret_AltFire_Shield TweenTime TraceRangeSpeedDoTraceBeamEffectClass FireSequenceFadeInEndTime MaxRangeProjSpawnOffsetClientTakeHitChargingSoundUseDirectionAsTakeOff ASTurretProjectionNormal ASVehicleDropBlowUpUseMeshBlendModebCHZeroYOffsetFireAnimRight FireAnimLeftRenderTwoSided PlasmaClassExplosionDecalCheckRechargeFPVAdjustBeamStartGetConsoleFont UseEnergyTurretSwivelClassRotationInertiaRotPitchConstraintRotationSpeedPawnUnpossessedDoReflectEffectASVehicleFactory_IonCannonCamRelLocation CamDistance CheckReflectUpdateEngineSoundBeamDistanceRangeSetWeaponOwner FlyingAnimUpdateBeamLocationUpdateLaserBeamFX ScoreKill RocketOffsetSpawnLaserBeambSplashDamage DetailModebRecommendSplashDamage LightTypeNotifyEnemyLostLockSpeedInfoTextureReceiveLocalizedMessageGetLocalPlayerController PlayTakeOff SetTrailFXFadeIn LightEffectDoShieldEffect bOwnerNoSee LightHueUpdateChargeBeam HealthMaxHealthStartChargeFX PlayFireFX_Turret_IonCannon_FireEffectLightSaturation FireSounds PrePivotLightBrightnessFM_Turret_IonCannon_Fire MuzzleScale BeginStateDrawCustomHealthInfoAdjustEngineFXMyDoFireEffectDrawVisibleTargetDrawHiddenTargetDrawTargettingbRelativeExitPosGetHitEffects Acceleration LightRadiusIsTargetInFrontOfPlayerbDelayedDamagebHideRemoteDriver bSkeletizeSetSizeDraw_2DCollisionBox SpawnTrailTeamProjectileClassesbNetInitialRotationDrawSpeedMeterbSkipActorPropertyReplicationFireRKillVehicleDamageMult BeamFront FireAnimRatebNetTemporaryFireL AmmoPerFirebDynamicLight SpawnEffectUpdateFireSoundClientPlayForceFeedbackIndependentVehicleAdjustDriverDamageFindEntryVehicleDriverDamageMultShadowCullDistance StartleBotsShadowMaxTraceDist EntryRadius UpdateHitUpdateSwivelRotationEntryPosition LaserClassExitPositions bArmorStops DriveAnimAutoTurretControllerClass bCausesBlood bHasRadarbLeaveBodyEffect GibModifierbDrawMeshInFP FlashFogbShowDamageOverlaybRemoteControlledVehicleDamageScaling bAutoTurret aimerrorAnnouncement_DestroyedbSpawnBuildEffectLineOfSightToMuzzleFlashClassIsFirstPersonVehicleSpawned SetBlueColorCalcDrawOffset PossessedBySpecialCalcViewPROJ_SpaceFighter_RocketPROJ_LinkTurret_PlasmaGetRocketSpawnLocation AdjustFXWA_LinkTurret WeaponTickWA_SpaceFighterSpawnParticleServerSetTarget WA_TurretFadeOutSetFOV ClientFlashInitForWA_Turret_IonCannonInventoryGroup PickupClassChargeFX_Turret_IonCannon_LaserBeamPlayerViewPivotFX_Turret_IonCannon_ChargeBeam"FX_Turret_IonCannon_BeamExplosion IconMaterialNotifyEnemyLockedOnMaxAmmoFX_SpaceFighter_SkaarjPlasmaInitialAmount FX_SpaceFighter_ShotDownEmitterFX_SpaceFighter_Shield ModeHoldFireClientStartFireFX_SpaceFighter_Rocket_TrailAddAmmoFX_LinkTurret_GreenPlasmaShotDownFXClass SelectSoundFX_LinkTurret_BeamEffectWeapon_LinkTurret TrailOffsetWeapon_SpaceFighterOldMesh OldPickup EffectOffset DisplayFOV bHumanShipPostZoomAdjustFM_SpaceFighter_AltFire AmmoMaxed AmmoStatusFM_LinkTurret_FireZoomWeaponOffsetAdjustFocusOnLeaderFM_LinkTurret_AltFireCamRotationInertiaSuggestAttackStylePreDrawFPWeaponGetEffectStartIncrementFlashCountAdjustPlayerDamage PlayIdleWeapon_SpaceFighter_SkaarjWeapon_TurretWeapon_Turret_IonCannonASTurret_LinkTurret_SwivelCamAbsLocationASTurret_LinkTurret_BaseASTurret_LinkTurret TeamLinkBotASTurret_IonCannon_SwivelASTurret_IonCannon_BaseASTurret_IonCannon GetBotErrorDrawCrosshair BeamRearGetFontSizeIndex SwivelCog FinsOpen CalcInertiaRightChargeBeamOffsetbCustomHealthDisplayAmmo_BallTurretDefaultCrosshairMaxEffectDistanceASTurret_BallTurretASTurret_BallTurret_BasePlayerControllerASVehicle_SpaceFighter_HumanDamTypeBallTurretPlasma mSizeRangeDamTypeIonCannonBlastDamTypeLinkTurretBeamDamTypeLinkTurretPlasmaBegin MaxAngleDamTypeSpaceFighterLaser MinRange DamTypeSpaceFighterLaser_Skaarj ChargeupTimeAmmoRegenTimeAdjustLinkDamage Brightness GetPlayerAimScaleSizeYByVelocityDamTypeSpaceFighterMissile myHasAmmoUseVelocityScaleLinkedFireForceLinkedFireSound!DamTypeSpaceFighterMissileSkaarjFM_BallTurret_Fire FM_SpaceFighter_InstantHitLaserFX_BallTurret_ShieldSpawnBeamEffectFX_LinkTurretShieldFX_LinkTurretShield_Red DamageMinFX_NewIonCoreRevolutionsPerSecondRangeFX_NewIonPlasmaBeamPawn FX_SpaceFighter_InstantHitLaserFX_SpaceFighter_Shield_Red OldHitCountScaleSizeByVelocityMultiplierDesiredBrightnessSetBeamRotationSetBeamLocationProjectileClassLinkTurretController DamageMax RechargeSizeRechargeOriginbReplicateLinkColor Biggun_AimedVelocityScalebEdShouldSnapIonEffectClassTrailShadeTypeTrailLocationMaxPointsPerTrailDistanceThresholdUseCrossedSheetsPointLifeTimePROJ_TurretSkaarjPlasmaPROJ_TurretSkaarjPlasma_Red RechargeWaitRechargeSpeedUseParticleColor GetHitInfoDesiredRotation RotationRatebFixedRotationDir SoundPitchFluidSurfaceShootStrengthMod ProjAccelbAltRapidFire bRapidFire DropTimeNetUpdateFrequency TrailClassPhysicsDoFlash ScanRotation bSplashJumpbPawnRapidFireAnimbFireOnReleasebWaitForReleasebModeExclusive SearchingIsTargetRelevant MaxHoldTimeEnergy FireAnimbOnlyDirtyReplicationbReplicateMovementHomingAggressivityTriggerIdlebTrailerSameRotationHomingCheckFrequency PreBeginPlay SetOpacity1bVehicleTeamLockLandedServerPlayFiring FreeObjectAllocateObject InAimError DamageAttenRotPackageClassSparksTrans TextBufferSquadAIGameObjectiveDestroyableObjectiveTurretControllerVehicleDamageTypeSquad SquadLeaderSquadObjectiveInterfaceContent WhileSquareEpicParticles SoftFlareFlaresBeamsShadersSmokeWhiteStreak01aw SmokepuffHotSpot FlashFlare1 FlickerFlareStellarFog1aw AS_FX_TX Trail_redTrails Trail_Blue LaserTex AssaultRadar Laser_Flare HotBolt_1 HotBolt_3 HotBolt_2 HotBolt_4SpaceHUD_Weapon_SolidSpaceHUD_Speed_GreySpaceHUD_Speed_SolidSpaceHUD_Weapon_GreySpaceHUD_Weapon_Solid_SkaarjSpaceHUD_Speed_Solid_Skaarj XGameShadersWhiteShield_FBTransRingEnergy TransCamFBPlayerShadersZoomFXLinkHitShieldSAW-2004Particles HoldTimeEclipseCircle PlasmaStarWeapons MuchSmoke2t HardSpot GrenExpl PlasmaSphere AirBlastP PurpleSwellAnnouncerAssaultGenericIon_Cannon_destroyedPct ObjectiveTag enemyDist NextFireTime bIsFiring MakeColorExplosionCrap HitSmokeIonCannonDeathEffectIonCoreLinkBoltScorchLinkMuzFlashProj3rdNewExplosionA RocketMark ShieldSparks ExplosionTex exp2_frames exp1_frames SetDrawColor exp7_frames exp2_framesP WeaponSoundsMisc BExplosion3BaseImpactAndExplosions BLinkedFireRocketLauncherProjectileLinkGunProjectile BExplosion5TranslocatorModuleRegeneration BShield1PulseRifleFire PulseRifleBaseFiringSounds AssaultRifleRocketLauncher Translocator BioRifle BioRifleGoo2LinkGunIonCannonBlast TAGRifleredeemer_explosionsound XEffectMat Shield3rdFBShieldRip3rdFB RedShell BlueShellLinkslsSetPosGetCameraLocationClipYClipXObjecthlhnSpriteEmitter0ONSVehicleSounds-S LaserSoundsLaser02SpriteEmitter1SpriteEmitter2 BeamEmitter1 MeshEmitter0EmitterTextures MultiFrame rockchunks02SpriteEmitter3 MeshEmitter1SpriteEmitter5SpriteEmitter21SpriteEmitter18SpriteEmitter7SpriteEmitter13WeaponStaticMesh RocketProjHitxWeaponAttachmentUT2004WeaponsShockHitShader LinkColorPowerPulseShaderPowerPulseShaderRedPowerPulseShaderBluePowerPulseShaderYellow StartEffect WhiteTexture AlphaBlend mHitNormal mHitActorBeamRoleIonBeamEffect InitialDirSound SoundGroup InstantFireProjectileFireDamTypeLinkPlasmaDamTypeShockBeam IonCannonLinkAttachmentLinkBeamEffect LinkFire ShieldEffectShieldEffect3rdOldSpawnHitCount MuzFlashPitch ELinkColorEnum FunctionmOldHitLocationState StartTraceRollYaw EndEffect MarkLocation tileScaleX tileScaleYfXbarOrgXbarOrgY barSizeX barSizeYReflectUSizeVSizeFaceDir bHitWaterFearStyle bWaterStart ForceDirVelMag OldLinks OldLinkColorActor TrailEmitterParticleEmitterBitmapMaterial MaterialBeamDirectionDamageLocationSpriteEmitter SkeletalMeshEmitter MeshEmitter Modifier ReflectNum FinalBlend LastFireTime CombinerShaderColorModifierLevel LinkScaleFontCanvas BeamEmitterAdjustedDamage AvoidMarkerWeaponAttachment RampTimeNonebHit LinkGun_3rd HitCountParticleColorScaleHudBaseCamRotYOffset Crosshairs TeamInfo ScreenPosYOCrosshair_Triad3CurrentTargetPhysicsVolume Ammo_DummyParticleTimeScalemStartParticlesASTurret_BaseASTurret_Minigun_SwivelASVehicleFactoryASVehicle_SpaceFighterFM_Turret_Minigun_AltFireFX_Laser_BlueFX_PlasmaImpactFX_SpaceFighter_3rdpMuzzleFX_SpaceFighter_Trail_Red HUD_AssaultMessage_ASKillMessagesCamLocbSwitchXL2YL2XO ControllerStruct HurtWall LastTouchedInstigatorControllerExplosionEffect AIControllerFrictionFactor OldValue AmmunitionHitDirXOffsetDrawCanvasLine Vehicles ResScaleY TurretBaseOriginalRotation ResScaleX TurretSwivel HudScaleH InventoryDrain AmmoDrain RefNormalLastTimeSecondsPlayerReplicationInfo MinPlayerFOVHUD XInterfaceZoomPct LevelInfoDesiredVelocityEngineMinVelocitybGearUpbSpeedFilterWarmupbTargetClosestToCrosshairbRocketLoaded ClientState TopGunCount WeaponFire myDeltaTimeWeapon FireMode SpeedFilterNextSpeedFilterSlotSmoothedSpeedRatio xEmitter XEffectsNextShieldTime CrosshairPosThirdPersonActorRocketLoadedSoundSkill BestTarget NewSpeed ScriptText DefaultFOV DesiredFOV bBehindView StrPropertyprojEnemyFocusnextController bAltFirebFireMuzzleSpawnOffsetAS_Weapons_SMTurretAS_Weapons_TX ProjectilesSkaarj_Energy LinkBaseIonBase IonSwivelIonCannonStatic IonCanon LinkTurretLinkTurret_Skin2_CLinkTurret_Skin1_CASTurret_Canon ASIonCannon1 ASIonCannon2LinkTurret_skin1LinkTurret_skin2 FovAngleA VictemHealthfPulse MetersStringNoTargetString HitEffects myfPulseStructProperty FlashScaleBScrPosGetTargetOrientation ExpandTargetOrientationToCanvasLaserCArrayPropertyCoords FX_ImpactAS_Vehicles_SMSpaceFighter_HumanSpaceFighter_SkaarjSpaceFighter_Human_FPSpaceFighter_Skaarj_FPAS_Vehicles_TX SpaceFighterSpaceFighter_Skaarj1SpaceFighter_Skaarj2SpaceFighter_Human1_TexSpaceFighter_Human2_Tex bWaterVolumeTurretRotation UpdateFreq mHitLocation ProjOffsetClassPropertySpawnHitCountnewRotOriginTurretsHuds TurretHud2AssaultSounds HumanShip HnShipFire01 IonPowerUp HnShipFire02HnSpaceShipEng01 SkaarjShip SkShipEng01TrailEmitter0SpriteEmitter15 NamePropertyObjectPropertyFloatProperty BoolProperty IntPropertyScale averageOverSizeYSizeXGDriver FiringModeR DeltaRotX1 HitActorY1 ViewActorX2Y2Shield AirSpeed FlashCountbCanFlymyHUD DrawColor LocationMode Rotation VelocityControllerListNetMode bDropDetail TimeSecondsStartLocationL instigatedBy ViewTargetKilledKiller BestDist Orientation StartTimeTeam PlayerNameChild TeamIndex ReturnValueTeamNumVPNXLYLdist damageScaleVictims DamageAmountAlpha SkTurretFPASTurret_MotherShip2 LinkBody LinkSwivelLinkTurret_FPVehicleInfoString ReloadTime SpeedPctTargetScreenPos VehicleSpeedE1E2fSide ChargeCount ReleaseCountOldChargeCountOldReleaseCount CannonPawn LastFXUpdate LaserBeam BeamSize ChargeBeamChargeBeamSizePlasma bIsPlasmabSetupFXClass HomingTargetbFiredbDoNotReleaseSpriteEmitter22SpriteEmitter19SpriteEmitter20 BeamEmitter7 BeamEmitter2 ByteProperty NormalizetDirStartiAmount Momentum HitLocationE HitNormal friction NewValueSetBoneRotation Attachment AttachToBoneGetBoneCoords SetAnimFrameRateSetRelativeLocationSetRelativeRotation SetDrawScaleTarget ObjectPoolOtherbRepClientDemoAS_VehiclesFull_M OldEnergybDemoRecording bNetOwnerLastEnergyUse ShieldPivot bNetInitialWorldToScreen OldHealth EnergyUsedCameraLocation TeamShieldCameraRotation TexScaleErr EndLocationIonCannonOwnerDelta bProjTarget DeltaTimePCdt bHurtEntry OldDesired PrevRotation InstigatorInstigatorSpeedOwner bNetDirty bDeleteMeHomingCheckCount CogRotationJWAssaultMeshesLinkTurretShieldBaseFramedNumber BeamEffectSpriteEmitter82SpriteEmitter83SpriteEmitter84SpriteEmitter79SpriteEmitter80NoneNoneNoneNoneNoneNoneNoneNoneNoneNoneNoneNoneNoneNoneNoneNoneNoneooo=oooooooooo$ooooooXooooooeoo\oooonoo2oomoo*ou |@C  5Yh i j 3SK<oowof lv<----9:9:$G$v-@"C ""C ~(C ~(C jvC ~(C ~(C jvC jvC jvC jv""3}3}3}LssC C 3}h"" y w:HC`Soou  oooH v oB Y6h"gqCy3}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}3}*}/*}/ҽҽqYԍKi3}qYԍKi3}qYԍKiqYԍKiqYԍKiҽ'ҽҽҽҽډډqYԘ uҽҽҽҽҽҽҽҽҽҽҽ'}L}L}L}L'}Lҽc}L}L''3}hh3}3} - ,l:DCk: A`Hksjt$fff?uZ$NF$3Fov$?h:z:C{:a]$@@s]*)UT2k4AssaultFull.Weapon_Turret_IonCannon{:@gDHCiS\SZSYSWOYHCHCBM:HHJ$Bl:CCI$@DG$EF$h]manning an Ion Cannon}= Ion CannonV$DW"g/%$(?$A3T$@EV$?U$@E@$HCT$CoQg E q -9:9:$G؜QQ)PN@qPN y `$@ooJ oooo`ooooohoB U j$9:9:$--GB Y6o  xgqCy3}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}3}3}3}3}3}3} upphqYԙqYԙqYԘ u u uҽu)u)u)u)ҽ'ҽҽҽҽҽҽҽҽҽҽu)u)u)u)ҽu)u)ҽu)u)ҽ'ҽ'ҽҽҽҽҽҽ uҽҽҽҽҽҽҽ3} - ,T$Dzzuz$@{$ AHgsft$?uZ$E$@Eov$@z:zCC{:HZ$Cxs]$#UT2k4AssaultFull.Weapon_LinkTurret{:\CpAiShSnRyQnh]manning a Link Turret}] Link TurretV$CW"/%$>T$BSooVoook ooooooboo oPoOox d A@*)-܊W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=ҽW=W=W=ҽW=ҽW=ҽW=W= 5Y^ _ ` 3SK<oo1oA _@+ƣ 5YV W X 93SooXoMoboe UM6...VKitMtM3}tMh|\fF|\fF E||\fFؚ|hKi|||||\fF,e||\fF,e||hh*`hh uh utMtMtMSG*` 2 ,?K?NKGSHPQ R:S$BC_: C"wxj: {:L~u~]Turret weapon/%$@?$@oo oojooDoo5ooroo%@oolooaooCo+ooo{ooooaoojooLoooozooDoojooCoo^ooBoo ooooXoo!ooodooHooG j I@7M>܊W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=W=ҽW=ҽW=ҽW=ҽW=ҽW=ҽW=ҽW=ҽW=ҽW=ҽW=ҽW=ҽ 5YP Q R 3SK<oolooloO { X-9:9:$ -G PNʁ)hÛ Û Û Û Û Û Û  M$zCe$zCc"&'`[^I Bs: BpApA]:ZY$wSoooooNoo~oo8o_of ootouoo6oogooQoogooqoooYo9n M h-9:9:$G#_x(=\ȵ܇3} u uʁ)3}ʁ)ʁ)}L}L3}h܊W=܊W=ҽ܊W=ҽ܌hhbQ }L HAX$>\$L7=L$@Fa$CK$Db$PCGB}n&'\[$@$ _T$B@:LP~:L0uRQ$BP$@oooo4oX O UbpaލKiqYԙqYԙqYԙqYԙqYԙqYԙqY؜qYԌh؜؜PNqYԌh؜؜PN K$L>J$@@`MOXd] TranslocatorModuleRegenerationW$?Fq~"M$?oofooPoooo@ov l !gʁ)3},e u uʁ) uʁ),e,eIrmhhzVGBTqhzVGBJTqTqTqʁ)ʁ)ʁ)ʁ)ʁ)ʁ)ʁ)ʁ)}L}Lh XH$zD]$@FF$4Ba"b$|HK$DO_qI[:zC|:@Ek$@v: Ao:HCn$ A&BV$?U$DooooooxoooonooZooXooEooqooyooooEooo| H DuP'ʁ)3} &'|^tB[$?%$@AZY$wSKoomooqooooooooooMooEoLo{oopo| |BY6M@DY ɇ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}3}3}3}3}3}3}3}3}3}ҽu)ҽҽҽ'''ҽҽҽҽ uu)ҽ}L}Lҽ'ҽ}Lҽ}Lҽu)u)u)u)ҽ'ҽҽҽҽu)u)u)u)u)u)u)u)ҽ'ҽҽҽҽҽҽҽҽҽҽҽҽu)u)u)u)ҽ'ҽҽҽҽҽҽҽҽҽҽqYԍKi3}qYԍKiu)u)u)u)ҽu)u)ҽu)u)ҽ'ҽ'ҽҽҽҽҽҽ}L}L'}Lҽu)u)ҽu)u)ҽu)u)ҽҽҽҽ}L}L}L}LzVGBҽҽ}L'ҽҽ' uܒܧ jv jv jv jv jv jv jv u u*00 - ,@uJ|D:pzzuxKs]&%UT2k4AssaultFull.Weapon_SpaceFighter{:B`A`xl:pAAh]in a spacefighter}]Human Spacefighter\/%$?$`T$BV$?U$DDoo ooooooHooDUo"oohooF ot A Zn-9:9:$GIrmʁ)+ƣ~(+ƣ~(+ƣ~(Loooo ni-9:9:$G"4Y(#gȵʁ)ʁ)ʁ)hʁ)ʁ)ʁ)ʁ)ʁ)ʁ)ʁ)phʁ)ʁ)ʁ)ʁ)ʁ)}L}Lʁ)ʁ)ʁ)ʁ)ʁ)ʁ)ʁ)phʁ)ʁ)ʁ)ʁ)ʁ)}L}L3}3}3}*`M>M>3}M>M> y$@X$@EL$@Ea$BK$Cb$@EB[{$EIQTd[d^$Ck$@@&\[$@s:H@ ? ?B$@_T$HBRQ$AP$@oo ooJ o#ooooohoooo_oooooooo@oo7oLoe oodooooloooo^oojooPWv(DCp? ף<XW?YpZ Goooooiod gG3 q+&G,e,e}L,e,e ɝ,e ɝ,e ɘ u 4 8@N]0/%o was served an extra helping of %k's lasers.S],+%o fried herself with her own laser blast.U],+%o fried himself with his own laser blast.ooE oooIoootooIoovoo`ooooooooVoa fP3 }G(G,e,e}L,e,e ɝ,e ɝ,e ɘ u 4 8@N]! %o couldn't avoid %k's missile.S]"!%o blasted herself out of space.U]"!%o blasted himself out of space.mooboo\oooopoo~ooLooooooxoorooooooT o#oUos \ z I9:9:$--9:9:$- -G@ Lssܩ~(~(~(~(v-"v-3} 5Yk 3Sg^vVBG$pA<om ^ x" M) ޛȵʁ)ʁ)hʁ)ʁ)ܒ܇3} m)X$EL$PGa$4Bb$@EB`&\[$33?_T$HBRQ$AP$@ooogooojoh O nQQ)@SGhh Ɍhʁ)hhW=3}hh y `$?aED`/oooooBood ooSooT oo^ooooooGooooX oooojoonootoo`ooUoooofooaoooooc FO6hoOqYԌhhh3}3}hh,eh,eh,eh,e ,?H?IA${.?B${.?GSHC_:j:~Q]SpaceFighter weapon&'$@oooo|ooloozoo}oooookoo]oosoo^oooo3ooUooKooGoohoowooioooo}oo~oo{ou{ buP' ZYoooozoo@oo~oouoooohooDooFooH ooKoogooFooooPoN nZOhʁ)i0Bi0Bi0B3}i0B3}Ե3}3}Եi0Bi0Bi0Bi0Bi0B &'^tB%$>s:?̌?̌?]:BZY$wSKooP ooooSooUooooVoooooo/oo ooooZoo]oo`oooo1?w%*%a6w&*&a Go[oooocooyooooooooooHooooohoot ooooV e*5Qao 2wQ*Qa* GoW oovooooroosootoooo^oo@oocoooo} fMK'                                                 G oFooy^pq.1     Go{wxq/                                             GoyooxooX ]n;G,{a  ]F9?,9PF GoGooooAooRooGUobooooVooiooOoooo[ooooLooooaooYooPooZooooo|ooTooooWooooooHooooFoo\ooooooboooooocooz oooofooloopoonooiookooooD XZl6.%$6.%9=,9D06.%9=9D0 Go{ooqoorooooL oP GI| ; bGD(uGDD GooowNm a!b@? GoQ Icft ,I?Ifff?I GoP ym sw*w.*P!y~.:j|a C P9PjP9:n9:n}Y(#Sa  9?,9Pw*E%SJSa sw*a/!`S V @Sa*S V? GoPooOooIoSooooooFoN oogooAoobooCoo@ooOoooYooHooooLooooIooMooPoTo\ ooQooRooVooooooYoooo[ooooookoo]oouoo#ooy ooYoosoofooooooooioo\_go_ooloomoooooopooqoorootoojooNoi Y lu/0]tM3}SGhSSSS逐*`SSSS逌h x x 2y m/SoohoMj b y"w2iM) )- oo\op ciBy  x 4 ,ow }@z4R 5Ya b c d e f g 93S$<oooy C@|ڮ7 5Y[ \ ] 93SK<ooooyo@oo~ o} i G@AGp܇3}6 5YY Z 3SK<ooDo@ Ta#CRKHȵʁ)ʁ)3}hh*F)-h)-*F܌hh Nm)C$@GX$?L$$tHb$zDBn&B\[$?_T$HBRQ$AP$@ooB oJ f LBED*k SGSGh xSG 2 A$AoooQ k _Gvo6qYgghSGSGqYv-qYv-3}3}qYv-qYv- 2 ZgOW$@FFHNS$@W$@FM$p}?oY T W HM6hhqYԙqYԙqYԌhhSGSGqY}, 2 k}jw\\Oq\"j"(W$Gkoio{$ff>V$Xd]TranslocatorFireW$L>F[: B|:Dk$@v:?o:n$@M$p}?M$L>]$HDoZ g VIkL<h_x(=\h,e Ɍh,eh,eh|h,e}LhhqYԚ}Lh_x(=\}Lhhh  2 ^:FLHPSV$Xd]RocketLauncherFireW$@Fk$@v:o:zn$@h_M$?M$fff?ooo[ T Y K_ <......qYY(#g..Y(#ghSGSG 2 TS] BLinkedFirekoioXd]TranslocatorFireW$33>F[: B|:Dk$@v:?o:n$@M$p}?M$=ooOooo] { \NՕ*`Vʁ)SGSGV 2 y$ @ZEO]a"W$@EUyF~"oo_ o^ E VPf<qYԙqYԙqYԙqYԌhȵhhSGhhhSGqYԙqY}, 2 swsMk}jw^:HC`A`koio{$ff>V$Xd]TranslocatorFireW$>F[: B|:Dk$@v:?o:n$@M$p}?M$=ooo}` U3Rو}G( 4 8WooUoqc I3Thq+& 4 8WooVoof ooXooYooZooJoe iD3[usG 4 8 N]0/%o was served an extra helping of %k's plasma.S]-,%o fried herself with her own plasma blast.U]-,%o fried himself with his own plasma blast.oX:/Dpq$?oooi kC3]0M~G 4 8 N]'&%o was carved up by %k's green shaft.S]%o shafted herself.U]%o shafted himself.ooSSUpq$?oow ov B3_-G 4 8N]%o was OBLITERATED by %kS]%o was OBLITERATEDU]%o was OBLITERATEDPSooV$pq$?[$@oy @3`LjJG 4 8pN]0/%o was served an extra helping of %k's plasma.S]-,%o fried herself with her own plasma blast.U]-,%o fried himself with his own plasma blast.mooiooaooooeooAo@ l gf<g{" - &/%$>@$BT$BoA ige *}/ - '%$>ooooIoC mj ԰g{" - '%$(?$oE nktM*}/ - '%$(?$oomooJoo`oL }o4G*}/ - $oM N |B Y6Hp\*ګgqCy3}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)u)u)ҽ'ҽҽҽҽҽҽҽҽҽҽqYԓu)u)u)u)ҽu)u)ҽu)u)ҽ'ҽ'ҽҽҽҽҽҽ - ,Hoxs] UT2k4AssaultFull.Weapon_TurrethSTn/oN y2q:G\" @"2B"2ooooyoosoovt|='&- }%%(a99 O t#AsaaOpy%F%9?y'( Goxr_5.b& Or GoOooSx.).b& OS_S GoHoou{~PY' Gooo}A+%A&A Gooo|zFEz&F.jFFF.FF.$z Go}bJ7wI*I- |Hm%O}&,}OO9DJla,H99 }Oi?F&9?O,xO, Gooo~w$b_w*w.*.. GoACG+$ GoooBE~0 ' GoooH@^H  ? GoooIG~C' Gomw_1#_a   eY;"; yaawa= ;6q9Dmy89?6w9?6;6q9Dmy89?6w9?6;6q9Dmy89?6w9?6;;qa+q Gopoo&B;Cw*B  99NBzDB99'7B #<ea=( GoooKQ% ll GoM1*h w&*&a GoNze5'$9:9:$Ya/!ja/!cza-i'dzb&az $w&*&a*-i.&V?@.)& V?$E%-i.)&J$.&J Go;LG r*$Ew.*$j9:%$9:%$ff&?$$ GoOR0Ya GoSooooQ|N_pnw*r| -r| k|a/!I|-0M GoWQmcZ ow&*&- w*V%.I$l.I$9:9:$ w*.=Q G oYooXVG@ .'r *$w. *6. k EO    &]3r * b ${[r    $r *$Y   Y.&$$ GoYw-_w*w.*..w*9:.9:$.I$ Go^Ja%DJAw*w.*. Go,1~ w,*,a GoZT; T99S9:9:$,a M 9?,2Tkw,*,a*99 Gooo[QQ0h/%Q/, ^w,*,p?Q,r9?^/$( Goa\` 9. ! Go]iA|!9:9:$Qy9:9:$+-9:9:$-($ Go_B0R0]9:9:$.??9?/?9?/>BY(/%{a  B~9?,9P~{v{a  B~9?,9P~{ra a GoM=@(w&*.& =MM E$,  [$,  q$,  $,  %  GoEK r. * E.  66 66E6@ GobQGo`v.p f - -'/a8 me@?w w9:9:$a/!P eL?L=?Lm a/!T=XVZ-r*r* Flr*m]9D=v ի?ի=QZ?w.*.%.$dvmZQe10[w* w9:9:$a/!P* eL?L=?LmZ-r*r* Fm]9D=v ի?ի=QZ[w.*.%.$dvmZQe-( Go~GccG.#rG* r%`r,rGr~r* Go?Cwz* w?zw.z*.z-tr.?* .?.?,w.?*.?%.? L % G oBCwC* wBCw.C*.C-tr.B* .B.B,w.B*.B%.B L % G ooovi%v  G ooosi%s  G omf r9: *9: a w9: *9: !z9:&9: Yw9: *\6 0!z6 0!r6.%9: \6.%9: \6.,9:  \66.%9: pAE?66.%9: HBE?66.&9: BE?66.&9: BE?66.,9: BE?66.,9: BE? GooUN f$f$ GodANarA "rA Aa/!IA-9:9:$h?9?/Aa/!ThXr*r*A FA*]9Dhj0j Gopkx 1k !:lm GoqAE AxAp]9PpA}a L A] GornQ qr*Z <r}*9:9:$EUmn ף<-9:9:$n ף<an( GotZqYa( w}*}a;w% *% aVw& *& a GoXoouXiC6EXma #<( GovY`<9w* 9:%Z+?!b GowmY7#w*mZ GoxuR#w*uX GoyqI52w* w.Z Goz{@)q&w* 9:%Y G o{a/Qq*9:V9:ddVuN9:T9:ffTm G oC 1)0Z Goc1L,9:9:$ w#*#JCw*a Go|;'h52--c'? Go}i2~X99rw* XXa# Ba>( Go~QC{"rXq!M GorL(9:9:$ r* a` Or* E%% 6%& $$@$@6&& $$@$@a* Go@ H M GowAf]w#* w#Q8>Hw]HhHhk#kG#  Gk9?%XGG^XXG9?,G^^<SS9:9:$ w#*#J#*a+9PDw99 GoVi#q G oooxG D %8 GoB Ja 0J GoK KC!(%w'*'CK-L GoF I g_ *.b? GoooA ZNVSwZ(Za/!IZ-0G#? GoL [u'*['a P[ Go_'1 w'*'a_ GoJ R02a   @6w*x*Y(a  Ro9?,9PoEMwE**E 9?a  R9Pow*9:9:$a 9PogRo@a Goeoox@!(6w*w.*t.  ea` e6t@a6t`6t GoQ DeM @!BrD*Daj @ wD*D VhDa*E%DJ%Do,B GoR {/-l9<9?,9?&9:9:$ w* 9:%9:%s-le%?e&w* 9:% 9:%-l+?!_+?!b G o_pK&+qpr GoooQ;<9999:9:$e GoT i9?, GoU 1"< wQ*Qa GoS oomd02Y-Y(ndca a GoZ ~{,@ r* 9:9:$ 9:%9:%r*x. !a  x w*-'a*w*%%%, 9?&&%:%I$BI$=Y*6~ ~+?!b G o[ aM9:9:B w*.  =BAr%I$zI$A GoB=-*w*.  = Go] EB:bJ[6.%b6.%bzE9?&TTE@66.%T B66.%T B Go_ A2VSwZ*+9:9:$Z@Zx[J GoRN@w* rR /rR Ra/!IR-9:9:$r*r*R FR*]9DN0N Go` -ZZ. Goc ZA `FAC9:9:$BZa [a+9PJ[ Gome m.)QJ Goa Xnv-XW*w{*{J Go[; Goh V6% pC66%C66% C6& zC6& @6&6&66&A66&4B6, C6,  66, A66,66,66, @66,66,66,@66,66,66,66,66,66, Gog%r*r.* aw*@.  p. !a  Goe g f uWw*Q. !.:PYa+9PPQha+9P99 GoQooJ 6%% 9=,$@$6&%6%%6%& 9=,$$`6&& 9=,$@$06%, $$@$@6&,6%, Go]:19:9:$.%,d Gom :p,l66%B:66%B:6&?:6&6&66&@A:66&A:66,?:66,66,66,@@:66,66,66,66,66,66, Go; 0!oa((a'' G ok MLJ36L6M!tLM Gon r F6%% $$$@6&% $$$@6%& $$$@6&& $`$$ 6%, $`$$06&, $`$$0 Goo v)6%% $`$$@6&% $`$$@6%& $$$`6&& $@$$06%, $@$$06&, $@$$0 Go; v Go|q wS                                               | Go{r ^J E      { Goys f%y                                                     G otv ^I } b^\' GoK1w"*"a Got _R r"*"a w*b""a #A@A"a+",Y("a A"a+",KK9?_,zC%&aL>( Govy Na!b= Gou Q8%% Gow aC=:[HB9?a,zC7-bHR,2 Gow| `c`fff? Gocoox aGBFFH??HFR,2FH Goep aces9:9:$ r*2wMč?c Go [eC>&[ q[[[ $@$$@[$ q[gf?' Go0>;!9:9:$ >. d >%>-'>-'6>9=,6>9=,%>X-j' GoB Nf5 $(p  lkip  Npq6s6rN?N6p?tN?N6p?./qsrtN $@$$@ Go~ 1):1-j c%%* Go@ f^4}Y -j &f #<-' -(6.%9C9?,f GoF g"!7r*&- po lipoeifpo GoA JDB0C GoC mAIg"9:9:$v!A <- 09?% 09?md09?%X GoWooK |q|V(V-tPCG/a9 WRW `W.V| W tuWtV| W 10wu*pu-(' GonX l6.%9=9D06.%9=,9D06.%$ GoI AT"9:9:$v!A W@9?,9?&W GoWoocooO uf $cC?fB?  p 7 c? f &a cfCB```zD?]??\A?@B?A?  h`6 $` L @?] \? -a @`AA  9=,9=,9=, 7 c? f &acfCB GoM oN oKotJ+`%?$$C%C% p0$&a $CC 9=,9=,9=,0$&a$CC w*n?@$@$?n$TB% A%X9?,9%69?,?% hn6$`n?^--'aw.*a.a?b'b(ab( 9=,9=,9=,?a69C9<$9?,?a -(,X$?6?-a $nAAr*&-4 4X9?,%69?,X%/s9D9?9?,9?&a4$X6?$@$$@$ a4(]w*&-w*6?4X6? a4(6?4p9S9D <9?, X6? a4( GovDJv DugD GoR 66x B9?, <66xHB9?,< GoS {}N59C9<$9?, {9C9<$@9?,{ GoT uk!Ou9?9D999DuV-]^],O%O]UOOeU9?],%-(U(UzD((zDzD?4w*c(H-c(}(w.*@.-s.((9?, GoO r* % 9:,a  99w*~9:&.da* GoV w!                                       GoW ^[ E       GoX f                                           G oY kR-9:&O$#OYk'uu=za9:O_ kl9?, 9Pl GoZ }rd2k9?} Go[ s]E9?%SBAc@# @@S9?,2g@gS9?%U9D9?s+?&s9D9?s>&bs%sE@DCBb U%rUB9:9:$R@@ Go] NDbNMIHY_w.*."tYY  Gocoo^ SgB-cSRQ8w*-(-c Go` Uf2U/w*6  GosZW&H0r[^Z-9:9:$q![ Goc WU'C@w*6 6 W GoAoo_ C.3 - -'/a8 ~yw w9:9:$a/!PI yv?IIIvw?v~m]9DwC ի?IիwcIbw*w.*.%.-dC~bcy10-( God a pi.wi*@i-z?iiA ï9?&z!A Goe JX*  $*C?1C?  p 0 * 1 &a *1CC  9=,9=,9=, 0 * 1 &a*1CCD*TB?1 A?H 9?,9?F 9?,??  hD6 $`D?w.*h. h? b'b( hb( 9=,9=,9=,?h6 9C9<$9?,?h ,H*?F1? -a *D1AA Goh CJI^-C9=,CC 9=,9=,9=,C<a 9?C9?CD@DC^ Gooof ook g IEl Goooi ooo j +B a!y? Gob p [z ! r9*9a  ^w*w*w*99=9 a!HC9H@asa?t.9?K!>VH3a?a .9?K!>VH3aL>.9?K!33>VH3aL>.9?K!ff&?VH3aL>.9?K!33S?VH3aL>.9?K!?VH3 w9*9aa EoGoaS 0t^3^tHC Gom s@[ Asa{ >ws*sW^r Gor eA3]O9:9:$oe]Oe Gon Jth3 =J:wJ*d.J#wd*wd*wd*P3d #P!@P!R?R!@P!J2tRFOPRTVJJ Gooos q o-1k^ Go\= Pr\ $, b 3$, b I$, b _$, b %  Gooo_oow w]                                   Gox ^E       Goz f                                         G ooo| a0d39:9:$a  aJw*aaw*a GoUdW8Udff59:9:$m Go} -Jp @-bg9?- Dd9?-C@$Y?@$@$?Y?@$@$?=Y9?%@6JgG6JdV6KgT6Kd- hY6-$`-$-@G-Ja VTY9? 9? Y Go@ JA e6r*r@$* .- $6 9=,6 9=,6 9=,6 $@  <a 9? 9? DD   p/a9 r&-E9:C1 l o1$b$ 1   q vpp:9S9D <  q ov?'10 Go{ i#9:9:$m Go~ gm+Zg9PUa+g7a + ea L q!f GoG m3GGD9:9:$a!Z?>*a $ ( @ G o F fR Goa7= CaR( GoB D A>MCR?e$a ?MUM6.%7UM6.%76.%7 GoMooNooC dQI6.%7U6.%76.%7exda z Uf9?, 9Pfd$q!o GoH rE$:|mw.r*Nr m6N6NmNr GoK uv969:9:$a!y ף=>g G oooI ooJJ +859:9:$a!y?*a  GoxD!9-x9<.9?,9?& GoL FO+r*a/!e Fw.W* Tb?F. !.:xhi9PxFYFi GoO waL                         GoP ^XL 1     GoQ f@&                            G oJD $2C?5C? p025&a 25CC 9=,9=,9=,025&a25CCw*lX&?l?2TB?5 A?n9?,9?o9?,?? hl6$`l?'w.*k.2k?b'b(kb( 9=,9=,9=,?k69C9<$9?,?k,n2?o5?-a 2l5AA GoM +/|mw*A-xa[[mm-xa``A GoR A>J:a/!ca/!j%ZG&Z GoS U PF' GoooY//============================================================================= // Weapon_Turret_IonCannon //============================================================================= class Weapon_Turret_IonCannon extends Weapon config(user) HideDropDown CacheExempt; #exec OBJ LOAD FILE=..\Animations\AS_VehiclesFull_M.ukx simulated function bool IsFiring() // called by pawn animation, mostly { return ( FireMode[0].IsFiring() || FireMode[1].IsFiring() ); } simulated function ClientStartFire(int mode) { local PlayerController PC; if ( mode == 1 ) { PC = PlayerController(Instigator.Controller); if ( PC.DesiredFOV == PC.DefaultFOV ) PC.DesiredFOV = ASTurret(Instigator).MinPlayerFOV; else PC.DesiredFOV = PC.DefaultFOV; PlayerController(Instigator.Controller).bAltFire = 0; } else super.ClientStartFire( mode ); } simulated function PawnUnpossessed() { if ( (Instigator != None) && (PlayerController(Instigator.Controller) != None) ) PlayerController(Instigator.Controller).DesiredFOV = PlayerController(Instigator.Controller).DefaultFOV; } /* BestMode() choose between regular or alt-fire */ function byte BestMode() { return 0; } simulated function bool HasAmmo() { return true; } //============================================================================= // defaultproperties //============================================================================= V Df6W PP֙qYԌhh uh uh u u ugqCy u uh uKiKi ,?G?A${.?B${.?GSHC_: C"j: ~]Ion Cannon Turret weapon&ooooiEX .u.V GoY D9_-(.m.T -\' GoZ u. D-\( Go[ ] A7-  Gooo\ WO@ r* b?W. !n.:^j_9P^WYW_ Gog$//============================================================================= // Weapon_Turret //============================================================================= class Weapon_Turret extends Weapon config(user) HideDropDown CacheExempt; #exec OBJ LOAD FILE=..\Animations\AS_VehiclesFull_M.ukx replication { reliable if ( Role == ROLE_Authority ) ClientTakeHit; } function AdjustPlayerDamage( out int Damage, Pawn InstigatedBy, Vector HitLocation, out Vector Momentum, class DamageType) { local int Drain; local vector Reflect; local vector HitNormal; local float DamageMax; DamageMax = Instigator.HealthMax; if ( DamageType != None && !DamageType.default.bArmorStops ) return; if ( CheckReflect(HitLocation, HitNormal, 0) ) { Drain = Min( AmmoAmount(1)*2, Damage ); Drain = Min(Drain,DamageMax); Reflect = MirrorVectorByNormal( Normal(Location - HitLocation), Vector(Instigator.Rotation) ); Damage -= Drain; Momentum *= 1.25; ConsumeAmmo( 1, Drain/2 ); DoReflectEffect( Drain/2 ); } } function DoReflectEffect(int Drain) { //PlaySound(ShieldHitSound, SLOT_None); FM_Turret_AltFire_Shield(FireMode[1]).TakeHit( Drain ); ClientTakeHit( Drain ); } simulated function ClientTakeHit(int Drain) { //ClientPlayForceFeedback( ShieldHitForce ); FM_Turret_AltFire_Shield(FireMode[1]).TakeHit( Drain ); } function bool CheckReflect( Vector HitLocation, out Vector RefNormal, int AmmoDrain ) { local Vector HitDir; local Vector FaceDir; if ( !FireMode[1].bIsFiring || AmmoAmount(0) == 0 ) return false; FaceDir = Vector(Instigator.Controller.Rotation); HitDir = Normal(Instigator.Location - HitLocation + Vect(0,0,8)); RefNormal = FaceDir; if ( FaceDir dot HitDir < -0.37 ) // 68 degree protection arc { if ( AmmoDrain > 0 ) ConsumeAmmo( 0, AmmoDrain ); return true; } return false; } simulated function bool HasAmmo() { return true; } //============================================================================= // defaultproperties //============================================================================= _ ze X9:9:$G6 ` i񳗙qYԍKih,ehbpabpaތhph ,?P?bA${.?B${.?GSHC_: C"j: ~]Turret weapon/%$@@$@oom//============================================================================= // Weapon_SpaceFighter_Skaarj //============================================================================= class Weapon_SpaceFighter_Skaarj extends Weapon_SpaceFighter config(user) HideDropDown CacheExempt; #exec OBJ LOAD FILE=..\StaticMeshes\AS_Vehicles_SM.usx //============================================================================= // defaultproperties //============================================================================= ha d6b  hoO ,_:HBj:HB'ook#//============================================================================= // Weapon_SpaceFighter //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class Weapon_SpaceFighter extends Weapon config(user) HideDropDown CacheExempt; #exec OBJ LOAD FILE=..\StaticMeshes\AS_Vehicles_SM.usx var Rotator PrevRotation; var float LastTimeSeconds; /* BestMode() choose between regular or alt-fire */ function byte BestMode() { if ( Instigator.Controller.Enemy == None ) return 0; if ( GameObjective(Instigator.Controller.Focus) != None ) return 0; if ( Instigator.Controller.bFire != 0 ) return 0; else if ( Instigator.Controller.bAltFire != 0 ) return 1; if ( FRand() < 0.65 ) return 1; return 0; } simulated final function float CalcInertia(float DeltaTime, float FrictionFactor, float OldValue, float NewValue) { local float Friction; Friction = 1.f - FClamp( (0.02*FrictionFactor) ** DeltaTime, 0.f, 1.f); return OldValue*Friction + NewValue; } simulated function PreDrawFPWeapon() { local Rotator DeltaRot, NewRot; local float myDeltaTime; PlayerViewOffset = default.PlayerViewOffset; SetLocation( Instigator.Location + Instigator.CalcDrawOffset(Self) ); if ( PrevRotation == rot(0,0,0) ) PrevRotation = Instigator.Rotation; myDeltaTime = Level.TimeSeconds - LastTimeSeconds; LastTimeSeconds = Level.TimeSeconds; DeltaRot = Normalize(Instigator.Rotation - PrevRotation); NewRot.Yaw = CalcInertia(myDeltaTime, 0.0001, DeltaRot.Yaw, PrevRotation.Yaw); NewRot.Pitch = CalcInertia(myDeltaTime, 0.0001, DeltaRot.Pitch, PrevRotation.Pitch); NewRot.Roll = CalcInertia(myDeltaTime, 0.0001, DeltaRot.Roll, PrevRotation.Roll); PrevRotation = NewRot; SetRotation( NewRot ); } simulated function bool HasAmmo() { return true; } function float SuggestAttackStyle() { return 1.0; } //============================================================================= // defaultproperties //============================================================================= o^ oYQ[ZNai op>t%N*NWqr Gor6//============================================================================= // Weapon_LinkTurret //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class Weapon_LinkTurret extends LinkGun config(user) HideDropDown CacheExempt; #exec OBJ LOAD FILE=..\Animations\AS_VehiclesFull_M.ukx simulated function UpdateLinkColor( LinkAttachment.ELinkColor Color ) { if ( FireMode[1] != None ) LinkFire(FireMode[1]).UpdateLinkColor( Color ); switch ( Color ) { case LC_Gold : Skins[2] = material'PowerPulseShaderYellow'; break; case LC_Green : Skins[2] = material'PowerPulseShader'; break; case LC_Red : Skins[2] = material'PowerPulseShaderRed'; break; case LC_Blue : Skins[2] = material'PowerPulseShaderBlue'; break; } Skins[0] = Combiner'AS_Weapons_TX.LinkTurret.LinkTurret_Skin1_C'; } simulated function vector GetEffectStart() { return ASVehicle(Instigator).GetFireStart(); } simulated function IncrementFlashCount(int mode) { super(Weapon).IncrementFlashCount( mode ); if ( ThirdPersonActor != None && LinkAttachment(ThirdPersonActor) != None ) LinkAttachment(ThirdPersonActor).Links = Links; } simulated function PawnUnpossessed() { if ( Instigator != None && PlayerController(Instigator.Controller) != None ) PlayerController(Instigator.Controller).DesiredFOV = PlayerController(Instigator.Controller).DefaultFOV; // If was linking to somebody, unlink... if ( ThirdPersonActor != None && LinkAttachment(ThirdPersonActor).LinkColor != LC_Gold ) LinkAttachment(ThirdPersonActor).SetLinkColor( LC_Green ); super.PawnUnpossessed(); } /* BestMode() choose between regular or alt-fire */ function byte BestMode() { local float EnemyDist; local bot B; //local Controller C; B = Bot(Instigator.Controller); if ( B == None ) { return 0; /* C = Instigator.Controller; if ( C.Enemy == None || C.Enemy.IsA('Vehicle') || VSize(C.Enemy.Location - C.Pawn.Location) > LinkFire(FireMode[1]).TraceRange ) return 0; return 1; */ } if ( DestroyableObjective(B.Squad.SquadObjective) != None && DestroyableObjective(B.Squad.SquadObjective).TeamLink(B.GetTeamNum()) && VSize(B.Squad.SquadObjective.Location - B.Pawn.Location) < FireMode[1].MaxRange() && (B.Enemy == None || !B.CanSee(B.Enemy)) ) return 1; if ( FocusOnLeader(B.Focus == B.Squad.SquadLeader.Pawn) ) { B.Focus = B.Squad.SquadLeader.Pawn; return 1; } if ( B.Enemy == None ) return 0; EnemyDist = VSize(B.Enemy.Location - Instigator.Location); if ( EnemyDist > LinkFire(FireMode[1]).TraceRange ) return 0; return 1; } simulated event WeaponTick(float dt) { if ( (FireMode[1] != None) && !FireMode[1].bIsFiring && (ThirdPersonActor != None) ) { if ( Links > 0 ) LinkAttachment(ThirdPersonActor).SetLinkColor( LC_Gold ); else LinkAttachment(ThirdPersonActor).SetLinkColor( LC_Green ); } else if ( Level.NetMode != NM_DedicatedServer && ThirdPersonActor != None ) LinkAttachment(ThirdPersonActor).UpdateLinkColor(); super.WeaponTick( dt ); } //============================================================================= // defaultproperties //============================================================================= o\O//============================================================================= // WA_Turret_IonCannon //============================================================================= // Created by Laurent Delayen (C) 2003 Epic Games //============================================================================= class WA_Turret_IonCannon extends xWeaponAttachment; var byte ChargeCount, ReleaseCount; var byte OldChargeCount, OldReleaseCount; var ASTurret_IonCannon CannonPawn; // FX var float LastFXUpdate; var FX_Turret_IonCannon_LaserBeam LaserBeam; var float BeamSize; var FX_Turret_IonCannon_ChargeBeam ChargeBeam[2]; var float ChargeBeamSize; var vector RightChargeBeamOffset; replication { // Things the server should send to the client. reliable if( bNetDirty && (!bNetOwner || bDemoRecording || bRepClientDemo) && (Role==ROLE_Authority) ) ChargeCount, ReleaseCount; } simulated event PostNetBeginPlay() { super.PostNetBeginPlay(); UpdateInstigator(); } simulated function Destroyed() { StopChargeFX(); super.Destroyed(); } simulated event PostNetReceive() { UpdateInstigator(); if ( ChargeCount != OldChargeCount ) { OldChargeCount = ChargeCount; PlayCharge(); } if ( ReleaseCount != OldReleaseCount ) { OldReleaseCount = ReleaseCount; PlayRelease(); } } simulated event ThirdPersonEffects() { UpdateInstigator(); if ( CannonPawn != None && FlashCount > 0 ) PlayFire(); } simulated function UpdateInstigator() { if ( Instigator != None && CannonPawn != Instigator ) { CannonPawn = ASTurret_IonCannon(Instigator); StopChargeFX(); } } simulated function PlayCharge() { if ( CannonPawn != None ) CannonPawn.PlayCharge(); StartChargeFX(); } simulated function PlayRelease() { if ( CannonPawn != None ) CannonPawn.PlayRelease(); StopChargeFX(); } simulated function PlayFire() { if ( Instigator != None && FiringMode == 0 ) { StopChargeFX(); Instigator.PlayFiring(1.0, '0'); } } simulated function StartChargeFX() { BeamSize = 0.f; ChargeBeamSize = 0.f; LastFXUpdate = Level.TimeSeconds; SetTimer( 0.01f, false ); } simulated function StopChargeFX() { SetTimer( 0.f, false ); if ( LaserBeam != None ) LaserBeam.Destroy(); if ( ChargeBeam[0] != None ) ChargeBeam[0].Destroy(); if ( ChargeBeam[1] != None ) ChargeBeam[1].Destroy(); } simulated function Timer() { local float UpdateFreq; UpdateInstigator(); if ( CannonPawn == None ) { StopChargeFX(); return; } if ( LaserBeam == None && Role == Role_Authority ) SpawnLaserBeam(); UpdateChargeBeam(); LastFXUpdate = Level.TimeSeconds; UpdateFreq = 0.02; if ( Level.bDropDetail || Level.DetailMode == DM_Low ) UpdateFreq += 0.02; SetTimer( UpdateFreq, false ); } simulated function SpawnLaserBeam() { local vector Start, HL; local rotator Rot; UpdateLaserBeamLocation( Start, HL ); Rot = Rotator( HL - Start ); LaserBeam = Spawn(class'UT2k4AssaultFull.FX_Turret_IonCannon_LaserBeam', Self,, Start, Rot); } simulated function UpdateLaserBeamLocation( out vector Start, out vector HitLocation ) { local vector HN; Start = CannonPawn.GetFireStart(); CannonPawn.CalcWeaponFire( HitLocation, HN ); } simulated function UpdateChargeBeam() { UpdateSingleChargeBeam( 0 ); UpdateSingleChargeBeam( 1 ); } simulated function UpdateSingleChargeBeam( byte n ) { local float Dist; if ( ChargeBeam[n] == None ) { //log("WA_Turret_IonCannon::UpdateChargeBeam Spawning ChargeBeam"); ChargeBeam[n] = Spawn(class'UT2k4AssaultFull.FX_Turret_IonCannon_ChargeBeam'); if ( ChargeBeam[n] != None ) { CannonPawn.AttachToBone( ChargeBeam[n], 'BeamFront' ); if ( n == 1 ) ChargeBeam[n].SetRelativeLocation( RightChargeBeamOffset ); } } if ( ChargeBeam[n] != None ) { // Correct Length Dist = VSize( CannonPawn.GetBoneCoords( 'BeamFront' ).Origin - CannonPawn.GetBoneCoords( 'BeamRear' ).Origin ); BeamEmitter(ChargeBeam[n].Emitters[0]).BeamDistanceRange.Min = Dist; BeamEmitter(ChargeBeam[n].Emitters[0]).BeamDistanceRange.Max = Dist; SpriteEmitter(ChargeBeam[n].Emitters[2]).StartLocationOffset.X = Dist; // Size Scale BeamEmitter(ChargeBeam[n].Emitters[0]).StartSizeRange.X.Min = 15.0 * BeamSize * 0.5; BeamEmitter(ChargeBeam[n].Emitters[0]).StartSizeRange.X.Max = 50.0 * BeamSize * 0.5; SpriteEmitter(ChargeBeam[n].Emitters[1]).StartSizeRange.X.Min = 75.0 * BeamSize * 0.5; SpriteEmitter(ChargeBeam[n].Emitters[1]).StartSizeRange.X.Max = 100.0 * BeamSize * 0.5; SpriteEmitter(ChargeBeam[n].Emitters[2]).StartSizeRange.X.Min = 75.0 * BeamSize * 0.5; SpriteEmitter(ChargeBeam[n].Emitters[2]).StartSizeRange.X.Max = 100.0 * BeamSize * 0.5; } } //============================================================================= // defaultproperties //============================================================================= oz//============================================================================= // WA_Turret //============================================================================= class WA_Turret extends WA_SpaceFighter; var FX_BallTurret_Shield ShieldEffect3rd; replication { reliable if ( bNetInitial && Role == ROLE_Authority ) ShieldEffect3rd; } simulated function Destroyed() { if ( ShieldEffect3rd != None ) ShieldEffect3rd.Destroy(); super.Destroyed(); } function InitFor(Inventory I) { super.InitFor(I); ShieldEffect3rd = Spawn(class'FX_BallTurret_Shield', I.Instigator); } function SetBrightness(int b, bool hit) { if ( ShieldEffect3rd != None ) ShieldEffect3rd.SetBrightness(b, hit); } simulated function PlayFireFX( float fSide ); //============================================================================= // defaultproperties //============================================================================= oG@//============================================================================= // WA_SpaceFighter //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class WA_SpaceFighter extends xWeaponAttachment; var FX_SpaceFighter_3rdpMuzzle MuzFlash[2]; var float MuzzleScale; var bool bSwitch; var class MuzzleFlashClass; var byte OldSpawnHitCount; var vector mOldHitLocation; var float LastFireTime; simulated function Destroyed() { if ( MuzFlash[0] != None ) MuzFlash[0].Destroy(); if ( MuzFlash[1] != None ) MuzFlash[1].Destroy(); super.Destroyed(); } /* UpdateHit - used to update properties so hit effect can be spawn client side */ function UpdateHit(Actor HitActor, vector HitLocation, vector HitNormal) { SpawnHitCount++; mHitLocation = HitLocation; mHitActor = HitActor; mHitNormal = HitNormal; } simulated event ThirdPersonEffects() { bSwitch = ( (FlashCount % 2) == 1 ); if ( Level.NetMode != NM_DedicatedServer && Instigator != None && FlashCount > 0 ) { if ( FiringMode == 0 ) { if ( bSwitch ) MuzzleFlashEffect( 0, 1 ); // Right Muzzle else MuzzleFlashEffect( 1,-1 ); // Left Muzzle } // have pawn play firing anim if ( Instigator != None && FiringMode == 0 && FlashCount > 0 ) { if ( bSwitch ) Instigator.PlayFiring(1.0, '1'); else Instigator.PlayFiring(1.0, '0'); } } super.ThirdPersonEffects(); } simulated function MuzzleFlashEffect( int number, float fSide ) { local vector Start; Start = GetFireStart( fSide ); if ( MuzFlash[number] == None ) { // Spawn Team colored Muzzle Flash effect MuzFlash[number] = Spawn(MuzzleFlashClass,,, Start, Instigator.Rotation); if ( MuzFlash[number] != None ) { MuzFlash[number].SetScale( MuzzleScale ); MuzFlash[number].SetBase( Instigator ); if ( Instigator.GetTeamNum() == 0 ) // Red color version MuzFlash[number].SetRedColor(); } } else { // Revive dead particles... MuzFlash[number].Emitters[0].SpawnParticle( 3 ); } PlayFireFX( fSide ); } simulated function PlayFireFX( float fSide ) { local vector Start, HL, HN; local FX_PlasmaImpact FX_Impact; local Actor HitActor; if ( Instigator != None && ASVehicle_SpaceFighter(Instigator) != None ) { Start = GetFireStart( fSide ); HitActor = ASVehicle_SpaceFighter(Instigator).CalcWeaponFire( HL, HN ); Spawn(class'UT2k4AssaultFull.FX_SpaceFighter_InstantHitLaser', Instigator, , Start, Rotator(HL - Start) ); } // Impact effect if ( OldSpawnHitCount != SpawnHitCount ) { OldSpawnHitCount = SpawnHitCount; GetHitInfo(); if ( EffectIsRelevant(mHitLocation, false) && mHitNormal != vect(0,0,0) ) { FX_Impact = Spawn(class'FX_PlasmaImpact',,, mHitLocation + mHitNormal * 2, rotator(mHitNormal)); if ( Instigator != None && Instigator.GetTeamNum() == 0 ) FX_Impact.SetRedColor(); FX_Impact.PlaySound(Sound'WeaponSounds.BioRifle.BioRifleGoo2'); if ( mHitActor != None && mHitActor.IsA('Pawn') ) { FX_Impact.SetScale( 2.5 ); FX_Impact.SetBase( mHitActor ); } else FX_Impact.SetScale( 1.5 ); } } } simulated function vector GetFireStart( float fSide ) { local vector X, Y, Z, MuzzleSpawnOffset; if ( Instigator != None && ASVehicle(Instigator) != None ) MuzzleSpawnOffset = ASVehicle(Instigator).VehicleProjSpawnOffset; GetAxes( Instigator.Rotation, X, Y, Z ); return Instigator.Location + X*MuzzleSpawnOffset.X + fSide*Y*MuzzleSpawnOffset.Y + Z*MuzzleSpawnOffset.Z; } //============================================================================= // defaultproperties //============================================================================= o^#//============================================================================= // FX_LinkTurret_BeamEffect //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class WA_LinkTurret extends LinkAttachment; var ELinkColor OldLinkColor; var int OldLinks; simulated function UpdateLinkColor() { super.UpdateLinkColor(); if ( Instigator != None ) ASTurret_LinkTurret(Instigator).UpdateLinkColor( LinkColor ); } simulated function PostNetReceive() { super.PostNetReceive(); if ( LinkColor != OldLinkColor && Instigator != None) { ASTurret_LinkTurret(Instigator).UpdateLinkColor( LinkColor ); OldLinkColor = LinkColor; } else if ( Links != OldLinks ) { if ( Links > 0 ) SetLinkColor( LC_Gold ); else SetLinkColor( LC_Green ); OldLinks = Links; } } simulated event ThirdPersonEffects() { local Rotator R; local vector Start; if ( Instigator == None ) return; if ( Level.NetMode != NM_DedicatedServer && FlashCount > 0 ) { if ( FiringMode == 0 ) { if ( MuzFlash == None ) { Start = ASVehicle(Instigator).GetFireStart(); MuzFlash = Spawn(class'LinkMuzFlashProj3rd',,, Start, Instigator.Rotation ); if ( MuzFlash != None ) { MuzFlash.bHardAttach = true; MuzFlash.SetBase( Instigator ); } } if ( MuzFlash != None ) { MuzFlash.mSizeRange[0] = MuzFlash.default.mSizeRange[0] * (class'LinkFire'.default.LinkScale[Clamp(Links,0,5)]+1); // (1.0 + 0.3*float(Links)); MuzFlash.mSizeRange[1] = MuzFlash.mSizeRange[0]; if ( Links > 0 ) SetLinkColor( LC_Gold ); else SetLinkColor( LC_Green ); UpdateLinkColor(); MuzFlash.Trigger(Self, None); R.Roll = Rand(65536); MuzFlash.SetRelativeRotation( R ); } // have pawn play firing anim Instigator.PlayFiring(1.0, '0'); } } super(xWeaponAttachment).ThirdPersonEffects(); } ob //============================================================================= // PROJ_TurretSkaarjPlasma_Red //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class PROJ_TurretSkaarjPlasma_Red extends PROJ_TurretSkaarjPlasma; simulated function SetupProjectile() { super.SetupProjectile(); FX_SpaceFighter_SkaarjPlasma(FX).SetRedColor(); } simulated function SpawnExplodeFX(vector HitLocation, vector HitNormal) { super.SpawnExplodeFX(HitLocation, HitNormal); if ( FX_Impact != None ) FX_Impact.SetRedColor(); } od l PXP' Goood"//============================================================================= // PROJ_TurretSkaarjPlasma //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class PROJ_TurretSkaarjPlasma extends Projectile; var Emitter FX; var class PlasmaClass; var FX_PlasmaImpact FX_Impact; simulated function PostBeginPlay() { super.PostBeginPlay(); Velocity = Speed * Vector(Rotation); if ( Level.NetMode != NM_DedicatedServer ) SetupProjectile(); } simulated function PostNetBeginPlay() { Super.PostNetBeginPlay(); Acceleration = Velocity * 5; } simulated function Destroyed() { if ( FX != None ) FX.Destroy(); super.Destroyed(); } simulated function SetupProjectile() { FX = Spawn(PlasmaClass, Self,, Location, Rotation); if ( FX != None ) FX.SetBase( Self ); } simulated function Explode(vector HitLocation, vector HitNormal) { if ( EffectIsRelevant(Location, false) ) SpawnExplodeFX(HitLocation, HitNormal); PlaySound(Sound'WeaponSounds.BioRifle.BioRifleGoo2'); Destroy(); } simulated function SpawnExplodeFX(vector HitLocation, vector HitNormal) { FX_Impact = Spawn(class'FX_PlasmaImpact',,, HitLocation + HitNormal * 2, rotator(HitNormal)); } simulated function ProcessTouch (Actor Other, vector HitLocation) { if ( Instigator != None && (Other == Instigator) ) return; if (Other == Owner) return; if ( !Other.IsA('Projectile') || Other.bProjTarget ) { if ( Role == ROLE_Authority ) { if ( Instigator == None || Instigator.Controller == None ) Other.SetDelayedDamageInstigatorController( InstigatorController ); Other.TakeDamage(Damage, Instigator, HitLocation, MomentumTransfer * Normal(Velocity), MyDamageType); } Explode(HitLocation, -Normal(Velocity)); } } //============================================================================= // defaultproperties //============================================================================= oOL//============================================================================= // PROJ_SpaceFighter_Rocket //============================================================================= class PROJ_SpaceFighter_Rocket extends Projectile; var bool bHitWater, bWaterStart; var vector Dir; // FX var Emitter TrailEmitter; var class TrailClass; //Homing var Vehicle HomingTarget; var vector InitialDir; var float HomingAggressivity; var float HomingCheckFrequency, HomingCheckCount; replication { reliable if (bNetInitial && Role==ROLE_Authority) HomingTarget; } simulated function Destroyed() { if ( Role == Role_Authority && HomingTarget != None ) HomingTarget.NotifyEnemyLostLock(); if ( TrailEmitter != None ) TrailEmitter.Destroy(); Super.Destroyed(); } simulated function PostBeginPlay() { super.PostBeginPlay(); if ( PhysicsVolume.bWaterVolume ) { bHitWater = true; Velocity = 0.6 * Velocity; } } simulated function PostNetBeginPlay() { super.PostNetBeginPlay(); Dir = Vector(Rotation); // Add Instigator's velocity to projectile if ( Instigator != None ) { Speed = Instigator.Velocity Dot Dir; Velocity = Speed * Dir + (Vect(0,0,-1)>>Instigator.Rotation) * 100.f; } SetTimer(0.33, false); } simulated function Timer() { // Rockets is done falling, now it's flying SpawnTrail(); Velocity = Speed * Dir; GotoState('Flying'); } simulated function SpawnTrail() { if ( Level.NetMode == NM_DedicatedServer || Instigator == None ) return; TrailEmitter = Spawn(TrailClass,,, Location, Rotation); if ( TrailEmitter == None ) return; if ( Instigator.GetTeamNum() == 0 ) // Red Team version { TrailEmitter.Emitters[0].Texture = Texture'AS_FX_TX.Trails.Trail_Red'; TrailEmitter.Emitters[1].ColorScale[0].Color = class'Canvas'.static.MakeColor(200, 64, 64); TrailEmitter.Emitters[1].ColorScale[1].Color = class'Canvas'.static.MakeColor(200, 64, 64); } TrailEmitter.SetBase( Self ); } state Flying { simulated function Tick(float DeltaTime) { local vector ForceDir; local float VelMag; // Homing if ( HomingTarget != None && HomingTarget != Instigator && (default.LifeSpan-LifeSpan) > default.LifeSpan * 0.18 ) { HomingCheckCount += DeltaTime; if ( HomingCheckCount > HomingCheckFrequency ) { HomingCheckCount -= HomingCheckFrequency; if ( InitialDir == vect(0,0,0) ) InitialDir = Normal(Velocity); ForceDir = Normal(HomingTarget.Location - Location); if ( (ForceDir Dot InitialDir ) > 0 ) { VelMag = VSize(Velocity); ForceDir = Normal(ForceDir * HomingAggressivity * VelMag + Velocity); Velocity = VelMag * ForceDir; Acceleration += 5 * ForceDir; HomingAggressivity += HomingAggressivity * 0.03; } else if ( Role == Role_Authority && HomingTarget != None ) { HomingTarget.NotifyEnemyLostLock(); HomingTarget = None; } // Update rocket so it faces in the direction its going. SetRotation( rotator(Velocity) ); } } // Increase Speed progressively Speed += 2000.f * DeltaTime; Acceleration = vector(Rotation) * Speed; } simulated function Landed( vector HitNormal ) { Explode(Location,HitNormal); } function BlowUp(vector HitLocation) { HurtRadius(Damage, DamageRadius, MyDamageType, MomentumTransfer, Location ); MakeNoise(1.0); } } simulated function ProcessTouch (Actor Other, Vector HitLocation) { if ( (Other != instigator) && (!Other.IsA('Projectile') || Other.bProjTarget) ) { //log("PROJ_SpaceFighter_Rocket::ProcessTouch Other:"@Other@"bCollideActors:"@Other.bCollideActors@"bBlockActors:"@Other.bBlockActors); Explode(HitLocation,Vect(0,0,1)); } } simulated function Explode(vector HitLocation, vector HitNormal) { local PlayerController PC; PlaySound(sound'WeaponSounds.BExplosion3',, 2.5*TransientSoundVolume); if ( TrailEmitter != None ) { TrailEmitter.Kill(); TrailEmitter = None; } if ( EffectIsRelevant(Location, false) ) { Spawn(class'NewExplosionA',,, HitLocation + HitNormal*16, rotator(HitNormal)); PC = Level.GetLocalPlayerController(); if ( (PC.ViewTarget != None) && VSize(PC.ViewTarget.Location - Location) < 5000 ) Spawn(class'ExplosionCrap',,, HitLocation, rotator(HitNormal)); if ( (ExplosionDecal != None) && (Level.NetMode != NM_DedicatedServer) ) Spawn(ExplosionDecal,self,,Location, rotator(-HitNormal)); } BlowUp( HitLocation + HitNormal * 2.f ); Destroy(); } //============================================================================= // defaultproperties //============================================================================= oZ//============================================================================= // PROJ_LinkTurret_Plasma //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class PROJ_LinkTurret_Plasma extends Projectile; var FX_LinkTurret_GreenPlasma Plasma; var float VehicleDamageMult; var int Links; replication { unreliable if (bNetInitial && Role == ROLE_Authority) Links; } simulated function Destroyed() { if ( Plasma != None ) Plasma.Destroy(); super.Destroyed(); } simulated function PostBeginPlay() { local vector dir; Dir = Vector(Rotation); super.PostBeginPlay(); if ( Level.NetMode != NM_DedicatedServer ) Plasma = Spawn(class'FX_LinkTurret_GreenPlasma', Self,, Location - 50*Dir, Rotation); if ( Plasma != None ) Plasma.SetBase( Self ); Velocity = Speed * Vector(Rotation); } simulated function LinkAdjust() { local float ls; if ( Links > 0 ) { ls = class'LinkFire'.default.LinkScale[ Min(Links, 5) ]; if ( Plasma != None ) { Plasma.SetSize( 1.f + ls ); Plasma.SetYellowColor(); } MaxSpeed = default.MaxSpeed + 350*Links; LightHue = 40; } } simulated function PostNetBeginPlay() { Acceleration = Velocity; if ( Role < ROLE_Authority ) LinkAdjust(); if ( (Level.NetMode != NM_DedicatedServer) && (Level.bDropDetail || (Level.DetailMode == DM_Low)) ) { bDynamicLight = false; LightType = LT_None; } } simulated function Explode(vector HitLocation, vector HitNormal) { local FX_PlasmaImpact FX_Impact; // Give a little splash if ( Role == Role_Authority ) HurtRadius(Damage * 0.5 * (1.0 + float(Links)),DamageRadius, MyDamageType, MomentumTransfer * (1.0 + float(Links)*0.15) ,HitLocation); if ( EffectIsRelevant(Location, false) ) { if ( Links == 0 ) { FX_Impact = Spawn(class'FX_PlasmaImpact',,, HitLocation + HitNormal * 2, rotator(HitNormal)); FX_Impact.SetGreenColor(); } else { FX_Impact = Spawn(class'FX_PlasmaImpact',,, HitLocation + HitNormal * 2, rotator(HitNormal)); FX_Impact.SetYellowColor(); } } PlaySound(Sound'WeaponSounds.BioRifle.BioRifleGoo2'); Destroy(); } /* HurtRadius() Hurt locally authoritative actors within the radius. */ simulated function HurtRadius( float DamageAmount, float DamageRadius, class DamageType, float Momentum, vector HitLocation ) { local actor Victims; local float damageScale, dist; local vector dir; if( bHurtEntry ) return; bHurtEntry = true; foreach VisibleCollidingActors( class 'Actor', Victims, DamageRadius, HitLocation ) { // don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag if( (Victims != self) && (Hurtwall != Victims) && (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo') ) { dir = Victims.Location - HitLocation; dist = FMax(1,VSize(dir)); dir = dir/dist; damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius); if ( Victims.IsA('Vehicle') ) damageScale *= VehicleDamageMult; if ( DamageType.Default.bDelayedDamage && (Instigator == None || Instigator.Controller == None) ) Victims.SetDelayedDamageInstigatorController(InstigatorController); if ( Victims == LastTouched ) LastTouched = None; Victims.TakeDamage ( damageScale * DamageAmount, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir, (damageScale * Momentum * dir), DamageType ); if (Vehicle(Victims) != None && Vehicle(Victims).Health > 0) Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation); } } if ( (LastTouched != None) && (LastTouched != self) && (LastTouched.Role == ROLE_Authority) && !LastTouched.IsA('FluidSurfaceInfo') ) { Victims = LastTouched; LastTouched = None; dir = Victims.Location - HitLocation; dist = FMax(1,VSize(dir)); dir = dir/dist; damageScale = FMax(Victims.CollisionRadius/(Victims.CollisionRadius + Victims.CollisionHeight),1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius)); if ( DamageType.Default.bDelayedDamage && (Instigator == None || Instigator.Controller == None) ) Victims.SetDelayedDamageInstigatorController(InstigatorController); Victims.TakeDamage ( damageScale * DamageAmount, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir, (damageScale * Momentum * dir), DamageType ); if (Vehicle(Victims) != None && Vehicle(Victims).Health > 0) Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation); } bHurtEntry = false; } simulated function ProcessTouch (Actor Other, vector HitLocation) { local float AdjustedDamage; if (Other == Instigator) return; if (Other == Owner) return; if ( !Other.IsA('Projectile') || Other.bProjTarget ) { if ( Role == ROLE_Authority ) { AdjustedDamage = Damage * (1.0 + float(Links)); if ( Other.IsA('Vehicle') ) AdjustedDamage *= VehicleDamageMult; if ( Instigator == None || Instigator.Controller == None ) Other.SetDelayedDamageInstigatorController( InstigatorController ); Other.TakeDamage(AdjustedDamage,Instigator,HitLocation,MomentumTransfer * Normal(Velocity),MyDamageType); } Explode(HitLocation, -Normal(Velocity) ); } } oxclass LinkTurretController extends TurretController; auto state Searching { function ScanRotation() { local Rotator OldDesired; if ( ASTurret_LinkTurret(Pawn) == None ) { Super.ScanRotation(); return; } OldDesired = DesiredRotation; DesiredRotation = ASTurret_LinkTurret(Pawn).OriginalRotation; DesiredRotation.Yaw = DesiredRotation.Yaw + 8192; if ( (DesiredRotation.Yaw & 65535) == (OldDesired.Yaw & 65535) ) DesiredRotation.Yaw -= 16384; } } oxD_Gw*-\9<.9?,9?&V-\-\ Goq vO-a/!ev. vX-\66b? U|}KEU|}.:~{RK9P~K GoR //============================================================================= // FX_Turret_IonCannon_LaserBeam //============================================================================= // Created by Laurent Delayen (C) 2003 Epic Games //============================================================================= class FX_Turret_IonCannon_LaserBeam extends Emitter notplaceable; var vector StartLocation, EndLocation; var float BeamSize; var WA_Turret_IonCannon IonCannonOwner; replication { unreliable if ( Role == ROLE_Authority && bNetInitial && bNetOwner ) IonCannonOwner; unreliable if ( Role == ROLE_Authority && bNetDirty && !bNetOwner ) StartLocation, EndLocation; } function PostBeginPlay() { super.PostBeginPlay(); SetWeaponOwner(); } simulated function Tick(float DeltaTime) { UpdateBeamLocation(); if ( Level.NetMode != NM_DedicatedServer ) { UpdateLaserBeamFX( DeltaTime ); SetLocation( StartLocation ); SetRotation( Rotator(EndLocation - StartLocation) ); } } simulated function SetWeaponOwner() { IonCannonOwner = WA_Turret_IonCannon(Owner); } simulated function UpdateBeamLocation() { if ( IonCannonOwner != None && ( Role==Role_Authority || IonCannonOwner.CannonPawn.IsLocallyControlled()) ) IonCannonOwner.UpdateLaserBeamLocation(StartLocation, EndLocation); } simulated function UpdateLaserBeamFX( float DeltaTime ) { local float Dist; Dist = VSize( EndLocation - StartLocation ); BeamEmitter(Emitters[0]).BeamDistanceRange.Min = Dist; BeamEmitter(Emitters[0]).BeamDistanceRange.Max = Dist; // Beam Growing effect if ( DeltaTime < 1 ) BeamSize = FMin( BeamSize + DeltaTime, 2.f); BeamEmitter(Emitters[0]).StartSizeRange.X.Min = BeamSize * 35.f; BeamEmitter(Emitters[0]).StartSizeRange.X.Max = BeamSize * 40.f; } //============================================================================= // defaultproperties //============================================================================= of$//============================================================================= // FX_Turret_IonCannon_FireEffect //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_Turret_IonCannon_FireEffect extends Actor; #exec OBJ LOAD FILE=XEffectMat.utx var Vector HitLocation, HitNormal; var FX_NewIonCore IonCore; var FX_NewIonPlasmaBeam BeamEffect; var float StartTime; var() float DropTime; replication { reliable if (bNetInitial && Role == ROLE_Authority) HitLocation, HitNormal; } function AimAt(Vector hl, Vector hn) { HitLocation = hl; HitNormal = hn; if ( Level.NetMode != NM_DedicatedServer ) SpawnEffects(); } simulated function PostNetBeginPlay() { if ( Role < ROLE_Authority ) SpawnEffects(); } simulated function SpawnEffects() { local Rotator R; R = Rotator( HitLocation - Location ); SetRotation( R ); BeamEffect = Spawn(class'FX_NewIonPlasmaBeam',,, Location, Rotation); IonCore = Spawn(class'FX_NewIonCore',,, Location, Rotation); GotoState('Drop'); } state Drop { simulated function BeginState() { StartTime = Level.TimeSeconds; SetTimer(DropTime, false); } simulated function Tick(float dt) { local float Delta; Delta = FMin((Level.TimeSeconds - StartTime) / DropTime, 1.0); IonCore.SetLocation( Location*(1.0-delta) + HitLocation*delta ); BeamEmitter(BeamEffect.Emitters[0]).BeamDistanceRange.Max = VSize( Location - HitLocation ) * Delta; BeamEmitter(BeamEffect.Emitters[0]).BeamDistanceRange.Min = BeamEmitter(BeamEffect.Emitters[0]).BeamDistanceRange.Max; } simulated function Timer() { local Actor A; BeamEmitter(BeamEffect.Emitters[0]).BeamDistanceRange.Max = VSize( Location - HitLocation ); BeamEmitter(BeamEffect.Emitters[0]).BeamDistanceRange.Min = BeamEmitter(BeamEffect.Emitters[0]).BeamDistanceRange.Max; IonCore.Kill(); A = Spawn(class'FX_Turret_IonCannon_BeamExplosion',,, HitLocation+HitNormal*32, Rotator(HitNormal) ); A.RemoteRole = ROLE_None; GotoState(''); } } oQ //============================================================================= // FX_Turret_IonCannon_ChargeBeam //============================================================================= // Created by Laurent Delayen (C) 2003 Epic Games //============================================================================= class FX_Turret_IonCannon_ChargeBeam extends Emitter notplaceable; //============================================================================= // defaultproperties //============================================================================= oJS//============================================================================= // FX_Turret_IonCannon_BeamFire //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_Turret_IonCannon_BeamFire extends Actor; var() Sound FireSound; var() float MinRange, MaxRange; var() float MaxAngle; var() int Damage; // per wave var() float MomentumTransfer; // per wave var() float DamageRadius; // of final wave var() class DamageType; var Vector BeamDirection; var Vector DamageLocation; var Vector HitNormal; var() Vector MarkLocation; var AvoidMarker Fear; var() class IonEffectClass; // 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 function AimAt(Vector HL, Vector HN) { HitNormal = HN; MarkLocation = HL; if ( Role == Role_Authority ) GotoState('FireSequence'); } simulated function HurtRadius( float DamageAmount, float DamageRadius, class DamageType, float Momentum, vector HitLocation ) { local actor Victims; local float damageScale, dist; local vector dir; if( bHurtEntry ) return; bHurtEntry = true; foreach VisibleCollidingActors( class 'Actor', Victims, DamageRadius, HitLocation ) { // don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag if( (Victims != instigator) && (Victims != self) && (Victims.Role == ROLE_Authority) && (!Victims.IsA('FluidSurfaceInfo')) ) { dir = Victims.Location - HitLocation; dist = FMax(1,VSize(dir)); dir = dir/dist; damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius); Victims.TakeDamage ( damageScale * DamageAmount, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir, (damageScale * Momentum * dir), DamageType ); if (Instigator != None && Vehicle(Victims) != None && Vehicle(Victims).Health > 0) Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, Instigator.Controller, DamageType, Momentum, HitLocation); } } bHurtEntry = false; } state FireSequence { function BeginState() { BeamDirection = Normal(MarkLocation - Location); DamageLocation = MarkLocation - BeamDirection * 200.0; } function SpawnEffect() { local FX_Turret_IonCannon_FireEffect IonBeamEffect; IonBeamEffect = Spawn(IonEffectClass,,, Location, Rotation); if ( IonBeamEffect != None ) { IonBeamEffect.AimAt(MarkLocation, HitNormal ); //Normal(-1.f*BeamDirection) } } function ShakeView() { local Controller C; local PlayerController PC; local float Dist, Scale; for ( C=Level.ControllerList; C!=None; C=C.NextController ) { PC = PlayerController(C); if ( PC != None && PC.ViewTarget != None && PC.ViewTarget.Base != None ) { Dist = VSize(DamageLocation - PC.ViewTarget.Location); if ( Dist < DamageRadius * 2.0) { if (Dist < DamageRadius) Scale = 1.0; else Scale = (DamageRadius*2.0 - Dist) / (DamageRadius); C.ShakeView(ShakeRotMag*Scale, ShakeRotRate, ShakeRotTime, ShakeOffsetMag*Scale, ShakeOffsetRate, ShakeOffsetTime); } } } } Begin: if ( Fear == None ) Fear = Spawn(class'AvoidMarker',,, MarkLocation); if ( (Instigator != None) && (Instigator.PlayerReplicationInfo != None) && (Instigator.PlayerReplicationInfo.Team != None) ) Fear.TeamNum = Instigator.PlayerReplicationInfo.Team.TeamIndex; Fear.SetCollisionSize(DamageRadius, 200); Fear.StartleBots(); //Sleep(0.5); SpawnEffect(); PlaySound(FireSound); Sleep(0.5); ShakeView(); HurtRadius(Damage, DamageRadius*0.125, DamageType, MomentumTransfer, DamageLocation); Sleep(0.5); PlaySound(sound'WeaponSounds.redeemer_explosionsound'); HurtRadius(Damage, DamageRadius*0.300, DamageType, MomentumTransfer, DamageLocation); Sleep(0.2); HurtRadius(Damage, DamageRadius*0.475, DamageType, MomentumTransfer, DamageLocation); Sleep(0.2); HurtRadius(Damage, DamageRadius*0.650, DamageType, MomentumTransfer, DamageLocation); Sleep(0.2); HurtRadius(Damage, DamageRadius*0.825, DamageType, MomentumTransfer, DamageLocation); Sleep(0.2); HurtRadius(Damage, DamageRadius*1.000, DamageType, MomentumTransfer, DamageLocation); if ( Fear != None ) Fear.Destroy(); Destroy(); } o` //============================================================================= // FX_Turret_IonCannon_BeamExplosion //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_Turret_IonCannon_BeamExplosion extends Emitter notplaceable; #exec OBJ LOAD FILE=AW-2004Particles.utx //============================================================================= // defaultproperties //============================================================================= od"//============================================================================= // FX_SpaceFighter_SkaarjPlasma //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_SpaceFighter_SkaarjPlasma extends Emitter notplaceable; simulated function SetRedColor() { Emitters[0].ColorScale[0].Color = class'Canvas'.static.MakeColor(255, 64, 0); Emitters[0].ColorScale[1].Color = Emitters[0].ColorScale[0].Color; Emitters[1].ColorScale[0].Color = class'Canvas'.static.MakeColor(255,128, 96); Emitters[1].ColorScale[1].Color = class'Canvas'.static.MakeColor(255, 64, 48); Emitters[2].ColorScale[0].Color = class'Canvas'.static.MakeColor(200, 64, 64); Emitters[2].ColorScale[1].Color = Emitters[2].ColorScale[0].Color; } simulated function SetScale( float Scale ) { Emitters[0].StartLocationOffset.X = 240 * Scale; Emitters[0].StartSizeRange.X.Min = 128 * Scale; Emitters[0].StartSizeRange.X.Max = 160 * Scale; Emitters[1].StartLocationOffset.X = 250 * Scale; Emitters[1].LifetimeRange.Min = 2.5 * Scale; Emitters[1].LifetimeRange.Max = Emitters[1].LifetimeRange.Min; Emitters[1].StartSizeRange.X.Min = 16 * Scale; Emitters[1].StartSizeRange.X.Max = 45 * Scale; Emitters[2].StartLocationOffset.X = 257 * Scale; Emitters[2].StartLocationOffset.Y = -10 * Scale; Emitters[2].StartLocationRange.Y.Min = 10 * Scale; Emitters[2].StartLocationRange.Y.Max = Emitters[2].StartLocationRange.Y.Min; Emitters[2].StartSizeRange.X.Min = 2.5 * Scale; Emitters[2].StartSizeRange.X.Max = Emitters[2].StartSizeRange.X.Min; Emitters[2].StartSizeRange.Y.Min = 5.0 * Scale; Emitters[2].StartSizeRange.Y.Max = Emitters[2].StartSizeRange.Y.Min; Emitters[2].StartSizeRange.Z.Min = Emitters[2].StartSizeRange.Y.Min; Emitters[2].StartSizeRange.Z.Max = Emitters[2].StartSizeRange.Y.Min; } //============================================================================= // defaultproperties //============================================================================= o[class FX_SpaceFighter_ShotDownEmitter extends Emitter notplaceable; #exec OBJ LOAD FILE=EpicParticles.utx #exec OBJ LOAD FILE=ExplosionTex.utx or }E.K }66@6 Goj//============================================================================= // FX_SpaceFighter_Shield_Red //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_SpaceFighter_Shield_Red extends FX_SpaceFighter_Shield; ox //============================================================================= // FX_SpaceFighter_Shield //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_SpaceFighter_Shield extends Actor; simulated function Tick(float deltaTime) { local float pct; if ( Level.NetMode == NM_DedicatedServer ) { Disable('Tick'); return; } pct = LifeSpan / default.LifeSpan; SetDrawScale( 6 + 8*(1-pct) ); } oRclass FX_SpaceFighter_Rocket_Trail extends Emitter notplaceable; #exec OBJ LOAD FILE=AS_FX_TX.utx simulated function PreBeginPlay() { if ( Level.DetailMode == DM_Low ) { TrailEmitter(Emitters[0]).MaxPointsPerTrail = 100; } super.PreBeginPlay(); } oooz BR6}bK(aEx BDDrK**KK GoE(//============================================================================= // FX_SpaceFighter_InstantHitLaser //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_SpaceFighter_InstantHitLaser extends Projectile; var Emitter Laser; var class LaserClass; // Human var class PlasmaClass; // Skaarj var bool bIsPlasma; var float ProjAccel; simulated function PostBeginPlay() { local float InstigatorSpeed; super.PostBeginPlay(); if ( Instigator != None ) InstigatorSpeed = VSize(Instigator.Velocity) * (Instigator.Velocity Dot Vector(Rotation)); else InstigatorSpeed = 1000; Velocity = InstigatorSpeed * Vector(Rotation) * 0.00001; Acceleration = Velocity * InstigatorSpeed * 0.01; SetupProjectile(); SetTimer(0.1, false); } simulated function Timer() { Acceleration = Velocity * ProjAccel * ProjAccel; } simulated function Destroyed() { if ( Laser != None ) Laser.Destroy(); super.Destroyed(); } simulated function SetupProjectile() { local class FXClass; // FX if ( Level.NetMode != NM_DedicatedServer ) { if ( Instigator.IsA('ASVehicle_SpaceFighter_Skaarj') || Instigator.IsA('ASTurret') ) { FXClass = PlasmaClass; bIsPlasma = true; } else FXClass = LaserClass; Laser = Spawn(FXClass, Self,, Location, Rotation); if ( Laser != None ) { Laser.SetBase( Self ); if ( !bIsPlasma ) FX_Laser_Blue(Laser).SetScale(1.5, 6.0); else FX_SpaceFighter_SkaarjPlasma(Laser).SetScale( 1.0 ); // Red version for Team 0 if ( Instigator.GetTeamNum() == 0 ) { if ( bIsPlasma ) FX_SpaceFighter_SkaarjPlasma(Laser).SetRedColor(); else FX_Laser_Blue(Laser).SetRedColor(); } } } } simulated function Explode(vector HitLocation, vector HitNormal) { Destroy(); } simulated function ProcessTouch (Actor Other, vector HitLocation) { if ( Instigator != None ) { if (Other == Instigator) return; } if (Other == Owner) return; if ( !Other.IsA('Projectile') || Other.bProjTarget ) { Explode(HitLocation, -Normal(Velocity)); } } //============================================================================= // defaultproperties //============================================================================= o\//============================================================================= // FX_NewIonPlasmaBeam //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_NewIonPlasmaBeam extends Emitter notplaceable; oKooX//============================================================================= // FX_NewIonPlasmaBeam //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_NewIonCore extends Emitter notplaceable; o +AWvmw*A-\assmm-\aqq GoD F PNj' Goooi$//============================================================================= // FX_LinkTurret_GreenPlasma //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_LinkTurret_GreenPlasma extends Emitter notplaceable; simulated function PostBeginPlay() { SetGreenColor(); super.PostBeginPlay(); } simulated function SetGreenColor() { Emitters[0].ColorScale[0].Color = class'Canvas'.static.MakeColor( 96, 200, 64); Emitters[0].ColorScale[1].Color = class'Canvas'.static.MakeColor( 96, 200, 64); Emitters[1].ColorScale[0].Color = class'Canvas'.static.MakeColor(128, 200, 96); Emitters[1].ColorScale[1].Color = class'Canvas'.static.MakeColor( 64, 160, 48); Emitters[2].ColorScale[0].Color = class'Canvas'.static.MakeColor( 64, 200, 48); Emitters[2].ColorScale[1].Color = class'Canvas'.static.MakeColor( 64, 200, 48); } simulated function SetYellowColor() { Emitters[0].ColorScale[0].Color = class'Canvas'.static.MakeColor( 160, 192, 64); Emitters[0].ColorScale[1].Color = class'Canvas'.static.MakeColor( 160, 192, 64); Emitters[1].ColorScale[0].Color = class'Canvas'.static.MakeColor( 160, 192, 64); Emitters[1].ColorScale[1].Color = class'Canvas'.static.MakeColor( 96, 128, 32); Emitters[2].ColorScale[0].Color = class'Canvas'.static.MakeColor( 96, 144, 48); Emitters[2].ColorScale[1].Color = class'Canvas'.static.MakeColor( 96, 144, 48); } simulated function SetSize( float Scale ) { Emitters[0].StartSizeRange.X.Min = 80 * Scale; Emitters[0].StartSizeRange.X.Max = 96 * Scale; Emitters[1].LifetimeRange.Min = 1.7 * Scale; Emitters[1].LifetimeRange.Max = Emitters[1].LifetimeRange.Min; Emitters[1].StartSizeRange.X.Min = 12 * Scale; Emitters[1].StartSizeRange.X.Max = 28 * Scale; Emitters[2].StartSizeRange.X.Min = 1.5 * Scale; Emitters[2].StartSizeRange.X.Max = Emitters[2].StartSizeRange.X.Min; Emitters[2].StartSizeRange.Y.Min = 3.0 * Scale; Emitters[2].StartSizeRange.Y.Max = Emitters[2].StartSizeRange.Y.Min; Emitters[2].StartSizeRange.Z.Min = Emitters[2].StartSizeRange.Y.Min; Emitters[2].StartSizeRange.Z.Max = Emitters[2].StartSizeRange.Y.Min; } o@ooICOeb?C. !.:LFRC9PLC Goi//============================================================================= // FX_LinkTurret_BeamEffect //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_LinkTurret_BeamEffect extends LinkBeamEffect notplaceable; simulated function SetBeamLocation() { if ( Instigator == None || ASVehicle(Instigator) == None ) { super.SetBeamLocation(); return; } if ( Instigator != None && Instigator.IsLocallyControlled() ) StartEffect = ASTurret_LinkTurret(Instigator).FPVAdjustBeamStart(); else StartEffect = ASVehicle(Instigator).GetFireStart(0); SetLocation( StartEffect ); } simulated function vector SetBeamRotation() { local vector Start, HL, HN; if ( Instigator != None ) { Start = ASVehicle(Instigator).GetFireStart(); ASVehicle(Instigator).CalcWeaponFire( HL, HN ); SetRotation( Rotator(HL - Start) ); //SetRotation( Instigator.Rotation ); } else SetRotation( Rotator(EndEffect - StartEffect) ); return Normal( Vector(Rotation) ); } oZ //============================================================================= // FM_LinkTurret_AltFire //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_LinkTurretShield_Red extends FX_LinkTurretShield; simulated function UpdateShieldColor() { ColorModifier(Skins[0]).Color.R = int(Flash); ColorModifier(Skins[0]).Color.G = 255 - int(Flash); ColorModifier(Skins[0]).Color.B = 0; } OK G [L 8MOhi0Bi0Bi0B ooI NR5N99P A9?..]a Y NPw]*]/..]Q] GoT//============================================================================= // FX_LinkTurretShield //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_LinkTurretShield extends Actor; var float Flash; var bool bSetUp; #exec load obj FILE=JWAssaultMeshes simulated function PostBeginPlay() { local ColorModifier Alpha; super.PostBeginPlay(); if ( Level.NetMode == NM_DedicatedServer ) return; Alpha = ColorModifier(Level.ObjectPool.AllocateObject(class'ColorModifier')); Alpha.Material = Skins[0]; Alpha.AlphaBlend = true; Alpha.RenderTwoSided = true; Alpha.Color.G = 255; Alpha.Color.A = 255; Skins[0] = Alpha; //Skins[1] = Alpha; //Skins[2] = Alpha; UpdateShieldColor(); bSetUp = true; } simulated function Destroyed() { if ( bSetUp ) { Level.ObjectPool.FreeObject(Skins[0]); Skins[0] = None; } super.Destroyed(); } simulated function SetOpacity( float pct ) { if ( !bSetUp ) return; if ( pct < 0.01 ) { bHidden = true; return; } bHidden = false; ColorModifier(Skins[0]).Color.A = 255 * pct; } simulated function DoFlash() { Flash = 255; } simulated function Tick(float deltaTime) { if ( Level.NetMode == NM_DedicatedServer ) { Disable('Tick'); return; } if ( bHidden || Flash <= 0) return; Flash -= (256 * deltatime); if ( Flash > 0 ) UpdateShieldColor(); } simulated function UpdateShieldColor() { ColorModifier(Skins[0]).Color.R = 0; ColorModifier(Skins[0]).Color.G = 255 - int(Flash); ColorModifier(Skins[0]).Color.B = int(Flash); } ot//============================================================================= // FX_BallTurret_Shield //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FX_BallTurret_Shield extends Actor; #exec OBJ LOAD FILE=XEffectMat.utx var float Brightness, DesiredBrightness; var int HitCount, OldHitCount; var ShieldSparks Sparks; replication { unreliable if ( Role == ROLE_Authority && !bHidden ) HitCount; } simulated function Destroyed() { if ( Sparks != None ) Sparks.Destroy(); } simulated function Flash(int Drain) { if ( Sparks == None ) Sparks = Spawn(class'ShieldSparks'); if ( Instigator != None && Instigator.IsFirstPerson() ) { Sparks.SetLocation( Location + Vect(0,0,20) + VRand()*12.0 ); Sparks.SetRotation( Rotation ); Sparks.mStartParticles = 16; } else if ( EffectIsRelevant(Location, false) ) { Sparks.SetLocation( Location + VRand()*8.0 ); Sparks.SetRotation( Rotation ); Sparks.mStartParticles = 16; } Brightness = FMin(Brightness + Drain / 2, 250.0); Skins[0] = Skins[1]; SetTimer(0.2, false); } simulated function Timer() { Skins[0] = default.Skins[0]; } function SetBrightness(int b, bool bHit) { DesiredBrightness = FMin(50+b*2, 250.0); if ( bHit ) { HitCount++; Flash( 50 ); } } simulated function PostNetReceive() { if ( OldHitCount == -1 ) OldHitCount = HitCount; else if ( HitCount != OldHitCount ) { Flash( 50 ); OldHitCount = HitCount; } } o]ood!//============================================================================= // FM_Turret_IonCannon_Fire //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FM_Turret_IonCannon_Fire extends InstantFire; var() class BeamEffectClass; var bool bFired, bDoNotRelease; event ModeHoldFire() { if ( NextFireTime > Level.TimeSeconds ) return; WA_Turret_IonCannon(Weapon.ThirdPersonActor).PlayCharge(); WA_Turret_IonCannon(Weapon.ThirdPersonActor).ChargeCount++; } event ModeDoFire() { // If Fire was released before MaxHoldTime was reached, abort Ion Cannon power up if ( HoldTime < MaxHoldTime ) { HoldTime = 0.f; bIsFiring = false; WA_Turret_IonCannon(Weapon.ThirdPersonActor).PlayRelease(); WA_Turret_IonCannon(Weapon.ThirdPersonActor).ReleaseCount++; return; } bFired = true; super.ModeDoFire(); NextFireTime = Level.TimeSeconds + FireRate; } function StopFiring() { if ( HoldTime > 0.f ) { ModeDoFire(); bFired = false; } } function bool IsFiring() { return bIsFiring || (HoldTime > 0.f); } function DoFireEffect() { local Vector StartTrace, HL, HN; local Rotator R; local Actor HitActor; if ( Instigator == None ) return; Instigator.MakeNoise(1.0); // Get Vehicle Fire Offset StartTrace = ASVehicle(Instigator).GetFireStart(); HitActor = ASVehicle(Instigator).CalcWeaponFire( HL, HN ); R = Rotator(HL - StartTrace); DoTrace(StartTrace, R); } function SpawnBeamEffect(Vector Start, Rotator Dir, Vector HitLocation, Vector HitNormal, int ReflectNum) { local FX_Turret_IonCannon_BeamFire Beam; Beam = Weapon.Spawn(BeamEffectClass,,, Start, Dir); if (ReflectNum != 0) Beam.Instigator = None; // prevents client side repositioning of beam start Beam.AimAt(HitLocation, HitNormal); } simulated function bool AllowFire() { return true; } oM b(s;'..%I2 GoR +2;;'..%I2 GoS U P; ' GoooO 53*w.*. jd GoV Rdgb? SUVRESUVRR  GoV!//============================================================================= // FM_Turret_AltFire_Shield //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FM_Turret_AltFire_Shield extends WeaponFire; var() float AmmoRegenTime; var() float ChargeupTime; var float RampTime; var Sound ChargingSound; function DoFireEffect() { local WA_Turret Attachment; Attachment = WA_Turret(Weapon.ThirdPersonActor); Instigator.AmbientSound = ChargingSound; if ( Attachment != None && Attachment.ShieldEffect3rd != None ) Attachment.ShieldEffect3rd.bHidden = false; SetTimer(AmmoRegenTime, true); } function PlayFiring() { SetTimer(AmmoRegenTime, true); } function StopFiring() { local WA_Turret Attachment; Attachment = WA_Turret(Weapon.ThirdPersonActor); Instigator.AmbientSound = None; if ( Attachment != None && Attachment.ShieldEffect3rd != None ) Attachment.ShieldEffect3rd.bHidden = true; SetTimer(AmmoRegenTime, true); } function TakeHit( int Drain ) { SetBrightness( true ); } function SetBrightness(bool bHit) { local WA_Turret Attachment; local float Brightness; Brightness = Weapon.AmmoAmount(1); if ( RampTime < ChargeUpTime ) Brightness *= RampTime/ChargeUpTime; Attachment = WA_Turret(Weapon.ThirdPersonActor); if ( Attachment != None ) Attachment.SetBrightness(Brightness, bHit); } function Timer() { if ( !bIsFiring ) { RampTime = 0; if ( !Weapon.AmmoMaxed(1) ) Weapon.AddAmmo(1,1); else SetTimer(0, false); } else { if ( !Weapon.ConsumeAmmo(1,1) ) { if ( Weapon.ClientState == WS_ReadyToFire ) Weapon.PlayIdle(); StopFiring(); } else RampTime += AmmoRegenTime; } SetBrightness( false ); } o[//============================================================================= // FM_SpaceFighter_InstantHitLaser //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FM_SpaceFighter_InstantHitLaser extends InstantFire; var bool bSwitch; var name FireAnimLeft, FireAnimRight; var Sound FireSounds[2]; event ModeDoFire() { bSwitch = ( (WeaponAttachment(Weapon.ThirdPersonActor).FlashCount % 2) == 1 ); super.ModeDoFire(); } function DoFireEffect() { local Vector StartTrace, HL, HN; local Rotator R; if ( Instigator == None || !Instigator.IsA('ASVehicle') ) { super.DoFireEffect(); return; } if ( ASVehicle_SpaceFighter_Skaarj(Instigator) != None ) // hack for Skaarj SF damagetype DamageType = class'DamTypeSpaceFighterLaser_Skaarj'; Instigator.MakeNoise(1.0); StartTrace = ASVehicle(Instigator).GetFireStart(); ASVehicle(Instigator).CalcWeaponFire( HL, HN ); R = Rotator( Normal(HL-StartTrace) ); DoTrace(StartTrace, R); } function PlayFiring() { if ( Weapon.Mesh != None ) { if ( bSwitch && Weapon.HasAnim(FireAnimRight) ) FireAnim = FireAnimRight; else if ( !bSwitch && Weapon.HasAnim(FireAnimLeft) ) FireAnim = FireAnimLeft; } UpdateFireSound(); super.PlayFiring(); } simulated function UpdateFireSound() { if ( Instigator.IsA('ASTurret') || Instigator.IsA('ASVehicle_SpaceFighter_Skaarj') ) FireSound = FireSounds[0]; else FireSound = FireSounds[1]; } simulated function bool AllowFire() { return true; } //============================================================================= // defaultproperties //============================================================================= oA#//============================================================================= // FM_SpaceFighter_AltFire //============================================================================= class FM_SpaceFighter_AltFire extends ProjectileFire; function DoFireEffect() { // Get Rocket spawn location if ( ASVehicle_SpaceFighter(Instigator) != None ) ProjSpawnOffset = ASVehicle_SpaceFighter(Instigator).GetRocketSpawnLocation(); MyDoFireEffect(); } function MyDoFireEffect() { local Vector Start, X,Y,Z; Instigator.MakeNoise(1.0); GetAxes(Instigator.Rotation, X, Y, Z); Start = MyGetFireStart(X, Y, Z); SpawnProjectile(Start, Instigator.Rotation); } function Projectile SpawnProjectile(vector Start, rotator Dir) { local PROJ_SpaceFighter_Rocket P; local Vehicle Target; P = PROJ_SpaceFighter_Rocket(super.SpawnProjectile(Start, Dir)); if ( P != None && ASVehicle_SpaceFighter_Skaarj(Instigator) != None ) // hack for Skaarj SF damagetype P.MyDamageType = class'DamTypeSpaceFighterMissileSkaarj'; if ( P != None && ASVehicle_SpaceFighter(Instigator) != None ) { if ( Instigator.Controller.IsA('PlayerController') ) Target = ASVehicle_SpaceFighter(Instigator).CurrentTarget; else if ( Instigator.Controller.IsA('Bot') && Instigator.Controller.Enemy != None && (Bot(Instigator.Controller).Skill > FRand() * 5.f) ) { // very basic AI to target enemies... Target = Vehicle(Instigator.Controller.Enemy); } } // Check that Target is directly visible if ( Target != None && Normal(Target.Location - Instigator.Location) Dot Vector(Instigator.Rotation) > 0 && Weapon.FastTrace( Target.Location, Instigator.Location ) ) { P.HomingTarget = Target; Target.NotifyEnemyLockedOn(); } return P; } simulated function vector MyGetFireStart(vector X, vector Y, vector Z) { return Instigator.Location + X*ProjSpawnOffset.X + Y*ProjSpawnOffset.Y + Z*ProjSpawnOffset.Z; } simulated function bool AllowFire() { return true; } //============================================================================= // defaultproperties //============================================================================= o]//============================================================================= // FM_LinkTurret_Fire //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FM_LinkTurret_Fire extends ProjectileFire; var sound LinkedFireSound; var string LinkedFireForce; // jdf function DoFireEffect() { local vector Start, HL, HN; Instigator.MakeNoise(1.0); Start = ASVehicle(Instigator).GetFireStart(); ASVehicle(Instigator).CalcWeaponFire( HL, HN ); SpawnProjectile(Start, Rotator(HL-Start) ); } function Projectile SpawnProjectile(Vector Start, Rotator Dir) { local PROJ_LinkTurret_Plasma Proj; Start += Vector(Dir) * 10.0 * Weapon_LinkTurret(Weapon).Links; Proj = Weapon.Spawn(class'UT2k4AssaultFull.PROJ_LinkTurret_Plasma',,, Start, Dir); if ( Proj != None ) { Proj.Links = Weapon_LinkTurret(Weapon).Links; Proj.LinkAdjust(); } return Proj; } function ServerPlayFiring() { if ( Weapon_LinkTurret(Weapon).Links > 0 ) FireSound = LinkedFireSound; else FireSound = default.FireSound; super.ServerPlayFiring(); } function PlayFiring() { if ( Weapon_LinkTurret(Weapon).Links > 0 ) FireSound = LinkedFireSound; else FireSound = default.FireSound; super.PlayFiring(); } simulated function bool AllowFire() { return true; } oW LR!9T._LOLwT*w.W*T R,wT*w.*a/!~8.,,a/!lw*(.@8.w8*88  99 9?%)b$8  T#88T Gow//============================================================================= // FM_LinkTurret_AltFire //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class FM_LinkTurret_AltFire extends LinkFire; var float VehicleDamageMult; function PlayFiring() { if ( LinkGun(Weapon).Links <= 0 ) ClientPlayForceFeedback("BLinkGunBeam1"); super(WeaponFire).PlayFiring(); } simulated function vector GetFireStart(vector X, vector Y, vector Z) { return ASVehicle(Instigator).GetFireStart(); } simulated function bool AllowFire() { return true; } simulated function bool myHasAmmo( LinkGun LinkGun ) { return true; } simulated function Rotator GetPlayerAim( vector StartTrace, float InAimError ) { local vector HL, HN; ASVehicle(Instigator).CalcWeaponFire( HL, HN ); return Rotator( HL - StartTrace ); } simulated function float AdjustLinkDamage( LinkGun LinkGun, Actor Other, float Damage ) { Damage = Damage * (1.5*Linkgun.Links+1); if ( Other.IsA('Vehicle') ) Damage *= VehicleDamageMult; return Damage; } ox //============================================================================= // FM_BallTurret_Fire //============================================================================= class FM_BallTurret_Fire extends ProjectileFire; #exec OBJ LOAD FILE=..\Sounds\ONSVehicleSounds-S.uax var class TeamProjectileClasses[2]; var bool bSwitch; var name FireAnimLeft, FireAnimRight; event ModeDoFire() { if ( Weapon.ThirdPersonActor != None ) bSwitch = ( (WeaponAttachment(Weapon.ThirdPersonActor).FlashCount % 2) == 1 ); else bSwitch = !bSwitch; super.ModeDoFire(); } function DoFireEffect() { local Vector ProjOffset; local Vector Start, X,Y,Z, HL, HN; if ( Instigator.IsA('ASVehicle') ) ProjOffset = ASVehicle(Instigator).VehicleProjSpawnOffset; ProjSpawnOffset = ProjOffset; if ( bSwitch ) ProjSpawnOffset.Y = -ProjSpawnOffset.Y; Instigator.MakeNoise(1.0); Instigator.GetAxes(Instigator.Rotation, X, Y, Z); Start = MyGetFireStart(X, Y, Z); ASVehicle(Instigator).CalcWeaponFire( HL, HN ); SpawnProjectile(Start, Rotator(HL - Start)); } simulated function vector MyGetFireStart(vector X, vector Y, vector Z) { return Instigator.Location + X*ProjSpawnOffset.X + Y*ProjSpawnOffset.Y + Z*ProjSpawnOffset.Z; } function projectile SpawnProjectile(Vector Start, Rotator Dir) { local Projectile p; p = Weapon.Spawn(TeamProjectileClasses[Instigator.GetTeamNum()], Instigator, , Start, Dir); if ( p == None ) return None; p.Damage *= DamageAtten; return p; } function PlayFiring() { if ( Weapon.Mesh != None ) { if ( bSwitch && Weapon.HasAnim(FireAnimRight) ) FireAnim = FireAnimRight; else if ( !bSwitch && Weapon.HasAnim(FireAnimLeft) ) FireAnim = FireAnimLeft; } super.PlayFiring(); } simulated function bool AllowFire() { return true; } //============================================================================= // defaultproperties //============================================================================= oTooZclass DamTypeSpaceFighterMissileSkaarj extends DamTypeSpaceFighterMissile abstract; o^ class DamTypeSpaceFighterMissile extends VehicleDamageType abstract; static function ScoreKill(Controller Killer, Controller Killed) { if (Killed != None && Killer != Killed && Vehicle(Killed.Pawn) != None && Vehicle(Killed.Pawn).bCanFly) { if ( ASVehicle_SpaceFighter(Killer.Pawn) == None ) return; ASVehicle_SpaceFighter(Killer.Pawn).TopGunCount++; //Maybe add to game stats? if ( ASVehicle_SpaceFighter(Killer.Pawn).TopGunCount == 5 && PlayerController(Killer) != None ) { ASVehicle_SpaceFighter(Killer.Pawn).TopGunCount = 0; PlayerController(Killer).ReceiveLocalizedMessage(class'Message_ASKillMessages', 0); } } } o\ SE?_K S6U6V6 GoWclass DamTypeSpaceFighterLaser_Skaarj extends DamTypeSpaceFighterLaser abstract; o\ class DamTypeSpaceFighterLaser extends VehicleDamageType abstract; static function ScoreKill(Controller Killer, Controller Killed) { if (Killed != None && Killer != Killed && Vehicle(Killed.Pawn) != None && Vehicle(Killed.Pawn).bCanFly) { if ( ASVehicle_SpaceFighter(Killer.Pawn) == None ) return; ASVehicle_SpaceFighter(Killer.Pawn).TopGunCount++; //Maybe add to game stats? if ( ASVehicle_SpaceFighter(Killer.Pawn).TopGunCount == 5 && PlayerController(Killer) != None ) { ASVehicle_SpaceFighter(Killer.Pawn).TopGunCount = 0; PlayerController(Killer).ReceiveLocalizedMessage(class'Message_ASKillMessages', 0); } } } oKclass DamTypeLinkTurretPlasma extends VehicleDamageType abstract; static function GetHitEffects(out class HitEffects[4], int VictemHealth ) { HitEffects[0] = class'HitSmoke'; } ooob h PE' GoooIclass DamTypeLinkTurretBeam extends VehicleDamageType abstract; static function GetHitEffects(out class HitEffects[4], int VictemHealth ) { HitEffects[0] = class'HitSmoke'; } o\+7..%BBLinkGunBeam1 Goj l !. ! Gom oon ooo ooook q P' Gooop s Q >' Got oooor ^N&0.:wc9Pw^ GoFclass DamTypeIonCannonBlast extends VehicleDamageType abstract; ox oowooHclass DamTypeBallTurretPlasma extends VehicleDamageType abstract; oFS//============================================================================= // ASVehicle_SpaceFighter_Skaarj //============================================================================= class ASVehicle_SpaceFighter_Skaarj extends ASVehicle_SpaceFighter_Human; function vector GetBotError(vector StartLocation) { local vector Err; Err = Super.GetBotError(StartLocation); if ( (Level.NetMode != NM_Standalone) || (PlayerReplicationInfo == None) || (PlayerReplicationInfo.Team != Level.GetLocalPlayerController().PlayerReplicationInfo.Team) ) return Err; return 1.1 * Err; } simulated function AnimateSkelMesh( float SpeedPct ) { SetAnimFrame( FClamp(SpeedPct, 0.f, 0.9f) ); } simulated function PlayTakeOff() { // Play Take Off animation PlayAnim('TakeOff', 0.1); } simulated function DrawHealthInfo( Canvas C, PlayerController PC ) { class'HUD_Assault'.static.DrawCustomHealthInfo( C, PC, true ); } static function StaticPrecache(LevelInfo L) { super.StaticPrecache( L ); L.AddPrecacheMaterial( Material'AS_Vehicles_TX.SpaceFighter.SpaceFighter_Skaarj1' ); // Skins L.AddPrecacheMaterial( Material'AS_Vehicles_TX.SpaceFighter.SpaceFighter_Skaarj2' ); L.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp7_frames' ); // Explosion Effect L.AddPrecacheMaterial( Material'EpicParticles.Flares.SoftFlare' ); L.AddPrecacheMaterial( Material'AW-2004Particles.Fire.MuchSmoke2t' ); L.AddPrecacheMaterial( Material'AS_FX_TX.Trails.Trail_red' ); L.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp1_frames' ); L.AddPrecacheMaterial( Material'EmitterTextures.MultiFrame.rockchunks02' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.Trails.Trail_blue' ); // FX L.AddPrecacheMaterial( Texture'AS_FX_TX.Trails.Trail_red' ); L.AddPrecacheMaterial( Texture'EpicParticles.Flares.FlashFlare1' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.Flares.Laser_Flare' ); L.AddPrecacheMaterial( Material'XEffectMat.RedShell' ); L.AddPrecacheMaterial( Material'XEffectMat.BlueShell' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.Beams.LaserTex' ); L.AddPrecacheMaterial( Texture'EpicParticles.Flares.FlickerFlare' ); L.AddPrecacheMaterial( Texture'EpicParticles.Smoke.StellarFog1aw' ); L.AddPrecacheMaterial( Texture'XGameShaders.Trans.TransRingEnergy' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Grey' ); // HUD L.AddPrecacheMaterial( Texture'InterfaceContent.WhileSquare' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Solid' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Speed_Solid' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.AssaultRadar' ); L.AddPrecacheStaticMesh( StaticMesh'WeaponStaticMesh.Shield' ); L.AddPrecacheStaticMesh( StaticMesh'AS_Vehicles_SM.Vehicles.SpaceFighter_Skaarj_FP' ); L.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.Projectiles.Skaarj_Energy' ); } simulated function UpdatePrecacheStaticMeshes() { Level.AddPrecacheStaticMesh( StaticMesh'WeaponStaticMesh.Shield' ); Level.AddPrecacheStaticMesh( StaticMesh'AS_Vehicles_SM.Vehicles.SpaceFighter_Skaarj_FP' ); Level.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.Projectiles.Skaarj_Energy' ); super.UpdatePrecacheStaticMeshes(); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial( Material'AS_Vehicles_TX.SpaceFighter.SpaceFighter_Skaarj1' ); // Skins Level.AddPrecacheMaterial( Material'AS_Vehicles_TX.SpaceFighter.SpaceFighter_Skaarj2' ); Level.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp7_frames' ); // Explosion Effect Level.AddPrecacheMaterial( Material'EpicParticles.Flares.SoftFlare' ); Level.AddPrecacheMaterial( Material'AW-2004Particles.Fire.MuchSmoke2t' ); Level.AddPrecacheMaterial( Material'AS_FX_TX.Trails.Trail_red' ); Level.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp1_frames' ); Level.AddPrecacheMaterial( Material'EmitterTextures.MultiFrame.rockchunks02' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.Trails.Trail_blue' ); // FX Level.AddPrecacheMaterial( Texture'AS_FX_TX.Trails.Trail_red' ); Level.AddPrecacheMaterial( Texture'EpicParticles.Flares.FlashFlare1' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.Flares.Laser_Flare' ); Level.AddPrecacheMaterial( Material'XEffectMat.RedShell' ); Level.AddPrecacheMaterial( Material'XEffectMat.BlueShell' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.Beams.LaserTex' ); Level.AddPrecacheMaterial( Texture'EpicParticles.Flares.FlickerFlare' ); Level.AddPrecacheMaterial( Texture'EpicParticles.Smoke.StellarFog1aw' ); Level.AddPrecacheMaterial( Texture'XGameShaders.Trans.TransRingEnergy' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Grey' ); // HUD Level.AddPrecacheMaterial( Texture'InterfaceContent.WhileSquare' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Solid_Skaarj' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Speed_Solid_Skaarj' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.AssaultRadar' ); super.UpdatePrecacheMaterials(); } //============================================================================= // defaultproperties //============================================================================= ou dL,tRAA?9?d9?&Iea/!TA\A Goc//============================================================================= // ASVehicle_SpaceFighter_Human //============================================================================= class ASVehicle_SpaceFighter_Human extends ASVehicle_SpaceFighter; #exec OBJ LOAD FILE=AS_FX_TX.utx #exec OBJ LOAD FILE=..\Animations\AS_VehiclesFull_M.ukx simulated function SetTrailFX() { // Trail FX if ( TrailEmitter==None && Health>0 && Team != 255 ) { TrailEmitter = Spawn(class'FX_SpaceFighter_Trail_Red', Self,, Location - Vector(Rotation)*TrailOffset, Rotation); if ( TrailEmitter != None ) { if ( Team == 1 ) // Blue version FX_SpaceFighter_Trail_Red(TrailEmitter).SetBlueColor(); TrailEmitter.SetBase( Self ); } } } simulated function AdjustFX() { local float NewSpeed, VehicleSpeed, SpeedPct; local int i, averageOver; // Check that Trail is here SetTrailFX(); // Smooth filter on velocity, which is very instable especially on Jerky frame rate. NewSpeed = Max(Velocity Dot Vector(Rotation), EngineMinVelocity); SpeedFilter[NextSpeedFilterSlot] = NewSpeed; NextSpeedFilterSlot++; if ( bSpeedFilterWarmup ) averageOver = NextSpeedFilterSlot; else averageOver = SpeedFilterFrames; for (i=0; i1 && !CurrentTarget.bDeleteMe ) { if ( CurrentTarget.PlayerReplicationInfo != None ) { YO += YL * 1.5; VehicleInfoString = CurrentTarget.PlayerReplicationInfo.PlayerName; C.SetPos( XO, YO - YL * 0.5 ); C.DrawText( VehicleInfoString, false ); } YO += YL * 1.5; VehicleInfoString = int(VSize(Location-CurrentTarget.Location)*0.01875.f*6) $ class'HUD_Assault'.default.MetersString; C.SetPos( XO, YO - YL * 0.5 ); C.DrawText( VehicleInfoString, false ); } } simulated function DrawSpeedMeter( Canvas C, HUD H, PlayerController PC ) { local float XL, YL, XL2, YL2, YOffset, XOffset, SpeedPct; C.Style = ERenderStyle.STY_Alpha; XL = 256 * 0.5 * H.ResScaleX * H.HUDScale; YL = 64 * 0.5 * H.ResScaleY * H.HUDScale; // Team color overlay C.DrawColor = class'HUD_Assault'.static.GetTeamColor( Team ); C.SetPos( (C.ClipX - XL) * 0.5, C.ClipY - YL ); C.DrawTile(Texture'AS_FX_TX.HUD.SpaceHUD_Speed_Grey', XL, YL, 0, 0, 256, 64); // Speed Bar SpeedPct = DesiredVelocity - EngineMinVelocity; SpeedPct = FClamp( SpeedPct / (1000.f - EngineMinVelocity), 0.f, 1.f ); XOffset = 1 * 0.5 * H.ResScaleX * H.HUDScale; YOffset = 27 * 0.5 * H.ResScaleY * H.HUDScale; XL2 = 84 * 0.5 * H.ResScaleY * H.HUDScale; YL2 = 18 * 0.5 * H.ResScaleX * H.HUDScale; C.DrawColor = class'HUD_Assault'.static.GetGYRColorRamp( SpeedPct ); C.DrawColor.A = 96; C.SetPos( (C.ClipX - XL2) * 0.5 - XOffset, C.ClipY - YOffset - YL2 * 0.5 ); C.DrawTile(Texture'InterfaceContent.WhileSquare', XL2*SpeedPct, YL2, 0, 0, 8, 8); // Solid Background C.DrawColor = class'Canvas'.Static.MakeColor(255, 255, 255); C.SetPos( (C.ClipX - XL) * 0.5, C.ClipY - YL ); C.DrawTile(SpeedInfoTexture, XL, YL, 0, 0, 256, 64); } simulated function bool DrawCrosshair( Canvas C, out vector ScreenPos ) { local Vehicle V, BestTarget; local float BestDist; if ( !super.DrawCrosshair( C, ScreenPos ) ) return false; CrosshairPos = ScreenPos; // for HUD target tracking // Target closest to crosshair here because we need a Canvas to do WorldToScreen if ( bTargetClosestToCrosshair ) { BestDist = 50000; foreach DynamicActors(class'Vehicle', V) if ( IsTargetRelevant(V) && LineOfSightTo( V ) && VSize(ScreenPos - C.WorldToScreen(V.Location)) < BestDist ) { BestTarget = V; BestDist = VSize(ScreenPos - C.WorldToScreen(V.Location)); } if ( BestTarget != None ) ServerSetTarget( BestTarget ); bTargetClosestToCrosshair = false; } return true; } /* Space Fighter Targetting HUD code */ simulated function DrawTargetting( Canvas C ) { local vector CamLoc, TargetScreenPos; local rotator CamRot; if ( CurrentTarget == None || CurrentTarget.Health<1 || CurrentTarget.bDeleteMe ) return; // Target tracking C.GetCameraLocation( CamLoc, CamRot ); if ( class'HUD_Assault'.static.IsTargetInFrontOfPlayer( C, CurrentTarget, TargetScreenPos, CamLoc, CamRot ) ) DrawVisibleTarget( C, CurrentTarget, TargetScreenPos ); else DrawHiddenTarget( C, CurrentTarget, CamLoc, CamRot ); } /* Show Target's orientation */ simulated function DrawHiddenTarget( Canvas C, Vehicle V, vector CamLoc, rotator CamRot ) { local vector Orientation; local float X1, X2, Y1, Y2; Orientation = class'HUD_Assault'.static.GetTargetOrientation( V, CamLoc, CamRot ); Orientation = class'HUD_Assault'.static.ExpandTargetOrientationToCanvas( C, Orientation ); X1 = CrosshairPos.X; Y1 = CrosshairPos.Y; X2 = C.ClipX * 0.5 + C.ClipX * Orientation.X * 0.5; Y2 = C.ClipY * 0.5 - C.ClipY * Orientation.Y * 0.5; PlayerController(Controller).myHUD.DrawCanvasLine(X1, Y1, X2, Y2, C.MakeColor(64, 200, 64) ); } /* Show Target and leading Target reticle */ simulated function DrawVisibleTarget( Canvas C, Vehicle V, Vector ScrPos ) { C.Font = class'HUD'.static.GetConsoleFont( C ); C.DrawColor = C.MakeColor(64, 200, 64); C.Style = ERenderStyle.STY_Alpha; class'HUD_Assault'.static.Draw_2DCollisionBox( C, V, ScrPos, "", 1.5f, true ); } static function StaticPrecache(LevelInfo L) { super.StaticPrecache( L ); L.AddPrecacheMaterial( Material'AS_Vehicles_TX.SpaceFighter.SpaceFighter_Human1_Tex' ); // Skins L.AddPrecacheMaterial( Material'AS_Vehicles_TX.SpaceFighter.SpaceFighter_Human2_Tex' ); L.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp7_frames' ); // Explosion Effect L.AddPrecacheMaterial( Material'EpicParticles.Flares.SoftFlare' ); L.AddPrecacheMaterial( Material'AW-2004Particles.Fire.MuchSmoke2t' ); L.AddPrecacheMaterial( Material'AS_FX_TX.Trails.Trail_red' ); L.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp1_frames' ); L.AddPrecacheMaterial( Material'EmitterTextures.MultiFrame.rockchunks02' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.Trails.Trail_blue' ); // FX L.AddPrecacheMaterial( Texture'AS_FX_TX.Trails.Trail_red' ); L.AddPrecacheMaterial( Texture'EpicParticles.Flares.FlashFlare1' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.Flares.Laser_Flare' ); L.AddPrecacheMaterial( Material'XEffectMat.RedShell' ); L.AddPrecacheMaterial( Material'XEffectMat.BlueShell' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.Beams.LaserTex' ); L.AddPrecacheMaterial( Texture'EpicParticles.Flares.FlickerFlare' ); L.AddPrecacheMaterial( Texture'XGameShaders.Trans.TransRingEnergy' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Grey' ); // HUD L.AddPrecacheMaterial( Texture'InterfaceContent.WhileSquare' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Solid' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Speed_Solid' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.AssaultRadar' ); L.AddPrecacheStaticMesh( StaticMesh'WeaponStaticMesh.Shield' ); L.AddPrecacheStaticMesh( StaticMesh'AS_Vehicles_SM.Vehicles.SpaceFighter_Human_FP' ); } simulated function UpdatePrecacheStaticMeshes() { Level.AddPrecacheStaticMesh( StaticMesh'WeaponStaticMesh.Shield' ); Level.AddPrecacheStaticMesh( StaticMesh'AS_Vehicles_SM.Vehicles.SpaceFighter_Human_FP' ); super.UpdatePrecacheStaticMeshes(); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial( Material'AS_Vehicles_TX.SpaceFighter.SpaceFighter_Human1_Tex' ); // Skins Level.AddPrecacheMaterial( Material'AS_Vehicles_TX.SpaceFighter.SpaceFighter_Human2_Tex' ); Level.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp7_frames' ); // Explosion Effect Level.AddPrecacheMaterial( Material'EpicParticles.Flares.SoftFlare' ); Level.AddPrecacheMaterial( Material'AW-2004Particles.Fire.MuchSmoke2t' ); Level.AddPrecacheMaterial( Material'AS_FX_TX.Trails.Trail_red' ); Level.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp1_frames' ); Level.AddPrecacheMaterial( Material'EmitterTextures.MultiFrame.rockchunks02' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.Trails.Trail_blue' ); // FX Level.AddPrecacheMaterial( Texture'AS_FX_TX.Trails.Trail_red' ); Level.AddPrecacheMaterial( Texture'EpicParticles.Flares.FlashFlare1' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.Flares.Laser_Flare' ); Level.AddPrecacheMaterial( Material'XEffectMat.RedShell' ); Level.AddPrecacheMaterial( Material'XEffectMat.BlueShell' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.Beams.LaserTex' ); Level.AddPrecacheMaterial( Texture'EpicParticles.Flares.FlickerFlare' ); Level.AddPrecacheMaterial( Texture'XGameShaders.Trans.TransRingEnergy' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Grey' ); // HUD Level.AddPrecacheMaterial( Texture'InterfaceContent.WhileSquare' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Solid' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Speed_Solid' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.AssaultRadar' ); super.UpdatePrecacheMaterials(); } oH //============================================================================= // ASVehicleFactory_Turret // Specific factory for Ion Cannon //============================================================================= class ASVehicleFactory_IonCannon extends ASVehicleFactory; #exec OBJ LOAD File=AnnouncerAssault.uax var() name ObjectiveTag[6]; function VehicleSpawned() { local ASTurret T; local int i; Super.VehicleSpawned(); T = ASTurret(Child); if ( T == None ) return; for ( i=0; i<6; i++ ) T.ObjectiveTag[i] = ObjectiveTag[i]; } //============================================================================= // defaultproperties //============================================================================= } ey@~ HM$R5M7<gqCy - `_S^8&'%$(?$`@$HCT$CpooooX//============================================================================= // ASTurret_LinkTurret_Swivel //============================================================================= class ASTurret_LinkTurret_Swivel extends ASTurret_Minigun_Swivel; simulated event PostBeginPlay() { super.PostBeginPlay(); // Hack to instance correctly the skeletal collision boxes GetBoneCoords(''); SetCollision(false, false); SetCollision(true, true); } simulated function UpdateSwivelRotation( Rotator TurretRotation ) { local Rotator CogRotation; CogRotation.Pitch = TurretRotation.Pitch; SetBoneRotation( 'SwivelCog', CogRotation ); super.UpdateSwivelRotation( TurretRotation ); } //============================================================================= // defaultproperties //============================================================================= ow//============================================================================= // ASTurret_LinkTurret_Base //============================================================================= class ASTurret_LinkTurret_Base extends ASTurret_Base; //============================================================================= // defaultproperties //============================================================================= oM//============================================================================= // ASTurret_LinkTurret //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class ASTurret_LinkTurret extends ASTurret; #exec OBJ LOAD FILE=Turrets.utx var float Energy, OldEnergy; // Shield effect actors var class GenericShieldEffect[2]; var float NextShieldTime; var float RechargeWait; var float RechargeSpeed; var float LastEnergyUse; var vector ShieldPivot; replication { reliable if (Role==ROLE_Authority && bNetDirty && bNetOwner ) Energy; } simulated function UpdateLinkColor( LinkAttachment.ELinkColor Color ) { switch ( Color ) { case LC_Gold : Skins[2] = material'PowerPulseShaderYellow'; break; case LC_Green : Skins[2] = material'PowerPulseShader'; break; case LC_Red : Skins[2] = material'PowerPulseShaderRed'; break; case LC_Blue : Skins[2] = material'PowerPulseShaderBlue'; break; } Skins[0] = Combiner'AS_Weapons_TX.LinkTurret.LinkTurret_Skin2_C'; } simulated function bool CheckRecharge() { return ( Energy LastEnergyUse + RechargeWait) ); } // FIXME: move this to a timer... simulated function Tick(float DeltaTime) { if ( Role == Role_Authority && CheckRecharge() ) { // Play Recharge Sound Energy += Default.Energy * (DeltaTime / RechargeSpeed); if ( Energy >= Default.Energy ) { Energy = Default.Energy; } } super.Tick(DeltaTime); } simulated function PlayFiring(optional float Rate, optional name FiringMode ) { PlayAnim('Fire', 1.f); } simulated function DrawHealthInfo( Canvas C, PlayerController PC ); simulated function DrawVehicleHUD( Canvas C, PlayerController PC ) { if ( !PC.bBehindView ) { C.Style = 255; C.SetPos(0,0); C.DrawColor = class'Canvas'.static.MakeColor(255,255,255); C.DrawTile( Material'Turrets.TurretHud2', C.SizeX, C.SizeY, 0, 0, 1024, 768 ); } super.DrawVehicleHUD( C, PC ); } simulated function DrawWeaponInfo( Canvas C, HUD H ) { local float XL, YL; local float E, XO, YO, myfPulse; C.Style = ERenderStyle.STY_Alpha; XL = 256 * 0.5 * H.ResScaleX * H.HUDScale; YL = 128 * 0.5 * H.ResScaleY * H.HUDScale; // Team color overlay C.DrawColor = class'HUD_Assault'.static.GetTeamColor( Team ); C.SetPos( C.ClipX - XL, C.ClipY - YL ); C.DrawTile(Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Grey', XL, YL, 0, 0, 256, 128); // Solid Background C.DrawColor = class'Canvas'.Static.MakeColor(255, 255, 255); C.SetPos( C.ClipX - XL, C.ClipY - YL ); C.DrawTile(WeaponInfoTexture, XL, YL, 0, 0, 256, 128); E = Energy / default.Energy; XL = 53 * 0.5 * H.ResScaleX * H.HUDScale; YL = 10 * 0.5 * H.ResScaleY * H.HUDScale; XO = C.ClipX - 57 * 0.5 * H.ResScaleX * H.HUDScale; YO = C.ClipY - 63 * 0.5 * H.ResScaleY * H.HUDScale; C.DrawColor = class'HUD_Assault'.static.GetGYRColorRamp( E ); C.DrawColor.A = 96; if ( E == 1.f ) { // Ugly hack FIXME if ( HUD_Assault(H) != None ) myfPulse = HUD_Assault(H).fPulse; else myfPulse = 1.f; C.DrawColor = C.DrawColor * myfPulse + class'Canvas'.Static.MakeColor(255, 255, 255) * (1.f-myfPulse); C.DrawColor.A = 128 + 127 * ( 1.f - myfPulse ); } C.SetPos( XO - XL*0.5, YO - YL*0.5 ); C.DrawTile(Texture'InterfaceContent.WhileSquare', XL*E, YL, 0, 0, 8, 8); } simulated function vector FPVAdjustBeamStart() { local float XOffset; local float ZoomPct; local PlayerController PC; PC = PlayerController(Controller); if ( PC != None && IsLocallyControlled() && !PC.bBehindView ) { ZoomPct = 1 - (PC.FOVAngle-MinPlayerFOV) / (PC.DefaultFOV-MinPlayerFOV); XOffset = -160 * (1-ZoomPct); } return GetFireStart( XOffset ); } simulated function PostZoomAdjust( float ZoomPct ) { // Fudge the weapon effects so they look right if ( Weapon != None ) Weapon.SmallViewOffset.X = Weapon.default.SmallViewOffset.X - (ZoomWeaponOffsetAdjust * ZoomPct); } function PossessedBy(Controller C) { super.PossessedBy(C); if ( Weapon != None ) Weapon.SmallViewOffset.X = -25; } simulated function bool SpecialCalcView(out actor ViewActor, out vector CameraLocation, out rotator CameraRotation ) { local bool b; b = super.SpecialCalcView(ViewActor, CameraLocation, CameraRotation ); if ( Driver != None ) Driver.bOwnerNoSee = false; return b; } function AdjustDriverDamage(out int Damage, Pawn InstigatedBy, Vector HitLocation, out Vector Momentum, class DamageType) { super.AdjustDriverDamage(Damage, InstigatedBy, HitLocation, Momentum, DamageType); if ( PlayerController(Controller) != None ) PlayerController(Controller).ClientFlash(DamageType.Default.FlashScale,DamageType.Default.FlashFog); } function TakeDamage( int Damage, Pawn instigatedBy, Vector hitlocation, Vector momentum, class damageType) { local int OldHealth, EnergyUsed; local vector x,y,z,v; if ( Energy > 0 ) { GetAxes(Rotation, X, Y, Z); if ( HitLocation == vect(0,0,0) || HitLocation == Location ) HitLocation = Location + X * 50; V = Normal(HitLocation - Location); if ( (V dot X) >= 0 ) { EnergyUsed = Max(float(Damage)*0.67, 1); Damage = Max(float(Damage)*0.33, 1); } } OldHealth = Health; if ( Damage > 0 ) super.TakeDamage(Damage, InstigatedBy, HitLocation, momentum, DamageType); if ( Health < OldHealth && EnergyUsed > 0 ) { UseEnergy( EnergyUsed ); if ( Role == Role_Authority ) DoShieldEffect(HitLocation, Normal(HitLocation - Location) ); } } function UseEnergy(int Amount) { LastEnergyUse = Level.TimeSeconds; Energy = FMax(Energy-Amount, 0); } function DoShieldEffect(vector HitLocation, vector HitNormal) { local Actor ShieldEffect; local byte TeamShield; if ( Team > 1 ) TeamShield = 1; else TeamShield = Team; if ( EffectIsRelevant(HitLocation, true) && NextShieldTime < Level.TimeSeconds ) { NextShieldTime = Level.TimeSeconds + 0.1; ShieldEffect = Spawn(GenericShieldEffect[TeamShield], Self,, HitLocation + HitNormal * 10, rotator(HitNormal)); } } static function StaticPrecache(LevelInfo L) { super.StaticPrecache( L ); L.AddPrecacheMaterial( Material'AS_Weapons_TX.LinkTurret.LinkTurret_skin1' ); // Skins L.AddPrecacheMaterial( Material'AS_Weapons_TX.LinkTurret.LinkTurret_skin2' ); L.AddPrecacheMaterial( material'PowerPulseShader' ); L.AddPrecacheMaterial( material'PowerPulseShaderRed' ); L.AddPrecacheMaterial( material'PowerPulseShaderBlue' ); L.AddPrecacheMaterial( Material'Turrets.TurretHud2' ); // HUD L.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Grey' ); L.AddPrecacheMaterial( Texture'InterfaceContent.WhileSquare' ); L.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp7_frames' ); // Explosion Effect L.AddPrecacheMaterial( Material'EpicParticles.Flares.SoftFlare' ); L.AddPrecacheMaterial( Material'AW-2004Particles.Fire.MuchSmoke2t' ); L.AddPrecacheMaterial( Material'AS_FX_TX.Trails.Trail_red' ); L.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp1_frames' ); L.AddPrecacheMaterial( Material'EmitterTextures.MultiFrame.rockchunks02' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.Flares.Laser_Flare' ); // Fire Effect L.AddPrecacheMaterial( Texture'EpicParticles.Smoke.StellarFog1aw' ); L.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.Projectiles.Skaarj_Energy' ); L.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.Turret.LinkBase' ); //L.AddPrecacheMaterial( Material'AS_FX_TX.WhiteShield_FB' ); // Shield Effect //L.AddPrecacheStaticMesh( StaticMesh'LinkTurretShield' ); L.AddPrecacheStaticMesh( StaticMesh'WeaponStaticMesh.Shield' ); L.AddPrecacheMaterial( Material'XEffectMat.RedShell' ); L.AddPrecacheMaterial( Material'XEffectMat.BlueShell' ); } simulated function UpdatePrecacheStaticMeshes() { Level.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.Turret.LinkBase' ); //Level.AddPrecacheStaticMesh( StaticMesh'LinkTurretShield' ); Level.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.Projectiles.Skaarj_Energy' ); Level.AddPrecacheStaticMesh( StaticMesh'WeaponStaticMesh.Shield' ); super.UpdatePrecacheStaticMeshes(); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial( Material'AS_Weapons_TX.LinkTurret.LinkTurret_skin1' ); // Skins Level.AddPrecacheMaterial( Material'AS_Weapons_TX.LinkTurret.LinkTurret_skin2' ); Level.AddPrecacheMaterial( material'PowerPulseShader' ); Level.AddPrecacheMaterial( material'PowerPulseShaderRed' ); Level.AddPrecacheMaterial( material'PowerPulseShaderBlue' ); Level.AddPrecacheMaterial( material'PowerPulseShaderYellow' ); //Level.AddPrecacheMaterial( Material'AS_FX_TX.WhiteShield_FB' ); Level.AddPrecacheMaterial( Material'XEffectMat.RedShell' ); Level.AddPrecacheMaterial( Material'XEffectMat.BlueShell' ); Level.AddPrecacheMaterial( Material'Turrets.TurretHud2' ); // HUD Level.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Grey' ); Level.AddPrecacheMaterial( Texture'InterfaceContent.WhileSquare' ); Level.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp7_frames' ); // Explosion Effect Level.AddPrecacheMaterial( Material'EpicParticles.Flares.SoftFlare' ); Level.AddPrecacheMaterial( Material'AW-2004Particles.Fire.MuchSmoke2t' ); Level.AddPrecacheMaterial( Material'AS_FX_TX.Trails.Trail_red' ); Level.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp1_frames' ); Level.AddPrecacheMaterial( Material'EmitterTextures.MultiFrame.rockchunks02' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.Flares.Laser_Flare' ); // Fire Effect Level.AddPrecacheMaterial( Texture'EpicParticles.Smoke.StellarFog1aw' ); super.UpdatePrecacheMaterials(); } oC//============================================================================= // ASTurret_IonCannon_Swivel //============================================================================= class ASTurret_IonCannon_Swivel extends ASTurret_Minigun_Swivel; //============================================================================= // defaultproperties //============================================================================= oEJOHwJ.hhwJ*wJ'*J'-(KE' Gou//============================================================================= // ASTurret_IonCannon_Base //============================================================================= class ASTurret_IonCannon_Base extends ASTurret_Base; //============================================================================= // defaultproperties //============================================================================= oD +qKE' GoF Su%sS.*dwS*wS'*S'-'KE' GoDt//============================================================================= // ASTurret_IonCannon //============================================================================= #EXEC OBJ LOAD File=../StaticMeshes/AS_Weapons_SM.usx class ASTurret_IonCannon extends ASTurret; var vector RechargeOrigin, RechargeSize; var sound ChargingSound; simulated function PlayFiring(optional float Rate, optional name FiringMode) { if ( Level.NetMode != NM_DedicatedServer ) { PlayAnim('Fire', 0.5); AmbientSound = None; PlaySound(sound'WeaponSounds.BExplosion5'); } } simulated event PlayCharge() { if ( Level.NetMode != NM_DedicatedServer ) { PlayAnim('Charge', 0.08, 0.25); AmbientSound = ChargingSound; } } function Vehicle FindEntryVehicle(Pawn P) { local vector Dir; if ( Bot(P.Controller) != None ) { Dir = Location - P.Location; if ( Abs(Dir.Z) < CollisionHeight ) { Dir.Z = 0; if (VSize(Dir) < EntryRadius) return self; } } return Super.FindEntryVehicle(P); } simulated event PlayRelease() { if ( Level.NetMode != NM_DedicatedServer ) { PlayAnim('Idle', 1.0, 0.25); AmbientSound = None; PlaySound(sound'WeaponSounds.TranslocatorModuleRegeneration', SLOT_Interface,, false,, 4.0); } } simulated function DrawVehicleHUD( Canvas C, PlayerController PC ) { local vehicle V; local vector ScreenPos; local string VehicleInfoString; super.DrawVehicleHUD( C, PC ); if ( Weapon == None || Weapon.GetFireMode(0) == None ) return; // 1st person view if ( !PlayerController(Controller).bBehindView ) { C.Style = ERenderStyle.STY_Alpha; // Draw Weird cam C.DrawColor.R = 255; C.DrawColor.G = 255; C.DrawColor.B = 255; C.DrawColor.A = 64; C.SetPos(0,0); C.DrawTile( Material'TransCamFB', C.SizeX, C.SizeY, 0.0, 0.0, 512, 512 ); // !! hardcoded size C.SetPos(0,0); //C.DrawTile( Material'ScreenNoiseFB', C.SizeX, C.SizeY, 0.0, 0.0, 512, 512 ); // !! hardcoded size C.DrawColor = class'HUD_Assault'.static.GetTeamColor( Team ); // Draw Reticle around visible vehicles foreach DynamicActors(class'Vehicle', V ) { if ( (V==Self) || (V.Health < 1) || V.bDeleteMe || V.GetTeamNum() == Team || !V.IndependentVehicle() ) continue; if ( !class'HUD_Assault'.static.IsTargetInFrontOfPlayer( C, V, ScreenPos, Location, Rotation ) ) continue; if ( !FastTrace( V.Location, Location ) ) continue; C.Font = class'HudBase'.static.GetConsoleFont( C ); VehicleInfoString = V.VehicleNameString $ ":" @ int(VSize(Location-V.Location)*0.01875.f) $ class'HUD_Assault'.default.MetersString; class'HUD_Assault'.static.Draw_2DCollisionBox( C, V, ScreenPos, VehicleInfoString, 1.5f, true ); } } } simulated function DrawWeaponInfo( Canvas C, HUD H ) { local float Charge, tileScaleX, tileScaleY, barOrgX, barOrgY, barSizeX, barSizeY; super.DrawWeaponInfo( C, H ); tileScaleX = C.SizeX / 640.0f; tileScaleY = C.SizeY / 480.0f; if ( Weapon.GetFireMode(0).NextFireTime > Level.TimeSeconds ) // Cooling charge = 1.f - FMin( (Weapon.GetFireMode(0).NextFireTime-Level.TimeSeconds) / Weapon.GetFireMode(0).FireRate, 1.f); else // Power Up charge = 1.f - FMin(Weapon.GetFireMode(0).HoldTime / Weapon.GetFireMode(0).MaxHoldTime, 1.f); if ( charge > 0 ) { barOrgX = RechargeOrigin.X * tileScaleX; barOrgY = RechargeOrigin.Y * tileScaleY; barSizeX = RechargeSize.X * tileScaleX; barSizeY = RechargeSize.Y * tileScaleY; C.DrawColor = class'UT2k4Assault.HUD_Assault'.static.GetGYRColorRamp( charge ); C.DrawColor.A = 96; C.Style = ERenderStyle.STY_Alpha; C.SetPos( barOrgX, barOrgY ); C.DrawTile(Texture'Engine.WhiteTexture',barSizeX,barSizeY*charge, 0.0, 0.0,Texture'Engine.WhiteTexture'.USize,Texture'Engine.WhiteTexture'.VSize*charge); } } // Spawn Explosion FX simulated function Explode( vector HitLocation, vector HitNormal ) { if ( Level.NetMode != NM_DedicatedServer ) ExplosionEffect = Spawn(class'IonCannonDeathEffect', Self,, HitLocation, Rotation); if ( TurretBase != None ) TurretBase.Destroy(); if ( TurretSwivel != None ) TurretSwivel.Destroy(); } static function StaticPrecache(LevelInfo L) { super.StaticPrecache( L ); L.AddPrecacheMaterial( Material'AS_FX_TX.Beams.HotBolt_2' ); L.AddPrecacheMaterial( Material'AS_FX_TX.Beams.HotBolt_3' ); L.AddPrecacheMaterial( Material'AS_FX_TX.Beams.HotBolt_4' ); L.AddPrecacheMaterial( Material'AS_FX_TX.Beams.HotBolt_1' ); L.AddPrecacheMaterial( Material'AS_Weapons_TX.IonCanon.ASIonCannon1' ); L.AddPrecacheMaterial( Material'AS_Weapons_TX.IonCanon.ASIonCannon2' ); // 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' ); L.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.IonBase' ); L.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.IonSwivel' ); } simulated function UpdatePrecacheStaticMeshes() { Level.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.IonBase' ); Level.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.IonSwivel' ); Level.AddPrecacheStaticMesh( StaticMesh'AW-2004Particles.Weapons.PlasmaSphere' ); super.UpdatePrecacheStaticMeshes(); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial( Material'AS_FX_TX.Beams.HotBolt_2' ); Level.AddPrecacheMaterial( Material'AS_FX_TX.Beams.HotBolt_3' ); Level.AddPrecacheMaterial( Material'AS_FX_TX.Beams.HotBolt_4' ); Level.AddPrecacheMaterial( Material'AS_FX_TX.Beams.HotBolt_1' ); Level.AddPrecacheMaterial( Material'AS_Weapons_TX.IonCanon.ASIonCannon1' ); Level.AddPrecacheMaterial( Material'AS_Weapons_TX.IonCanon.ASIonCannon2' ); // 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(); } oG J O0 C' GoooI nC8}_9?}&:GD_GD`.zw`*`C9D_-n Gow//============================================================================= // ASTurret_BallTurret_Base //============================================================================= class ASTurret_BallTurret_Base extends ASTurret_Base; //============================================================================= // defaultproperties //============================================================================= odD//============================================================================= // ASTurret_BallTurret //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class ASTurret_BallTurret extends ASTurret; #exec OBJ LOAD FILE=..\Animations\AS_VehiclesFull_M.ukx simulated function DrawWeaponInfo( Canvas C, HUD H ) { local float XL, YL; local float Energy, XO, YO, myfPulse; C.Style = ERenderStyle.STY_Alpha; XL = 256 * 0.5 * H.ResScaleX * H.HUDScale; YL = 128 * 0.5 * H.ResScaleY * H.HUDScale; // Team color overlay C.DrawColor = class'HUD_Assault'.static.GetTeamColor( Team ); C.SetPos( C.ClipX - XL, C.ClipY - YL ); C.DrawTile(Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Grey', XL, YL, 0, 0, 256, 128); // Solid Background C.DrawColor = class'Canvas'.Static.MakeColor(255, 255, 255); C.SetPos( C.ClipX - XL, C.ClipY - YL ); C.DrawTile(WeaponInfoTexture, XL, YL, 0, 0, 256, 128); // Shield Energy if ( Weapon != None ) Energy = FClamp( Weapon.AmmoStatus(1), 0.f, 1.f); else Energy = 1.f; XL = 53 * 0.5 * H.ResScaleX * H.HUDScale; YL = 10 * 0.5 * H.ResScaleY * H.HUDScale; XO = C.ClipX - 57 * 0.5 * H.ResScaleX * H.HUDScale; YO = C.ClipY - 63 * 0.5 * H.ResScaleY * H.HUDScale; C.DrawColor = class'HUD_Assault'.static.GetGYRColorRamp( Energy ); C.DrawColor.A = 96; if ( Energy == 1.f ) { // Ugly hack FIXME if ( HUD_Assault(H) != None ) myfPulse = HUD_Assault(H).fPulse; else myfPulse = 1.f; C.DrawColor = C.DrawColor * myfPulse + class'Canvas'.Static.MakeColor(255, 255, 255) * (1.f-myfPulse); C.DrawColor.A = 128 + 127 * ( 1.f - myfPulse ); } C.SetPos( XO - XL*0.5, YO - YL*0.5 ); C.DrawTile(Texture'InterfaceContent.WhileSquare', XL*Energy, YL, 0, 0, 8, 8); } static function StaticPrecache(LevelInfo L) { super.StaticPrecache( L ); L.AddPrecacheMaterial( Material'AS_Weapons_TX.Turret.ASTurret_Base' ); // Skins L.AddPrecacheMaterial( Material'AS_Weapons_TX.Turret.ASTurret_Canon' ); L.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Grey' ); // HUD L.AddPrecacheMaterial( default.WeaponInfoTexture ); L.AddPrecacheMaterial( Texture'InterfaceContent.WhileSquare' ); L.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp7_frames' ); // Explosion Effect L.AddPrecacheMaterial( Material'EpicParticles.Flares.SoftFlare' ); L.AddPrecacheMaterial( Material'AW-2004Particles.Fire.MuchSmoke2t' ); L.AddPrecacheMaterial( Material'AS_FX_TX.Trails.Trail_red' ); L.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp1_frames' ); L.AddPrecacheMaterial( Material'EmitterTextures.MultiFrame.rockchunks02' ); L.AddPrecacheMaterial( Texture'EpicParticles.Smoke.StellarFog1aw' ); // Fire Effect L.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.Projectiles.Skaarj_Energy' ); L.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.ASTurret_Base' ); } simulated function UpdatePrecacheStaticMeshes() { Level.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.ASTurret_Base' ); Level.AddPrecacheStaticMesh( StaticMesh'AS_Weapons_SM.Projectiles.Skaarj_Energy' ); super.UpdatePrecacheStaticMeshes(); } simulated function UpdatePrecacheMaterials() { Level.AddPrecacheMaterial( Material'AS_Weapons_TX.Turret.ASTurret_Base' ); // Skins Level.AddPrecacheMaterial( Material'AS_Weapons_TX.Turret.ASTurret_Canon' ); Level.AddPrecacheMaterial( Texture'AS_FX_TX.HUD.SpaceHUD_Weapon_Grey' ); // HUD Level.AddPrecacheMaterial( default.WeaponInfoTexture ); Level.AddPrecacheMaterial( Texture'InterfaceContent.WhileSquare' ); Level.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp7_frames' ); // Explosion Effect Level.AddPrecacheMaterial( Material'EpicParticles.Flares.SoftFlare' ); Level.AddPrecacheMaterial( Material'AW-2004Particles.Fire.MuchSmoke2t' ); Level.AddPrecacheMaterial( Material'AS_FX_TX.Trails.Trail_red' ); Level.AddPrecacheMaterial( Material'ExplosionTex.Framed.exp1_frames' ); Level.AddPrecacheMaterial( Material'EmitterTextures.MultiFrame.rockchunks02' ); Level.AddPrecacheMaterial( Texture'EpicParticles.Smoke.StellarFog1aw' ); // Fire Effect super.UpdatePrecacheMaterials(); } oH//============================================================================= // Ammo_BallTurret //============================================================================= // Created by Laurent Delayen // 2003, Epic Games, Inc. All Rights Reserved //============================================================================= class Ammo_BallTurret extends Ammunition; oK QCN-G?W&H&&KK( F&?9:9:$cuGEC( GY$*o$?*o($(?">:pC`:?Z 8 Z$$?o Z$$oZ$$ooZ 8 Z$B$Bo Z$B$BoZ$B$Boo$D$Z$ ף=$ #>oD$?L$@oP"#SY.$*`o$(?*@0o$?*o($(?S$@\$ ף=G>:zC*Z 8 Z$>$>o Z$$oZ$$ooZ 8 Z$$?o Z$$oZ$$oo Y+$$@o$=$?o$?$>oZ 8 Z$@A$Ao Z$B$BoZ$B$Boo]$Z$?$?oGZ 8 Z$H$Ho Z$$oZ$$ooD$?L$@o'hSlSY$*@@o$?*@@o($(?">:C \Z 8 Z$$o Z$ A$ AoZ$$oo`:???*Z 8 Z$$o Z$$oZ$̌?$̌?ooZ 8 Z$?$?o Z$@@$@@oZ$@@$@@oo$?$D$?L$?o)S9SY=$*o$=*@o$?*@o$?*oYZ 8 Z$?$?o Z$?$@oZ$?$?oo"*Z 8 Z$L=$=o Z$$oZ$$ooZ 8 Z$$?o Z$$oZ$$ooZ 8 Z$B$Bo Z$B$BoZ$B$Boo$D$Z$?$?oo)S9SY=$*o$=*@o$?*@o$?*o"*Z 8 Z$$=o Z$$oZ$$ooZ 8 Z$$?o Z$$oZ$$ooZ 8 Z$C$Co Z$B$BoZ$B$Boo$D$Z$?$?ooj:zY=$*o$>*@o$+?*@o$?*oYZ 8 Z$?$?o Z$?$@oZ$?$?oo"76Z$$Bo*Z 8 Z$=$?o Z$$oZ$$ooZ 8 Z$$?o Z$$oZ$$ooZ 8 Z$@$Bo Z$B$BoZ$B$Boo$Z$>$?oGZ 8 Z$$o Z$$BoZ$$BooD$?L$@@oED"|"z")S9SY.$*@o$?*@o$?*o"Z 8 Z$C$Co Z$?$?oZ$B$Boo$C$Z$?$?oGZ 8 Z$o:$o:o Z$$oZ$$oooad:?)S9"#SSY=$*o$=*@o$?*@o$?*oYZ 8 Z$?$?o Z$?$@oZ$+?$?oo($+?"\Z 8 Z$$Ao Z$$oZ$$oo*Z 8 Z$L=$L=o Z$$oZ$$ooZ 8 Z$$?o Z$$oZ$$oo Y$$@@o$?$@oZ 8 Z$B$Bo Z$B$BoZ$B$Boo$A$Z$?$?oo)S9"#SSj:CY.$*@o$?*@o$?*oYZ 8 Z$?$?o Z$?$?oZ$+?$?oo($+?"\Z 8 Z$$Bo Z$$oZ$$oo76Z$$Bo*Z 8 Z$$?o Z$$oZ$$ooZ 8 Z$$?o Z$$oZ$$oo Y$$?o$?$?oZ 8 Z$ A$Co Z$B$BoZ$B$Boo$C$Z$?$?oGZ 8 Z$$;Do Z$$CoZ$$Cooorst"u$HBvw$?S($+?"Z 8 Z$ A$ Ao Z$B$BoZ$B$Boo$D$Z$#tI$#tIood:?)S"#SSY.$*@o$@?*@o$?*o($+?">: `:*Z 8 Z$L=$L>o Z$$oZ$$ooZ 8 Z$$?o Z$$oZ$$oo Y9$$=o$=$?o$>$?o$?$@?oZ 8 Z$B$Co Z$B$BoZ$B$Boo$HB$Z$@$@oHZ$L=$L=oo"#SrYL$*o$>* o$>*lo$@?*PPPo$?*o"76Z$ A$AoZ 8 Z$$?o Z$$oZ$$oo Y$$?o$?$@oZ 8 Z$A$ Bo Z$B$BoZ$B$Boo]l"t"$Z$?$?oo"#SY=$*o$>*Jo$?*l@o$?*PPPo"<76Z$$@AoZ 8 Z$$?o Z$$oZ$$oo Y$$?o$?$@@oZ 8 Z$pA$Ao Z$B$BoZ$B$Boo]$Z$>$>oorrS$?"76Z$A$Ao*Z 8 Z$$=o Z$$oZ$$ooZ 8 Z$$?o Z$$oZ$$ooZ 8 Z$@$Ao Z$B$BoZ$B$Bool"t"$Z$?$?ogZ$$AocoY$*o$?*o($(?">:pC`:?Z 8 Z$$?o Z$$oZ$$ooZ 8 Z$C$ Co Z$B$BoZ$B$Boo$D$Z$ ף=$ #>oD$?L$@oP"#SY.$*`o$(?*@0o$?*o($(?S$@\$ ף=G>:zC*Z 8 Z$>$>o Z$$oZ$$ooZ 8 Z$$?o Z$$oZ$$oo Y+$$@o$=$?o$?$>oZ 8 Z$A$4Bo Z$B$BoZ$B$Boo]$Z$ @$ @oGZ 8 Z$H$Ho Z$$oZ$$ooD$?L$@o'hSlSY$*@@o$?*@@o($(?">:C \Z 8 Z$$o Z$ A$ AoZ$$oo`:???*Z 8 Z$$o Z$$oZ$̌?$̌?ooZ 8 Z$ @$ @o Z$@$@oZ$@$@oo$?$D$?L$?oa)S"#SOSRY=$*o$L>*o$L?*o$?*o"276Z$C$Co^Z 8 Z$$o Z$$oZ$@$@oo Y$$@o$?$?oZ 8 Z$@$@o Z$B$BoZ$B$Bood: ף< ף< ף<$@EZ$?$?oHZ$L>$L>ogZ$D$DocoYI$N:===o$?N:===o$?N:???oo)S"#SSY.$*o$333?*o$?*o"*Z 8 Z$$L>o Z$$oZ$$ooZ 8 Z$$?o Z$$oZ$$oo Y+$$o$?$?o$?$?o$@EZ$@$@oo)S"#SS" Y+$$o$@?$@@o$?$`@o$@EZ$?$?oHZ$>$>oo)S"#SSr"(76Z$B$BoZ 8 Z$$?o Z$$oZ$$oo Y$$o$?$@@o$Cl"t"Z$?$?oHZ$?$?ogZ$;$;oco)S"#SSr"276Z$C$CoZ 8 Z$$?o Z$$oZ$$oo Y$$o$?$@@oZ 8 Z$HC$HCo Z$B$BoZ$B$Boo$Cl"t"Z$?$?oHZ$?$?ogZ$;$;oco)S"#SSr"<76Z$zD$zDoZ 8 Z$$?o Z$$oZ$$oo Y$$o$?$@@oZ 8 Z$C$Co Z$B$BoZ$B$Boo$Cl"t"Z$?$?oHZ$33?$33?ogZ$;$;oco'|)S"#SSY.$*o$L?*o$?*o($?"*Z 8 Z$$?o Z$?$oZ$?$oo Y$$@o$?$Ao$@EZ$@?$@?oHZ$?$?oo~Z$D$DoED"|"z"SY$*@o$?*o($(?"Z 8 Z$pA$HBo Z$B$BoZ$B$Boo$D$Z$ ף=$ #>oGZ 8 Z$o:$o:o Z$$oZ$$oooSY$*@o$?*o"Z 8 Z$B$Bo Z$B$BoZ$B$Boo$D$Z$ ף=$ #>ooSY$*@o$?*o">:DZ 8 Z$B$Bo Z$B$BoZ$B$Boo$D$Z$ ף=$ #>oo~Z$C$CoED"|"z"SY$*o$?*o($>"Z 8 Z$A$ Bo Z$B$BoZ$B$Boo$D$Z$ ף=$ #>oGZ 8 Z$o:$o:o Z$$oZ$$oooh hiu i` iJ h-iQ iZ s iw iPi`iZ }G i~iih2i~ iN }Mi}ie X5i~i\ iTiIhC ir PVilik ies h4ic}MiP i| s iK hwPs LPXPU}r ~iF }\ hN h\ iZ o i@~E hyhb iG XZPYZF P ~iliL hy hWXs T PiN s }e iQ ix hyhv iOZ[Z \ hU ikiR hPhE }`h }\ }] hy h{~]ih Z 1~_ ~^ ~ ~C hx xiZ D hzP vhN iqhw ~@ }V huh` ZI Q }] P~ib iQ imiL @WP^Zg~ h|iK iu } hu PhTii xI ix hy}X@_ ~@ B X ma Z ^}v '~PZo { hy B @Z Z +hy 'iz h`hcl Z ;}u hk B Y hgaia ht fm i|~XhT ZR}L }p iM Z PZ DP~k Z iZ wh[JhP i_ }v `@Z Z fPjP~h@@Y ic Z JZ ; F iI ~ipZ An Z J~az@_ kB@W id hr~m ig Z{ ~] ~S ~ ~l ~[}a A ~T}rP>}\hz}x @ ZG~`AZ QZ RZ Ni\ Z a@^ Qhw h ~b E ~ E } E | }g}O G whQ PC iv }D N P FZ { R P@ P H |Uh[kZE V Z 0 %} '| '} ~Wi ij ~Q '{ hO ~M ZG\ >Qio@D I E J P }tPd }I A X P\ZlPi c ~K ~s ` qP 'N_Z OhZ 'N^ |^ |f 'd J E  W Z wZ O B U Z j _ hohpZ ~P_ b h4s |e ZHm }q ZRin @CY X U Z k S V L K M ~^ Z gZ fZ ]}sinZ K\h[X E Z }D Z p}A iq Z wZ f}qZ qZ bix Z uZ ]Z AP{il 'b iY hB Si^ ~Si{ }G ihJ J I Z { FF}FhN n } J G Z EZ D b C FG E Ds Y}/iU hO hd Z 5c~(~H @`a n Lkn~K~LPnm ab ac ad aeZ ;Z FZ DLZ GZ iZ uZ gZ CZ miqZ iZ =Z aPj}The I hf Zs Z +Z [iN Z {iM Z =Z `Z GZ aZIZTP` Z QZ fkO '~v Z Y E z }VZB~WZ QZ NZ LZ +Z !h` B V B W hX hGN F\ }^ I =T I @R I ?D hS hM I F h@ if I 8H ix I A hK SKZ_}w z ZA~Viw Z Iiv it ir ip PB B (W h[Y ~Z I $i |k h#h hg vZ 0Z IZ UsZ o~R Z nT Z m O Z iZ g ~~NZ aZ .~` @jn h}x}K}f Z NZ O}ZZ ki@ Z EZ AZ OZ Q~f~V '~ Z | ~JZ ] D FAB lZWl}y @k @j @ t}5i}Z KZ gn MZ TZ UZ .f}t PZ ~ ~QPXZ xZ |Z bZ AZ aZ _Z ^ZX ~:g } JR I t}L }r Zt } _y } _\ } _O } _] } _z } _w } _x } _{ D FB I C ~HhTh[ 'Uh4L I u I wh4x I y I vWJ$tYr_h9_w_F_UF dWsWBLQWaRpW@,oP_`qoF ~HMF ]|qlt]v^m TKdA\o]jQqZGF a$]q_v @mPV `jhqgKYPjg_RwpIAWVeT u~GAZVpp_m~NkW|Me LZ qRAqPp_g{ m|}qK[ ZYipygn HjAYLg~w$sF~vU&cdbt.rD'cTWdPXtKCHQBq `gb p]}WLga\$rjIP xWHH XXhgd O^r_xZon@bPgObmsq CyQ$O`}Wrn B o Qga ahBo~qOUaMpnH}$bMq\YkODHRAaOqT$KN}]Mdle| mL%_\ajOu yDdH$ul I{BK [ Z&bh ZwrGJW dhWxY!H;aa Np'b~cMbK\PckbO yPS HZlYDhEnT]ncEQ]__nr}$aLA[GhiKx@GZ U@j_ e_]DiY SDl^},rOB]_XkKMzKhHl X\rg|Buc Ds Sdcb u.L DORPa_H on vXN1hfV tm CG]SnpG @dPh ^rns}n Lb[QjZzWJP~ZKXp go v0^E bU ^etHuMHD] S%\c_Rsw~ACO^azIqxxzE rBx^QnYaMbz JEZ}lD{] MBr ]OkJr|K_LS[0gja yHIOYO i|yRHFVO fGvmEOHTH\xa kb{dKI[q j[ y0a HkXgdgjwgz Ei TjcBGsa BI RP a~p ~Na ^ubinP^W} fPCuuDWS"Kc[ rtWAq QT`lqkA a Q!a ^qZ{A ]|[ L^Z j]z IYj hyvl D\RjbW q} @HO1P^knK }OKa]IlG{j IHW_\fu.bE xUCdeGrU yZ IeYJgNvLEOT c b|q5a Y^OfJ^Wh^@wwpwagYHvnCFe Is Xt ffwbJF\GU?ddf sbBORjdPMrlSAlgP^b`| ofa f^OF_H mh { Ig Ybdhbbwfb G`GVPedsHs?bBsWRuH by~pxR~xQ MXd[Xbj|^z}SJ}mY`iV xaHm ZmjGzXhHmpRKARbQRdagXpIJ@HJN/YcEHEMxCRS agqqxb B`RxK`g[oOC~M ]Oma`Og|_Jbna}bMFd]GRlGw {`IaYgkhgvv@E~UMegouWDgn SP `Mnw}a Lb \k {{ zJ zY_HjbzF J_m Za iHyb H`Wb gZwb I/^Y/bi/b yKH^W]gbwdG+NWA ilFx)N~MytPsDikU}|@b |CuK @>k P ^nGD~^Ba~R]PLV` b v_kEWWpVWGW^Yal^Mb]\Al]mVs}Ip}Ue~" cqIes" X"hGxy Gz VfeD[tyOC^]5] {BXK@cmbNs5b D;Q S;rdg}tikqb`\almn|nnji XdhKQ x}dG|U kyn@H nJ |bL|l\_9HkAx?P`O~'_kFADTkXFafbAGkHwaVG(wk_~'nkU^+ckN~'\_OCkR;KaklQ4{18oewgG`^0'~beduNtD.mnxkf.GFv.wV|.aRR17d;|[kWQAf.`1gi@X0]X.=Tu#KLIQ2U.h G>cjoCUYC]n)JKi-Y+JFi-Tf_AU/`NlOx@{EN{QaIZij_p SXKbYMmm9zu9sqAl{Ama\n1+J_1Yu_;GN_i~U_Q8S_rWK_M2bAA|Ti,PEC|x%JAa-oC=\Ag>YHbW_Nffu>L_17J_0HAOkI!NYe@g{_gK?FC E;KSi4^1:R[ L0A\{Z]aCw==zBnwAbeNJG,QAW}me4TnCH;+K)VQvgAGfqHfky)JmI]LvMppB;7rLCiMrelMveQM;*v|w|`{^L\yfbhtI6JP14@PRmtvN/aPQ-PPCQ}wc8N|kFPaSVpFie~o;mmfrZ1IL^fUg^{J+YAsDkwqSFn XhYuAdAGeHtu_ DgHcg]qgFJXMJ6ecY[}NtkPBOMR wL_ ^Lk ffw RV] rDs ]Rw DbIkk gRz fHLgWDT USXkkg.r{ pUm Jq B J{sHnW} I%MGrl@ +/Og[s~aBq@Ns A`AtFakg oCu =vx yn u}wtL^L@fZLdf0ouWJdJFnJXt i5L mZA m\[ f2w a7i Av` IV ke Qmu E{b uN] Gk ly +NH DMV O`c wxC ^@{ fR{ JW M +}d AXa P'y k` j 4en f^S Tq E_ DD^ u;b A9] kV Oyd j 4s$] euP j 4yE hdD~ j 4w#B Yby .j 4~6[ j 4hOY j 4FA j 4S@G j 4j#Z j 4n D P'r kY j 4p"g _j 4[LW j 4K[r j 4D}DjAOzkj 4^ ej 4r$Cj 4] ugj 4VSRj 4l h)j 4p"Tj 4gDETkj 4vuj 4D uj 4^ykWRgfj 4Q(M+j 4h^kFj 4dV+yzP'skZMj 4u$hS]Odkj 4uO j 4f DO[|jRJfj 4`pPj 4@P kPj 4p!`bJP+IZP'ckJOAXdeYbj 4b!~j 4g`j 4M#Gj 4iTRa}j 4C^j 4D!akej 4fuj 4j [ETEj 4cYj 4h |j 4Wd"k{P'J'kqj 4U+LT!0`+ P+ `+p+k@P'O0kvQ'D2Q k2k|NAJj 4RK5e]5klj 4T|j 4RSPLbbj 4pD>j 4T ty]H;kej 4dsj 4CW j 4ZZj 4OtbOvCj 4Ayb++zbutej 4PtYbO)iIH RbCy`j 4CYj 4pD\j 4TLbQi`Mh CIMn }LMo vIZp[so\Qb+i |s+]mo+^l\zPHUkXr ECVdHWjl)h CV)n }Y)o vVs wLc PCg tSh cGp _jt _Ij chX@K{TKq c_Y@B