*Em@iJS>c @ jPHx mNoneEngineCoreSystemBPakBotpack BeginStateAnimEndBegin TakeDamageTickFireTimerDamagePickupMessage EndStateAltFirePostBeginPlayExplode ClientFire ProcessTouchUseAmmoClientAltFirespeedFlying MultiSkins AdjustAimFinishWeaponNewString AltFiringWeaponBaseTypeWeaponNewTypeBotIdle PlayIdleAnim TraceFire UnrealShare PlayLoadingProcessTraceHit GiveAmmo NormalFire ShakeView TWalk001 AmmoNameCollisionHeight SpawnSplashPickupAmmoCount PlayRecoil AmmoAmountUnrealI PlayFiring footstep PlayerPawnProjectileFireCollisionRadiusFiringRocketsMaxAmmo DrawScaleHealth ClientReloadResetClientInstantFlash MaxSpeedPlayAltFiring RateSelfCarcassProjectileClass PlayUnwind Projectile FireEffectSuperExplosion Explode3 TraceShotHitWall SpawnEffectBBioGelTrigger Repeater Explode2 ZoneChangeSetupLoading PlaySpinDown PlayRotatingClientAltFiring ClientFiringBlowUpProjShoot2 OnSurface TStom001 TBrea001 ParentAmmoBurnedAltProjectileClass FinishFireTournamentPlayer FireRockets DownWeaponGenerateBullet GroundSpeed ModifyPlayerPickupSetSwitchPriorityShootPlayReloadingRenderTexture ForceFireSuggestAttackStyleMass PlayWaitingRenderOverlays FastShootT2 ForceAltFireSwitchToBestWeaponThrustMomentumTransfer AdjustToss AttackingPlayFastReloadingSetHandExplo ThrowOtherMeleeDamageTarget ClientFinish ExplodingTFist TDeat001 SpawnEffectsMaxStepHeight TFigh001 ShootLoad AccelRateSetWall GiveWeapon boltloop spindownSelect TDeat002StationaryPawnPlayRepeatFiringWS setCharModeJZ FireBlast RotateRocketBShockProjAltPlayNormRepeatFiring Viewport SetTwoHandsstomped BShockProjTokkou_Pupae_A_TeamASAR WarnTargetInitfor ShootloopGS PlayDyingZooming PlayRFiringMutatorTakeDamageBroadcastLocalizedMessageClientPlaySoundWalkOut setBoomTimeDiedMover TDeat003 LavaDeathspinTChest SplashJumpjoltedJumpZ TShuffleSetRollSkin AltFireSoundEjectBShock Bminigun DestroyedSitting TweenDown BPulseGun ChargingSuggestDefenseStyleWalklungeStillShoot1PlayMeleeAttack NameArticleStab LungeDamage BiteDamage ComboMoveDownPlayThreateningSoundPlayRoamingSoundRangedProjectileGetUpDeadFatness ScaleGlow AddVelocityGiveTo WeaponSetMeshFell SetRespawn PlayTakeHit PlayRunningTweenToWalkingbCollideWorldSetDisplayProperties StopZoomPlayPostSelect JumpOffPawn ItemName PlayWalking SpecialFire BecomeItem PlayTurning ScoreKillStylePlayWaitingAmbushTweenToPatrolStopPlayThreateningPlayPatrolStopPlayVictoryDance GetString Decapitated PostRender RespawnTimeTweenToWaitingCheckReplacementTweenToRunningTweenToFighter shakemagFindInventoryType CheckTarget BBioAmmo BBioExploMSH BBioGlobNSBBioRIfleMutatorRegisterDamageMutator BBioGlobBPakWeaponMutator ClientFlash BBioSplashBBlade BBulletBox ToggleZoomBChunk BComboRingBDAmmo1BDAmmo2BDAmmo3BDAmmo4BDAmmo5 BEightballBEightballMutatorshake BEnforcer BFireBelch BFlakAmmoBFlakcannonMutator BFlakShell BFlameBelch BGalticAlt BGalticProj BGrenadeBHammerMutator BHealthPackBigFace BMiniammoBMinigunMutator BMiniWave BShockWaveBomberTentacle BPakMessageBPakSpecialTimerBPAmmoBPulseMutatorBRazor2 BRazor2AltBRingExBRipperMutator BRocketPack BSawMutator StartTime BShockCoreBShockMutatorBSeekingRocketBWaniHanabiProj GalticAmmoBSniperMutator Defenser SpawnDoubleBWarheadMutator MiniLordOMG PupaeWarriorChewTournamentAmmoPlayPickupMessageHealingAmount boltstartFear ThreatenFiringRoam SpawnRockSlapDamageTargetStomp TThro001 TSnif001T1TSit TPunc001 TSlap001 NeedToTurn StakeOutHuntingTitan ExplosionDead2BRocket bShieldbeltEndTimedoubleenforcerFire2 BSniperRifleBite FlakDeathBRipper SetUpSlave UT_BioGelProcessAltTraceHit PlayAltBurstboltendWingPlayFearSoundPickupViewMeshChargeBHammerFire1TournamentWeaponHit TranslocatorBSawAcquireshot2TGetUpTear ReloadCount BaseChangeAttitudeToCreature ScriptedPawn StartMovingUnwindLandPlayRangedAttackPlayChallenge RangedAttack TacticalMove bRapidFireDead3LandedBump ImpactHammerGalticLauncherSLASHSpawnExtraEffectsBBelchTouchPlayAcquisitionSoundDeathMatchPlusBEnforcerMutator bBioRiflePunchDamageTarget ut_biorifle BFlakCannon shredded UT_Eightball MFTexture bestDist bMuzzleFlashFlashYFlashO projStartbSetFlashTime ProjClass Misc2SoundSoundFireDir Misc3Sound SpawnSound ImpactSound AdjustedAim EyeHeightbFirebWarn Accuracy FireOffset CockingSoundDie Misc1SoundbChangeWeapon FireSoundPendingWeapon ViewRotationSwitchAltDamageTypeAutoSwitchPriority MyDamageTypeEbSteadyFlash3rdWWarheadLauncher ChainSawPAmmo enforcertemp MiscSoundbCenterClipYVictim SniperRifle PulseGun bMeleeWeapon ShockRifleUT_FlakCannonPlayerViewOffset DownSoundbForce FiringSpeedbRight RefireRate bHideWeapon bAltFirebOwnsCrosshair EndTrace NotifyActor bLockedOn SpriteAnim EAttitudeSkillTexUbAltWarnTarget bAnimLoopDamageScalingSoundDampeningSetPos bInstantHit bPointing AmmoType AnimFrameClipXReducedDamageType AmbientSound bWaterZoneCopyPitch PawnOwner Location bUseAltModeVictimsRoll PickupSoundSGOldFlashCount bWarnTarget FlashCount AirSpeed WaterSpeed aimerror shaketime DesiredSpeed bHeldItembUnlitChest bIsPlayerInv bDropDetail DesiredFOVtrail MeleeRange instigatedBy decorMass TimeSeconds Rotation HitSound Tentacle bSnipingOptionalObject PlayerOwner Eightball SetAlertnessNextDamageMutatorHit1Enum LocalMessage FunctionDAmmo2DAmmo3DAmmo4 WeaponLightFlameExplosion SmallSpark SpawnpointCreatureChunksDAmmo5 WaterRingWarLordPupae SoundPitchbIsPawn minigun2 enemyDist enemyDirtargripperIcons animspeedAngleThrownNDamage decisionTrackedbBotSpecialMoveSmokeLocationDVectorSmokeRotation NumPointsSmokeflak AltAccuracyrealLoc ChargeSizeRocketsLoaded RocketRad AIRating bTightWad LockedTarget FireLocation StartLocFireRot TempScaleAltRefireRate bPainZonesplashRandRot BioRifle bOnGroundGelaPlayer bHitWater SmokeRateSeeking MagnitudeVel InitialDirbRing bWaterStartNumExtraRockets SeekingDir MoveAmount NumPuffsStatePlayOwnedSoundThrowValueRandScaleDesiredRotationCountNewRot PunchDamage DrawIconYaw LightRadius LightTypePlayerSlapAttitudeToPlayerLodMesh AmbientGlowScriptedTexture FireTextureDispersionAmmoGasbag NextMutatorPawnActor AnimSequencebSuperRelevant SlapDamage bDeleteMe DefaultFOV bHurtEntry HitActordist PawnListNetMode PointRegioncarc DrawColorLevel GasBagBelch StompSoundChunk bEndFootStep EnemyRot punch1Ti sniff1Tiroam1TibStomp bLavaTitan realSpeed StompEvent StepEventStep PupaeBody PupaeHead ReturnValue ShotAccuracy bOutOfAmmo bFiredShotrndDamHit3Hit5 ChunkHit NumWallHitsbCanHitInstigatorBase WeaponClassColorYTransientSoundVolumeCTFMuzzleFlashVariations SoundRadiusFontRotatoriRInstFogPauserVectorZ InstFlashCanvasUT_ShieldBeltCStruct LoadAnim RotateAnim FireAnimName StrProperty InventoryStructProperty ScriptTextSwingjTournamentHealthAmmoPlayerReplicationInfo Decoration ZoneInfoUT_SpriteSmokePuffbExtraEffectsSpawned HealthPack HurtRadius GameInfoPhysicsIgnite LevelInfo bProjTarget TextBufferWeapon ShockProj RelatedPRI_1PBolt FlakAmmo Miniammo BulletBox hitdamageObjectTournamentPickup ShockCore RocketPack ExploSoundYawErr ShockExplo Razor2AltRazor2missileDoubleSwitchPriorityLightSmokeTrail UTSmokeTrailRange ImpactMark ChunkTrail BladeHopper WarHeadAmmoWarExplosion2 WallCrackUT_Superring2UT_RingExplosion5UT_RingExplosion3UT_RingExplosion4UT_HeavyWallHitEffectUT_LightWallHitEffect UT_GrenadeUT_RingExplosion UT_ComboRingBioAmmoUTChunkBigEnergyImpactUT_SpriteBallExplosionsupershockbeam ShockWave ReturnSoundShockrifleWave ShockBeamSawHit RocketTrail RocketMk2 RipperPulseMTracer TensionSoundCriticalEventPlus UTFlakShell DoubleName FireAdjustMiniShellCase UT_ShellCasebInstantRocketSoldierbNovice bQuickFire bNoviceModeVel2DCaptureSound3LastHit bFireLoad AffectorbCanClientFire bForceAlt ChainIdleSlaveEnforcer bIsSlave bFirstFire Minigun2m AmmocountAmmoCountJunkAmmoLed AmmoCountBar miniammoled FlakAmmoLEDLEDFont LEDFont2LastShellSpawnAimDir PulseGunR PlasmaBeamTapTimeshock RReticleOwnerLocation StillTime BioAltRepClientRocketsLoaded bClientDone bRotated bPendingLockbMultiRockets NumSplashNorm2D ShockSizeX2Y2OwnercntClassProperty NamePropertyObjectPropertyFloatProperty BoolProperty IntProperty BytePropertyMutatorWallAB LifeSpan DamageTypeFX DrawType SoundVolume nextPawnratingStartTargetPackageZonebestAim InstigatorRegion LastSeenTimeGameEnemy NewVelocity HeadRegion Velocity AccelerationbMeshEnviroMapWeaponPrioritybDamageTriggeredRate StartTraceEventInstigator HitNormalNewZoneClassRole HitLocation NewWeapon Momentum projSpeed damageScale BestTarget actualDamageKillerP RelatedPRI_2hand UDamageFXHitLocNum bForceFire TweenTimeOther DeltaTimebForceAltFireCarriedDirCalcDrawOffset RemoteRole RandSpinTexturebHighDetailModeBelt_fx shakevertAltProjectileSpeedProjectileSpeed DupRockets HandednessHealMaxDynamicLoadObjectRegeneZ2Other2WeaponReplaceType BPakDamageSPTimerSPCountSPFlagoV |1Ơ=$:et=$:etX'X'X'X'X'X'tX'> YX'tX'ttX'X'X'X'ѸBX'ѸBtt=$:eԝXԝX&̻ԝX&̻ԝXԝX&̻ѸBԝX&̻ѸB]Botpack.TournamentWeaponJGM;HWs L# bEsBƴ1OjQOq\|hx] yԝXԝX1!t"!t"ڴ1Iɔ rC$;E>$@E $Chc>VhkhK#ɳ 11!t"ڃԝX $BG Scf2/ LLjZ ::$#o1 bEԝXI^zI|P# j WDOi~vde] DgMAT}ObI]f\@mw+@iVEPYmS@q~C\|h ZԝXԝXԝX9$AaDvq v Qea@{LrW}Y}lD"tcuڻ/$$@E $zCoW`XbNoZz~dF"@< YR@G> Yttt> YR@G> Yt@ѸBttt@t@ѸBtѸBtѸBtt@ѸBtѸBtѸBtXu6> Y> YtXu6> Y> Ytt> YГt@tt@ԝX}M}MԝXԝXԝXԝXԝXttL]ԝXԝXԝXԝXԝXttԝXttt> Y> Yxxxxxxxxxxxxx> Y> Yx+f." ]! You got the Avaricious AutoMag.L X"Pӷݤ ƒԝXԝXԝXt$D>$@E $CjhRAnE[Y|e^`WSd&Qg@TfbXQkrN xe86--$ kqq ]2C.plg]Start Special Time!!N]Stop Special Time.pGNK-@VKTTD 5a@@( JH\K?deYX2f[52X0"8"\]('You picked up 2000 Avaricious bullets.Su_ wr`BGvz]xbRJ|a u-BHC??,? ?,r- $$B> ףo$b>-'aFOra!aq!Y Q=l]cnXjUoJf5h\mHYGsI LOiIn{~Ez M#pZoOjԝXOjOj1$;F $HC6$ A,$ AFe v 2gq YԝXѸB ƒԝXԝXttԝXt> Y-%ntt_ԝXttѸBԝXԝX_ttԝXtttѸBL]tttttttttttttttttԝXttԝXԝXԝXԝX__ttԝXԝXtttѸBԝXԝXԝXtԝXL]ttt+i.",^[]You got the Mega Shock.ps Q 2rݫw`XIq`XIqԝXԝXԝXttѸBԝXL]ԝXtѸBtt+D."2]You got the I.S.2.R.lB{2HsфCѸBtttjatttL]tԝX> YXu6ѸBtttttttԝXѸBttѸBtttԝXtԝXttԝXtѸBѸBѸBѸBѸBѸBtttѸBtԝXL]ttttԝXtttԝXjajajajajaja+d."BP^t]You got a KAMIKAZE.gE ^2+tT&]ttttttttttԝXԝXԝXԝXԝXԝXԝXԝXԝXԝXԝXԝXԝXL]L]L]tԝXttttttttttԝXt[$E_$CZ$CN$HCP$C]*)You got the Akai Suisei(Bouya Dakarasa).sqI v#uy+ɳ $Cp @ Q#vbRroOjԝXOjOj1 $HC6$ B,$@AOb c2&w5)`XIq`XIqԝXԝXԝXttԝXttttԝXԝXԝXtԝXԝXttԝXttԝXtԝXt> YԝXԝXԝX> Y> Y> Y> Yt] You got the Vamplic Chain Saw.ds]w2NxIhOantѸBtѸBѸBttXu6tѸBttXu6> YtѸBttѸBѸBѸBttttѸBtѸBt> Y> YѸBttѸBttԝXԝXԝXԝXtԝXtOjOjԝXttԝXtt> YѸBԝX> YtԝX}MѸBtttԝXttѸB+f." ]! You got the Avaricious Minigun.J QR#yڻj ƒԝXԝXԝXtWtWIW@WMWK$zE>$zE $DcF b" z^]x7ԝXԝXԝXԝXԝXԝXsXUԝXsXU$ZE>$@E $Cu"qc[ T;{;UxN726n kC25|]J.ԝXtѸBѸBѸBѸBѸBttѸBѸBԝXtԝXtѸBѸBtԝXttԝXttttttѸBԝXtԝXttѸBtttԝXttttttX'ѸBL]+f."dBA^ r$C]You got the Flame Waver.g N P+}di $HCy8AH--8a O8$a  "@8a 8$8a L8$ |n @2qQyO_tԝXԝXtѸBѸBt___ԝXttԝXttt> Y+K."XBN^u]You got the '!?'.`r S# @ 'u ƒԝXԝXtOjOjttOjOj$C>$C $D9$@6$C,$CYSK [ I2.A[PZhƐѸBttԝXtttԝXto1o1o1 bE bE bEo1o1o1 bE bE bEѸBttԝXtttѸBtѸBԝX> Y> YXu6sBƅttԝXtԝXt> Y+g.",sBt]! You got the Instant Remover II.~F *z26-::$ -|- % ?a a BCB> #$@E $HCL XV d|Iu2KxYtsl0"8"]%$You picked up some Big F**kin Ammo.6bodkbR|FuBt\FNahgL_cs7BWHIa_]SsWIvoA ~#yuɳԝX$D $B6$ A,$@A^@BC{F~A@2Dx0"]&%You picked up some Super Bullet Box.GAV@JMZtvHrKH@RWF2U-s+e0"8"]You picked up some R3 Blades.eLvW ZXL l9$?F z~ `x33S@L=^::$C?,x VUY]`Z{n_2dS"W0"8"\] You picked up a KAMIKAZE Cell.,EN2f0"8"\]! You picked up 500 Flame Shells.Ue2g5b0",8"] You picked up 500 Remove Pack.AEh2i9_0"X8"\]You picked up a Mega Core.Fhdl2ly8ZGj0"8"2\]You picked up Galtic ammo.^] Galtic Ammo\S}m`h x2o§8!rѸBt+lh."B@]You got the Galtic Launcher.m$@YYvI w~|^a xy \WLu':1q-$qq!y!Lv!L  UOE!U--s -s'::$Fa  "@FL>F$a!@@@? r Vy_(-'a!faao$?9a!*aaq!wa&!CL=o$ bL@xW C&r.C*::$ wC?,::$C4 D?, E??a  @ HCa | P>Wsr B;O ^'T@1RxyrүԝX1qdlԝX11 $AY S lK8Un.  Mn?>S ` t>^gZ`^w.^*K%^K,TK.^!B=K K W nB5Ln Tn?,-Lm::$L?r*L?1L?,a$u!va!? #@?)n?,#6333?no$ra $a!DHB|:#-qa  !  YeN!X$::$ ?b?ta eL?, t$ s|"uY.svYa  @XY YmYU QRIG}w.V*.V-x::$V/ D?, ?a 4::$o$4-::$6-?Za  R?,PRZ$4a  PRL?RRff濫L?a+P?,db>ii>a $? zDi(?a $? zDa $? zD kN_ H::$?6-ka a='::$N6ND??6ND??6ND??9N?,?,d6-ff&? T JG.rX$::$ ?b?va JM?, v$  L py%C.Fp?,6-'Aw * -' N-(?,dp?&w * -( -(66.Botpack.PulseGunL ,w * -( -'66  l Z#7'b.. hACT 6A6CPTիZ?A?իZ?C?{-G w*f # ?,(*  33s?P?' T. $tITD0@((P?'9*-G(].HegPT&]eg9AC f A @+@r*y.2ry*A  a @Ps H@9@F6 --y' y5(b.. Y|jU 6Y6|6j. wUD'-I UUջd|?,կd?,z,Ajdff?ay U m B ( a ף= G N3 -(-(K!/a0 NJN L10XwX*{XXX_a$ w EF 7a$? ?zC?a   D, , E%EDa  Pa  Pa  Pa  Pa  PEl lz ;.w;*;;-'?H??,??,-$$ H??,@??,`6$6=,6$;;/apppXSD.SD?, ?, D -( b3fb`wb+ba/!Db?%XXb  K GT1KIwGGa/!DJJG  ~t U y Ui$l b a* aQ8> ODN!|$::$ ?b?ka DQ?, ?,C`jGDk$ zwgcw`>?Bw?a![`>zw333?a$a$a!Z`>Iwfff?a!`>a&!C> }!w}+}a/!D}?%ha ! hh?,CC?, VZ/6H mHk"-m--k--(-(-w.*%-m:.%8 -k:.%8  p H S(tJ'$=.aH @@L= Eo V2m )2i(tttw"]You picked up the X Helth +z G X= G  kU f+29G T%P r*  $.ax @@L= a3b`wa+aa/!Da?%AAa  j V3va$? ?zC?k?,<a  VJ?,PJa  VJ?,P q \ :(r* w*'.&q!(-'-'\- ?%. /-#U5-U U!tU@@ d E  kr*'.i&q!-'-'. /E  _b% l D b/ea/!4.)?.=̾#"DC>Cw*E- $@.$@.-aD  \@L= mR E, , R%REa  Pa  Pa  Pa  Pa  PR G@TNF -8F ( ^b`w^+^a/!D^?%QQ^  Z B f *a&![B  KSF a$? ?zC?a   `, , S%S`a t Pa I Pa @ Pa M Pa K PSl P Tj+ZS6}Z,Zp0Z6|=,6|$6|$Ta@ AZ |  @ C X{a&!*C   DH ;!/a0 H:H L10-']w]*{]]]Wa$A B vp+)!* -a&!*v V kr6BPka+B C uqO3-!* =a&!Cu @^p_-3^F^L>a!Z?L>j^>a!?L>^ #?a!C?L>^@?a$a$a!m?L>a!q?L> B K-09:K}?,a  KPK J P<6fP\P`P^PWP[  Hri@Dw.*" ?!W]w.*6?pr.?" ?!W "ygz`^w.y*b%^b,Tb.y!E=b b jj~q!VjFpT|:GF#?a$a$  w >sD?,,?,w%wsa u Pa u Pa u Pa  Pa  Pw#a O dOd\?,d`?,d^?,dW?,d[?, O w+`a$? ?zC?a  wI?,PIa u O*a$? ?B?k?,<a  OK?,PKa  OK?,Pa Q _&EO:r_*vya y@FJa ծ6?,y6b6aa  av?,Pvw_ w_ w_*_+ .a`jGy!oCB!o`jGa.,d  yw`<xO,O>a!@333?>bPO333?a!K333?>ba!j333?>a$a$ { iz+},,a%a}a t iPa I iPa @ iPa M iPa K iPa tjy*j?,6-' 2-(?,d6j66jj?&.Botpack.Minigun2L  j?%66?,_66?,i  N `VK9Ub'b>a&!@`SFb333?a&!K`Sa&!j` Y `j- w*kSA}k,kp0k 6N=,6N$6N$`aA Ak N   L kr*'.. DPdDD.%a . #pA&-'-'6 g.c.c /b@cc 6D'-ASTa  !6A?,"666A6S6Ta p !6Lq!( o jr*'.}&. /-'-'b.. T[\7 a  !7T?,"776T6[6\. v7D'-a } 7jq! ^ 4 t . SRh4 6464@6464g 6S6R6ha g4  v TO&!T--y -y'::$Wa  "@W?W$? Z@A `]>L=^::$C?,] dao U- a *  Q 9D.a$? ?zC?a  9?,P{,, k%k{a  9Pa  9Pa  9Pa  9Pa  9Pkp ~ @ na&![@  ^ i D H YoUHS-$-(@-, mP,m[$q=? #>a/!4.?%?,>?&> Y *--Q>zQ. Jng6?%F?F-Ba ! ?,Jծ>6@ng?,wB*B[uծ>>Jի>L>Fnծ>?g?,  a V#- =.b== rYH{ =H= $tI{D?,((r9o{?'rE=Hmno{&EmnrYH mY k#^  ƒԝXԝXԝXt$zE>$zE $D k> x [I#M[V UP@b'w*%C.rC*76C 6 ?,< ?P&P%OwC* 6 6C ?,P&>OO6C 6 ?,)\=L= x E<+zEECEFE~EBEA H kF"Pk66j66{j@ j(' _ Fe*F)wO*GFO9GF}FF$}w* eF Z M-95MM?,w*+a N MPM+ +!t+X+a y MPM+ +!t  ~iRi5-i?L??,?,X e 3,.$r,*q!f :,%U,a/! ?r,*).,?,,$ fe9fu>a/!4.=w*Efu>9&., .=&.:.,.$a  ! .h*!T a h {c($aa!H v %g4 <ia %D?,i$\a  %D?,\$ha O %D?,h$Ya \ %D?,Y$La  %D?,L$@a  %D?,@$V%a t cj .OS6}O,Op0Oc`aAB?,? A?? (, 6&=,6&$6&$6&$6&$6&=,ca`B`AO &  [ E@@r*j.2rj*E Z5gb.. lQjo 6l6Q6j. ^oD'-]X.wX*X=̾#C>C"Da oea/!~.-* X A  i33s?(./r(*q! Z9( A( bibZ w.A*-'.A\(CZa??,( a??,( :(%:(%-(  QIj1&I %Q$ !&H$   fnOj&C6n-n!]q!kAn BF  j qy3YCb.. nrrB 6n6r6r. $tIBD((U 91.HqUUBKr1* r1 r1 ~w.*.)1+  .q@r1-1a/!Aa  qUPU o $&o:r$*SEW E@F~.vw~*~=̾#C>C"DJW ծ6?,E6P6K w.$*,.$F.a  WS?,PSa X WS?,PSw$ w$ w$*$/ t,.W`jGE .PN-x w.::$.-76d6. R?./a/! .-.1 D`@d?!k.* Dd?!D<.-a$@Ka$@a } aG/|$::$ ?b?Ra aS?, ?,B`jGaR$ @3gZd C% **.3 e 3?3?3?3?3?3? [H# b.. Wuo- 6u6o. $tI-D0@((v-իH?u?իH?o?r9v?'r_.HNKv-oo,o%N-?,a -?,`rPv-&_NK9uo R 0@-p'%@r.*0%T.  !TP!?o:L>.a/!L0%>^!?0%,!?!? L>>[6T!0&>!? w.*'.-0%>!?T6T?,0%L>0Aff&?P I W -8r* r r r* u xuz?,ra/!izz+; D?x.z`FHx+-a/!Aa  zN?,  F tjN^9ta/!I$74ta/!k$7$ CD wIPo$b?-'aFw]M?&:D?,&}?,w@@:%-:%-q!Y  J G&f= :rG*lG @FJGG ծ6?,6S6R s }Ue-'#r*'.T,q!-'}cq!-' sfn=fa/!V ;w.f-8  h@ h:} *y ]V7M - -'/a8 4C]:9w ]l?l6ff>6I?l?,m DI ի?իI?10-(b? sx=xa/!K ;w.x-8  y &O.ra fQPQnnw w w*-a/!Aa  fQ?, a  @ Ba/!  L>.\.Ci_, ,.L>i @7 _,d.fի?_Ci:.%@a fQ?, @@?,BB`jGfQ?,  uC Q | {\u? p.rp*\-::$ / /? */ eCD//? p2)33>/? Neu<e*::$ Z ?,d6ZJ>/?^-6Z@ PZ [ _ W^-q!bhw.*Rr.*.$h.$.r**q! :%#2q!Q @?__L>b?\?&a/!4w*>P  6>6>?6>6 ?@2?6>6 ? >`Dx5 `DxQ 6`6D6x::$a/!4mQ?,`mQ?,<`XabdmQ'\wX*:X:$&Xbd9Dx2q!Q L &q 8r* r r r* ?ra/!i?2 ?,Pa  2DPD<.a  22 '.2իĆrwZ-2 ?,Z ; D?.2իGr-a/!Aa  2D?,  t [#J sb.. cQJ .Q. $tIJD?,((c9J?'c.HL[Jh.HL[JQr* r r -a/!Aa  L[P[ a/!4.%. & [cQ) , .L?hcq..& Q }XN5Vmgb?>Vի>ga !zD('w*o$ Vի>ga P!zD('w*o$V?,(mի>ga [!zD''w*o$3L>V?,(mի>ga !zD('3w*o$ \R {g\O.aC?,.a!Kfff? LCY BI o$b?-'aFBZM?&5D?,&M?,B@@5%-5%-q!Y u?,C!S?u]?, sa  ]a  ]o,,M%Moa A !]PMoa gj&] &>_Ga  ! ?,Rծ333@6@p`?&wG*G@GTuծ>>RծL>L>pծ>?`?, r a  hePew  w  w *d - a  @ B- -76h6  R? Ca/!4-a/! .- ) ,.h?R^ ( ,Z.h`FR - a/!Aa  he?,  v !:t-(0%.sU:.% v!" dz YI.,d 7r*'.G&q!(-'-' a/! .- ff&??A   ?,??@@ . /#z WgrB6S b ֯tt11ԝX____ԝXtԝXttttt> YttttttԝXGԝX1$d$%D:"_9$@6$\C,$fCP koZ r*k.uakua .OuV>Ur.Z- - V SS YB6U 8hVލԝXԝXԝXԝXԝXt]H]H]H]H]H]H]H]H]H]H1$RDtgdy|zd$HDE$@Fp$DB$HB:"XnC] the m$zF ` zc_ a^z|^z&_w*$cz|J|@{  qO`a$`@733>a!M333?=? a  #L?a<" @w *   ]  6  6  6a!K333?= a  #L?a<" @w *   ]  6  6  6a!t333?= Z '@S p%.-Hr.*.-ur*'%ha/!L'&>h7-Hha!Ha!Ga!q&L?'&>hn-H #'&h-H2  ?'%L=b8  >hX6 6 ?,'A?>h'A> sL=La/!K ;w.L-8  hlM 1?^J aq,,\%\qa t Pa I Pa @ Pa M Pa K P\V^a \b`w\+\a/!D\?%NN\  x5 Qb.. uvzG 6u6v6z. vGD'-Wax G  Y 3 a } o f?}f?fr.* L>q!D:.%q!D g G</w sc* acw*  Q- ' g R$a/!4y.q!!q!b *a/!wa/!b ' A I>R-x'a$@a!l?w.M*.M-::$M* D?a ~a(b>~,a&~&a  P*6*6**&*w?*6&*w&%#L=#L=&%#L=#L=ի?,r ~ oJ~oI~DC4~& zP6zca  Izc ?~c~&  P L@V%B.zrB*+a/! .-L%Ba/!LL%>LA?B  .? po ^5d )=$:ettttttt> YttttttГttѸBѸBѸBѸBѸBѸBѸBГtttttttt=$:etttttt> Ytttttt[$E_$CZ$CN$HCP$Cw$AD f YK|{G{a/!K q!~ P>igwPO::$P) DU`jF!]GU#  z (r* w*'.&q!(-'-'z- ?%. /-#5 y- S @\G.r* ^.)&X)%)%r^*-?, wCpI 6w6C6p-- ID'-Y vID'-xw^* b&bw*l.tw* wl*-(l*-(-'J@8- -J@-~&H%-~@IկJ@CկJ?,pw?,@I~-u?%?, -6D?6?Xu``@ -6D?6?,?Xu66w*#a  !@#e# )?%# fff?L>{"a !@" )O,-"-f'{?%" fff?L>2,?%?, -6D?6?X,`@ -6D?6?,?X,66w*#a  !@#e# )?%# fff?L>2"a !@" ),-"-f'2?%" fff?L>1?G-(~-v!-'&%?%-( d Y5r*'.. F_`FF.%a . #pA. ?F&q!-'-'. /Y5- r[]G[a/!K q!~  tX  r* a/! } 6#?w.*Yanm}?,. }}(#@A@A@AYwY*8 X &q!-'a/! a!r$r.::$.-?,..`. /-'5-X Tq oqa ! qq?,CC?, p \?u! "r*'.&-'-'t>. /C?,.\q!q!! G E-l-mHH[-m'w*}a/! a/!`g=DHDH%-m(Dw*-a/! a/!`d C& **. e <w*a/! a/!`% w *w. *:%:%. . . D?,?&. . . .   Xjw*Sa/! a/!`S%, E | u! "r*'.&C?,.. /-'-'tfff?|q!(q!!  sq5/Cb.. cdet 6c6d6e.& v_t%'-F >aq t V XOk NLX-)wk*kaa(, gff&? M cJ][chlD[C4l& {P[6{fa  h{f [?lfl&  CpO2 op- S-aa  "@a=-'= E w V] 4a?# $c VVZ2?XC?Vb? g jL$::$ ?b?sa ji?, ?,C`jGjs$a TwTP::$T* DJ?Ka  JK$b?a c Z*BWa  Zm?,W$VZa X { T4aL># $| lJdn$::$ ?b?da lI?, d$a v !la w<igwwO::$w) De`jF!]Ge# c{N!|$::$ ?b?ba {R?, ?, B`jG{b$ B oL$::$ ?b?|a o~?, ?,B`jGo|$a z Mo]- M *  w ~ Vf 4a@@# $L yfo+t-'o$?9a!*aa!*aq!wa&!*L=o$ H~@\M>igwMO::$M) DV`jF!]GV# e Se5',<S*w* eS CzL*:1R-$Rq!f!~v!L g WG/|$::$ ?b?_a Wf?, ?,C`jGW_$ l s~ ns9ss?,2a!ZL>l6--s'? C Nc<<bNb  } g@: %@r.*g%Y.  g&Y?Y?g%.?8Y>.? u GJ)pGVWDpC4W& {Pp6{Ea  V{E p?WEW&   _nG_VL>?--3![ _{.>_=a $a!AV_{.>a!V>a![V h k Yb T ]JH::$ wB!I!!" M P JO OIƠA]BPak.BEightball}// ==================================================================== // Class: BPak.BEightballMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BEightballMutator extends BPakWeaponMutator; H \[ Q b<.* nX xw * a  c 2ncC.?,a!^??-L> Z Y// ==================================================================== // Class: BPak.BEnforcer // Parent: Botpack.Enforcer // // // ==================================================================== class BEnforcer extends Enforcer; simulated function PostRender( canvas Canvas ) { local PlayerPawn P; local float Scale; Super.PostRender(Canvas); P = PlayerPawn(Owner); if ( (P != None) && (P.DesiredFOV != P.DefaultFOV) ) { bOwnsCrossHair = true; Scale = Canvas.ClipX/640; Canvas.SetPos(0.5 * Canvas.ClipX - 128 * Scale, 0.5 * Canvas.ClipY - 128 * Scale ); if ( Level.bHighDetailMode ) Canvas.Style = ERenderStyle.STY_Translucent; else Canvas.Style = ERenderStyle.STY_Normal; Canvas.DrawIcon(Texture'RReticle', Scale); Canvas.SetPos(0.5 * Canvas.ClipX + 64 * Scale, 0.5 * Canvas.ClipY + 96 * Scale); Canvas.DrawColor.R = 0; Canvas.DrawColor.G = 255; Canvas.DrawColor.B = 0; Scale = P.DefaultFOV/P.DesiredFOV; Canvas.DrawText("X"$int(Scale)$"."$int(10 * Scale - 10 * int(Scale))); } else bOwnsCrossHair = false; } function TraceFire( float Accuracy ) { local vector HitLocation, HitNormal, StartTrace, EndTrace, X,Y,Z; local actor Other; local Pawn PawnOwner; PawnOwner = Pawn(Owner); Owner.MakeNoise(PawnOwner.SoundDampening); GetAxes(PawnOwner.ViewRotation,X,Y,Z); StartTrace = Owner.Location + PawnOwner.Eyeheight * Z; AdjustedAim = PawnOwner.AdjustAim(1000000, StartTrace, 2*AimError, False, False); X = vector(AdjustedAim); EndTrace = StartTrace + 10000 * X; Other = PawnOwner.TraceShot(HitLocation,HitNormal,EndTrace,StartTrace); ProcessTraceHit(Other, HitLocation, HitNormal, X,Y,Z); } function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) { local UT_Shellcase s; s = Spawn(class'UT_ShellCase',, '', Owner.Location + CalcDrawOffset() + 30 * X + (2.8 * FireOffset.Y+5.0) * Y - Z * 1); if ( s != None ) { s.DrawScale = 2.0; s.Eject(((FRand()*0.3+0.4)*X + (FRand()*0.2+0.2)*Y + (FRand()*0.3+1.0) * Z)*160); } if (Other == Level) Spawn(class'UT_HeavyWallHitEffect',,, HitLocation+HitNormal, Rotator(HitNormal)); else if ( (Other != self) && (Other != Owner) && (Other != None) ) { if ( Other.bIsPawn ) Other.PlaySound(Sound 'ChunkHit',, 4.0,,100); if ( Other.bIsPawn && (HitLocation.Z - Other.Location.Z > 0.62 * Other.CollisionHeight) && (instigator.IsA('PlayerPawn') || (instigator.IsA('Bot') && !Bot(Instigator).bNovice)) ) Other.TakeDamage(200, Pawn(Owner), HitLocation, 35000 * X, AltDamageType); else Other.TakeDamage(90, Pawn(Owner), HitLocation, 30000.0*X, MyDamageType); if ( !Other.bIsPawn && !Other.IsA('Carcass') ) spawn(class'UT_SpriteSmokePuff',,,HitLocation+HitNormal*9); } } function SpawnDouble() { local Pawn P; local Inventory Copy; if (SlaveEnforcer == None) { P = Pawn(Owner); // spawn a double Copy = Spawn(class, P); Copy.BecomeItem(); ItemName = DoubleName; SlaveEnforcer = BEnforcer(Copy); SetTwoHands(); AIRating = 0.4; SlaveEnforcer.SetUpSlave( Pawn(Owner).Weapon == self ); SlaveEnforcer.SetDisplayProperties(Style, Texture, bUnlit, bMeshEnviromap); SetTwoHands(); } } function SetSwitchPriority(pawn Other) { local int i; if ( PlayerPawn(Other) != None ) { for ( i=0; i<20; i++) if ( PlayerPawn(Other).WeaponPriority[i] == 'doubleenforcer' ) { AutoSwitchPriority = i; DoubleSwitchPriority = i; return; } } } simulated function PlayFiring() { PlayOwnedSound(FireSound, SLOT_None,2.0*Pawn(Owner).SoundDampening); bMuzzleFlash++; PlayAnim('Shoot', 3.2, 0.02); } simulated function PlayAltFiring() { PlayAnim('T1', 3.8, 0.05); bFirstFire = true; } simulated function PlayRepeatFiring() { if ( Affector != None ) Affector.FireEffect(); if ( PlayerPawn(Owner) != None ) { PlayerPawn(Owner).ClientInstantFlash( -0.2, vect(325, 225, 95)); PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); } bMuzzleFlash++; PlayOwnedSound(FireSound, SLOT_None,2.0*Pawn(Owner).SoundDampening); PlayAnim('Shot2', 3.8 , 0.05); } simulated function PlayNormRepeatFiring() { if ( Affector != None ) Affector.FireEffect(); if ( PlayerPawn(Owner) != None ) { PlayerPawn(Owner).ClientInstantFlash( -0.2, vect(325, 225, 95)); PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); } bMuzzleFlash++; PlayOwnedSound(FireSound, SLOT_None,2.0*Pawn(Owner).SoundDampening); PlayAnim('Shoot', 3.2 , 0.05); } //////////////////////////////////////////////////////// state NormalFire { ignores Fire, AltFire, AnimEnd; function Timer() { if ( SlaveEnforcer != none ) SlaveEnforcer.Fire(0); } function EndState() { Super.EndState(); OldFlashCount = FlashCount; } Begin: if ( SlaveEnforcer != none ) SetTimer(0.20, false); Repeater: if (AmmoType.UseAmmo(1)) { FlashCount++; TraceFire(0.2); PlayNormRepeatFiring(); FinishAnim(); } if ( bIsSlave ) { if ( (Pawn(Owner).bFire!=0) && AmmoType.AmmoAmount>0 ) Goto('Repeater'); } else if ( bChangeWeapon ) GotoState('DownWeapon'); else if ( (Pawn(Owner).bFire!=0) && AmmoType.AmmoAmount>0 ) { if ( PlayerPawn(Owner) == None ) Pawn(Owner).bFire = int( FRand() < ReFireRate ); Goto('Repeater'); } PlayAnim('Shoot', 2.8, 0.05); Finish(); } state AltFiring { ignores Fire, AltFire, AnimEnd; function Timer() { if ( Slaveenforcer != none ) Slaveenforcer.AltFire(0); } function EndState() { Super.EndState(); OldFlashCount = FlashCount; } Begin: if ( SlaveEnforcer != none ) SetTimer(0.20, false); FinishAnim(); Repeater: if (AmmoType.UseAmmo(1)) { FlashCount++; TraceFire(AltAccuracy); PlayRepeatFiring(); FinishAnim(); } if ( AltAccuracy < 3 ) AltAccuracy += 0.5; if ( bIsSlave ) { if ( (Pawn(Owner).bAltFire!=0) && AmmoType.AmmoAmount>0 ) Goto('Repeater'); } else if ( bChangeWeapon ) GotoState('DownWeapon'); else if ( (Pawn(Owner).bAltFire!=0) && AmmoType.AmmoAmount>0 ) { if ( PlayerPawn(Owner) == None ) Pawn(Owner).bAltFire = int( FRand() < AltReFireRate ); Goto('Repeater'); } PlayAnim('T2', 3.8, 0.05); Finish(); } state ClientAltFiring { simulated function bool ClientFire(float Value) { if ( bIsSlave ) Global.ClientFire(Value); return false; } simulated function Timer() { if ( (SlaveEnforcer != none) && SlaveEnforcer.ClientAltFire(0) ) return; SetTimer(0.5, false); } simulated function AnimEnd() { if ( Pawn(Owner) == None ) GotoState(''); else if ( Ammotype.AmmoAmount <= 0 ) { PlayAnim('T2', 3.8, 0.05); GotoState(''); } else if ( !bIsSlave && !bCanClientFire ) GotoState(''); else if ( bFirstFire || (Pawn(Owner).bAltFire != 0) ) { PlayRepeatFiring(); bFirstFire = false; } else if ( Pawn(Owner).bFire != 0 ) Global.ClientFire(0); else { PlayAnim('T2', 3.8, 0.05); GotoState(''); } } simulated function BeginState() { Super.BeginState(); if ( SlaveEnforcer != None ) SetTimer(0.2, false); else SetTimer(0.5, false); } simulated function EndState() { Super.EndState(); if ( SlaveEnforcer != None ) SlaveEnforcer.GotoState(''); } } simulated function bool ClientAltFire( float Value ) { GotoState('Zooming'); return true; } function AltFire( float Value ) { ClientAltFire(Value); } /////////////////////////////////////////////////////// state Zooming { simulated function Tick(float DeltaTime) { if ( Pawn(Owner).bAltFire == 0 ) { if ( (PlayerPawn(Owner) != None) && PlayerPawn(Owner).Player.IsA('ViewPort') ) PlayerPawn(Owner).StopZoom(); SetTimer(0.0,False); GoToState('Idle'); } } simulated function BeginState() { if ( Owner.IsA('PlayerPawn') ) { if ( PlayerPawn(Owner).Player.IsA('ViewPort') ) PlayerPawn(Owner).ToggleZoom(); SetTimer(0.2,True); } else { Pawn(Owner).bFire = 1; Pawn(Owner).bAltFire = 0; Global.Fire(0); } } } \ OX eƠ|]BPak.BFlakCannon b x } u o  y// ==================================================================== // Class: BPak.BFlakcannonMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BFlakcannonMutator extends BPakWeaponMutator; !BA g U ; P C:w.*:.%A* y i )M>-%%?%&-' * Z// ==================================================================== // Class: BPak.BDAmmo5 // Parent: UnrealShare.DAmmo5 // // // ==================================================================== class BDAmmo5 extends DAmmo5; U ?w cC.?,a!^??-L>  f rG -'  a kBe -' | // ==================================================================== // Class: BPak.BFlakShell // Parent: Botpack.UTFlakShell // // // ==================================================================== class BFlakShell extends UTFlakShell; function Explode(vector HitLocation, vector HitNormal) { local vector start; local int i, j; HurtRadius(damage*2, 150, 'FlakDeath', MomentumTransfer, HitLocation); start = Location + 10 * HitNormal; Spawn( class'FlameExplosion',,,Start); Spawn( class'WarExplosion2',,,Start); j = 8 + Rand(8); for (i = 0; i < j; i++) Spawn( class 'BBelch',, '', Start, Rotator(VRand())); //Spawn( class 'UTChunk3',, '', Start); //Spawn( class 'UTChunk4',, '', Start); //Spawn( class 'UTChunk1',, '', Start); Destroy(); } _ m T)X S 2Ba! @$.@ {mk cƠOMBPak.BEnforcerM m 5-(  r .%(&-(&-R l{//============================================================================= // BFlakCannon. //============================================================================= class BFlakCannon expands UT_FlakCannon; // return delta to combat style function float SuggestAttackStyle() { local bot B; B = Bot(Owner); if ( (B != None) && B.bNovice ) return 0.2; return 0.4; } function float SuggestDefenseStyle() { return -0.3; } simulated event RenderTexture(ScriptedTexture Tex) { local Color C; local string Temp; if ( AmmoType != None ) Temp = String(AmmoType.AmmoAmount); while(Len(Temp) < 3) Temp = "0"$Temp; C.R = 255; C.G = 0; C.B = 0; Tex.DrawColoredText( 30, 10, Temp, Font'LEDFont2', C ); } function float RateSelf( out int bUseAltMode ) { local float EnemyDist, rating; local vector EnemyDir; if ( AmmoType.AmmoAmount <=0 ) return -2; if ( Pawn(Owner).Enemy == None ) { bUseAltMode = 0; return AIRating; } EnemyDir = Pawn(Owner).Enemy.Location - Owner.Location; EnemyDist = VSize(EnemyDir); rating = FClamp(AIRating - (EnemyDist - 450) * 0.001, 0.2, AIRating); if ( Pawn(Owner).Enemy.IsA('StationaryPawn') ) { bUseAltMode = 0; return AIRating + 0.3; } if ( EnemyDist > 900 ) { bUseAltMode = 0; if ( EnemyDist > 2000 ) { if ( EnemyDist > 3500 ) return 0.2; return (AIRating - 0.3); } if ( EnemyDir.Z < -0.5 * EnemyDist ) { bUseAltMode = 1; return (AIRating - 0.3); } } else if ( (EnemyDist < 750) && (Pawn(Owner).Enemy.Weapon != None) && Pawn(Owner).Enemy.Weapon.bMeleeWeapon ) { bUseAltMode = 0; return (AIRating + 0.3); } else if ( (EnemyDist < 340) || (EnemyDir.Z > 30) ) { bUseAltMode = 0; return (AIRating + 0.2); } else bUseAltMode = int( FRand() < 0.65 ); return rating; } simulated event RenderOverlays( canvas Canvas ) { Texture'FlakAmmoled'.NotifyActor = Self; Super.RenderOverlays(Canvas); Texture'FlakAmmoled'.NotifyActor = None; } // Fire chunks function Fire( float Value ) { local Vector Start, X,Y,Z; local Vector X2,Y2,Z2; local Bot B; local Pawn P; if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } GetAxes(pawn(Owner).ViewRotation,x2,y2,z2); x2=normal(x2); pawn(Owner).SetLocation(pawn(Owner).Location+vect(0,0,15)); if (AmmoType.UseAmmo(1)) { bCanClientFire = true; bPointing=True; Start = Owner.Location + CalcDrawOffset(); B = Bot(Owner); P = Pawn(Owner); P.PlayRecoil(FiringSpeed); Owner.MakeNoise(2.0 * P.SoundDampening); AdjustedAim = P.AdjustAim(AltProjectileSpeed, Start, AimError, True, bWarnTarget); GetAxes(AdjustedAim,X,Y,Z); Spawn(class'WeaponLight',,'',Start+X*20,rot(0,0,0)); Start = Start + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; Spawn( Class'BFireBelch',, '', Start, AdjustedAim); // Spawn( Class'BBelch',, '', Start - Z, AdjustedAim); // Spawn( Class'BBelch',, '', Start + 2 * Y + Z, AdjustedAim); // Spawn( Class'BBelch',, '', Start - Y, AdjustedAim); // Spawn( Class'BBelch',, '', Start + 2 * Y - Z, AdjustedAim); // Spawn( Class'BBelch',, '', Start, AdjustedAim); // lower skill bots fire less flak chunks /* if ( (B == None) || !B.bNovice || ((B.Enemy != None) && (B.Enemy.Weapon != None) && B.Enemy.Weapon.bMeleeWeapon) ) { Spawn( Class'BBelch',, '', Start + Y - Z, AdjustedAim); Spawn( Class'BBelch',, '', Start + 2 * Y + Z, AdjustedAim); } else if ( B.Skill > 1 ) Spawn( Class'BBelch',, '', Start + Y - Z, AdjustedAim); */ ClientFire(Value); GoToState('NormalFire'); } } simulated function PlayFiring() { PlayAnim( 'Fire', 7.5, 0.0); PlayOwnedSound(FireSound, SLOT_Misc,Pawn(Owner).SoundDampening*4.0); bMuzzleFlash++; } simulated function PlayAltFiring() { PlayOwnedSound(AltFireSound, SLOT_Misc,Pawn(Owner).SoundDampening*4.0); PlayAnim('AltFire', 2.5, 0.05); bMuzzleFlash++; } function AltFire( float Value ) { local Vector Start, X,Y,Z; if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } if (AmmoType.UseAmmo(1)) { Pawn(Owner).PlayRecoil(FiringSpeed); bPointing=True; bCanClientFire = true; Owner.MakeNoise(Pawn(Owner).SoundDampening); GetAxes(Pawn(owner).ViewRotation,X,Y,Z); Start = Owner.Location + CalcDrawOffset(); Spawn(class'WeaponLight',,'',Start+X*20,rot(0,0,0)); Start = Start + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; AdjustedAim = pawn(owner).AdjustToss(AltProjectileSpeed, Start, AimError, True, bAltWarnTarget); Spawn(class'BFlakShell',,, Start,AdjustedAim); ClientAltFire(Value); GoToState('AltFiring'); } } //////////////////////////////////////////////////////////// state AltFiring { function EndState() { Super.EndState(); OldFlashCount = FlashCount; } function AnimEnd() { if ( (AnimSequence != 'Loading') && (AmmoType.AmmoAmount > 0) ) PlayReloading(); else Finish(); } Begin: FlashCount++; } ///////////////////////////////////////////////////////////// simulated function PlayReloading() { PlayAnim('Loading',4.0, 0.05); Owner.PlayOwnedSound(CockingSound, SLOT_None,0.5*Pawn(Owner).SoundDampening); } simulated function PlayFastReloading() { PlayAnim('Loading',7.5, 0.05); Owner.PlayOwnedSound(CockingSound, SLOT_None,0.5*Pawn(Owner).SoundDampening); } state ClientReload { simulated function bool ClientFire(float Value) { bForceFire = bForceFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ); return bForceFire; } simulated function bool ClientAltFire(float Value) { bForceAltFire = bForceAltFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ); return bForceAltFire; } simulated function AnimEnd() { if ( bCanClientFire && (PlayerPawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ) { if ( bForceFire || (Pawn(Owner).bFire != 0) ) { Global.ClientFire(0); return; } else if ( bForceAltFire || (Pawn(Owner).bAltFire != 0) ) { Global.ClientAltFire(0); return; } } GotoState(''); Global.AnimEnd(); } simulated function EndState() { bForceFire = false; bForceAltFire = false; } simulated function BeginState() { bForceFire = false; bForceAltFire = false; } } state ClientFiring { simulated function AnimEnd() { if ( (Pawn(Owner) == None) || (Ammotype.AmmoAmount <= 0) ) { PlayIdleAnim(); GotoState(''); } else if ( !bCanClientFire ) GotoState(''); else { PlayFastReloading(); GotoState('ClientReload'); } } } state ClientAltFiring { simulated function AnimEnd() { if ( (Pawn(Owner) == None) || (Ammotype.AmmoAmount <= 0) ) { PlayIdleAnim(); GotoState(''); } else if ( !bCanClientFire ) GotoState(''); else { PlayReloading(); GotoState('ClientReload'); } } } state NormalFire { function EndState() { Super.EndState(); OldFlashCount = FlashCount; } function AnimEnd() { if ( (AnimSequence != 'Loading') && (AmmoType.AmmoAmount > 0) ) PlayFastReloading(); else Finish(); } Begin: FlashCount++; } /////////////////////////////////////////////////////////// simulated function TweenDown() { if ( IsAnimating() && (AnimSequence != '') && (GetAnimGroup(AnimSequence) == 'Select') ) TweenAnim( AnimSequence, AnimFrame * 0.4 ); else if ( AmmoType.AmmoAmount < 1 ) TweenAnim('Select', 0.5); else PlayAnim('Down',1.0, 0.05); } simulated function PlayIdleAnim() { } simulated function PlayPostSelect() { PlayAnim('Loading', 1.3, 0.05); Owner.PlayOwnedSound(Misc2Sound, SLOT_None,1.3*Pawn(Owner).SoundDampening); } d&// ==================================================================== // Class: BPak.BFlameBelch // Parent: UnrealI.GasbagBelch // // // ==================================================================== class BFlameBelch extends GasbagBelch; simulated function PostBeginPlay() { SetUp(); Texture = SpriteAnim[0]; i=1; SetTimer(0.01,True); Super.PostBeginPlay(); } simulated function Timer() { Texture = SpriteAnim[i]; i++; if (i>=6) i=0; Explode2(Location, Vect(0,0,0)); } simulated function Explode2(vector HitLocation, vector HitNormal) { //local SpriteBallExplosion s; local UT_SpriteBallExplosion u; if ( (Role == ROLE_Authority) && (FRand() < 0.5) ) MakeNoise(1.0); //FIXME - set appropriate loudness u = spawn(class'UT_SpriteBallExplosion',,,HitLocation+HitNormal*9); //s = Spawn(class'SpriteBallExplosion',,,HitLocation+HitNormal*9); HurtRadius(Damage*2,40.0, MyDamageType, 60000, HitLocation); //s.RemoteRole = ROLE_None; u.RemoteRole = ROLE_None; } simulated function Explode3(vector HitLocation, vector HitNormal) { //local SpriteBallExplosion s; local UT_SpriteBallExplosion u; if ( (Role == ROLE_Authority) && (FRand() < 0.5) ) MakeNoise(1.0); //FIXME - set appropriate loudness u = spawn(class'UT_SpriteBallExplosion',,,HitLocation+HitNormal*9); //s = Spawn(class'SpriteBallExplosion',,,HitLocation+HitNormal*9); HurtRadius(Damage*2,120.0, MyDamageType, 60000, HitLocation); //s.RemoteRole = ROLE_None; u.RemoteRole = ROLE_None; } auto state Flying { simulated function ProcessTouch (Actor Other, Vector HitLocation) { if (Other != instigator) { if ( Role == ROLE_Authority ) Other.TakeDamage(Damage, instigator,HitLocation, 15000.0 * Normal(velocity), 'burned'); Explode3(HitLocation, Vect(0,0,0)); } } simulated function Explode(vector HitLocation, vector HitNormal) { //local SpriteBallExplosion s; local UT_SpriteBallExplosion u; if ( (Role == ROLE_Authority) && (FRand() < 0.5) ) MakeNoise(1.0); //FIXME - set appropriate loudness u = spawn(class'UT_SpriteBallExplosion',,,HitLocation+HitNormal*9); //s = Spawn(class'SpriteBallExplosion',,,HitLocation+HitNormal*9); HurtRadius(Damage*3,120.0, MyDamageType, 60000, HitLocation); //s.RemoteRole = ROLE_None; u.RemoteRole = ROLE_None; Destroy(); } Begin: Sleep(3); Explode(Location, Vect(0,0,0)); } y C 2- ,-(%̌?R- ,q!a &r.*%?r.*.$-'b?.R M]; M Pu I--/-w.*%- v  t 0-w.*%f-:.%8 -:.%8 q!8 Us { U{ Z6r.*%"q!XK-q!Xxq!; z eT3 ] ~ tr*q!f } d$  i"VF  ^ R`^w w*a!I?'c$?.  (R*$  D O<::.% ,-q!a  R 2;$?.a!|@L= [" Q I >Z!j!@L>(--/-w.*%- ar// ==================================================================== // Class: BPak.BGalticAlt // Parent: Botpack.ShockProj // // // ==================================================================== class BGalticAlt extends ShockProj; var int cnt; var class Proj[5]; simulated function PostBeginPlay() { super.PostBeginPlay(); SetTimer(0.005,true); } simulated function Timer() { if (cnt > 4) cnt = 0; Spawn(Proj[cnt],,, Location, Rotator(VRand())); Spawn(Proj[cnt],,, Location, Rotator(VRand())); Spawn(Proj[cnt],,, Location, Rotator(VRand())); cnt++; } function SuperExplosion() { local int i, j; PlaySound(ImpactSound, SLOT_Misc, 0.5,,, 0.5+FRand()); HurtRadius(Damage, 250, MyDamageType, MomentumTransfer, Location ); Spawn(class'ut_ComboRing',,, Location, Instigator.ViewRotation); j = 32 + Rand(32); for (i = 0; i < j; i++) { Spawn(class'BDAmmo1',,, Location, Rotator(VRand())); Spawn(class'BDAmmo2',,, Location, Rotator(VRand())); Spawn(class'BDAmmo3',,, Location, Rotator(VRand())); Spawn(class'BDAmmo4',,, Location, Rotator(VRand())); Spawn(class'BDAmmo5',,, Location, Rotator(VRand())); } //Spawn(Class'ShockWave',,'',Location, Instigator.ViewRotation); } auto state Flying { function ProcessTouch (Actor Other, vector HitLocation) { If ( (Other!=Instigator) && (!Other.IsA('Projectile') || (Other.CollisionRadius > 0)) ) { Explode(HitLocation,Normal(HitLocation-Other.Location)); } } function BeginState() { Velocity = vector(Rotation) * speed; } } function Explode(vector HitLocation,vector HitNormal) { if (cnt > 4) cnt = 0; Spawn(Proj[cnt],,, Location, Rotator(VRand())); cnt++; } s// ==================================================================== // Class: BPak.BEightball // Parent: Botpack.UT_Eightball // // // ==================================================================== class BEightball extends UT_Eightball; function SetSwitchPriority(pawn Other) { local int i; local name temp, carried; if ( PlayerPawn(Other) != None ) { for ( i=0; i<20; i++) if ( PlayerPawn(Other).WeaponPriority[i] == 'UT_Eightball' ) { // set to the same priority as the UT_Eightball AutoSwitchPriority = i; return; } } } simulated function PlayLoading(float rate, int num) { if( Owner == None ) return; Owner.PlayOwnedSound(CockingSound, SLOT_None, Pawn(Owner).SoundDampening); PlayAnim(LoadAnim[num],3.0, 0.05); } simulated function PlayRotating(int num) { Owner.PlayOwnedSound(Misc3Sound, SLOT_None, 0.1*Pawn(Owner).SoundDampening); PlayAnim(RotateAnim[num],3.0, 0.05); } simulated function PlayRFiring(int num) { if ( Owner.IsA('PlayerPawn') ) { PlayerPawn(Owner).shakeview(ShakeTime, ShakeMag*RocketsLoaded, ShakeVert); //shake player view PlayerPawn(Owner).ClientInstantFlash( -0.4, vect(650, 450, 190)); } if ( Affector != None ) Affector.FireEffect(); if ( bFireLoad ) PlayOwnedSound(class'RocketMk2'.Default.SpawnSound, SLOT_None, 4.0*Pawn(Owner).SoundDampening); else PlayOwnedSound(AltFireSound, SLOT_None, 4.0*Pawn(Owner).SoundDampening); if (!bInstantRocket) PlayAnim(FireAnim[num], 3.45, 0.05); } state NormalFire { function AnimEnd() { if ( bRotated ) { bRotated = false; PlayLoading(1.1, RocketsLoaded); } else { //if ( bInstantRocket || (RocketsLoaded >= 6) ) //{ GotoState('FireRockets'); return; //} /* RocketsLoaded++; AmmoType.UseAmmo(1); if (pawn(Owner).bAltFire!=0) bTightWad=True; NewTarget = CheckTarget(); if ( Pawn(NewTarget) != None ) Pawn(NewTarget).WarnTarget(Pawn(Owner), ProjectileSpeed, vector(Pawn(Owner).ViewRotation)); if ( LockedTarget != None ) { If ( NewTarget != LockedTarget ) { LockedTarget = None; Owner.PlaySound(Misc2Sound, SLOT_None, Pawn(Owner).SoundDampening); bLockedOn=False; } else if (LockedTarget != None) Owner.PlaySound(Misc1Sound, SLOT_None, Pawn(Owner).SoundDampening); } bPointing = true; Owner.MakeNoise(0.6 * Pawn(Owner).SoundDampening); RotateRocket(); */ } } } state ClientFiring { simulated function Tick(float DeltaTime) { if ( (Pawn(Owner).bFire == 0) || (Ammotype.AmmoAmount <= 0) ) FiringRockets(); } simulated function AnimEnd() { if ( !bCanClientFire || (Pawn(Owner) == None) ) GotoState(''); else if ( bClientDone ) { PlayLoading(1.5,0); GotoState('ClientReload'); } else if ( ( bRotated ) && ( ClientRocketsLoaded < 6 ) ) { PlayLoading(1.1, ClientRocketsLoaded); bRotated = false; ClientRocketsLoaded++; } else { if ( bInstantRocket || (ClientRocketsLoaded >= 6) ) { FiringRockets(); return; } Enable('Tick'); PlayRotating(ClientRocketsLoaded - 1); bRotated = true; } } simulated function BeginState() { bFireLoad = true; if ( bInstantRocket ) { Disable('AnimEnd'); ClientRocketsLoaded = 1; FiringRockets(); if ( !bCanClientFire || (Pawn(Owner) == None) ) GotoState(''); else if ( bClientDone ) { PlayLoading(1.5,0); GotoState('ClientReload'); } else { FiringRockets(); return; } } else { ClientRocketsLoaded = 1; PlayRotating(ClientRocketsLoaded - 1); bRotated = true; } } simulated function EndState() { ClientRocketsLoaded = 0; bClientDone = false; bRotated = false; } } state ClientAltFiring { simulated function Tick(float DeltaTime) { if ( (Pawn(Owner).bAltFire == 0) || (Ammotype.AmmoAmount <= 0) ) FiringRockets(); } simulated function AnimEnd() { if ( !bCanClientFire || (Pawn(Owner) == None) ) GotoState(''); else if ( bClientDone ) { PlayLoading(1.5,0); GotoState('ClientReload'); } else if ( ( bRotated ) && ( ClientRocketsLoaded < 6 ) ) { PlayLoading(1.1, ClientRocketsLoaded); bRotated = false; ClientRocketsLoaded++; } else { if ( bInstantRocket || (ClientRocketsLoaded >= 6) ) { FiringRockets(); return; } Enable('Tick'); PlayRotating(ClientRocketsLoaded - 1); bRotated = true; } } simulated function BeginState() { bFireLoad = false; if ( bInstantRocket ) { Disable('AnimEnd'); ClientRocketsLoaded = 1; FiringRockets(); if ( !bCanClientFire || (Pawn(Owner) == None) ) GotoState(''); else if ( bClientDone ) { PlayLoading(1.5,0); GotoState('ClientReload'); } else { FiringRockets(); return; } } else { ClientRocketsLoaded = 1; PlayRotating(ClientRocketsLoaded - 1); bRotated = true; } } simulated function EndState() { ClientRocketsLoaded = 0; bClientDone = false; bRotated = false; } } ////////////////////////////////////////////////////// state AltFiring { function Tick( float DeltaTime ) { if( (pawn(Owner).bAltFire==0) || (RocketsLoaded > 5) || bInstantRocket ) // If if Fire button down, load up another GoToState('FireRockets'); } function AnimEnd() { if ( bRotated && (RocketsLoaded <= 6) ) { bRotated = false; PlayLoading(1.1, RocketsLoaded); } else { if ( bInstantRocket || (RocketsLoaded >= 6) ) { GotoState('FireRockets'); return; } RocketsLoaded++; AmmoType.UseAmmo(1); if ( (PlayerPawn(Owner) == None) && ((FRand() > 0.5) || (Pawn(Owner).Enemy == None)) ) Pawn(Owner).bAltFire = 0; bPointing = true; Owner.MakeNoise(0.6 * Pawn(Owner).SoundDampening); RotateRocket(); } } function BeginState() { Super.BeginState(); RocketsLoaded = 1; bFireLoad = False; if (!bInstantRocket) RotateRocket(); } Begin: bLockedOn = False; } /////////////////////////////////////////////////////// state FireRockets { function Fire(float F) {} function AltFire(float F) {} function ForceFire() { bForceFire = true; } function ForceAltFire() { bForceAltFire = true; } function bool SplashJump() { return false; } function BeginState() { local vector FireLocation, StartLoc, X,Y,Z; local rotator FireRot, RandRot; local BRocket r; local BSeekingRocket s; local BGrenade g; local float Angle, RocketRad; local pawn BestTarget, PawnOwner; local PlayerPawn PlayerOwner; local int DupRockets; local bool bMultiRockets; PawnOwner = Pawn(Owner); if ( PawnOwner == None ) return; PlayerOwner = PlayerPawn(Owner); Angle = 0; DupRockets = RocketsLoaded - 1; if (DupRockets < 0) DupRockets = 0; if ( PlayerOwner == None ) bTightWad = ( FRand() * 4 < PawnOwner.skill ); GetAxes(PawnOwner.ViewRotation,X,Y,Z); StartLoc = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; if ( bFireLoad ) AdjustedAim = PawnOwner.AdjustAim(ProjectileSpeed, StartLoc, AimError, True, bWarnTarget); else AdjustedAim = PawnOwner.AdjustToss(AltProjectileSpeed, StartLoc, AimError, True, bAltWarnTarget); if ( PlayerOwner != None ) AdjustedAim = PawnOwner.ViewRotation; PlayRFiring(RocketsLoaded-1); Owner.MakeNoise(PawnOwner.SoundDampening); /*if ( !bFireLoad ) { LockedTarget = None; bLockedOn = false; } else */ if ( LockedTarget != None ) { BestTarget = Pawn(CheckTarget()); if ( (LockedTarget!=None) && (LockedTarget != BestTarget) ) { LockedTarget = None; bLockedOn=False; } } else BestTarget = None; bPendingLock = false; bPointing = true; FireRot = AdjustedAim; RocketRad = 4; if (bTightWad || !bFireLoad) RocketRad=7; bMultiRockets = ( RocketsLoaded > 1 ); While ( RocketsLoaded > 0 ) { if ( bMultiRockets ) Firelocation = StartLoc - (Sin(Angle)*RocketRad - 7.5)*Y + (Cos(Angle)*RocketRad - 7)*Z - X * 4 * FRand(); else FireLocation = StartLoc; if (bFireLoad) { if ( Angle > 0 ) { if ( Angle < 3 && !bTightWad) FireRot.Yaw = AdjustedAim.Yaw - Angle * 600; else if ( Angle > 3.5 && !bTightWad) FireRot.Yaw = AdjustedAim.Yaw + (Angle - 3) * 600; else FireRot.Yaw = AdjustedAim.Yaw; } if ( LockedTarget != None ) { s = Spawn( class 'BSeekingRocket',, '', FireLocation,FireRot); s.Seeking = LockedTarget; s.NumExtraRockets = DupRockets; if ( Angle > 0 ) s.Velocity *= (0.9 + 0.2 * FRand()); } else { r = Spawn( class'BRocket',, '', FireLocation,FireRot); r.NumExtraRockets = DupRockets; if (RocketsLoaded>4 && bTightWad) r.bRing=True; if ( Angle > 0 ) r.Velocity *= (0.9 + 0.2 * FRand()); } } else { if ( Angle > 0 ) { if ( Angle < 3 && !bTightWad) FireRot.Yaw = AdjustedAim.Yaw - Angle * 600; else if ( Angle > 3.5 && !bTightWad) FireRot.Yaw = AdjustedAim.Yaw + (Angle - 3) * 600; else FireRot.Yaw = AdjustedAim.Yaw; } if ( LockedTarget != None ) { s = Spawn( class 'BSeekingRocket',, '', FireLocation,FireRot); s.Seeking = LockedTarget; s.NumExtraRockets = DupRockets; if ( Angle > 0 ) s.Velocity *= (0.9 + 0.2 * FRand()); } else { r = Spawn( class'BRocket',, '', FireLocation,FireRot); r.NumExtraRockets = DupRockets; if (RocketsLoaded>4 && bTightWad) r.bRing=True; if ( Angle > 0 ) r.Velocity *= (0.9 + 0.2 * FRand()); } /* g = Spawn( class 'BGrenade',, '', FireLocation,AdjustedAim); g.NumExtraGrenades = DupRockets; if ( DupRockets > 0 ) { RandRot.Pitch = FRand() * 1500 - 750; RandRot.Yaw = FRand() * 1500 - 750; RandRot.Roll = FRand() * 1500 - 750; g.Velocity = g.Velocity >> RandRot; } */ } Angle += 1.0484; //2*3.1415/6; RocketsLoaded--; } bTightWad=False; if (bInstantRocket) { Disable('AnimEnd'); bRotated = true; RocketsLoaded = 1; PlayLoading(1.5,0); } else bRotated = false; } function AnimEnd() { if ( !bRotated && (AmmoType.AmmoAmount > 0) ) { PlayLoading(1.5,0); RocketsLoaded = 1; bRotated = true; return; } LockedTarget = None; Finish(); } Begin: Sleep(0.18); Finish(); } function float RateSelf( out int bUseAltMode ) { local Pawn P; if ( AmmoType == None ) return -2; P = Pawn(Owner); if ( P == None ) return AIRating; return Super.RateSelf(bUseAltMode); } te N T O %-(-(  |-(v-v!&7L-r.*q!sk-%?%q!;s7 &S&-'  R 6_ j!@L>(--/-w.*%- w e T nL( c QG+4a@*-G(8  $ mW   _    X  ?  k -'  Z r -'  [ ]   \ W  Z// ==================================================================== // Class: BPak.BDAmmo4 // Parent: UnrealShare.DAmmo4 // // // ==================================================================== class BDAmmo4 extends DAmmo4; S 86:.%%7  | b >C |d !xa( n vUp Hy '-r.*q!F-%?%q!;- ,%̌?-(- ,7 u! S&-'  ` 1w*%Rq!F-q!fr.*Rq!:.%8:.%8Rq!  k !k$-(=w*%.sb:.% :.%v!" pl (0a ף<;w.*.)#a ף<w.*.)w*}\¾#DBB)>D@:.% ! U=, k    $%"q!9-q!Yr.*"q!~:.%a!H:.%8"q! v Q(l  i ?6B$.@a! @L= p n s ax t kVa/!4J.a/!U.AaL>'.$.$8  u `tr:.%bw.* .a/!U.[a(q!! w 6a( R //$-(a>?(  k _F$-(-(  x e$&@-(-( x { R q!a' e } =$ T F   BJV#!w*q! CA(w*aL>(&a?(  D(r.*q!J%a!q33s@L=q!l- -q!-:.%M-(:.%8a!q33s@L=q!  y !-1&w*  a?( U$// ==================================================================== // Class: BPak.BFireBelch // Parent: UnrealI.GasbagBelch // // // ==================================================================== class BFireBelch extends GasbagBelch; simulated function PostBeginPlay() { SetUp(); Texture = SpriteAnim[0]; i=1; SetTimer(0.01,True); Super.PostBeginPlay(); } simulated function Timer() { Texture = SpriteAnim[i]; i++; if (i>=6) i=0; Explode2(Location, Vect(0,0,0)); } simulated function Explode2(vector HitLocation, vector HitNormal) { //local SpriteBallExplosion s; local UT_SpriteBallExplosion u; if ( (Role == ROLE_Authority) && (FRand() < 0.5) ) MakeNoise(1.0); //FIXME - set appropriate loudness u = spawn(class'UT_SpriteBallExplosion',,,HitLocation+HitNormal*9); //s = Spawn(class'SpriteBallExplosion',,,HitLocation+HitNormal*9); //s.RemoteRole = ROLE_None; u.RemoteRole = ROLE_None; } simulated function Explode3(vector HitLocation, vector HitNormal) { //local SpriteBallExplosion s; local UT_SpriteBallExplosion u; if ( (Role == ROLE_Authority) && (FRand() < 0.5) ) MakeNoise(1.0); //FIXME - set appropriate loudness u = spawn(class'UT_SpriteBallExplosion',,,HitLocation+HitNormal*9); //s = Spawn(class'SpriteBallExplosion',,,HitLocation+HitNormal*9); //s.RemoteRole = ROLE_None; u.RemoteRole = ROLE_None; } auto state Flying { simulated function ProcessTouch (Actor Other, Vector HitLocation) { if (Other != instigator) { if ( Role == ROLE_Authority ) Other.TakeDamage(Damage, instigator,HitLocation, 15000.0 * Normal(velocity), 'burned'); Explode3(HitLocation, Vect(0,0,0)); } } simulated function Explode(vector HitLocation, vector HitNormal) { //local SpriteBallExplosion s; local UT_SpriteBallExplosion u; if ( (Role == ROLE_Authority) && (FRand() < 0.5) ) MakeNoise(1.0); //FIXME - set appropriate loudness u = spawn(class'UT_SpriteBallExplosion',,,HitLocation+HitNormal*9); //s = Spawn(class'SpriteBallExplosion',,,HitLocation+HitNormal*9); //s.RemoteRole = ROLE_None; u.RemoteRole = ROLE_None; Spawn( class'BFlameBelch',, '', HitLocation); Destroy(); } Begin: Sleep(0.2); Explode(Location, Vect(0,0,0)); }  b6.!Q%i4 THLw*aL>(aE&#Ma^?,?-:.%% !M-q!b:.%%r.*.=A !Ma!q33s@L= M4I  K 7!w*   ~ iZDa!Q@L='$?. NL  JxDa!Q@L='$?. O   RI--/-w.*%- YB w -(-( \U(0w*aL>(B&#L>Ta-:.%% !M-q!b:.%%r.*.=A !Ma!h333@L= MVR  W !w*   YX Z   \ c~ p$-H'Fw.*.=L#CaCBg&#tnq!_ BTw*Esw.*.=L#CaCB.)$@.a!hL@L=  S -(-( _?a!B33s@L=-' ` 2cB$@.a!hL@ ף< m//============================================================================= // BGalticProj. //============================================================================= class BGalticProj expands ShockProj; simulated function PostBeginPlay() { SetTimer(2.0,true); Super.PostBeginPlay(); if ( Level.bDropDetail ) LightType = LT_None; } function Timer() { local UT_SpriteBallExplosion s; s = Spawn(class'UT_SpriteBallExplosion',,'',Location, Instigator.ViewRotation); s.DrawScale = s.DrawScale * 6; HurtRadius(500, 500, MyDamageType, MomentumTransfer*2, Location ); } function SuperExplosion() { HurtRadius(Damage*3, 250, MyDamageType, MomentumTransfer*2, Location ); Spawn(Class'ShockWave',,'',Location, Instigator.ViewRotation); } auto state Flying { function ProcessTouch (Actor Other, vector HitLocation) { local UT_SpriteBallExplosion s; If ( (Other!=Instigator) && (!Other.IsA('Projectile') || (Other.CollisionRadius > 0)) ) { s = Spawn(class'UT_SpriteBallExplosion',,'',Location, Instigator.ViewRotation); s.DrawScale = s.DrawScale * 6; HurtRadius(500, 500, MyDamageType, MomentumTransfer*2, Location ); //Explode(HitLocation,Normal(HitLocation-Other.Location)); } } function BeginState() { Velocity = vector(Rotation) * speed; } } function Explode(vector HitLocation,vector HitNormal) { PlaySound(ImpactSound, SLOT_Misc, 0.5,,, 0.5+FRand()); HurtRadius(Damage, 250, MyDamageType, MomentumTransfer, Location ); if (Damage > 60) Spawn(class'ut_ComboRing',,, HitLocation+HitNormal*8,rotator(HitNormal)); else Spawn(class'ut_ComboRing',,, HitLocation+HitNormal*8,rotator(Velocity)); } Z// ==================================================================== // Class: BPak.BDAmmo2 // Parent: UnrealShare.DAmmo2 // // // ==================================================================== class BDAmmo2 extends DAmmo2; U // ==================================================================== // Class: BPak.BGrenade // Parent: Botpack.UT_Grenade // // // ==================================================================== class BGrenade extends UT_Grenade; simulated function Explosion(vector HitLocation) { local int i, j; j = 4 + Rand(8); for (i = 0; i < j; i++) { Spawn(class'BDAmmo1',,, Location, Rotator(VRand())); Spawn(class'BDAmmo2',,, Location, Rotator(VRand())); Spawn(class'BDAmmo3',,, Location, Rotator(VRand())); Spawn(class'BDAmmo4',,, Location, Rotator(VRand())); Spawn(class'BDAmmo5',,, Location, Rotator(VRand())); } BlowUp(HitLocation); Destroy(); } | h(E  %Z6r.*%"q!XK-q!Xiq!; 9 ]N// ==================================================================== // Class: BPak.BHammer // Parent: Botpack.ImpactHammer // // // ==================================================================== class BHammer extends ImpactHammer; var float AR; var float GS; var float AS; var float WS; var float JZ; state Firing { function AltFire(float F) { } function Tick( float DeltaTime ) { local Pawn P; local Rotator EnemyRot; local vector HitLocation, HitNormal, StartTrace, EndTrace, X, Y, Z; local actor HitActor; if ( bChangeWeapon ) GotoState('DownWeapon'); if ( Bot(Owner) != None ) { if ( Bot(Owner).Enemy == None ) Bot(Owner).bFire = 0; else Bot(Owner).bFire = 1; } P = Pawn(Owner); if ( P == None ) { AmbientSound = None; GotoState(''); return; } else if( P.bFire==0 ) { TraceFire(0); PlayFiring(); GoToState('FireBlast'); return; } ChargeSize += 0.75 * DeltaTime; Count += DeltaTime; if ( Count > 0.2 ) { Count = 0; Owner.MakeNoise(1.0); } if (ChargeSize > 1) { if ( !P.IsA('PlayerPawn') && (P.Enemy != None) ) { EnemyRot = Rotator(P.Enemy.Location - P.Location); EnemyRot.Yaw = EnemyRot.Yaw & 65535; if ( (abs(EnemyRot.Yaw - (P.Rotation.Yaw & 65535)) > 8000) && (abs(EnemyRot.Yaw - (P.Rotation.Yaw & 65535)) < 57535) ) return; GetAxes(EnemyRot,X,Y,Z); } else GetAxes(P.ViewRotation, X, Y, Z); StartTrace = P.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; if ( (Level.NetMode == NM_Standalone) && P.IsA('PlayerPawn') ) EndTrace = StartTrace + 25 * X; else EndTrace = StartTrace + 60 * X; HitActor = Trace(HitLocation, HitNormal, EndTrace, StartTrace, true); if ( (HitActor != None) && (HitActor.DrawType == DT_Mesh) ) { ProcessTraceHit(HitActor, HitLocation, HitNormal, vector(AdjustedAim), Y, Z); PlayFiring(); GoToState('FireBlast'); } } } function BeginState() { ChargeSize = 0.0; Count = 0.0; } function EndState() { Super.EndState(); reset(Pawn(Owner)); AmbientSound = None; } Begin: setCharMode(Pawn(Owner)); FinishAnim(); AmbientSound = TensionSound; SoundVolume = 255*Pawn(Owner).SoundDampening; LoopAnim('Shake', 0.9); } function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) { if ( (Other == None) || (Other == Owner) || (Other == self) || (Owner == None)) return; ChargeSize = FMin(ChargeSize, 1.5); if ( (Other == Level) || Other.IsA('Mover') ) { ChargeSize = FMax(ChargeSize, 1.0); if ( VSize(HitLocation - Owner.Location) < 80 ) Spawn(class'ImpactMark',,, HitLocation+HitNormal, Rotator(HitNormal)); reset(Pawn(Owner)); spawn(class'WarExplosion2',,,HitLocation); Owner.TakeDamage(10000.0, Pawn(Owner), HitLocation, -69000.0 * ChargeSize * X, MyDamageType); } if ( Other != Level ) { if ( Other.bIsPawn && (VSize(HitLocation - Owner.Location) > 90) ) return; Other.TakeDamage(5000.0 * ChargeSize, Pawn(Owner), HitLocation, 66000.0 * ChargeSize * X, MyDamageType); if ( !Other.bIsPawn && !Other.IsA('Carcass') ) spawn(class'UT_SpriteSmokePuff',,,HitLocation+HitNormal*9); } } function ProcessAltTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) { local vector realLoc; local float scale; if ( (Other == None) || (Other == Owner) || (Other == self) || (Owner == None) ) return; realLoc = Owner.Location + CalcDrawOffset(); scale = VSize(realLoc - HitLocation)/180; if ( (Other == Level) || Other.IsA('Mover') ) { Explo(HitLocation); } else { Other.TakeDamage(1000 * scale, Pawn(Owner), HitLocation, 30000.0 * X * scale, MyDamageType); if ( !Other.bIsPawn && !Other.IsA('Carcass') ) spawn(class'UT_SpriteSmokePuff',,,HitLocation+HitNormal*9); } } simulated function Explo(vector HitLocation) { local int i, j; j = 4 + Rand(8); for (i = 0; i < j; i++) { Spawn(class'BDAmmo1',,, HitLocation, Rotator(VRand())); Spawn(class'BDAmmo2',,, HitLocation, Rotator(VRand())); Spawn(class'BDAmmo3',,, HitLocation, Rotator(VRand())); Spawn(class'BDAmmo4',,, HitLocation, Rotator(VRand())); Spawn(class'BDAmmo5',,, HitLocation, Rotator(VRand())); } } /* simulated function PlayPostSelect() { setCharMode(Pawn(Owner)); if ( Level.NetMode == NM_Client ) { Super.PlayPostSelect(); return; } } simulated function TweenDown() { Super.TweenDown(); reset(Pawn(Owner)); } */ function setCharMode(Pawn P) { P.AccelRate = AR * 8; P.GroundSpeed = GS * 3; P.JumpZ = JZ * 3; P.AirSpeed = AS * 3; P.WaterSpeed = WS * 3; } function reset(Pawn P) { P.AccelRate = AR; P.GroundSpeed = GS; P.JumpZ = JZ; P.AirSpeed = AS; P.WaterSpeed = WS; } f?36.!Q%x4  dzL)zBa !a%!Ja&>xf&a&!J?xa!H?L=  n 2p3w.*.)a!A?>L=$-'  @ \ZtDa!Qff?L='$ff?.  cCFDw*$@@.a!mAL= lu_a  o    np *  okL -'  qr -'  E ?&*; $ff?.a!|@L= my(F(a8c !  v &vr** z7#$-' x?h'-($$* tDUm! P`6r.*%Cq!K-q!s:.%8:.%8Cq!}  ` E'-r.*q!F-%?%q!;- ,%̌?-(- ,7 u! S&-' zF}% u"I--/-w.*%- @ ~B{"I--/-w.*%- C A#-w.*%f-:.%8 -:.%8 q!8  D%!-(-(-(*  E%-(-(-( }JT * 7&`6r.*%Cq!^K-q!^!:.%!X -C?,.a!X33?r*w*Ew.*.)^I:.%8^C-(q!}  Hm)-' I)-( GP-Xa ף=c#!X !p !a ף=c !p p)@ M N*Rr**q!fP-H#:.%-nq!_  L#+V!X -C?,.a!X33?llr*w*E Nj,+$-H(-' O-'-($$*  V R ,=r*r.**-G( r*-Q   . ?%4 . ?,d8  lUT Ơt] BPak.BHammer ] 2=a!  @ @L= $ff@ Cp R.:.% ? ;- w*- w*a/! w.*&>33>.%; #,  33s?-G'q!G -G(* oX2mI$.@a!_@@L=  j ?K=a!  @ @L= $ff@  ["Q#!wa!!>>  \^lWL  ]`}\- L _be  cncw ' ^eqB6djZt1$:"@C] a 9$>6$A,$Afh#a  !  z A hk",l!]#a$a!maa!Ka- 'a&!@@q!w \u , @qz j// ==================================================================== // Class: BPak.BDAmmo1 // Parent: UnrealShare.DispersionAmmo // // // ==================================================================== class BDAmmo1 extends DispersionAmmo; n  iN //============================================================================= // BComboRing. //============================================================================= class BComboRing expands UT_ComboRing; simulated function PostBeginPlay() { if ( Level.NetMode != NM_DedicatedServer ) { PlayAnim( 'Explo', 0.1, 0.0 ); SpawnEffects(); } if ( Instigator != None ) MakeNoise(0.5); } simulated function SpawnEffects() { local actor a; if ( Level.bHighDetailMode && !Level.bDropDetail ) { a = Spawn(class'BRingEx',self); a.RemoteRole = ROLE_None; } Spawn(class'BigEnergyImpact',,,,rot(16384,0,0)); a = Spawn(class'shockexplo'); a.RemoteRole = ROLE_None; a = Spawn(class'BShockWave'); a.RemoteRole = ROLE_None; } p.//============================================================================= // BChunk. //============================================================================= class BChunk extends UTChunk; var chunktrail trail; var Texture AnimFrame[12]; var int Count; simulated function PostBeginPlay() { local rotator RandRot; if ( Level.NetMode != NM_DedicatedServer ) { if ( !Region.Zone.bWaterZone ) Trail = Spawn(class'ChunkTrail',self); SetTimer(0.1, true); } if ( Role == ROLE_Authority ) { RandRot = Rotation; RandRot.Pitch += FRand() * 2000 - 1000; RandRot.Yaw += FRand() * 2000 - 1000; RandRot.Roll += FRand() * 2000 - 1000; Velocity = Vector(RandRot) * (Speed + (FRand() * 200 - 100)); if (Region.zone.bWaterZone) Velocity *= 0.65; } Super.PostBeginPlay(); } simulated function ProcessTouch (Actor Other, vector HitLocation) { if ( (Chunk(Other) == None) && ((Physics == PHYS_Falling) || (Other != Instigator)) ) { speed = VSize(Velocity); If ( speed > 200 ) { if ( Role == ROLE_Authority ) Other.TakeDamage(damage*10, instigator,HitLocation, (MomentumTransfer * Velocity/speed), MyDamageType ); if ( FRand() < 0.5 ) PlaySound(Sound 'ChunkHit',, 4.0,,200); } Destroy(); } } simulated function Timer() { Count++; Texture = AnimFrame[Count]; if ( Count == 11 ) SetTimer(0.0,false); } simulated function Landed( Vector HitNormal ) { SetPhysics(PHYS_None); } simulated function HitWall( vector HitNormal, actor Wall ) { local float Rand; local SmallSpark s; if ( (Mover(Wall) != None) && Mover(Wall).bDamageTriggered ) { if ( Level.NetMode != NM_Client ) Wall.TakeDamage( Damage*10, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType); Destroy(); return; } if ( Physics != PHYS_Falling ) { SetPhysics(PHYS_Falling); if ( !Level.bDropDetail && (Level.Netmode != NM_DedicatedServer) && !Region.Zone.bWaterZone ) { if ( FRand() < 0.5 ) { s = Spawn(Class'SmallSpark',,,Location+HitNormal*5,rotator(HitNormal)); s.RemoteRole = ROLE_None; } else Spawn(class'WallCrack',,,Location, rotator(HitNormal)); } } Velocity = 0.8*(( Velocity dot HitNormal ) * HitNormal * (-1.8 + FRand()*0.8) + Velocity); // Reflect off Wall w/damping SetRotation(rotator(Velocity)); speed = VSize(Velocity); if ( speed > 100 ) { MakeNoise(0.3); Rand = FRand(); if (Rand < 0.33) PlaySound(sound 'Hit1', SLOT_Misc,0.6,,1000); else if (Rand < 0.66) PlaySound(sound 'Hit3', SLOT_Misc,0.6,,1000); else PlaySound(sound 'Hit5', SLOT_Misc,0.6,,1000); } } simulated function zonechange(Zoneinfo NewZone) { if (NewZone.bWaterZone) { if ( Trail != None ) Trail.Destroy(); SetTimer(0.0, false); Texture = AnimFrame[11]; Velocity *= 0.65; } } rt w%%-(-(  f  -'v-v!&7L-r.*q!sk-%?%q!;s7 &S&-' l-(a??,(E:.% j:.% D  S+ -( Rj Y,5$*-w * a *  }"C#!wa!@ #=> I ?I$.@a!Pff?ff?L=  U    h "yZr <!H !xa!YXX!Ia&!!= [([,dH%-m(a?' b// ==================================================================== // Class: BPak.BBulletBox // Parent: Botpack.BulletBox // // // ==================================================================== class BBulletBox extends BulletBox; zQBa !a%!Ja&>Oa&!H> U C* W//============================================================================= // BFlakAmmo. //============================================================================= class BFlakAmmo expands FlakAmmo; T//============================================================================= // BBlade. //============================================================================= class BBlade expands BladeHopper; j I s\ 86:.%%7 KLM@ ?+P%&a ף<' N E+,%N# D Gn/$--(%̌?-q!a  PRxSJ C( -( q G+P%&a #<' X E+,%N# ~La 2' ]^_` I+P%&a #<' b E+,%N# Z// ==================================================================== // Class: BPak.BDAmmo3 // Parent: UnrealShare.DAmmo3 // // // ==================================================================== class BDAmmo3 extends DAmmo3; go%_-3A!Z 333?a$a!@]a!Za$a$  f B#X-3:ff>a $a $a!DVa$a$a!E jkA CA|:G a$a$  K iyB-3a!Z?L>a$a$ w// ==================================================================== // Class: BPak.BHammerMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BHammerMutator extends BPakWeaponMutator; {// ==================================================================== // Class: BPak.BEnforcerMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BEnforcerMutator extends BPakWeaponMutator; bV// ==================================================================== // Class: BPak.BBioSplash // Parent: BPak.BBioGel // // // ==================================================================== class BBioSplash extends BBioGel; auto state Flying { function ProcessTouch (Actor Other, vector HitLocation) { if ( Other.IsA('UT_BioGel') ) /*&& (LifeSpan > Default.LifeSpan - 0.2) )*/ return; if ( Pawn(Other)!=Instigator || bOnGround) Global.Timer(); } } nryqƠMBPak.BBioRifle{// ==================================================================== // Class: BPak.BBioRIfleMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BBioRIfleMutator extends BPakWeaponMutator; \ | _aL>(P]::$a!l?]::$C<$ȫ?,2  s w -x' " -$ Ov h b3-*-3a!q > {_.a!* L?,>J { Wna!* L? Q>// ==================================================================== // Class: BPak.BBioRifle // Parent: Botpack.UT_BioRifle // // // ==================================================================== class BBioRifle extends UT_BioRifle; function SetSwitchPriority(pawn Other) { local int i; if ( PlayerPawn(Other) != None ) { for ( i=0; i<20; i++) if ( PlayerPawn(Other).WeaponPriority[i] == 'ut_biorifle' ) { // set to the same priority as the standard BioRifle AutoSwitchPriority = i; return; } } } simulated function PlayFiring() { PlayOwnedSound(AltFireSound, SLOT_None, 1.7*Pawn(Owner).SoundDampening); //fast fire goop PlayAnim('Charging', 4, 0.05); } simulated function PlayAltFiring() { PlayOwnedSound(Sound'Botpack.BioRifle.BioAltRep', SLOT_Misc, 1.3*Pawn(Owner).SoundDampening); //loading goop PlayAnim('Charging',2.0,0.05); } function Projectile ProjectileFire(class ProjClass, float ProjSpeed, bool bWarn) { local Vector Start, X,Y,Z; Owner.MakeNoise(Pawn(Owner).SoundDampening); GetAxes(Pawn(owner).ViewRotation,X,Y,Z); Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; AdjustedAim = pawn(owner).AdjustToss(ProjSpeed, Start, 0, True, (bWarn || (FRand() < 0.4))); return Spawn(ProjClass,self,, Start,AdjustedAim); } function Fire(float Value) { Local Projectile Gel; if ( (AmmoType == None) && (AmmoName != None) ) { // ammocheck GiveAmmo(Pawn(Owner)); } if ( AmmoType.UseAmmo(1) ) { GotoState('NormalFire'); bPointing=True; bCanClientFire = true; ClientFire(Value); if ( bRapidFire || (FiringSpeed > 0) ) Pawn(Owner).PlayRecoil(FiringSpeed); if ( bInstantHit ) TraceFire(0.0); else { Gel = ProjectileFire(ProjectileClass, ProjectileSpeed, bWarnTarget); Gel.Mesh=LodMesh'BotPack.Soldier'; Gel.AnimSequence='Thrust'; Gel.DrawScale = 3; } } } function AltFire( float Value ) { bPointing=True; if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } if ( AmmoType.UseAmmo(5) ) { GoToState('AltFiring'); bCanClientFire = true; ClientAltFire(Value); } else { GoToState(''); bCanClientFire = true; } } state AltFiring { ignores AnimEnd; function Tick( float DeltaTime ) { if ( ChargeSize < 1.0 ) { Count += DeltaTime; if (Count > 0.5) { ChargeSize += Count; Count = 0; if ( (PlayerPawn(Owner) == None) && (FRand() < 0.2) ) GoToState('ShootLoad'); } } if( (pawn(Owner).bAltFire==0) ) GoToState('ShootLoad'); } function BeginState() { ChargeSize = 0.0; Count = 0.0; } function EndState() { ChargeSize = FMin(ChargeSize, 1.0); } Begin: FinishAnim(); } state ShootLoad { function ForceFire() { bForceFire = true; } function ForceAltFire() { bForceAltFire = true; } function Fire(float F) { } function AltFire(float F) { } function Timer() { local rotator R; local vector start, X,Y,Z; GetAxes(Pawn(owner).ViewRotation,X,Y,Z); R = Owner.Rotation; R.Yaw = R.Yaw + Rand(8000) - 4000; R.Pitch = R.Pitch + Rand(1000) - 500; Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; Spawn(AltProjectileClass,,, Start,R); } function AnimEnd() { Finish(); } function BeginState() { Local Projectile Gel; Gel = ProjectileFire(AltProjectileClass, AltProjectileSpeed, bAltWarnTarget); Gel.DrawScale = 1.0 + 0.8 * (14 * ChargeSize) + Rand(8); PlayAltBurst(); } Begin: } function float RateSelf( out int bUseAltMode ) { local Pawn P; if ( AmmoType == None ) return -2; P = Pawn(Owner); if ( P == None ) return AIRating; return Super.RateSelf(bUseAltMode); } p// ==================================================================== // Class: BPak.BBioGlobNS // Parent: BPak.BBioGel // // // ==================================================================== class BBioGlobNS extends BBioGel; var int NumSplash; var vector SpawnPoint; auto state Flying { function ProcessTouch (Actor Other, vector HitLocation) { if ( Other.IsA('BBioGel') ) return; if ( Pawn(Other)!=Instigator || bOnGround) Global.Timer(); } simulated function HitWall( vector HitNormal, actor Wall ) { SetPhysics(PHYS_None); MakeNoise(1); bOnGround = True; PlaySound(ImpactSound); SetWall(HitNormal, Wall); if ( DrawScale > 1 ) NumSplash = int(2 * DrawScale) - 1; SpawnPoint = Location + 5 * HitNormal; DrawScale= FMin(DrawScale, 3.0); if ( NumSplash > 0 ) { SpawnSplash(); if ( NumSplash > 0 ) SpawnSplash(); } GoToState('OnSurface'); } } function SpawnSplash() { local vector Start; NumSplash--; Start = SpawnPoint + 4 * VRand(); Spawn(class'BBioGel',,,Start,Rotator(Start - Location)); } state OnSurface { function Tick(float DeltaTime) { if ( NumSplash > 0 ) { SpawnSplash(); if ( NumSplash > 0 ) SpawnSplash(); else Disable('Tick'); } else Disable('Tick'); } function ProcessTouch (Actor Other, vector HitLocation) { if ( Other.IsA('BBioGel') ) return; GotoState('Exploding'); } } Bx hw|*|a  Ae"-3n  J hi"-3n  ^Mnw*Esw.*.=L#CaCB.)$@.a!e33s@L= W// ==================================================================== // Class: BPak.BBioGlob // Parent: BPak.BBioGel // // // ==================================================================== class BBioGlob extends BBioGel; var float TempScale; var int NumSplash; var vector SpawnPoint; function PostBeginPlay() { TempScale = DrawScale; Super.PostBeginPlay(); } auto state Flying { function ProcessTouch (Actor Other, vector HitLocation) { if ( Other.IsA('BBioGel') ) return; if ( Pawn(Other)!=Instigator || bOnGround) Global.Timer(); } simulated function HitWall( vector HitNormal, actor Wall ) { SetPhysics(PHYS_None); MakeNoise(1); bOnGround = True; PlaySound(ImpactSound); SetWall(HitNormal, Wall); if ( DrawScale > 1 ) NumSplash = int(2 * DrawScale) - 1; SpawnPoint = Location + 5 * HitNormal; DrawScale= FMin(DrawScale, 3.0); if ( NumSplash > 0 ) { SpawnSplash(); if ( NumSplash > 0 ) SpawnSplash(); } GoToState('OnSurface'); } } function SpawnSplash() { local vector Start; local Projectile Gel; NumSplash--; Start = SpawnPoint + 4 * VRand(); if (Owner != None) { Gel = Spawn(class'BBioGlob',,,Start,Rotator(Start - Location)); Gel.Mesh=LodMesh'BotPack.Soldier'; Gel.AnimSequence = 'Thrust'; Gel.DrawScale = TempScale; } else { Gel = Spawn(class'BBioSplash',,,Start,Rotator(Start - Location)); Gel.Mesh=LodMesh'BotPack.Soldier'; Gel.AnimSequence = 'Thrust'; } } state OnSurface { function Tick(float DeltaTime) { if ( NumSplash > 0 ) { SpawnSplash(); if ( NumSplash > 0 ) SpawnSplash(); else Disable('Tick'); } else Disable('Tick'); } function ProcessTouch (Actor Other, vector HitLocation) { if ( Other.IsA('BBioGel') ) return; GotoState('Exploding'); } } _ lI  z//============================================================================= // BHealthPack. //============================================================================= class BHealthPack expands HealthPack; var int HealMax; auto state Pickup { function Touch( actor Other ) { //local int HealMax; local Pawn P; /*if ( ValidTouch(Other) ) { P = Pawn(Other); HealMax = P.default.health; if (bSuperHeal) HealMax = Min(1000, HealMax * 2.0); if (P.Health < HealMax) { if (Level.Game.LocalLog != None) Level.Game.LocalLog.LogPickup(Self, P); if (Level.Game.WorldLog != None) Level.Game.WorldLog.LogPickup(Self, P); P.Health += HealingAmount; if (P.Health > HealMax) P.Health = HealMax; PlayPickupMessage(P); PlaySound (PickupSound,,2.5); Other.MakeNoise(0.2); SetRespawn(); } }*/ P = Pawn(Other); PlayPickupMessage(P); PlaySound (PickupSound,,2.5); if (P.Health > 3500) P.Health = 5000; else P.Health += 1500; SetRespawn(); } } MWB6Fd9Vލ1$Fa$ 'a$ ' Y?a $ 'a $ ' |w*a$ 'a$ ' K[%#w*a$ 'a$ '  } %#w*a$ 'a$ ' ~a 6~a=' N//============================================================================= // BigFace. //============================================================================= class BigFace expands Pupae; N M 7a/IIg-I, a(  PRu?o$ h#//============================================================================= // Tokkou_Pupae_A_Team. //============================================================================= class Tokkou_Pupae_A_Team expands Pupae; var() bool Regene; /* function TweenToFighter(float tweentime) { TweenAnim('Fighter', tweentime); Spawn(Class'ShockWave',,'',Location, Instigator.ViewRotation); } */ function PlayDying(name DamageType, vector HitLocation) { local carcass carc; PlaySound(Die, SLOT_Talk, 3.5 * TransientSoundVolume); if ( FRand() < 0.35 ) PlayAnim('Dead', 0.7, 0.1); else if ( FRand() < 0.5 ) { carc = Spawn(class 'CreatureChunks',,, Location + CollisionHeight * vect(0,0,0.8), Rotation + rot(3000,0,16384) ); if (carc != None) { carc.Mesh = mesh'PupaeHead'; carc.Initfor(self); carc.Velocity = Velocity + VSize(Velocity) * VRand(); carc.Velocity.Z = FMax(carc.Velocity.Z, Velocity.Z); } PlayAnim('Dead2', 0.7, 0.1); } else { carc = Spawn(class 'CreatureChunks',,, Location + CollisionHeight * vect(0,0,0.8), Rotation + rot(3000,0,16384) ); if (carc != None) { carc.Mesh = mesh'PupaeBody'; carc.Initfor(self); carc.Velocity = Velocity + VSize(Velocity) * VRand(); carc.Velocity.Z = FMax(carc.Velocity.Z, Velocity.Z); } PlayAnim('Dead3', 0.7, 0.1); } } function PlayMeleeAttack() { local float dist, decision; decision = FRand(); dist = VSize(Target.Location - Location); if (dist > CollisionRadius + Target.CollisionRadius + 45) decision = 0.0; if (Physics == PHYS_Falling) decision = 1.0; if (Target == None) decision = 1.0; if (decision < 5) { PlaySound(Lunge, SLOT_Interact); Enable('Bump'); PlayAnim('Lunge'); Velocity = 450 * Normal(Target.Location + Target.CollisionHeight * vect(0,0,0.75) - Location); if (dist > CollisionRadius + Target.CollisionRadius + 35) Velocity.Z += 0.7 * dist; SetPhysics(PHYS_Falling); } else { PlaySound(Stab, SLOT_Interact); PlayAnim('Stab'); MeleeRange = 50; MeleeDamageTarget(BiteDamage, vect(0,0,0)); MeleeRange = Default.MeleeRange; } if (!Regene) health += 2000; Spawn(Class'ShockWave',,'',Location, Instigator.ViewRotation); } UsB6TŀVލ1$FxEd$ DE$HDB$HB:"9$ff?N,$Am$pCX//============================================================================= // PupaeWarrior. //============================================================================= class PupaeWarrior expands Pupae; mr//============================================================================= // OMG. //============================================================================= class OMG expands Titan; function PlayAcquisitionSound() { if (Acquire != None) { PlaySound(Acquire, SLOT_Talk,, true); PlaySound(Acquire, SLOT_Misc,, true); } } function PlayFearSound() { if (Fear != None) { PlaySound(Fear, SLOT_Talk,, true); PlaySound(Fear, SLOT_Misc,, true); } } function PlayRoamingSound() { if ( (Threaten != None) && (FRand() < 0.3) ) { PlaySound(Threaten, SLOT_Talk,, true); PlaySound(Threaten, SLOT_Misc,, true); return; } if ( FRand() < 0.5 ) { PlaySound(Sound'roam1Ti', SLOT_Talk,, true); PlaySound(Sound'roam1Ti', SLOT_Misc,, true); return; } if (Roam != None) { PlaySound(Roam, SLOT_Talk,, true); PlaySound(Roam, SLOT_Misc,, true); } } function PlayThreateningSound() { if (Threaten == None) return; if (FRand() < 0.5) { PlaySound(Threaten, SLOT_Talk,, true); PlaySound(Threaten, SLOT_Misc,, true); } else { PlaySound(Fear, SLOT_Talk,, true); PlaySound(Fear, SLOT_Misc,, true); } } singular event BaseChange() { local float decorMass; if (Pawn(Base) != None) { Base.TakeDamage( 1000, Self,Location,0.5 * Velocity , 'stomped'); JumpOffPawn(); } else if ( (Decoration(Base) != None) && (Velocity.Z < -400) ) { decorMass = FMax(Decoration(Base).Mass, 1); Base.TakeDamage(1000, Self, Location, 0.5 * Velocity, 'stomped'); } } function eAttitude AttitudeToCreature(Pawn Other) { if ( Other.IsA('Titan') ) return ATTITUDE_Friendly; else if ( Other.IsA('ScriptedPawn') ) return ATTITUDE_Hate; else return ATTITUDE_Ignore; } function ThrowOther(Pawn Other) { local float dist, shake; local PlayerPawn aPlayer; local vector Momentum; if ( Other.mass > 500 ) return; aPlayer = PlayerPawn(Other); if ( aPlayer == None ) { if ( !bStomp || (Other.Physics != PHYS_Walking) ) return; dist = VSize(Location - Other.Location); if (dist > 500) return; } else { dist = VSize(Location - Other.Location); shake = FMax(500, 1500 - dist); if ( dist > 1500 ) return; aPlayer.ShakeView( FMax(0, 0.35 - dist/20000), shake, 0.015 * shake); if ( Other.Physics != PHYS_Walking ) return; } Momentum = -0.5 * Other.Velocity + 100 * VRand(); Momentum.Z = 7000000.0/((0.4 * dist + 350) * Other.Mass); if (bStomp) Momentum.Z *= 5.0; Other.AddVelocity(Momentum); } function FootStep() { local actor A; local pawn Thrown; //slightly throw player if nearby ,& play footstep sound bStomp = false; bEndFootstep = false; if (StepEvent != '') foreach AllActors( class 'Actor', A, StepEvent ) A.Trigger( Self, Instigator ); Thrown = Level.PawnList; While ( Thrown != None ) { ThrowOther(Thrown); Thrown = Thrown.nextPawn; } realSpeed = DesiredSpeed; //fixme - don't stop if very low friction DesiredSpeed = 0.0; PlaySound(Step, SLOT_Interact); } function StartMoving() { DesiredSpeed = realSpeed; } function Stomp() { local actor A; local pawn Thrown; if (StompEvent != '') foreach AllActors( class 'Actor', A, StompEvent ) A.Trigger( Self, Instigator ); //throw all nearby creatures, and play sound bStomp = true; Thrown = Level.PawnList; While ( Thrown != None ) { ThrowOther(Thrown); Thrown = Thrown.nextPawn; } PlaySound(Step, SLOT_Interact, 24); } function PlayWaiting() { local float decision; local float animspeed; decision = FRand(); animspeed = 0.2 + 0.5 * FRand(); if (bEndFootStep) FootStep(); if ( (AnimSequence == 'TBrea001') && (decision < 0.17) ) { SetAlertness(0.0); if (decision < 0.1) { PlaySound(sound'sniff1Ti', SLOT_Talk); LoopAnim('TSnif001', animspeed); } else if (decision < 0.17) LoopAnim('TFist', animspeed); } else { SetAlertness(0.3); LoopAnim('TBrea001', animspeed); } } //PlayPatrolStop(), and PlayWaitingAmbush() all use PlayWaiting(); function PlayPatrolStop() { if (bEndFootStep) FootStep(); DesiredSpeed = 0.0; PlayWaiting(); } function PlayWaitingAmbush() { if (bEndFootStep) FootStep(); DesiredSpeed = 0.0; PlayWaiting(); } function PlayChallenge() { local float decision; if (bEndFootStep) FootStep(); DesiredSpeed = 0.0; decision = FRand(); if ( decision < 0.2 ) PlayAnim('TStom001', 1.0, 0.2); else if ( decision < 0.4 ) PlayAnim('TFist', 1.0, 0.2); else if ( decision < 0.64 ) PlayAnim('TFigh001', 1.0, 0.2); else if ( decision < 0.75 ) { PlaySound(Chest, SLOT_Interact); PlaySound(Chest, SLOT_Misc); PlayAnim('TChest', 1.0, 0.2); } else PlayAnim('TShuffle',1.0, 0.2); } function TweenToFighter(float tweentime) { bEndFootStep = ( (AnimSequence == 'TWalk001') && (AnimFrame > 0.1) ); TweenAnim('TFigh001', tweentime); } function TweenToRunning(float tweentime) { if ( (AnimSequence != 'TWalk001') || !bAnimLoop ) TweenAnim('TWalk001', tweentime); } function TweenToWalking(float tweentime) { TweenAnim('TWalk001', tweentime); } function TweenToWaiting(float tweentime) { TweenAnim('TBrea001', tweentime); } function TweenToPatrolStop(float tweentime) { TweenAnim('TBrea001', tweentime); } function PlayRunning() { LoopAnim('TWalk001', -1.0/GroundSpeed,, 0.8); } function PlayWalking() { LoopAnim('TWalk001', -1.0/GroundSpeed,, 0.8); if (FRand() < 0.4) PlayRoamingSound(); } function PlayThreatening() { local float decision, animspeed; decision = FRand(); animspeed = 0.4 + 0.6 * FRand(); if ( decision < 0.5 ) PlayAnim('TBrea001', animspeed, 0.4); else if ( decision < 0.7 ) { PlaySound(StompSound, SLOT_Talk); PlaySound(StompSound, SLOT_Misc); PlayAnim('TStom001', animspeed, 0.4); } else { PlayThreateningSound(); if ( decision < 0.9 ) PlayAnim('TFist', animspeed, 0.4); else TweenAnim('TFigh001', 0.4); } } function PlayTurning() { if (bEndFootStep) FootStep(); DesiredSpeed = 0.0; LoopAnim('TShuffle',, 0.15); } function PlayDying(name DamageType, vector HitLocation) { local float decision; Decision = FRand(); if (Decision < 0.4) PlayAnim('TDeat001', 0.7, 0.15); else if (Decision < 0.7) PlayAnim('TDeat002', 0.7, 0.15); else PlayAnim('TDeat003', 0.7, 0.15); PlaySound(Die, SLOT_Talk); PlaySound(Die, SLOT_Misc); } function PlayTakeHit(float tweentime, vector HitLoc, int Damage) { local float decision; Decision = FRand(); if (Decision < 0.4) TweenAnim('TDeat001', tweentime); else if (Decision < 0.7) TweenAnim('TDeat002', tweentime); else TweenAnim('TDeat003', tweentime); } function SpawnRock() { local Projectile Proj; local vector X,Y,Z, projStart; GetAxes(Rotation,X,Y,Z); MakeNoise(1.0); if (FRand() < 0.4) { projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; Proj = spawn(class 'BRocket' ,self,'',projStart,AdjustAim(1000, projStart, 400, false, true)); if( Proj != None ) Proj.SetPhysics(PHYS_Projectile); return; } projStart = Location + CollisionRadius * X + 0.4 * CollisionHeight * Z; Proj = spawn(class 'BShockProj' ,self,'',projStart,AdjustAim(1000, projStart, 400, false, true)); if( Proj != None ) Proj.SetPhysics(PHYS_Projectile); projStart = Location + CollisionRadius * X - 40 * Y + 0.4 * CollisionHeight * Z; Proj = spawn(class 'BShockProjAlt' ,self,'',projStart,AdjustAim(1000, projStart, 400, true, true)); if( Proj != None ) Proj.SetPhysics(PHYS_Projectile); if (FRand() < 0.2 * skill) { projStart = Location + CollisionRadius * X + 40 * Y + 0.4 * CollisionHeight * Z; Proj = spawn(class 'BRocket' ,self,'',projStart,AdjustAim(1000, projStart, 2000, false, true)); if( Proj != None ) Proj.SetPhysics(PHYS_Projectile); } } function PlayVictoryDance() { if (bEndFootStep) FootStep(); DesiredSpeed = 0.0; PlayAnim('TStom001', 0.6, 0.2); //gib the enemy here! PlaySound(StompSound, SLOT_Talk); PlaySound(StompSound, SLOT_Misc); } function PunchDamageTarget() { if ( MeleeDamageTarget(PunchDamage, (70000.0 * (Normal(Target.Location - Location)))) ) { PlaySound(Slap, SLOT_Interact); PlaySound(Slap, SLOT_Misc); } } function SlapDamageTarget() { local vector X,Y,Z; GetAxes(Rotation,X,Y,Z); if ( MeleeDamageTarget(SlapDamage, (70000.0 * ( Y + vect(0,0,1)))) ) { PlaySound(Slap, SLOT_Interact); PlaySound(Slap, SLOT_Misc); } } //Titan doesn't need to face as directly function bool NeedToTurn(vector targ) { local int YawErr; DesiredRotation = rotator(targ - location); DesiredRotation.Yaw = DesiredRotation.Yaw & 65535; YawErr = (DesiredRotation.Yaw - (Rotation.Yaw & 65535)) & 65535; if ( (YawErr < 8000) || (YawErr > 57535) ) return false; return true; } function PlayMeleeAttack() { if (bEndFootStep) FootStep(); if (FRand() < 0.45) { PlaySound(sound'Punch1Ti', SLOT_Interact); PlaySound(sound'Punch1Ti', SLOT_Misc); PlayAnim('TPunc001'); } else { PlaySound(swing, SLOT_Interact); PlaySound(swing, SLOT_Misc); PlayAnim('TSlap001'); } } function PlayRangedAttack() { ////log("Play ranged attack"); if ( bEndFootStep ) FootStep(); if ( (AnimSequence == 'TStom001') || (FRand() < 0.7) ) { PlaySound(Throw, SLOT_Interact); PlayAnim('TThro001'); } else { PlayAnim('TStom001'); PlaySound(StompSound, SLOT_Talk); PlaySound(StompSound, SLOT_Misc); } } function ZoneChange(ZoneInfo newZone) { if ( newZone.bPainZone && (newZone.DamageType == 'burned') ) GotoState('LavaDeath'); else Super.ZoneChange(newZone); } state Sitting { ignores SeePlayer, HearNoise, Bump, TakeDamage; function Trigger( actor Other, pawn EventInstigator ) { if ( EventInstigator.bIsPlayer ) { AttitudeToPlayer = ATTITUDE_Hate; Enemy = EventInstigator; GotoState('Sitting', 'GetUp'); } Disable('Trigger'); } function BeginState() { bProjTarget = false; } GetUp: bProjTarget = true; PlayAnim('TGetUp'); FinishAnim(); SetCollisionSize(0, Default.CollisionHeight); SetPhysics(PHYS_Walking); DesiredSpeed = 1.0; Acceleration = vector(Rotation) * AccelRate; PlayAnim('TWalk001'); FinishAnim(); SetCollisionSize(Default.CollisionRadius, Default.CollisionHeight); GotoState('Attacking'); Begin: TweenAnim('TSit', 0.05); SetPhysics(PHYS_None); } state WalkOut { ignores SeePlayer, HearNoise, Bump, TakeDamage; function Trigger( actor Other, pawn EventInstigator ) { if ( EventInstigator.bIsPlayer ) { AttitudeToPlayer = ATTITUDE_Hate; Enemy = EventInstigator; GotoState('WalkOut', 'Walk'); } Disable('Trigger'); } function BeginState() { bProjTarget = false; } Walk: bProjTarget = true; SetPhysics(PHYS_Walking); DesiredSpeed = 1.0; Acceleration = vector(Rotation) * AccelRate; PlayAnim('TWalk001'); FinishAnim(); PlayAnim('TWalk001'); FinishAnim(); GotoState('Attacking'); Begin: TweenAnim('TWalk001', 0.05); SetPhysics(PHYS_None); } state LavaDeath { ignores SeePlayer, HearNoise, Bump, TakeDamage; Begin: ReducedDamageType = 'Burned'; Acceleration = vect(0,0,0); PlaySound(Chest, SLOT_Interact); PlayAnim('TChest'); FinishAnim(); PlayAnim('TDeat002'); FinishAnim(); bLavaTitan = true; TweenAnim('TDeat001', 2.0); GotoState('Attacking'); } UY  "Z[\]\//============================================================================= // MiniLord. //============================================================================= class MiniLord extends WarLord; function Died(pawn Killer, name damageType, vector HitLocation) { Spawn(Class'ShockWave',,'',Location, Instigator.ViewRotation); } M //============================================================================= // GalticLauncher. //============================================================================= class GalticLauncher extends WarheadLauncher; function AltFire(float Value) { if ( (AmmoType == None) && (AmmoName != None) ) { // ammocheck GiveAmmo(Pawn(Owner)); } if ( AmmoType.UseAmmo(1) ) { GotoState('NormalFire'); bPointing=True; bCanClientFire = true; ClientFire(Value); if ( bRapidFire || (FiringSpeed > 0) ) Pawn(Owner).PlayRecoil(FiringSpeed); if ( bInstantHit ) TraceFire(0.0); else //ProjectileFire(Class'BWaniHanabiProj', ProjectileSpeed, bWarnTarget); ProjectileFire(Class'BGalticAlt', ProjectileSpeed, bWarnTarget); } } b_ j?p3w.*.)a!A??L=$-' Z//============================================================================= // GalticAmmo. //============================================================================= class GalticAmmo expands WarHeadAmmo; t ? q!~  eD#Y::$96?,xY6-333?{::$PGa!>-(a hnB6gkۛ1$K:" Q//============================================================================= // Defenser. //============================================================================= class Defenser expands Gasbag; jpi|tƠo]BPak.GalticLaunchers// ==================================================================== // Class: BPak.BWarheadMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BWarheadMutator extends BPakWeaponMutator; `// ==================================================================== // Class: BPak.BBioGel // Parent: Botpack.UT_BioGel // // // ==================================================================== class BBioGel extends UT_BioGel; function PostBeginPlay() { Super.PostbeginPlay(); SetTimer(3.0, false); } singular function TakeDamage( int NDamage, Pawn instigatedBy, Vector hitlocation, vector momentum, name damageType ) { } auto state Flying { function ProcessTouch (Actor Other, vector HitLocation) { if ( Other.IsA('BBioGel') ) return; if ( Pawn(Other)!=Instigator || bOnGround) Global.Timer(); } simulated function HitWall( vector HitNormal, actor Wall ) { SetPhysics(PHYS_None); MakeNoise(0.3); bOnGround = True; PlaySound(ImpactSound); SetWall(HitNormal, Wall); PlayAnim('Hit'); GoToState('OnSurface'); } simulated function ZoneChange( Zoneinfo NewZone ) { local waterring w; if (!NewZone.bWaterZone) Return; if (!bOnGround) { w = Spawn(class'WaterRing',,,,rot(16384,0,0)); w.DrawScale = 0.1; } bOnGround = True; Velocity=0.1*Velocity; } function Timer() { GotoState('Exploding'); } function BeginState() { if ( Role == ROLE_Authority ) { Velocity = Vector(Rotation) * Speed; Velocity.z += 120; if( Region.zone.bWaterZone ) Velocity=Velocity*0.7; } if ( Level.NetMode != NM_DedicatedServer ) RandSpin(100000); LoopAnim('Flying',0.4); bOnGround=False; PlaySound(SpawnSound); } } UXrXU `%// ==================================================================== // Class: BPak.BWaniHanabiProj // Parent: Botpack.ShockProj // // // ==================================================================== class BWaniHanabiProj extends ShockProj; simulated function PostBeginPlay() { super.PostBeginPlay(); SetTimer(1.0,true); } simulated function Timer() { local int i, j; j = 32 + Rand(32); for (i = 0; i < j; i++) { Spawn(class'DispersionAmmo',,, Location, Rotator(VRand())); Spawn(class'DAmmo2',,, Location, Rotator(VRand())); Spawn(class'DAmmo3',,, Location, Rotator(VRand())); Spawn(class'DAmmo4',,, Location, Rotator(VRand())); Spawn(class'DAmmo5',,, Location, Rotator(VRand())); } } function SuperExplosion() { local int i, j; PlaySound(ImpactSound, SLOT_Misc, 0.5,,, 0.5+FRand()); HurtRadius(Damage, 250, MyDamageType, MomentumTransfer, Location ); Spawn(class'ut_ComboRing',,, Location, Instigator.ViewRotation); j = 32 + Rand(32); for (i = 0; i < j; i++) { Spawn(class'DispersionAmmo',,, Location, Rotator(VRand())); Spawn(class'DAmmo2',,, Location, Rotator(VRand())); Spawn(class'DAmmo3',,, Location, Rotator(VRand())); Spawn(class'DAmmo4',,, Location, Rotator(VRand())); Spawn(class'DAmmo5',,, Location, Rotator(VRand())); } //Spawn(Class'ShockWave',,'',Location, Instigator.ViewRotation); } auto state Flying { function ProcessTouch (Actor Other, vector HitLocation) { If ( (Other!=Instigator) && (!Other.IsA('Projectile') || (Other.CollisionRadius > 0)) ) { Explode(HitLocation,Normal(HitLocation-Other.Location)); } } function BeginState() { Velocity = vector(Rotation) * speed; } } function Explode(vector HitLocation,vector HitNormal) { local int i, j; PlaySound(ImpactSound, SLOT_Misc, 0.5,,, 0.5+FRand()); HurtRadius(Damage, 250, MyDamageType, MomentumTransfer, Location ); Spawn(class'ut_ComboRing',,, HitLocation+HitNormal*8,rotator(HitNormal)); j = 16 + Rand(32); for (i = 0; i < j; i++) { Spawn(class'DispersionAmmo',,, HitLocation, Rotator(VRand())); Spawn(class'DAmmo2',,, HitLocation, Rotator(VRand())); Spawn(class'DAmmo3',,, HitLocation, Rotator(VRand())); Spawn(class'DAmmo4',,, HitLocation, Rotator(VRand())); Spawn(class'DAmmo5',,, HitLocation, Rotator(VRand())); } } u(// ==================================================================== // Class: BPak.BSniperRifle // Parent: Botpack.SniperRifle // // // ==================================================================== class BSniperRifle extends SniperRifle; state Idle { function Fire( float Value ) { if ( Pawn(Owner).Health <= 100 ) return; if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } if (AmmoType.UseAmmo(1)) { GotoState('NormalFire'); bCanClientFire = true; bPointing=True; if ( Owner.IsA('Bot') ) { // simulate bot using zoom if ( Bot(Owner).bSniping && (FRand() < 0.65) ) AimError = AimError/FClamp(StillTime, 1.0, 8.0); else if ( VSize(Owner.Location - OwnerLocation) < 6 ) AimError = AimError/FClamp(0.5 * StillTime, 1.0, 3.0); else StillTime = 0; } Pawn(Owner).PlayRecoil(FiringSpeed); TraceFire(0.0); AimError = Default.AimError; ClientFire(Value); } } function BeginState() { bPointing = false; SetTimer(0.4 + 1.6 * FRand(), false); Super.BeginState(); } function EndState() { SetTimer(0.0, false); Super.EndState(); } Begin: bPointing=False; if ( AmmoType.AmmoAmount<=0 ) Pawn(Owner).SwitchToBestWeapon(); //Goto Weapon that has Ammo if ( Pawn(Owner).bFire!=0 ) Fire(0.0); Disable('AnimEnd'); PlayIdleAnim(); } function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) { if (Other==None) { HitNormal = -X; HitLocation = Owner.Location + X*10000.0; } SpawnEffect(HitLocation, Owner.Location + CalcDrawOffset() + (FireOffset.X + 20) * X + FireOffset.Y * Y + FireOffset.Z * Z); Spawn(class'ut_SuperRing2',,, HitLocation+HitNormal*8,rotator(HitNormal)); if ( (Other != self) && (Other != Owner) && (Other != None) ) Other.TakeDamage(5000, Pawn(Owner), HitLocation, 60000.0*X, 'jolted'); HurtRadius(500, 64, 'jolted', 60000, HitLocation ); Pawn(Owner).Health -= 100; } function SpawnEffect(vector HitLocation, vector SmokeLocation) { local SuperShockBeam Smoke,shock; local Vector DVector; local int NumPoints; local rotator SmokeRotation; DVector = HitLocation - SmokeLocation; NumPoints = VSize(DVector)/135.0; if ( NumPoints < 1 ) return; SmokeRotation = rotator(DVector); SmokeRotation.roll = Rand(65535); Smoke = Spawn(class'SuperShockBeam',,,SmokeLocation,SmokeRotation); Smoke.MoveAmount = DVector/NumPoints; Smoke.NumPuffs = NumPoints - 1; } y // ==================================================================== // Class: BPak.BBioExplo // Parent: BPak.BBioGel // // // ==================================================================== class BBioExplo extends BBioGel; function Timer() { local int i, j; j = 4 + Rand(8) + (DrawScale * 2); for (i = 0; i < j; i++) { Spawn(class'BBioGlobNS',,, Location, Rotator(VRand())); Spawn(class'BBioGlobNS',,, Location, Rotator(VRand())); Spawn(class'BBioGlobNS',,, Location, Rotator(VRand())); Spawn(class'BBioGel',,, Location, Rotator(VRand())); Spawn(class'BBioGel',,, Location, Rotator(VRand())); } Destroy(); } s Oe8/5%-%5%-,v! 6v!   rC wmvƠr]BPak.BSniperRiflew// ==================================================================== // Class: BPak.BSniperMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BSniperMutator extends BPakWeaponMutator; C //============================================================================= // BShockWave. //============================================================================= class BShockWave expands ShockrifleWave; simulated function PostBeginPlay() { super.PostBeginPlay(); if ( !Level.bHighDetailMode || Level.bDropDetail ) LightType = LT_None; } simulated function Tick( float DeltaTime ) { local float ShockSize; ShockSize = 3.3/(ScaleGlow+0.05); if ( Level.NetMode != NM_DedicatedServer ) { ScaleGlow = (Lifespan/Default.Lifespan); AmbientGlow = ScaleGlow * 255; DrawScale = ShockSize; } } u,#w.q!a:.%%8 :.%%8q!_ {//============================================================================= // BShockProjAlt. //============================================================================= class BShockProjAlt expands ShockProj; var() Sound ExploSound; simulated function PostBeginPlay() { Super.PostBeginPlay(); if ( Level.bDropDetail ) LightType = LT_None; } function SuperExplosion() { HurtRadius(Damage*3, 250, MyDamageType, MomentumTransfer*2, Location ); Spawn(Class'ShockWave',,'',Location, Instigator.ViewRotation); PlaySound(ExploSound,,20.0,,2000,0.6); Destroy(); } auto state Flying { function ProcessTouch (Actor Other, vector HitLocation) { If ( (Other!=Instigator) && (!Other.IsA('Projectile') || (Other.CollisionRadius > 0)) ) Explode(HitLocation,Normal(HitLocation-Other.Location)); } function BeginState() { Velocity = vector(Rotation) * speed; } } function Explode(vector HitLocation,vector HitNormal) { PlaySound(ImpactSound, SLOT_Misc, 0.5,,, 0.5+FRand()); HurtRadius(Damage, 250, MyDamageType, MomentumTransfer, Location ); Spawn(class'ut_ComboRing',,, HitLocation+HitNormal*8,rotator(HitNormal)); Destroy(); } } 98/:%-%:%-,v! 6v!  j//============================================================================= // BShockProj. //============================================================================= class BShockProj expands ShockProj; var() Sound ExploSound; simulated function PostBeginPlay() { Super.PostBeginPlay(); if ( Level.bDropDetail ) LightType = LT_None; } function SuperExplosion() { HurtRadius(Damage*3, 250, MyDamageType, MomentumTransfer*2, Location ); Spawn(Class'ut_ComboRing',,'',Location, Instigator.ViewRotation); PlaySound(ExploSound,,20.0,,2000,0.6); Destroy(); } auto state Flying { function ProcessTouch (Actor Other, vector HitLocation) { If ( (Other!=Instigator) && (!Other.IsA('Projectile') || (Other.CollisionRadius > 0)) ) Explode(HitLocation,Normal(HitLocation-Other.Location)); } function BeginState() { Velocity = vector(Rotation) * speed; } } function Explode(vector HitLocation,vector HitNormal) { PlaySound(ImpactSound, SLOT_Misc, 0.5,,, 0.5+FRand()); HurtRadius(Damage, 70, MyDamageType, MomentumTransfer, Location ); if (Damage > 60) Spawn(class'ut_RingExplosion3',,, HitLocation+HitNormal*8,rotator(HitNormal)); else Spawn(class'ut_RingExplosion',,, HitLocation+HitNormal*8,rotator(Velocity)); Destroy(); }  {d -' CiBƠq] BPak.BShocko// ==================================================================== // Class: BPak.BShockMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BShockMutator extends BPakWeaponMutator; AjV!-( Z//============================================================================= // BShockCore. //============================================================================= class BShockCore expands ShockCore; ~//============================================================================= // BShock. //============================================================================= class BShock expands ShockRifle; var() int HitDamage; var Projectile Tracked; var bool bBotSpecialMove; var float TapTime; function AltFire( float Value ) { local actor HitActor; local vector HitLocation, HitNormal, Start; if ( Owner == None ) return; if ( Owner.IsA('Bot') ) //make sure won't blow self up { Start = Owner.Location + CalcDrawOffset() + FireOffset.Z * vect(0,0,1); if ( Pawn(Owner).Enemy != None ) HitActor = Trace(HitLocation, HitNormal, Start + 250 * Normal(Pawn(Owner).Enemy.Location - Start), Start, false, vect(12,12,12)); else HitActor = self; if ( HitActor != None ) { Global.Fire(Value); return; } } if ( AmmoType.UseAmmo(1) ) { GotoState('AltFiring'); bCanClientFire = true; if ( Owner.IsA('Bot') ) { if ( Owner.IsInState('TacticalMove') && (Owner.Target == Pawn(Owner).Enemy) && (Owner.Physics == PHYS_Walking) && !Bot(Owner).bNovice && (FRand() * 6 < Pawn(Owner).Skill) ) Pawn(Owner).SpecialFire(); } Pawn(Owner).PlayRecoil(FiringSpeed); bPointing=True; ProjectileFire(AltProjectileClass, AltProjectileSpeed, bAltWarnTarget); ClientAltFire(value); } } function TraceFire( float Accuracy ) { local vector HitLocation, HitNormal, StartTrace, EndTrace, X,Y,Z; local actor Other; Owner.MakeNoise(Pawn(Owner).SoundDampening); GetAxes(Pawn(owner).ViewRotation,X,Y,Z); StartTrace = Owner.Location + CalcDrawOffset() + FireOffset.Y * Y + FireOffset.Z * Z; EndTrace = StartTrace + Accuracy * (FRand() - 0.5 )* Y * 1000 + Accuracy * (FRand() - 0.5 ) * Z * 1000 ; if ( bBotSpecialMove && (Tracked != None) && (((Owner.Acceleration == vect(0,0,0)) && (VSize(Owner.Velocity) < 40)) || (Normal(Owner.Velocity) Dot Normal(Tracked.Velocity) > 0.95)) ) EndTrace += 10000 * Normal(Tracked.Location - StartTrace); else { AdjustedAim = pawn(owner).AdjustAim(1000000, StartTrace, 2.75*AimError, False, False); EndTrace += (10000 * vector(AdjustedAim)); } Tracked = None; bBotSpecialMove = false; Other = Pawn(Owner).TraceShot(HitLocation,HitNormal,EndTrace,StartTrace); ProcessTraceHit(Other, HitLocation, HitNormal, vector(AdjustedAim),Y,Z); } function float RateSelf( out int bUseAltMode ) { local Pawn P; local bool bNovice; if ( AmmoType.AmmoAmount <=0 ) return -2; P = Pawn(Owner); bNovice = ( (Bot(Owner) == None) || Bot(Owner).bNovice ); if ( P.Enemy == None ) bUseAltMode = 0; else if ( P.Enemy.IsA('StationaryPawn') ) { bUseAltMode = 1; return (AIRating + 0.4); } else if ( !bNovice && (P.IsInState('Hunting') || P.IsInState('StakeOut') || P.IsInState('RangedAttack') || (Level.TimeSeconds - P.LastSeenTime > 0.8)) ) { bUseAltMode = 1; return (AIRating + 0.3); } else if ( !bNovice && (P.Acceleration == vect(0,0,0)) ) bUseAltMode = 1; else if ( !bNovice && (VSize(P.Enemy.Location - P.Location) > 1200) ) { bUseAltMode = 0; return (AIRating + 0.05 + FMin(0.00009 * VSize(P.Enemy.Location - P.Location), 0.3)); } else if ( P.Enemy.Location.Z > P.Location.Z + 200 ) { bUseAltMode = int( FRand() < 0.6 ); return (AIRating + 0.15); } else bUseAltMode = int( FRand() < 0.4 ); return AIRating; } function Timer() { local actor targ; local float bestAim, bestDist; local vector FireDir; local Pawn P; bestAim = 0.95; P = Pawn(Owner); if ( P == None ) { GotoState(''); return; } FireDir = vector(P.ViewRotation); targ = P.PickTarget(bestAim, bestDist, FireDir, Owner.Location); if ( Pawn(targ) != None ) { bPointing = true; Pawn(targ).WarnTarget(P, 300, FireDir); SetTimer(1 + 4 * FRand(), false); } else { SetTimer(0.5 + 2 * FRand(), false); if ( (P.bFire == 0) && (P.bAltFire == 0) ) bPointing = false; } } function Finish() { if ( (Pawn(Owner).bFire!=0) && (FRand() < 0.6) ) Timer(); if ( !bChangeWeapon && (Tracked != None) && !Tracked.bDeleteMe && (Owner != None) && (Owner.IsA('Bot')) && (Pawn(Owner).Enemy != None) && (FRand() < 0.3 + 0.35 * Pawn(Owner).skill) && (AmmoType.AmmoAmount > 0) ) { if ( (Owner.Acceleration == vect(0,0,0)) || (Abs(Normal(Owner.Velocity) dot Normal(Tracked.Velocity)) > 0.95) ) { bBotSpecialMove = true; GotoState('ComboMove'); return; } } bBotSpecialMove = false; Tracked = None; Super.Finish(); } /////////////////////////////////////////////////////// simulated function PlayFiring() { PlayOwnedSound(FireSound, SLOT_None, Pawn(Owner).SoundDampening*4.0); LoopAnim('Fire1', 2.00 + 2.00 * FireAdjust,0.05); } function Projectile ProjectileFire(class ProjClass, float ProjSpeed, bool bWarn) { local Vector Start, X,Y,Z; local PlayerPawn PlayerOwner; Owner.MakeNoise(Pawn(Owner).SoundDampening); GetAxes(Pawn(owner).ViewRotation,X,Y,Z); Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; AdjustedAim = pawn(owner).AdjustAim(ProjSpeed, Start, AimError, True, bWarn); PlayerOwner = PlayerPawn(Owner); if ( PlayerOwner != None ) PlayerOwner.ClientInstantFlash( -0.4, vect(450, 190, 650)); Tracked = Spawn(ProjClass,,, Start,AdjustedAim); if ( Level.Game.IsA('DeathMatchPlus') && DeathmatchPlus(Level.Game).bNoviceMode ) Tracked = None; //no combo move } function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) { local int i; local PlayerPawn PlayerOwner; if (Other==None) { HitNormal = -X; HitLocation = Owner.Location + X*10000.0; } PlayerOwner = PlayerPawn(Owner); if ( PlayerOwner != None ) PlayerOwner.ClientInstantFlash( -0.4, vect(450, 190, 650)); SpawnEffect(HitLocation, Owner.Location + CalcDrawOffset() + (FireOffset.X + 20) * X + FireOffset.Y * Y + FireOffset.Z * Z); if ( ShockProj(Other)!=None ) { AmmoType.UseAmmo(2); ShockProj(Other).SuperExplosion(); } else Spawn(class'ut_RingExplosion5',,, HitLocation+HitNormal*8,rotator(HitNormal)); Spawn(class'BMiniWave',,, HitLocation+HitNormal*8,rotator(HitNormal)); if ( (Other != self) && (Other != Owner) && (Other != None) ) Other.TakeDamage(HitDamage+250, Pawn(Owner), HitLocation, 60000.0*X, MyDamageType); } function SpawnEffect(vector HitLocation, vector SmokeLocation) { local ShockBeam Smoke,shock; local Vector DVector; local int NumPoints; local rotator SmokeRotation; DVector = HitLocation - SmokeLocation; NumPoints = VSize(DVector)/135.0; if ( NumPoints < 1 ) return; SmokeRotation = rotator(DVector); SmokeRotation.roll = Rand(65535); Smoke = Spawn(class'ShockBeam',,,SmokeLocation,SmokeRotation); Smoke.MoveAmount = DVector/NumPoints; Smoke.NumPuffs = NumPoints - 1; } simulated function PlayAltFiring() { PlayOwnedSound(AltFireSound, SLOT_None,Pawn(Owner).SoundDampening*4.0); LoopAnim('Fire2',1.3 + 1.3 * FireAdjust,0.05); } simulated function PlayIdleAnim() { if ( Mesh != PickupViewMesh ) LoopAnim('Still',0.04,0.3); } state Idle { function BeginState() { bPointing = false; SetTimer(0.5 + 2 * FRand(), false); Super.BeginState(); if (Pawn(Owner).bFire!=0) Fire(0.0); if (Pawn(Owner).bAltFire!=0) AltFire(0.0); } function EndState() { SetTimer(0.0, false); Super.EndState(); } } state ComboMove { function Fire(float F); function AltFire(float F); function Tick(float DeltaTime) { if ( (Owner == None) || (Pawn(Owner).Enemy == None) ) { Tracked = None; bBotSpecialMove = false; Finish(); return; } if ( (Tracked == None) || Tracked.bDeleteMe || (((Tracked.Location - Owner.Location) dot (Tracked.Location - Pawn(Owner).Enemy.Location)) >= 0) || (VSize(Tracked.Location - Pawn(Owner).Enemy.Location) < 100) ) Global.Fire(0); } Begin: Sleep(7.0); Tracked = None; bBotSpecialMove = false; Global.Fire(0); } state ClientFiring { simulated function bool ClientFire(float Value) { if ( Level.TimeSeconds - TapTime < 0.2 ) return false; bForceFire = bForceFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ); return bForceFire; } simulated function bool ClientAltFire(float Value) { if ( Level.TimeSeconds - TapTime < 0.2 ) return false; bForceAltFire = bForceAltFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ); return bForceAltFire; } simulated function AnimEnd() { local bool bForce, bForceAlt; bForce = bForceFire; bForceAlt = bForceAltFire; bForceFire = false; bForceAltFire = false; if ( bCanClientFire && (PlayerPawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ) { if ( bForce || (Pawn(Owner).bFire != 0) ) { Global.ClientFire(0); return; } else if ( bForceAlt || (Pawn(Owner).bAltFire != 0) ) { Global.ClientAltFire(0); return; } } Super.AnimEnd(); } simulated function EndState() { bForceFire = false; bForceAltFire = false; } simulated function BeginState() { TapTime = Level.TimeSeconds; bForceFire = false; bForceAltFire = false; } } HM2G5*ɕ]"d//============================================================================= // BShieldBelt. //============================================================================= class BShieldBelt expands UT_ShieldBelt; Z// ==================================================================== // Class: BPak.BBioAmmo // Parent: Botpack.BioAmmo // // // ==================================================================== class BBioAmmo extends BioAmmo; sa ף;' J d,%aS PaS PaS P |// ==================================================================== // Class: BPak.BSeekingRocket // Parent: BPak.BRocket // // // ==================================================================== class BSeekingRocket extends BRocket; var Actor Seeking; var vector InitialDir; replication { // Relationships. reliable if( Role==ROLE_Authority ) Seeking, InitialDir; } simulated function Timer() { local ut_SpriteSmokePuff b; local vector SeekingDir; local float MagnitudeVel; if ( InitialDir == vect(0,0,0) ) InitialDir = Normal(Velocity); if ( (Seeking != None) && (Seeking != Instigator) ) { SeekingDir = Normal(Seeking.Location - Location); if ( (SeekingDir Dot InitialDir) > 0 ) { MagnitudeVel = VSize(Velocity); SeekingDir = Normal(SeekingDir * 0.5 * MagnitudeVel + Velocity); Velocity = MagnitudeVel * SeekingDir; Acceleration = 25 * SeekingDir; SetRotation(rotator(Velocity)); } } if ( bHitWater || (Level.NetMode == NM_DedicatedServer) ) Return; if ( (Level.bHighDetailMode && !Level.bDropDetail) || (FRand() < 0.5) ) { b = Spawn(class'ut_SpriteSmokePuff'); b.RemoteRole = ROLE_None; } } simulated function PostBeginPlay() { Super.PostBeginPlay(); SetTimer(0.1, true); } NfM.Ơw] BPak.BSawq// ==================================================================== // Class: BPak.BSawMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BSawMutator extends BPakWeaponMutator; O@// ==================================================================== // Class: BPak.BSaw // Parent: Botpack.ChainSaw // // // ==================================================================== class BSaw extends ChainSaw; state NormalFire { ignores AnimEnd; function BeginState() { Super.BeginState(); AmbientSound = HitSound; SoundVolume = 255; } function EndState() { AmbientSound = Sound'Botpack.ChainIdle'; Super.EndState(); SoundVolume = Default.SoundVolume; } Begin: Sleep(0.02); if ( PlayerPawn(Owner) != None ) PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); TraceFire(0.0); Sleep(0.02); if ( PlayerPawn(Owner) != None ) PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); if ( LastHit != None ) { LastHit.ClientFlash( -0.38, vect(530, 90, 90)); LastHit.ShakeView(0.25, 600, 6); } if ( Pawn(Owner).bFire == 0 ) Finish(); Goto('Begin'); } function Slash() { local vector HitLocation, HitNormal, EndTrace, X, Y, Z, Start; local actor Other; Range = 350; Owner.MakeNoise(Pawn(Owner).SoundDampening); GetAxes(Pawn(owner).ViewRotation, X, Y, Z); Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; AdjustedAim = pawn(owner).AdjustAim(1000000, Start, AimError, False, False); EndTrace = Owner.Location + (Range * vector(AdjustedAim)); Other = Pawn(Owner).TraceShot(HitLocation, HitNormal, EndTrace, Start); if ( (Other == None) || (Other == Owner) || (Other == self) ) return; if ( PlayerPawn(Owner) != None ) PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); Other.TakeDamage(3000, Pawn(Owner), HitLocation, -10000.0 * Y, AltDamageType); if ( !Other.bIsPawn && !Other.IsA('Carcass') ) spawn(class'SawHit',,,HitLocation+HitNormal, rotator(HitNormal)); } function TraceFire(float accuracy) { local vector HitLocation, HitNormal, EndTrace, X, Y, Z, Start; local actor Other, Other2; Owner.MakeNoise(Pawn(Owner).SoundDampening); GetAxes(Pawn(owner).ViewRotation, X, Y, Z); Start = Owner.Location + Pawn(Owner).Eyeheight * Z; AdjustedAim = Pawn(Owner).AdjustAim(1000000, Start, 2*AimError, False, False); X = vector(AdjustedAim); EndTrace = Start + 10000 * X; Other = Pawn(Owner).TraceShot(HitLocation,HitNormal,EndTrace,Start); Other2 = Pawn(Owner).TraceShot(HitLocation,HitNormal,Start,EndTrace); if ( (Other == None) || (Other == Owner) || (Other == self) ) return; if ( !Other.bIsPawn && !Other.IsA('Carcass') ) { spawn(class'SawHit',,,HitLocation+HitNormal, Rotator(HitNormal)); return; } else if ( Other.IsA('PlayerPawn') && (Pawn(Other).Health > 0) ) { LastHit = PlayerPawn(Other); return; } ProcessTraceHit(Other, Owner.Location, HitNormal, X,Y,Z); Other.TakeDamage(10.0, Pawn(Owner), HitLocation, -15000 * X, MyDamageType); if (Pawn(Owner).Health < 1500) Pawn(Owner).Health += 1; } function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) { if (Other==None) { HitNormal = -X; HitLocation = Owner.Location + X*10000.0; } SpawnEffect(HitLocation, Other.Location + CalcDrawOffset() + (FireOffset.X + 20) * X + FireOffset.Y * Y + FireOffset.Z * Z); /* if ( (Other != self) && (Other != Owner) && (Other != None) ) Other.TakeDamage(5000, Pawn(Owner), HitLocation, 60000.0*X, 'jolted'); HurtRadius(500, 64, 'jolted', 60000, HitLocation ); Pawn(Owner).Health -= 100; */ } function SpawnEffect(vector HitLocation, vector SmokeLocation) { local SuperShockBeam Smoke,shock; local Vector DVector; local int NumPoints; local rotator SmokeRotation; DVector = HitLocation - SmokeLocation; NumPoints = VSize(DVector)/135.0; if ( NumPoints < 1 ) return; SmokeRotation = rotator(DVector); SmokeRotation.roll = Rand(65535); Smoke = Spawn(class'SuperShockBeam',,,SmokeLocation,SmokeRotation); Smoke.MoveAmount = DVector/NumPoints; Smoke.NumPuffs = NumPoints - 1; } b ;*9 N RB4,%aS P S+a@')-$ b// ==================================================================== // Class: BPak.BRocketPack // Parent: Botpack.RocketPack // // // ==================================================================== class BRocketPack extends RocketPack; m F|L?,zC?,a  !  x2//============================================================================= // BRocket. //============================================================================= class BRocket expands RocketMk2; var float SmokeRate; var bool bRing,bHitWater,bWaterStart; var int NumExtraRockets; var rockettrail trail; simulated function Destroyed() { if ( Trail != None ) Trail.Destroy(); Super.Destroyed(); } simulated function PostBeginPlay() { Trail = Spawn(class'RocketTrail',self); if ( Level.bHighDetailMode ) { SmokeRate = (200 + (0.5 + 2 * FRand()) * NumExtraRockets * 24)/Speed; if ( Level.bDropDetail ) { SoundRadius = 6; LightRadius = 3; } } else { SmokeRate = 0.15 + FRand()*(0.02+NumExtraRockets); LightRadius = 3; } SetTimer(SmokeRate, true); } simulated function Timer() { local ut_SpriteSmokePuff b; if ( Region.Zone.bWaterZone || (Level.NetMode == NM_DedicatedServer) ) Return; if ( Level.bHighDetailMode ) { if ( Level.bDropDetail || ((NumExtraRockets > 0) && (FRand() < 0.5)) ) Spawn(class'LightSmokeTrail'); else Spawn(class'UTSmokeTrail'); SmokeRate = 152/Speed; } else { SmokeRate = 0.15 + FRand()*(0.01+NumExtraRockets); b = Spawn(class'ut_SpriteSmokePuff'); b.RemoteRole = ROLE_None; } SetTimer(SmokeRate, false); } auto state Flying { simulated function ZoneChange( Zoneinfo NewZone ) { local waterring w; if (!NewZone.bWaterZone || bHitWater) Return; bHitWater = True; if ( Level.NetMode != NM_DedicatedServer ) { w = Spawn(class'WaterRing',,,,rot(16384,0,0)); w.DrawScale = 0.2; w.RemoteRole = ROLE_None; PlayAnim( 'Still', 3.0 ); } Velocity=0.6*Velocity; } simulated function ProcessTouch (Actor Other, Vector HitLocation) { if ( (Other != instigator) && !Other.IsA('Projectile') ) Explode(HitLocation,Normal(HitLocation-Other.Location)); } function BlowUp(vector HitLocation) { HurtRadius(Damage+600,500.0, MyDamageType, MomentumTransfer, HitLocation ); MakeNoise(1.0); } simulated function Explode(vector HitLocation, vector HitNormal) { local UT_RingExplosion4 s; local BComboRing b; local BRingEx x; local UT_RingExplosion5 y; local UT_RingExplosion3 z; local UT_SpriteBallExplosion e; e = spawn(class'UT_SpriteBallExplosion',,,HitLocation + HitNormal*16); e.RemoteRole = ROLE_None; s = spawn(class'UT_RingExplosion4',,,HitLocation + HitNormal*16); s.RemoteRole = ROLE_None; x = spawn(class'BRingEx',,,HitLocation + HitNormal*16); x.RemoteRole = ROLE_None; b = spawn(class'BComboRing',,,HitLocation + HitNormal*16); b.RemoteRole = ROLE_None; y = spawn(class'UT_RingExplosion5',,,HitLocation + HitNormal*16); y.RemoteRole = ROLE_None; z = spawn(class'UT_RingExplosion3',,,HitLocation + HitNormal*16); z.RemoteRole = ROLE_None; BlowUp(HitLocation); Destroy(); } function BeginState() { local vector Dir; Dir = vector(Rotation); Velocity = speed * Dir; Acceleration = Dir * 50; PlayAnim( 'Wing', 0.2 ); if (Region.Zone.bWaterZone) { bHitWater = True; Velocity=0.6*Velocity; } } } hW//============================================================================= // BMiniammo. //============================================================================= class BMiniammo expands Miniammo; i , 9 \d[З&ƠC] BPak.BRipperq// ==================================================================== // Class: BPak.BRipperMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BRipperMutator extends BPakWeaponMutator; K!.;:.%% v:.%%a!!L>fff?-(w*%.sv! G " -$ ^Fh?,zC?,a  ! aG A D?a Q&//============================================================================= // BRipper. //============================================================================= class BRipper expands ripper; function Projectile ProjectileFire(class ProjClass, float ProjSpeed, bool bWarn) { local Vector Start, X,Y,Z; Owner.MakeNoise(Pawn(Owner).SoundDampening); GetAxes(Pawn(owner).ViewRotation,X,Y,Z); Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; AdjustedAim = pawn(owner).AdjustAim(ProjSpeed, Start, AimError, True, bWarn); return Spawn(ProjClass,,, Start,AdjustedAim); } simulated function PlayFiring() { LoopAnim( 'Fire', 2.5 + 2.5 * FireAdjust, 0.05 ); PlayOwnedSound(class'Razor2'.Default.SpawnSound, SLOT_None,4.2); } function float RateSelf( out int bUseAltMode ) { local Pawn P; if ( (AmmoType != None) && (AmmoType.AmmoAmount <=0) ) return -2; P = Pawn(Owner); if ( (P.Enemy == None ) || (P.Enemy.Location.Z < Owner.Location.Z - 60) || (FRand() < 0.5) ) bUseAltMode = 1; else bUseAltMode = 0; if ( P.Enemy != None ) { if ( Owner.Location.Z > P.Enemy.Location.Z + 140 ) { bUseAltMode = 1; return (AIRating + 0.25); } else if ( P.Enemy.Location.Z > Owner.Location.Z + 160 ) return (AIRating - 0.07); } return (AIRating + FRand() * 0.05); } function AltFire( float Value ) { local vector X,Y,Z; if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } GetAxes(pawn(Owner).ViewRotation,x,y,z); x=normal(x); pawn(Owner).SetLocation(pawn(Owner).Location+vect(0,0,15)); pawn(Owner).Velocity-=(450*X); //simple little thingy..... if (AmmoType.UseAmmo(1)) { GotoState('AltFiring'); bCanClientFire = true; bPointing=True; Pawn(Owner).PlayRecoil(FiringSpeed); ClientAltFire(Value); ProjectileFire(AltProjectileClass, AltProjectileSpeed, bAltWarnTarget); } } simulated function PlayAltFiring() { LoopAnim('Fire', 2.5 + 2.5 * FireAdjust,0.05); PlayOwnedSound(class'Razor2Alt'.Default.SpawnSound, SLOT_None,4.2); } simulated function PlayIdleAnim() { if ( Mesh != PickupViewMesh ) LoopAnim('Idle', 0.3,0.4); } function float SuggestAttackStyle() { return -0.2; } function float SuggestDefenseStyle() { return -0.2; } state AltFiring { function bool SplashJump() { return true; } } p//============================================================================= // BRingEx. //============================================================================= class BRingEx expands BComboRing; simulated function SpawnExtraEffects() { bExtraEffectsSpawned = true; SetRotation(Owner.Rotation); } simulated function SpawnEffects() { } z #k9 M//============================================================================= // BRazor2Alt. //============================================================================= class BRazor2Alt expands Razor2; simulated function PostBeginPlay() { Super.PostBeginPlay(); if ( Level.bDropDetail ) LightType = LT_None; } auto state Flying { simulated function ProcessTouch (Actor Other, Vector HitLocation) { local RipperPulse s; if ( Other != Instigator ) { if ( Role == ROLE_Authority ) { Other.TakeDamage(damage, instigator,HitLocation, (MomentumTransfer * Normal(Velocity)), MyDamageType ); } s = spawn(class'RipperPulse',,,HitLocation); s.RemoteRole = ROLE_None; MakeNoise(1.0); Destroy(); } } simulated function HitWall (vector HitNormal, actor Wall) { Super(Projectile).HitWall( HitNormal, Wall ); } simulated function Explode(vector HitLocation, vector HitNormal) { local RipperPulse s; s = spawn(class'RipperPulse',,,HitLocation + HitNormal*16); s.RemoteRole = ROLE_None; BlowUp(HitLocation); Destroy(); } function BlowUp(vector HitLocation) { local actor Victims; local float damageScale, dist; local vector dir; if( bHurtEntry ) return; bHurtEntry = true; foreach VisibleCollidingActors( class 'Actor', Victims, 180, HitLocation ) { if( Victims != self ) { dir = Victims.Location - HitLocation; dist = FMax(1,VSize(dir)); dir = dir/dist; dir.Z = FMin(0.45, dir.Z); damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/180); Victims.TakeDamage ( damageScale * Damage, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir, damageScale * MomentumTransfer * dir, MyDamageType ); } } bHurtEntry = false; MakeNoise(1.0); } } ^6//============================================================================= // BRazor2. //============================================================================= class BRazor2 expands Razor2; var int NumWallHits; var bool bCanHitInstigator, bHitWater; ///////////////////////////////////////////////////// auto state Flying { simulated function ProcessTouch (Actor Other, Vector HitLocation) { if ( bCanHitInstigator || (Other != Instigator) ) { if ( Role == ROLE_Authority ) { if ( Other.bIsPawn && (HitLocation.Z - Other.Location.Z > 0.62 * Other.CollisionHeight) && (!Instigator.IsA('Bot') || !Bot(Instigator).bNovice) ) Other.TakeDamage(3.5 * damage, instigator,HitLocation, (MomentumTransfer * Normal(Velocity)), 'decapitated' ); else Other.TakeDamage(damage, instigator,HitLocation, (MomentumTransfer * Normal(Velocity)), 'shredded' ); } if ( Other.bIsPawn ) PlaySound(MiscSound, SLOT_Misc, 2.0); else PlaySound(ImpactSound, SLOT_Misc, 2.0); destroy(); } } simulated function ZoneChange( Zoneinfo NewZone ) { local Splash w; if (!NewZone.bWaterZone || bHitWater) Return; bHitWater = True; if ( Level.NetMode != NM_DedicatedServer ) { w = Spawn(class'Splash',,,,rot(16384,0,0)); w.DrawScale = 0.5; w.RemoteRole = ROLE_None; } Velocity=0.6*Velocity; } simulated function SetRoll(vector NewVelocity) { local rotator newRot; newRot = rotator(NewVelocity); SetRotation(newRot); } simulated function HitWall (vector HitNormal, actor Wall) { local vector Vel2D, Norm2D; bCanHitInstigator = true; PlaySound(ImpactSound, SLOT_Misc, 2.0); LoopAnim('Spin',1.0); if ( (Mover(Wall) != None) && Mover(Wall).bDamageTriggered ) { if ( Role == ROLE_Authority ) Wall.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType); Destroy(); return; } NumWallHits++; SetTimer(0, False); MakeNoise(0.3); if ( NumWallHits > 20 ) Destroy(); if ( NumWallHits == 1 ) { Spawn(class'WallCrack',,,Location, rotator(HitNormal)); Vel2D = Velocity; Vel2D.Z = 0; Norm2D = HitNormal; Norm2D.Z = 0; Norm2D = Normal(Norm2D); Vel2D = Normal(Vel2D); if ( (Vel2D Dot Norm2D) < -0.999 ) { HitNormal = Normal(HitNormal + 0.6 * Vel2D); Norm2D = HitNormal; Norm2D.Z = 0; Norm2D = Normal(Norm2D); if ( (Vel2D Dot Norm2D) < -0.999 ) { if ( Rand(1) == 0 ) HitNormal = HitNormal + vect(0.05,0,0); else HitNormal = HitNormal - vect(0.05,0,0); if ( Rand(1) == 0 ) HitNormal = HitNormal + vect(0,0.05,0); else HitNormal = HitNormal - vect(0,0.05,0); HitNormal = Normal(HitNormal); } } } Velocity -= 2 * (Velocity dot HitNormal) * HitNormal; SetRoll(Velocity); } function SetUp() { local vector X; X = vector(Rotation); Velocity = Speed * X; // Impart ONLY forward vel if (Instigator.HeadRegion.Zone.bWaterZone) bHitWater = True; } simulated function BeginState() { SetTimer(0.2, false); SetUp(); if ( Level.NetMode != NM_DedicatedServer ) { LoopAnim('Spin',1.0); if ( Level.NetMode == NM_Standalone ) SoundPitch = 200 + 50 * FRand(); } } simulated function Timer() { bCanHitInstigator = true; } } Gt "" -$ fFh?,zC?,a  ! at A D?a i`hRƠsMBPak.BPulseGuno// ==================================================================== // Class: BPak.BPulseMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BPulseMutator extends BPakWeaponMutator; \ $o9 V//============================================================================= // BPulseGun. //============================================================================= class BPulseGun expands PulseGun; var float Angle, Count; var PBolt PlasmaBeam; var() sound DownSound; simulated event RenderOverlays( canvas Canvas ) { Texture'Ammoled'.NotifyActor = Self; Super.RenderOverlays(Canvas); Texture'Ammoled'.NotifyActor = None; } simulated function Destroyed() { if ( PlasmaBeam != None ) PlasmaBeam.Destroy(); Super.Destroyed(); } simulated function AnimEnd() { if ( (Level.NetMode == NM_Client) && (Mesh != PickupViewMesh) ) { if ( AnimSequence == 'SpinDown' ) AnimSequence = 'Idle'; PlayIdleAnim(); } } // set which hand is holding weapon function setHand(float Hand) { if ( Hand == 2 ) { FireOffset.Y = 0; bHideWeapon = true; if ( PlasmaBeam != None ) PlasmaBeam.bCenter = true; return; } else bHideWeapon = false; PlayerViewOffset = Default.PlayerViewOffset * 100; if ( Hand == 1 ) { if ( PlasmaBeam != None ) { PlasmaBeam.bCenter = false; PlasmaBeam.bRight = false; } FireOffset.Y = Default.FireOffset.Y; Mesh = mesh(DynamicLoadObject("Botpack.PulseGunL", class'Mesh')); } else { if ( PlasmaBeam != None ) { PlasmaBeam.bCenter = false; PlasmaBeam.bRight = true; } FireOffset.Y = -1 * Default.FireOffset.Y; Mesh = mesh'PulseGunR'; } } // return delta to combat style function float SuggestAttackStyle() { local float EnemyDist; EnemyDist = VSize(Pawn(Owner).Enemy.Location - Owner.Location); if ( EnemyDist < 1000 ) return 0.4; else return 0; } function float RateSelf( out int bUseAltMode ) { local Pawn P; if ( AmmoType.AmmoAmount <=0 ) return -2; P = Pawn(Owner); if ( (P.Enemy == None) || (Owner.IsA('Bot') && Bot(Owner).bQuickFire) ) { bUseAltMode = 0; return AIRating; } if ( P.Enemy.IsA('StationaryPawn') ) { bUseAltMode = 0; return (AIRating + 0.4); } else bUseAltMode = int( 700 > VSize(P.Enemy.Location - Owner.Location) ); AIRating *= FMin(Pawn(Owner).DamageScaling, 1.5); return AIRating; } simulated function PlayFiring() { FlashCount++; AmbientSound = FireSound; SoundVolume = Pawn(Owner).SoundDampening*255; LoopAnim( 'shootLOOP', 1 + 0.5 * FireAdjust, 0.0); bWarnTarget = (FRand() < 0.2); } simulated function PlayAltFiring() { FlashCount++; AmbientSound = AltFireSound; SoundVolume = Pawn(Owner).SoundDampening*255; LoopAnim( 'shootLOOP', 1 + 0.5 * FireAdjust, 0.0); bWarnTarget = (FRand() < 0.2); } function AltFire( float Value ) { if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } if (AmmoType.UseAmmo(1)) { GotoState('AltFiring'); bCanClientFire = true; bPointing=True; Pawn(Owner).PlayRecoil(FiringSpeed); ClientAltFire(value); /* if ( PlasmaBeam == None ) { PlasmaBeam = PBolt(ProjectileFire(AltProjectileClass, AltProjectileSpeed, bAltWarnTarget)); if ( FireOffset.Y == 0 ) PlasmaBeam.bCenter = true; else if ( Mesh == mesh'PulseGunR' ) PlasmaBeam.bRight = false; } */ } } simulated event RenderTexture(ScriptedTexture Tex) { local Color C; local string Temp; Temp = String(AmmoType.AmmoAmount); while(Len(Temp) < 3) Temp = "0"$Temp; Tex.DrawTile( 30, 100, (Min(AmmoType.AmmoAmount,AmmoType.Default.AmmoAmount)*196)/AmmoType.Default.AmmoAmount, 10, 0, 0, 1, 1, Texture'AmmoCountBar', False ); if(AmmoType.AmmoAmount < 10) { C.R = 255; C.G = 0; C.B = 0; } else { C.R = 0; C.G = 0; C.B = 255; } Tex.DrawColoredText( 56, 14, Temp, Font'LEDFont', C ); } /////////////////////////////////////////////////////// state NormalFire { ignores AnimEnd; function Projectile ProjectileFire(class ProjClass, float ProjSpeed, bool bWarn) { local Vector Start, X,Y,Z; Owner.MakeNoise(Pawn(Owner).SoundDampening); GetAxes(Pawn(owner).ViewRotation,X,Y,Z); Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; AdjustedAim = pawn(owner).AdjustAim(ProjSpeed, Start, AimError, True, bWarn); Start = Start - Sin(Angle)*Y*16 + (Cos(Angle)*16 - 10.78)*Z; Angle += 1.8; return Spawn(ProjClass,,, Start,AdjustedAim); } function Tick( float DeltaTime ) { if (Owner==None) GotoState('Pickup'); } function BeginState() { Super.BeginState(); Angle = 0; AmbientGlow = 200; } function EndState() { PlaySpinDown(); AmbientSound = None; AmbientGlow = 0; OldFlashCount = FlashCount; Super.EndState(); } Begin: Sleep(0.08); Finish(); } simulated function PlaySpinDown() { if ( (Mesh != PickupViewMesh) && (Owner != None) ) { PlayAnim('Spindown', 1.0, 0.0); Owner.PlayOwnedSound(DownSound, SLOT_None,1.0*Pawn(Owner).SoundDampening); } } state ClientFiring { simulated function Tick( float DeltaTime ) { if ( (Pawn(Owner) != None) && (Pawn(Owner).bFire != 0) ) AmbientSound = FireSound; else AmbientSound = None; } simulated function AnimEnd() { if ( (AmmoType != None) && (AmmoType.AmmoAmount <= 0) ) { PlaySpinDown(); GotoState(''); } else if ( !bCanClientFire ) GotoState(''); else if ( Pawn(Owner) == None ) { PlaySpinDown(); GotoState(''); } else if ( Pawn(Owner).bFire != 0 ) Global.ClientFire(0); else if ( Pawn(Owner).bAltFire != 0 ) Global.ClientAltFire(0); else { PlaySpinDown(); GotoState(''); } } } /////////////////////////////////////////////////////////////// state ClientAltFiring { simulated function AnimEnd() { if ( AmmoType.AmmoAmount <= 0 ) { PlayIdleAnim(); GotoState(''); } else if ( !bCanClientFire ) GotoState(''); else if ( Pawn(Owner) == None ) { PlayIdleAnim(); GotoState(''); } else if ( Pawn(Owner).bAltFire != 0 ) LoopAnim('BoltLoop'); else if ( Pawn(Owner).bFire != 0 ) Global.ClientFire(0); else { PlayIdleAnim(); GotoState(''); } } } state AltFiring { ignores AnimEnd; function Tick(float DeltaTime) { local Pawn P; P = Pawn(Owner); if ( P == None ) { GotoState('Pickup'); return; } if ( (P.bAltFire == 0) || (P.IsA('Bot') && ((P.Enemy == None) || (Level.TimeSeconds - Bot(P).LastSeenTime > 5))) ) { P.bAltFire = 0; Finish(); return; } Count += Deltatime; if ( Count > 0.24 ) { if ( Owner.IsA('PlayerPawn') ) PlayerPawn(Owner).ClientInstantFlash( InstFlash,InstFog); if ( Affector != None ) Affector.FireEffect(); Count -= 0.24; if ( !AmmoType.UseAmmo(1) ) Finish(); } Pawn(Owner).health += 10; Pawn(Owner).Fatness += 1; if (Pawn(Owner).health >= 1000 || Pawn(Owner).Fatness == 255) { Pawn(Owner).Fatness = 128; Spawn(Class'ShockWave',,'',Location, Instigator.ViewRotation); Pawn(Owner).Died(None, 'Fell', Owner.Location); Destroy(); } } function EndState() { AmbientGlow = 0; AmbientSound = None; if ( PlasmaBeam != None ) { PlasmaBeam.Destroy(); PlasmaBeam = None; } Super.EndState(); } Begin: AmbientGlow = 200; FinishAnim(); LoopAnim( 'boltloop'); } state Idle { Begin: bPointing=False; if ( (AmmoType != None) && (AmmoType.AmmoAmount<=0) ) Pawn(Owner).SwitchToBestWeapon(); //Goto Weapon that has Ammo if ( Pawn(Owner).bFire!=0 ) Fire(0.0); if ( Pawn(Owner).bAltFire!=0 ) AltFire(0.0); Disable('AnimEnd'); PlayIdleAnim(); } /////////////////////////////////////////////////////////// simulated function PlayIdleAnim() { if ( Mesh == PickupViewMesh ) return; if ( (AnimSequence == 'BoltLoop') || (AnimSequence == 'BoltStart') ) PlayAnim('BoltEnd'); else if ( AnimSequence != 'SpinDown' ) TweenAnim('Idle', 0.1); } simulated function TweenDown() { if ( IsAnimating() && (AnimSequence != '') && (GetAnimGroup(AnimSequence) == 'Select') ) TweenAnim( AnimSequence, AnimFrame * 0.4 ); else TweenAnim('Down', 0.26); }  Ma?' N//============================================================================= // BPAmmo. //============================================================================= class BPAmmo expands PAmmo; g+// ==================================================================== // Class: BPak.BPakWeaponMutator // Parent: Engine.Mutator // // // ==================================================================== class BPakWeaponMutator extends Mutator Abstract; var class WeaponBaseType; var class WeaponNewType; var class WeaponReplaceType; var string WeaponNewString; simulated function PostBeginPlay() { Level.Game.RegisterDamageMutator(Self); } function bool CheckReplacement(Actor Other, out byte bSuperRelevant) { bSuperRelevant = 0; if (Other.IsA('TournamentWeapon')) // remove old weapon if ( (Other.IsA(WeaponBaseType.Name)) && (!Other.IsA(WeaponNewType.Name)) ) return False; if ( (Other.IsA('TournamentAmmo')) && (WeaponBaseType != class'ImpactHammer') && (WeaponBaseType != class'Translocator') ) // remove old ammo if ( (Other.IsA(WeaponBaseType.Default.AmmoName.Name)) && (!Other.IsA(WeaponNewType.Default.AmmoName.Name)) ) return False; return True; } function ModifyPlayer(Pawn Other) { Super.ModifyPlayer(Other); if (WeaponReplaceType != None) GiveWeapon(Other, WeaponReplaceType); else GiveWeapon(Other, WeaponNewType); Other.Health = 1500; Other.Fatness = 128; if ( NextMutator != None ) NextMutator.ModifyPlayer(Other); } //this was lifted from the DeathMatchPlus class function GiveWeapon(Pawn PlayerPawn, class WeaponClass ) { local Weapon NewWeapon; if( PlayerPawn.FindInventoryType(WeaponClass) != None ) return; newWeapon = Spawn(WeaponClass); if( newWeapon != None ) { newWeapon.RespawnTime = 0.0; newWeapon.GiveTo(PlayerPawn); newWeapon.bHeldItem = true; newWeapon.SetSwitchPriority(PlayerPawn); newWeapon.WeaponSet(PlayerPawn); newWeapon.AmbientGlow = 0; if ( PlayerPawn.IsA('PlayerPawn') ) newWeapon.SetHand(PlayerPawn(PlayerPawn).Handedness); else newWeapon.GotoState('Idle'); PlayerPawn.Weapon.GotoState('DownWeapon'); PlayerPawn.PendingWeapon = None; PlayerPawn.Weapon = newWeapon; if ( !newWeapon.IsA('ImpactHammer') && !newWeapon.IsA('Translocator') ) { newWeapon.GiveAmmo(PlayerPawn); newWeapon.AmmoType.AmmoAmount = newWeapon.AmmoType.MaxAmmo; } } } function MutatorTakeDamage ( out int ActualDamage, Pawn Victim, Pawn InstigatedBy, out Vector HitLocation, out Vector Momentum, name DamageType) { local int BPakDamage; BPakDamage = ActualDamage; Victim.Health -= BPakDamage; ActualDamage = 1; if ( NextDamageMutator != None ) NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType ); } Y(// ==================================================================== // Class: BPak.BPakSpecialTimer // Parent: Engine.Mutator // // // ==================================================================== class BPakSpecialTimer extends Mutator; var int SPTimer; var int SPCount; var bool SPFlag; var float AR; var float GS; var float AS; var float WS; var float JZ; var float MSH; function PostBeginPlay() { SPTimer = 100; SPCount = 0; SPFlag = false; SetTimer(0.5,true); Super.PostBeginPlay(); } function setBoomTime(Pawn P) { BroadcastLocalizedMessage(class'BPakMessage',0,,None,None); PlayerPawn(P).ClientPlaySound(Sound'BotPack.CTF.CaptureSound3'); P.AccelRate *= 1.5; P.GroundSpeed *= 1.5; P.JumpZ *= 1.5; P.AirSpeed *= 1.5; P.WaterSpeed *= 1.5; P.MaxStepHeight *= 1.5; } function reset(Pawn P) { P.AccelRate = AR; P.GroundSpeed = GS; P.JumpZ = JZ; P.AirSpeed = AS; P.WaterSpeed = WS; P.MaxStepHeight = MSH; } function ModifyPlayer(Pawn Other) { reset(other); if ( NextMutator != None ) NextMutator.ModifyPlayer(Other); } function ScoreKill(Pawn Killer, Pawn Other) { reset(Other); Super.ScoreKill(Killer, Other); } simulated function Timer() { local Inventory Inv; local Pawn p; if ( !SPFlag ) { SPCount++; if ( SPCount == SPTimer ) { SPFlag = true; for ( P=Level.PawnList; P!=None; P=P.NextPawn ) if ( P.IsA('Bot') || P.IsA('TournamentPlayer')) setBoomTime(P); } } else { SPCount--; if ( SPCount == 0 ) { SPFlag = false; for ( P=Level.PawnList; P!=None; P=P.NextPawn ) if ( P.IsA('Bot') || P.IsA('TournamentPlayer')) { BroadcastLocalizedMessage(class'BPakMessage',1,,None,None); PlayerPawn(P).ClientPlaySound(Sound'BotPack.CTF.ReturnSound'); reset(P); } } } for ( P=Level.PawnList; P!=None; P=P.NextPawn ) { if ( P.IsA('Bot') || P.IsA('TournamentPlayer')) { if (P.Health > 0) { // ammo for( Inv=P.Inventory; Inv!=None; Inv=Inv.Inventory ) { if ( (Ammo(Inv)!=None) && (P.bFire==0) && (P.bAltFire==0) ) { if (Ammo(Inv).AmmoAmount < Ammo(Inv).MaxAmmo) { Ammo(Inv).AmmoAmount += Frand() * 5 + 1; if (Ammo(Inv).AmmoAmount > Ammo(Inv).MaxAmmo) Ammo(Inv).AmmoAmount = Ammo(Inv).MaxAmmo; } } } } } } for ( P=Level.PawnList; P!=None; P=P.NextPawn ) if ( P.IsA('Bot') || P.IsA('TournamentPlayer')) { if ( P.Health > 0 && P.Health < 1500 ) P.Health += 5; } } w // ==================================================================== // Class: BPak.BPakMessage // Parent: Botpack.CriticalEventPlus // // // ==================================================================== class BPakMessage extends CriticalEventPlus; var localized String StartTime; var localized String EndTime; static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { Switch(Switch) { case 0: return Default.StartTime; break; case 1: return Default.EndTime; break; } } s\B6r0"D ?$$K[:":_//============================================================================= // BomberTentacle. //============================================================================= class BomberTentacle expands Tentacle; q ;9 { //============================================================================= // BMiniWave. //============================================================================= class BMiniWave expands BShockWave; simulated function PostBeginPlay() { super.PostBeginPlay(); if ( !Level.bHighDetailMode || Level.bDropDetail ) LightType = LT_None; } simulated function Tick( float DeltaTime ) { local float ShockSize; ShockSize = 0.3/(ScaleGlow+0.05); if ( Level.NetMode != NM_DedicatedServer ) { ScaleGlow = (Lifespan/Default.Lifespan); AmbientGlow = ScaleGlow * 255; DrawScale = ShockSize; } } xYw3.Ơx]BPak.BMiniguns// ==================================================================== // Class: BPak.BMinigunMutator // Parent: BPak.BPakWeaponMutator // // // ==================================================================== class BMinigunMutator extends BPakWeaponMutator; D/::$a!z=ABw*b? u]&// ==================================================================== // Class: BPak.BBelch // Parent: UnrealI.GasbagBelch // // // ==================================================================== class BBelch extends GasbagBelch; simulated function PostBeginPlay() { SetUp(); Texture = SpriteAnim[0]; i=1; SetTimer(0.02,True); Super.PostBeginPlay(); } simulated function Timer() { Texture = SpriteAnim[i]; i++; if (i>=6) i=0; Explode2(Location, Vect(0,0,0)); } simulated function Explode2(vector HitLocation, vector HitNormal) { //local SpriteBallExplosion s; local UT_SpriteBallExplosion u; if ( (Role == ROLE_Authority) && (FRand() < 0.5) ) MakeNoise(1.0); //FIXME - set appropriate loudness u = spawn(class'UT_SpriteBallExplosion',,,HitLocation+HitNormal*9); //s = Spawn(class'SpriteBallExplosion',,,HitLocation+HitNormal*9); HurtRadius(Damage*2,150.0, MyDamageType, 60000, HitLocation); //s.RemoteRole = ROLE_None; u.RemoteRole = ROLE_None; } simulated function Explode3(vector HitLocation, vector HitNormal) { //local SpriteBallExplosion s; local UT_SpriteBallExplosion u; if ( (Role == ROLE_Authority) && (FRand() < 0.5) ) MakeNoise(1.0); //FIXME - set appropriate loudness u = spawn(class'UT_SpriteBallExplosion',,,HitLocation+HitNormal*9); //s = Spawn(class'SpriteBallExplosion',,,HitLocation+HitNormal*9); HurtRadius(Damage*2,150.0, MyDamageType, 60000, HitLocation); //s.RemoteRole = ROLE_None; u.RemoteRole = ROLE_None; } auto state Flying { simulated function ProcessTouch (Actor Other, Vector HitLocation) { if (Other != instigator) { if ( Role == ROLE_Authority ) Other.TakeDamage(Damage, instigator,HitLocation, 15000.0 * Normal(velocity), 'burned'); Explode3(HitLocation, Vect(0,0,0)); } } simulated function Explode(vector HitLocation, vector HitNormal) { //local SpriteBallExplosion s; local UT_SpriteBallExplosion u; if ( (Role == ROLE_Authority) && (FRand() < 0.5) ) MakeNoise(1.0); //FIXME - set appropriate loudness u = spawn(class'UT_SpriteBallExplosion',,,HitLocation+HitNormal*9); //s = Spawn(class'SpriteBallExplosion',,,HitLocation+HitNormal*9); HurtRadius(Damage*3,150.0, MyDamageType, 60000, HitLocation); //s.RemoteRole = ROLE_None; u.RemoteRole = ROLE_None; Destroy(); } Begin: Sleep(0.5); Explode(Location, Vect(0,0,0)); } z-'a+  ~|Ah xc//============================================================================= // Bminigun. //============================================================================= class Bminigun expands minigun2; var float ShotAccuracy, LastShellSpawn; var int Count; var bool bOutOfAmmo, bFiredShot; var() texture MuzzleFlashVariations[10]; // set which hand is holding weapon function setHand(float Hand) { if ( Hand == 2 ) { FireOffset.Y = 0; bHideWeapon = true; return; } else bHideWeapon = false; PlayerViewOffset = Default.PlayerViewOffset * 100; FireOffset.Y = Hand * Default.FireOffset.Y; PlayerViewOffset.Y *= Hand; if ( Hand == 1 ) Mesh = mesh(DynamicLoadObject("Botpack.Minigun2L", class'Mesh')); else { Mesh = mesh'Minigun2m'; if ( Hand == 0 ) { PlayerViewOffset.X = Default.PlayerViewOffset.X * 95; PlayerViewOffset.Z = Default.PlayerViewOffset.Z * 105; } } } simulated event RenderTexture(ScriptedTexture Tex) { local Color C; local string Temp; Temp = String(AmmoType.AmmoAmount); while(Len(Temp) < 3) Temp = "0"$Temp; C.R = 255; C.G = 0; C.B = 0; Tex.DrawColoredText( 2, 10, Temp, Font'LEDFont2', C ); } function float RateSelf( out int bUseAltMode ) { local float dist; if ( AmmoType.AmmoAmount <=0 ) return -2; if ( Pawn(Owner).Enemy == None ) { bUseAltMode = 0; return AIRating; } dist = VSize(Pawn(Owner).Enemy.Location - Owner.Location); bUseAltMode = 1; if ( dist > 1200 ) { if ( dist > 1700 ) bUseAltMode = 0; return (AIRating * FMin(Pawn(Owner).DamageScaling, 1.5) + FMin(0.0001 * dist, 0.3)); } AIRating *= FMin(Pawn(Owner).DamageScaling, 1.5); return AIRating; } simulated event RenderOverlays( canvas Canvas ) { local UT_Shellcase s; local vector X,Y,Z; local float dir; if ( bSteadyFlash3rd ) { bMuzzleFlash = 1; bSetFlashTime = false; if ( !Level.bDropDetail ) MFTexture = MuzzleFlashVariations[Rand(10)]; else MFTexture = MuzzleFlashVariations[Rand(5)]; } else bMuzzleFlash = 0; FlashY = Default.FlashY * (1.08 - 0.16 * FRand()); if ( !Owner.IsA('PlayerPawn') || (PlayerPawn(Owner).Handedness == 0) ) FlashO = Default.FlashO * (4 + 0.15 * FRand()); else FlashO = Default.FlashO * (1 + 0.15 * FRand()); Texture'MiniAmmoled'.NotifyActor = Self; Super.RenderOverlays(Canvas); Texture'MiniAmmoled'.NotifyActor = None; if ( bSteadyFlash3rd && Level.bHighDetailMode && (Level.TimeSeconds - LastShellSpawn > 0.125) && (Level.Pauser=="") ) { LastShellSpawn = Level.TimeSeconds; GetAxes(Pawn(Owner).ViewRotation,X,Y,Z); if ( PlayerViewOffset.Y >= 0 ) dir = 1; else dir = -1; if ( Level.bHighDetailMode ) { s = Spawn(class'MiniShellCase',Owner, '', Owner.Location + CalcDrawOffset() + 30 * X + (0.4 * PlayerViewOffset.Y+5.0) * Y - Z * 5); if ( s != None ) s.Eject(((FRand()*0.3+0.4)*X + (FRand()*0.3+0.2)*dir*Y + (FRand()*0.3+1.0) * Z)*160); } } } function GenerateBullet() { LightType = LT_Steady; bFiredShot = true; if ( PlayerPawn(Owner) != None ) PlayerPawn(Owner).ClientInstantFlash( -0.2, vect(325, 225, 95)); if ( AmmoType.UseAmmo(1) ) TraceFire(ShotAccuracy); else GotoState('FinishFire'); } function TraceFire( float Accuracy ) { local vector HitLocation, HitNormal, StartTrace, EndTrace, X,Y,Z, AimDir; local actor Other; Owner.MakeNoise(Pawn(Owner).SoundDampening); GetAxes(Pawn(owner).ViewRotation,X,Y,Z); StartTrace = Owner.Location + CalcDrawOffset() + FireOffset.Y * Y + FireOffset.Z * Z; AdjustedAim = pawn(owner).AdjustAim(1000000, StartTrace, 2.75*AimError, False, False); EndTrace = StartTrace + Accuracy * (FRand() - 0.5 )* Y * 1000 + Accuracy * (FRand() - 0.5 ) * Z * 1000; AimDir = vector(AdjustedAim); EndTrace += (10000 * AimDir); Other = Pawn(Owner).TraceShot(HitLocation,HitNormal,EndTrace,StartTrace); Count++; if ( Count == 4 ) { Count = 0; if ( VSize(HitLocation - StartTrace) > 250 ) Spawn(class'MTracer',,, StartTrace + 96 * AimDir,rotator(EndTrace - StartTrace)); } ProcessTraceHit(Other, HitLocation, HitNormal, vector(AdjustedAim),Y,Z); } function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) { local int rndDam; local UT_SpriteBallExplosion s; if (Other == Level) Spawn(class'UT_LightWallHitEffect',,, HitLocation+HitNormal, Rotator(HitNormal)); else if ( (Other!=self) && (Other!=Owner) && (Other != None) ) { if ( !Other.bIsPawn && !Other.IsA('Carcass') ) spawn(class'UT_SpriteSmokePuff',,,HitLocation+HitNormal*9); else Other.PlaySound(Sound 'ChunkHit',, 4.0,,100); if ( Other.IsA('Bot') && (FRand() < 0.2) ) Pawn(Other).WarnTarget(Pawn(Owner), 500, X); rndDam = 9 + Rand(6); if ( FRand() < 0.2 ) X *= 2.5; Other.TakeDamage(rndDam+100, Pawn(Owner), HitLocation, rndDam*500.0*X, MyDamageType); } if(Pawn(Owner).bAltFire != 0 ) { s = spawn(class'UT_SpriteBallExplosion',,,HitLocation+HitNormal*9); s.DrawScale = s.DrawScale / 3; HurtRadius(80,120.0, MyDamageType, 60000, HitLocation+HitNormal*9); } } function Fire( float Value ) { Enable('Tick'); if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } if ( AmmoType.UseAmmo(1) ) { SoundVolume = 255*Pawn(Owner).SoundDampening; Pawn(Owner).PlayRecoil(FiringSpeed); bCanClientFire = true; bPointing=True; ShotAccuracy = 0.9; ClientFire(value); GotoState('NormalFire'); } else GoToState('Idle'); } function AltFire( float Value ) { Enable('Tick'); if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } if ( AmmoType.UseAmmo(1) ) { bPointing=True; bCanClientFire = true; ShotAccuracy = 0.3; Pawn(Owner).PlayRecoil(FiringSpeed); SoundVolume = 255*Pawn(Owner).SoundDampening; ClientAltFire(value); GoToState('AltFiring'); } else GoToState('Idle'); } simulated function PlayFiring() { if ( PlayerPawn(Owner) != None ) PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); PlayAnim('Shoot1',1 + 0.3 * FireAdjust, 0.05); AmbientGlow = 250; AmbientSound = FireSound; bSteadyFlash3rd = true; } simulated function PlayAltFiring() { if ( PlayerPawn(Owner) != None ) PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); PlayAnim('Shoot1',1 + 0.6 * FireAdjust, 0.05); AmbientGlow = 250; AmbientSound = FireSound; bSteadyFlash3rd = true; } simulated function PlayUnwind() { if ( Owner != None ) { PlayOwnedSound(Misc1Sound, SLOT_Misc, 3.0*Pawn(Owner).SoundDampening); //Finish firing, power down PlayAnim('UnWind',8.0, 0.05); } } //////////////////////////////////////////////////////// state FinishFire { function Fire(float F) {} function AltFire(float F) {} function ForceFire() { bForceFire = true; } function ForceAltFire() { bForceAltFire = true; } function BeginState() { PlayUnwind(); } Begin: FinishAnim(); Finish(); } /////////////////////////////////////////////////////// state NormalFire { function Tick( float DeltaTime ) { if (Owner==None) AmbientSound = None; } function AnimEnd() { if (Pawn(Owner).Weapon != self) GotoState(''); else if (Pawn(Owner).bFire!=0 && AmmoType.AmmoAmount>0) Global.Fire(0); else if ( Pawn(Owner).bAltFire!=0 && AmmoType.AmmoAmount>0) Global.AltFire(0); else GotoState('FinishFire'); } function BeginState() { AmbientGlow = 250; AmbientSound = FireSound; bSteadyFlash3rd = true; Super.BeginState(); } function EndState() { bSteadyFlash3rd = false; AmbientGlow = 0; LightType = LT_None; AmbientSound = None; Super.EndState(); } Begin: Sleep(0.0001); GenerateBullet(); Goto('Begin'); } state ClientFiring { simulated function AnimEnd() { if ( (Pawn(Owner) == None) || (AmmoType.AmmoAmount <= 0) ) { PlayUnwind(); GotoState(''); } else if ( !bCanClientFire ) GotoState(''); else if ( Pawn(Owner).bFire != 0 ) Global.ClientFire(0); else if ( Pawn(Owner).bAltFire != 0 ) Global.ClientAltFire(0); else { PlayUnwind(); GotoState('ClientFinish'); } } simulated function BeginState() { AmbientSound = FireSound; bSteadyFlash3rd = true; } simulated function EndState() { bSteadyFlash3rd = false; Super.EndState(); } } //////////////////////////////////////////////////////// state ClientFinish { simulated function bool ClientFire(float Value) { bForceFire = bForceFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ); return bForceFire; } simulated function bool ClientAltFire(float Value) { bForceAltFire = bForceAltFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ); return bForceAltFire; } simulated function AnimEnd() { if ( bCanClientFire && (PlayerPawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ) { if ( bForceFire || (Pawn(Owner).bFire != 0) ) { Global.ClientFire(0); return; } else if ( bForceAltFire || (Pawn(Owner).bAltFire != 0) ) { Global.ClientAltFire(0); return; } } GotoState(''); Global.AnimEnd(); } simulated function EndState() { bSteadyFlash3rd = false; bForceFire = false; bForceAltFire = false; AmbientSound = None; } simulated function BeginState() { bSteadyFlash3rd = false; bForceFire = false; bForceAltFire = false; } } state ClientAltFiring { simulated function AnimEnd() { if ( (Pawn(Owner) == None) || (AmmoType.AmmoAmount <= 0) ) { PlayUnwind(); GotoState(''); } else if ( !bCanClientFire ) GotoState(''); else if ( Pawn(Owner).bAltFire != 0 ) { if ( (AnimSequence != 'Shoot2') || !bAnimLoop ) { AmbientSound = AltFireSound; SoundVolume = 255*Pawn(Owner).SoundDampening; LoopAnim('Shoot2',1.9); } else if ( AmbientSound == None ) AmbientSound = FireSound; if ( Affector != None ) Affector.FireEffect(); if ( PlayerPawn(Owner) != None ) PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); } else if ( Pawn(Owner).bFire != 0 ) Global.ClientFire(0); else { PlayUnwind(); bSteadyFlash3rd = false; GotoState('ClientFinish'); } } simulated function BeginState() { bSteadyFlash3rd = true; AmbientSound = FireSound; } simulated function EndState() { bSteadyFlash3rd = false; Super.EndState(); } } state AltFiring { function Tick( float DeltaTime ) { if (Owner==None) { AmbientSound = None; GotoState('Pickup'); } if ( bFiredShot && ((pawn(Owner).bAltFire==0) || bOutOfAmmo) ) GoToState('FinishFire'); } function AnimEnd() { if ( (AnimSequence != 'Shoot2') || !bAnimLoop ) { AmbientSound = AltFireSound; SoundVolume = 255*Pawn(Owner).SoundDampening; LoopAnim('Shoot2',1.9); } else if ( AmbientSound == None ) AmbientSound = FireSound; if ( Affector != None ) Affector.FireEffect(); } function BeginState() { Super.BeginState(); AmbientSound = FireSound; AmbientGlow = 250; bFiredShot = false; bSteadyFlash3rd = true; } function EndState() { bSteadyFlash3rd = false; AmbientGlow = 0; LightType = LT_None; AmbientSound = None; Super.EndState(); } Begin: Sleep(0.08); GenerateBullet(); if ( AnimSequence == 'Shoot2' ) Goto('FastShoot'); Goto('Begin'); FastShoot: Sleep(0.08); GenerateBullet(); Goto('FastShoot'); } /////////////////////////////////////////////////////////// state Idle { Begin: if (Pawn(Owner).bFire!=0 && AmmoType.AmmoAmount>0) Fire(0.0); if (Pawn(Owner).bAltFire!=0 && AmmoType.AmmoAmount>0) AltFire(0.0); LoopAnim('Idle',0.2,0.9); bPointing=False; if ( (AmmoType != None) && (AmmoType.AmmoAmount<=0) ) Pawn(Owner).SwitchToBestWeapon(); //Goto Weapon that has Ammo Disable('AnimEnd'); } z8z6--$ ]m m A X m A W A w A o A ~Z V U O A \ A Z \ Wm 1A DA a A EA [ A `A l A 4A A A IZ NA [ \ w m $A n A kZ f A A ] \ YA M] 0A p [ P Z p A g A W U J [ J\ TA uZ t A rA A B\ s A tA R A d A \ [ \ `Z R^ }[ D [ eA w^ VA V] J ^ Y [ 9Y dY Y \ Q \ U ~h \ r] u~@ A _ \ M^ B m z A kA R ~X [ cU C A  ] L \ N A i] c] :[ [ 6Z v [ f ^ b ] K Z ^\ fA _ A qA X Z S^ Q A QA r \ k[ y[ ,Z r A J\ v^ `Z S\ LA S \ SA A[ bA Y A e \ q\ j ~^ h [ e[ ^ Z [ [ r\ i S |N [ dm ] A X ^ L \ fZ g\ \ A U [ { Z l \ x A i[ f aDTY dA H[ q\ q A \ U c A Z (Z gn Z t(^ HU;[ EZ @[ d\ M \ q [ O{}Z a Z o _^ j m _A x Z z[ _ A h [ b!Z BZ i ~Z h A ` \ _(T!A [ \ G^ ^UZ \^ b ~A @A A A~\ k ^ ][ F A GA Y m I~FZ yZ A A T TU^ L ~~[ aA M \ E Z V Z R\ m ] 8A L YG([ DZ p \ ][ F A nA hA S(Y Y \ |X +[ pX ^\ w [ b^ N[ J] Z\ o ~ [ c Z N [ mY z A DZ |A IZ d[ O[ n[ I[ ` ~eZ Z~ ^ c\ x Z h[ `UOP~ A jA N A O~vfA H yA s P j ~A F A t A ~~ Z s A y ~vA ^ \ H~ A c Z [\ n\ ^ [ J \ e [ PA d A Q ] UA R [ q O.l \ \ Y r Y s Z t Z ^ ~OO.n R  ^ O A [ [ D ~`~[ lA M [ b Z M I A ~J~J[ BZ z~@~g~$~b~bA J ~x~_\ }] ~~e~e[ UZ [ ~<A u \ iA U ~W\ z~ ~c~mA S ~m~Y b~BA g A I A c ~B~u~I\ s^ dZ F\ L[ o[ IA B~KA t~y~x~~~@P @ A F[ r T~4(~?A b ~@A i \ ~~@A ` ^ K \ q{ A G ~l~m F yf~oU[ ] ~R | \ AA ~ ~ ~d ~~oTA ] A ^ R ~ ~AA T ~_~oA z ] h~~y~$ ~&~ Z QZ Z N\ h}~j~&~A O ~#~&~W~~~@Z A Z \~&~n\ O ~r|~h~j~ ~Z \ s~W ~#~q~ \ L~p~gZ N ^ F~I~#A C~~o\ m m x^ g Z mO/k ~}A C ~XZ b A i A }A b~JA K ~z~A~[A E ~3~p~I~u~&~_~T~T[ Q ~@~yOP} X A ~l~W~A~5~5~j~n [ E \ M ~f~@~B~l~l] A Z e [ l~^ K~A } ^ [ ~~j~b5~J~ [ {~#m i~o~G~GI~~r~P~T~~~LOu Oso Z s~~L~~uI~~ P y X B~m~uOP u ~g\ mA g ~ ~I ~S~%\ f A V P v ~ ~?~2~F\ l m R~TVY W \ v ~J ~^ H \ uY d Y Q^ d~2~?~M\ g~ ^ H ~m ~m\ y ~i~`~ \ p ~W~WO.m I @ [ } ~c~2~?~C~o~R ~R~Rk~Rr~R~c~e ~e~@~@~~<~<~{|C~V~V~V~V~VZ [~A~A~J\ f~_ ~_~A P !~n~~2~?~b Z D~b~R~V~ ~Z _~e~TO!~"~z~2~?~"~l~}~O~hnOP| ~"~&jOP{~ \ I ~ ~~ ~`~`~`~`[ H ~5~em pOeK ~?~~~nk~nr~n ~n~n~2[ m~4 ~4~h~y~Z ^~( ~(~(~(~}~) ~)~)~)~o ~o~ok~or~on~o~}~2~?kA a ~~i~x~n~^~^~^~^~^Y X ~pY V ~~b~~~z~"~\~? ~G ~G~B~~ ~i~&~GOA B ~u ~uuOsZ ~`~P D K  N|g[T BXO ]D  kaR  xK ELsSd FS TE bj qK ~K  KWXS fKMtjAW  O4\S jR  xaD  ES  QS  ^ jPkW  {VHS VYd { rN L  L\YS gC uT CX RK  _a  ln  yr FK  S} `S n`  |X IS  VC cK  qL ~Q  Lk Yk ga  uC BQ  PaK  ]S jV xk EK  Sh_|m u {K  H UK  cS  pY }k  JiWk  eRK  rSW ~k  JWo Wl dK  p }V K YZ} g]k uf CC Q_U _UK  l}l y ECXSU kW xS Df RC `K  nf {K  IvVC fP  tC AC OM  ]l i] ul  BS`  OP \ [jxf G t UDgbD IWhW eP rf @C N} \}T jk  y] F[SFgaZD HK  VZP cD qf f M\[k  iEgud \HgiC PGg^T E\clTZ@} Nf \WjO xsr E S R ] ^_  k`  xE  D[QS _k mzS { W IhS VqS bbS pK  ~T K X^fX u,BVC  n|  {K  G`  T`@  nk {P  IC VC dGrk yT G TK  bD  ob  {I  H \ U]D bpw L\ ZPgk  uMS BT P`K  ^KgkcS yz  GOF  Tr  `  m[}zK  wC DW RX ^P kwK  y|K  Ff S aV` og}w K_ XP fSMsK  @w Mw Y{  fR  sK  @W M^YC  hK uF  BP Ni\ \f i]P  wOmDH  SD `D nF  |sI\ WD dW  rx  xLxKf Z@  ht u\ A\ N m[iS i  wf DF  Rf ^\lD { I ^WW  fk rP @G  Nf [k  iX v`  C{xPLCHXYKD dD rf @b N] ZkZ yB  F]f SZX aN n[ {ZS  HP UT  a_ mC zC HEV dZC rS @Z NZ\o  jP wkt  Ef Qkx _PN lxYM  FJ~  Rf _F mTF zaGXF US bS  p[K  |DI_  MF Y_  fP  r ~\f  LqC  YG  f]Ns`_  Aw_  MD YS gX u  BC O  ]D jS yC  GC Tj  bzC  oF |D IP W)erC N\\bC  jD wV\ED SP  aS  nRS zF H|_  US  aS  nf {D IP  WXWdk {P  Ir VK  cK pS ~G Lf [_  iD u_  CP O_  ]S if wD E SS aS oP  }C JpXE f _sD RP `{Po IMMgC ZS  hb uC Ca QZ_cC  m\zS HE V_a ch qS @B  N~  [S  hS uC  CC  PC ]k kb wC Fj  T\aC  pi  }S  IP VgdF rB F MC  Z y gOOtf Ce RC _gF mC zC H VC dMVrvWHQH_{L g^G sv`zQPZc$ujw{ _RmZbQGT\XC_ tPbS\ARu@oGS\vIcR NuTyCaS|MC  OW \{ if x FoTuObB  qR  }J JZ XU fg t B P}E^K@ mC  {f H@  VR c`  qS ~B  L`  XC eF  sE@P  OD \C jf xTC F Tb bg  p }B  Ku W e sy  AC N@ \Mj`  y F{ TC cF  qC ~ML~{[B  Vd  bC oB  }Z I[ VE cw qN }_ J@JWX aP n C {CN Ia UXC bP pT ~X L Z hD vCg DP  QD ^@ lIz`  CW PLZ}]B  Z eg LsB  ZW gF  tD AP  OR  \G iwv_OET  TNP`eJpZf zhKHf SPalfo UC cxiqP  Ze  gp tUS @v  NR  [R  g]F  spP  @]MLB  [S gB  uT  A MM[R  j[X v{R  C~R  OvP  [tB  gyB  snB  @lP  L]W XLLFe O_ky[JOke,PBZ|l\V,rgb^Bd@Nedo|vIOIsOrrGed ysI#`|@I\dPOe^5^t(BR3XTFBllNnNd|R`,rU-^aCKN@NgrNjY@,YemESSrV^E$cmf-G%UtQdIHm Ju],\ bZH CbT-ex,Rud~f(bFBJj@LX'L Hsp<{dr-wqCdpXg-C<cB ibegbG~ai  OJO}YfVK|&HG `EOzHTyJ\ V`fjHF VNHd sl dOU_Z eto>YFWn(]D:Eon#NmkP{ oOKgdZB P~lKNI)Y@YB<q[F{LezG-iA [j zEICHjzK@IE5GN \U Cj=qOPn ,~yfj&FPdGVG@]gW]#Wt@hKWusjNhCITv &EJ\OsGkh+rh+]VAHsGI&RP,b {cN l q&o]#xL}mD{hqCITYSm,@&Sl!v Gur@|oZ|YSV c`i `GI@dPsGth,{JMgdt5dX=| CyGt|dIpJSo @\B^Q ^Y-o5\gQ /YxfaQCr 5u Ej ioEX q ] EN 5qSOO\DJS` OvsSiVD|C@yCN|SJt]gQN@xCxo>{SyfCLgOerC po~p|  L  YL#fJS I;W ORK  aX nL {d  XE dC ro@  N;[ OV] 4eezw  JohV Bc~w  aw  nAOz iQI] 4BZ+] 4F\  b] 4aoO Pyq^1] 4FO djU d #3bC Ud  cyw  p b=|_CyW3|] 4\>o z K] 4{W x5R e5G h5| M\q] 4bMl%om] 4ETW_Yw xI`F JJf[;p }:k~*eF] 4YOC  hd  u O @B Ou$BQ  f] 4s#ssVfT] 4c|X _] 4~l jXV HXoUXC cXE qXd  ] 4gKC  r/] 4X D WP e ?is,] 4e\ "A Lcngog] 4\Vpxri] 4~j] 4khU(S] 4k%{C  fe  s] 4@)] 4D   ACrT  DC  P !]mv~v] 4BtC  v] 4N C RQ] 4Fc Ai|T  jC  v] 4uCC  x )Eion] 4z]'W)] 4e~] 4JcMbm] 4oO] 4e~)c ^L] 4Gjfnq] 4|_] 4Z@[N)u?^C ]  k