Áƒ*žvĪ@ĢąúÁôâ`X|ë ‘KŠ:01Ķ ĢĪNoneMaxRangeMinX RangeVectorZYEngineCoreED_SMEGSystemVector RelativeTime Postal2GameColor RelativeSizeTexture Charging GenExplosionLifetimeRangeChargingNoAmmoStartVelocityRange DrawStyleStartSizeRangeInitialParticlesPerSecond SizeScale UseSizeScaleUseRegularSizeScale StaticMesh ShootSMEGRespawnDeadParticlesAutomaticInitialSpawningStartLocationRange FleshHitSecondsBeforeInactiveSkins Acceleration MaxParticlesShootItSpinsPerSecondRangeKillSmokeTrailTextureUSubdivisionsTextureVSubdivisionsBaseFX GetRandPitch BounceRecoilServerAltFire DrawType SetupThrownMakeSmokeTrailClientShootItTakeAmmoForBetty IncBettysSpinParticlesStartSpinRange ShakeCamera TakeDamagePlayAltFiring FinishShotPickLightValuesUseAmmoForShotVelocityLossRangeUseRandomSubdivisionBump BeginState GetMaker FireSound PickupClassInventoryType DestroyedCheckForHitTypeSetupMuzzleFlashBeginAltFireRotator MyDamageType ClientFiringGiveBackChargingAmmoPickupMessage NormalFireFemaleSuicide MaleSuicide DeathString FuelingSound PlayFiring ProcessTouch bProjTargetMinChargeTime MinTossTime MakePickupbFixedRotationDir DropFromAddAmmo GetFireStartUpRatioPressingAltFireGrenadeBounce LifeSpanMaxDesireability SmegAmmoInv ServerFire RotationRatebNetTemporarybArmed RefireRateAttachmentClassProcessTraceHit TraceFireGetViewRotationPlayReloadingSmegAmmoPickup DrawScale SoundRadiusCollisionHeight FleshRadCollisionRadiusSmegAttachmentHasAmmo DamageRadius PreTravelbBounceFXPickup StartSpinMag RotDampen VelDampenMinSpeedForBounceMesh DetonateTimebUseCylinderCollisionTransientSoundRadius AltFireSound MaxSpeedIncrementFlashCount FlashLength MaxRange AIRatingShakeOffsetMag ShakeRotMagAutoSwitchPrioritySmegBettyDaughterInventoryGroupHealth ShakeRotTimeShakeOffsetTime BobDamping aimerrorbUpdateSimulatedPositionFireWeaponSpeedShoot1Rand AmmoAmount Emitters CombatRating bInstantHit MinRange firingstyle switchstyle holdstyle GroupOffset ItemName ReloadSoundMaxAmmo bLeadTargetWarnTargetPctSmegBettyExplosionRelativeLocation AmmoNameRecognitionDist bUsesAltFireTraceAccuracy MaxAmmoMPRelativeRotation FlashOffsetY FlashOffsetXMuzzleFlashSize MFTextureDamageAmountMPDamageTypeInflictedbDrawMuzzleFlashMuzzleFlashScaleMuzzleFlashStyleMomentumHitMag AmbientGlow ViolenceRank MuzzleOffsetMuzzleFlashClass MPAmmoAmountMomentumTransferShoot1AddRelativeVelocityspeedBlendBetweenSubdivisionsGetThrownVelocity SmegDamage RelatedToMeMPAmmoGiveCountIsFirstPersonViewWeaponSpeedIdleUseColorScale ColorScaleFadeOut DisabledWeaponSpeedShoot2WeaponSpeedHolsterWeaponSpeedLoadWeaponsPackageStrAI_BurstCountMinTick EndState InventorySmegExplodedDamage SmegPickupTouchSmegProjectileBettyShotCountMaxForNotifyUseDirectionAs SmegWeapon DamageAmount ChargeRateNotify_ShootSMEG LocalAltFire BounceSoundServerForceFinishClientForceFinishWeaponSpeedShoot2RandAmmoGiveCountPostBeginPlayTimerHitWallLoadWAVNotify_RatchetSound PickupSounds MiscSounds WeaponSkinsTimb ShotgunAmmo muzzle_flashshotgun_corona Dude_HandsGrenadestuff1stuffExplosionDamageShotGunDamage ExplosionExplodedDamageElectricalDamageCuttingDamage BulletDamage AnthDamageBludgeonDamageendptForceLocation WeaponSoundsnewhit newnormal shotgun_firelauncher_fueling napalm_firebullet_hitflesh4bullet_hitflesh1bullet_hitflesh2bullet_hitflesh3sniper_ejectshell FPSGameInfo P2WeaponFPSGameP2WeaponPickupOther DeltaTime P2AmmoPickup HitNormal HitLocation Momentum instigatedBy P2PlayerP2WeaponAttachment P2Projectile P2AmmoInv PeoplePart LightHueConstPackageClassWeaponSpeedReloadRoleSoundWeaponFirePitchStartWeaponFirePitchRand bDeleteMePitchNetModeGamebIsSingleplayerValueDam TextBuffer ExploWallOut bloodchunks1nathans StartTracesmoke1p2weapZOffsetYOffset AccuracyRollbSetFlashTime bMuzzleFlash AdjustedAim bForceReload AmmoTypeStartLocation Instigator NewVelocity HitActorOwner bAltFiringbAllowDynamicLightsbDynamicLightCopyYawTossZ markerposActorSpriteEmitter SkeletalMeshPawnLevel ThrowModpour2 darkchunks expl1colorObjectLightSaturationPlayOwnedSoundSmokeHitPuffMelee SmokeHitPuffShotgunBulletHitPack GrenadeTrailGrenadeExplosionBulletSparkPackvxSpriteEmitter35gtrailgp bStopped FunctionState DamageType LightRadiusLightBrightness RandSpin RespawnTimeStructStructPropertyClassPropertyObjectPropertyMass AdjustAimbWorldGeometryShotgunMuzzleFlashGrenadePickupGrenadeProjectileCowHeadProjectilePhysics Location Controller Velocity ChargeTimegrenChargeStartAmmo giveback bBouncedOnce SameSpotSameSpotBounceFORCE_RAD_CHECKSAME_SPOT_RADIUSSAME_SPOT_BOUNCE_MAXaddvec WallHitPointFloatProperty RotationbStatic AmmunitionnewRotWall ScriptText Projectile GameInfoWi SMEGSkinssmeg SmegNade SmegShells SmegHUDIcon SMEGMeshSmeg3Exp NumBettys bDeathStrike BoolProperty IntProperty LevelInfoWeapon BytePropertysproj gun_bounce SMEG_WeaponsED_SMEG_newestBong MaxBettysVYVZSpriteEmitter32SpriteEmitter33SpriteEmitter34š €ƒ€ƒ'ĻZƒ€—å–LZVĸĸĸĸĸĸĸĸ#ĸĸĸĸĸĸĸĸĸĸ&“ÃŒ–6W"̃;áíQ•ũއõ•ũއõ•ũއõ•ũއõ‹ã ŽVƒ;áíQƒ;áíQƒ;áíQŊû6m-ƒ;áíQ‹ã ŽVšu:šu:šu:šu:šu:šu:šu:™ŊĮũfĄÍ=ĄÍ=Ŋû6m-‹ã ŽVĻČĄađ™ŊĮũfŧ vōmĻČĄađ  … X$?Y$ÍĖĖ=_$ffæ>hÓadA$€@$ČB~$š™?}$š™Y?|$@œFO"$–DE$/Ew$|$@œGL(gSTÓ0b$%: zÄë$Yæw@C$Ct$Ar$AWÓBÓyÓ[Óf:KPÃ)••€‡!€€‡, ‡:‡‡5‡‡C€‡‡ €ƒ€‡4€‡€‡"Ą €ƒG€1€‡+R€‹äOSĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸ2(›ÄdˆädÄĶC , … S]=<%o was reduced to component molecules by %k's cluster bomb.Q])(%o blasted herself with a cluster bomb.R])(%o blasted himself with a cluster bomb.°•Veĸĸĸĸĸĸĸĸ@ĸĸĸĸĸĸĸĸĸĸ*Ϗ†•ũއõ z, … L(XY `abc ‡$°#M.HŊ€‡ŊE€‡I€Ž€‡V‡8‡9‡œ_@dĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸ2;T›A`œ~ Ž·ƒ;áíQŽ|åČTƒ;áíQƒ;áíQŽ|åČT  … s$HC"ï"•ð"•ņ"•ōZ$0Av$PÃGréq$€Ak"b"(cÓZÓd$ÍĖL>i$Īp}?DJýXm w,4aH5 !I IĸĸĸĸĸĸĸĸĸĸÔ[uĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸ=MõÔ@jŋ  … zęy: –B @CĖ0f: €?š™™ūl:K €üĄW]Mĸĸĸĸĸĸĸĸ#ĸĸĸĸĸĸĸĸĸĸ>cœŒÜĄÍ=ƒ;áíQ•ũއõ•ũއõ•ũއõ•ũއõ R … $YæŽMTĸĸĸĸĸĸĸĸ€ĸĸĸĸĸĸĸĸĸĸ2??œj―ŽĀð1  … b"^íD"c$333?E@O]You picked up the SMEG.0úˆG\Y. –9:Ē9:$ĸĸĸĸĸĸĸĸĸĸ2@ĸėŽiˆ_.cЋ㠎V‹ã ŽV‹ã ŽV‹ã ŽVƒ;áíQƒ;áíQ&“ÃŒ&“ÃŒ&“ÃŒ&“ÃŒ‹ã ŽVƒ;áíQ‹ã ŽVQ.‹ã ŽV™ŊĮũf‹ã ŽVœ~ Ž·Q.œ~ Ž·™ŊĮũf™ŊĮũfØų†`‹ã ŽVQ.Q.Q.  … [$?TėiÓxh$€‰DaĀW"O"^]\[$HCQ$ @Y$€@N]SMEG_Weapons.M$Ā?L$Ā?V$š™™>K$@a$š™™>F$ÍĖL?Dîg;L"K: ČCHBHBP$ @J:  A€@€@j$333?S$ČCI$š™™>H$DCĖm$ÍĖL―n$Âu=G$ÍĖL=o$CpôsÓt$š™@uN_ZD?R$š™y?j=`]SMEG@ĸ$Yûõq$CD‡B‡°}€‡2€‡F€‹ÛzAj709?Ÿķ&a,$€? Ų]oĸĸĸĸĸĸĸĸ€ĸĸĸĸĸĸĸĸĸĸ2JŠ øIŲČۗ  … {"W"E;O]! You found some SMEG cartridges.öp$@$YøÃljJ6 DŸv -ĩ'/%B–9:Ē9:$q! ŌK/Gp-ĩ'q! Âĸĸ-O€P€€Y4ð6.œŸ =€?4˜Ÿķ%q! €‡‡Q5΁ Ĩ S‡U‡ŌTR\­Ũ3&„a! a!-$'ŌR ÐWFļ;3„a!‚a! -$-$'Ð Į^P™Āĸĸĸĸĸĸĸĸĸĸ_hBÆ$ßÉ$€? Ņ[nLj&a!füÍĖL= é ŽÞؚ9:Ē9:$a‚w*-§ØÕ9?,2al a *B ŨÕÕ G 8 á  åa ÆbM•Ķĸĸĸĸĸĸĸĸĸĸ`(D!wå m:98^:98ʐ ÏŸ9DŦ9?,ÂaSU ’'u„r*(‚-§-ėa  Ęuw*1ŽŦÍĖL?9?9?,'~ ”uw* @ k\k -ĩ IfAB  ŅcNl‹K.œŸ=%I–ųŅNOPĨ eHuv9-Å'-ú(7‚E-û<-ß-Č g3PÃRIFFČPWAVEfmt "V"VdataĪP€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~}}}}}}}}~~€€€€‚‚‚€€~~~}}~~~|}~~~€ƒ‰“žĶĨŠQ P„ĨŊž„~wW5-6@Smy|“ŠŸ‰„„}qu–ŋ˚B4€ÔĸĸĸėēœžāäŨĮĩĪ„H)Sp{{lR2,Xp`.!Oˆīđ̟ĀėĸĸĸþГY5+7IUampod; ,RqūōĸĸĸĸĸĸĸûÐĨœÆüĸĸþӌA)oķÖÖßĸĸĸĸĸĸĸĸþŲÎéĸóȊO( Dp˜ŋýĸĸĸĸĸŲ~9FĄĸĸĸïž–‚vpcF( Hz~C)|Ųĸĸĸáēˆf[…Ņþņši ]y\6,9[•ÂīƒošåĸĸŨE*Gy„]>R“ÎĖ“\Y…°Đ„}ŸÁÔįó؟oR<14GjšËëüĸĸĸĸĸĸĸĸüðŲēC)j§ĮË―Ē‚]1+& *O~ŦÍåóųûúõîåÖ―Ÿ‚b>!"7>.3Y~™Đē·ļļķī°ŽĻĪ œ˜“Œ€iA6NUG,2"'?GDQt” š…ngs}|sdP:( !&+05:>CJQZh|Œ‚xv{ƒ īÅÓÞįîôøúûųũöõóðíęæãßÜŲÖÓÐÎĖĘČÆÄÃÁĀŋū―žžŧŧŧŧŧž―ŋÂÆĖÓÖŌĀv`cs…–Ķē·ļđļ·ĩģąŪŽĐĨǟ›˜–“ˆse[WTLA91(%:KND821123456789:;<<=>>???@@@@@@@?>>=<;:998620/4BXii^SNMMOPRSTVZ_gs‡‰…}}~€‚„ˆŒ’™Ēа·ŋÆĖŌÓŅÏÓŲÛÓÅđ·ŋÍŲßÝÔĖĘÐŨÝāââãâââááááāÞŲŅĘČÉĘĘĘËĖĖĖÍÏÏÍÅķĒ””–“‘–ŸĢ ˜‘ސ‘Ž‹ˆ…‚|ywtrpmicWIAEMOH;/'&*2:ADFE@3 %55$ %()*)"!/3(  "%,5;@JYgt† īīĄƒgY[l‰€ob\YY\bju‚˜žŸžŸĨ­īđ―ŋŧąĻ§ŠĨ•†„‘ĢŊ­Ą•’šŽŋÄ·Ģ•”›ĻģķđÂÉÅđ°ŦĻĻŽĩĮäĸĸĸųúĸþųōįÚÏČÃ―ļīŊŦ͟—ŽˆŒģŋūļģŊĐ ’‡‡–|gewŠ‘‡|eE/1Ll~€zqcN39S\XH.,Plwr[8'Easuc? '=O[bfhijkkllllkkkkkkkllmnopqrtuwy{}‚„†‰‹Ž“•˜šŸĄĢĨ§ĐŦŽŪ°ąģĩ·šūÄËŌÕÍĩl]`is‚•§ģŧÃĘÏÐĘ·™ŠīļžÂÃĀ·Ĩ‰lWLINTRGANq›ķĩ …n\K?INMKLOSW\aeghhgju…‘•”—ž žœŸĄĒĄž™“‰zeQHKU`ghgeb_\YUROKHDA>;9753221223468:DLOKC=:;>BFJNOQSXcu‹ĄīĀÁķ͚•”””•–——˜™š›œœžžŸŸžœ›ĢŪ·ļģŦĶĪĒĄž›—’Œ‡…Š•ĪģÁĘĖÄšķ―ÉŅÍÁķē°§“}ppx‚š§ēđ―ÁÆÉĘĮÁđŊĒ”‡~wromkjjklnpswz~…ˆŒ“–˜šœžŸ   Ÿž›™—”‘‡‚€„ŠŽŠ‡xldchnnidbceeda^[XUQMIEA<7/&   %*06;ADFHMSZ`flqx€ˆŽŽ‡~…™ĄĻ­ģļ―ÂÆĘÎŌÕŨŲÚÛÜÜÜÜÛÚŲØÖÔÓŅÎĖĘČÅÃĀūžđ·īē°ŪŽŠĻĶĨĪĢĒĒĢĨŠ°ļžš­˜„yshXIBBEIMPSVZ_dintz€‡”š ĶŦ°īļŧ―ūūū―žŧđ·ĩēŊŽĻĨĄ™•‘‰„€|xtplifb_\ZWUSRQOONNNNNOOPQRSTUVWXXXWUQNOXi~šĄ§Đ̐wb_n‡ °·ĩМŒzdQGJVes—œžžœš™–”‘ŽŠ‡„}zwspmjhgedcccbbccdefghiklnopqrstuvwwwwwwwwvvuutssrrrrroi`ZY]accccdfjpuum]J;535=FHA6/18@DGMV_efda_adhkorvz~‚†Š‘•˜œŸĒĨ§ĐŦŽ­­ŽŦĐĶĄœ–‘”ĄēŋÁļŠĒĶąļ砊zrsz„„…Š’™žž›–“‘‰†„„ˆ›Ī§Ī Ÿ ĢĶĐŦ­Ŋąīķđŧ―ŋÁÃÅÆČÉÉĘĘĘĘÉČĮÅÄÂĀ―ŧļĩēŪŦĶĄš“ŽŒ•˜˜•‘Œ‡‚‚‚~|ywtqolifc\SJFGIKKJG@2 %3=FOWZVG2+@ORKDFQ]fknqstvwwxxyxxxwwvvutsrrqpoonnmmmmnnnooppqrstuvwxz{|~€‚ƒ…†ˆ‰‹ŒŽ’”•—˜šœž ĒĨĻ­ģļ―ūūŋÁ―Ū—„|~ƒˆœĶĶž–– ķÖøĸĸĸāŋĻ›–“’’˜ĒēĮÝęîčÜÎÃŧļ·đžĀĀž·ģąŊ­ŦЧĨĢĄ ›™–”‘ŒŠ‡„‚}zxvsqomkigedb`_]\ZYWVUTSRQPPOOONNMLKJIKPX]\XTQONKHB;427BOX_emx„–šœœ›š—’‡zk_ZZ_cdc`]ZWSQNLJHFEDDDDEFHJLNQTW[^bfimqtx{‚…ˆ‹Ž‘”–˜š›››žŸ  Ą    ŸŸŸžŸ ĒĢĢž•ˆ{rjdackv€ˆ•œĄĒœŒvcY\i~”ĶŪ§‘rVFDNb{|h`k…Ķ―ÂīŠ…Œ–œ˜Œ}qhca`achq|‡ŒŠ‰‹Ž‘•™ Ī§Š­Ŋēīĩ·đššŧŧŧššđļ·ķĩģą°ŪŽŠĻ§ĨĢĒ žœ›š˜—•”“’‘Œ‹Š‰‡…‚€†””‰„~|{ywvtrokf_YX]beeiu‚ŒŽŒŠ‰‰ˆ„{m`^emmcUF;3,&! -He{€t^LJYr†’•”’Šˆ„}ytpkgb]XSOJFB?<975433334579;=@CFILOSVY]`cfimpsvy|„‡ŠŒŽ‘“•˜šœžŸĄĢĪĨ§ĐŽŪąĩļļģ­ĶĢĪĶĻĐŽ°ĩš―ŋÁÃÆÉËČū°§ĶŽģđž――ūŋĀÃÆĘÍËÂģĢ™›§·ÅËĮķœ€lccdffgiknquy…‹‘—œĒĻŊĩšŋÄČËÍÏÐÐÐÏÍËÉÆÃŋŧļīŊŦ§Ģžš–’‰…}yvsolifc`^[YWUSRQONMLKKKJJJJJJKKKLLMMMNNNMLJF@:9C[y–ŒxaNA>ESakpw‡Š‰…ƒƒƒ€ucOBCO^kswxwuspmkheb_\YWTRPNMLLLLMNOQSUXZ]`cfiloruxz}‚„†‡‰‹ŒŽ‘‘’’’’’’’‘‘‘ŽŒ‹Š‰ˆˆˆ‡‡‡‡‡ˆŠ“šĄĪŸ’‚sjea_^^_bgov}ƒ††„ƒƒ„ˆ’ĢķÂŋēĪœ ĒΧĐŦŽ­ŪēšÂÅžŧÂÏŲÜÔÉĀŧđĩ°ŠĪ œ˜”Š‡„}{zyxwwwwwwxyzz|}~€‚„…‡ˆŠ‹Ž‘’“•–—˜™™šššš™™˜–”‹…‚…žĶĶ š—–•”“Š€q_MDIYkw}~}{ywtpmjhfa[UQPOMIFB?<964321," #%(*-/36:=ADHKOSWXUQNPV[_bdefghijkkllllmllllllllllllllmmmnnnopqrrstuwxy{|~ƒ„†ˆŠ‹’”—› §ąžÁ·Ÿ†z|„‘ĢšÍÔĖšĶ™””–™œžĄĢĶĐŦŪąķžÃĘÏÖÝäččéëíîïïïóûĸĸĸĸųóïëįãÞÚÕÐËÅŋļģēīđŧđēĐĄœ˜”‘Œ‰‡…ƒ~|{zxwvvuuutttsssrrrrqqpppppoonmljjjkmnoonkifecba`^\ZWRKB7//AEHKORUY]`cgjmprux{}€‚„†ˆŠ‹Ž‘’“”•––—˜˜™š›œžĄ§Ŋĩē „ldl|‹•šžĄĪ§ŠŪģŧÆÓÝÛĮĨ‚ldb`_aelx‰ĒūÚėņæÍŪ–Šˆ‰‰ŠŒˆ‚|zz}€ƒ†ŠŽ’–šžĒĨĻŦŪ°ēīĩķķ·ķķĩīēąŊ­ŦЧĪǟš˜–“‘ŒŠˆ†„‚}{ywsollpwƒynd][_gouxxuokiklkhc]VQNLJIHGFFEEEFGHIJJJJKNRUSMGEJQ[hx…‹‹…zk_Z]emw€ˆŒ‹‰†ƒ€}yuqmhc^YSNID?:62/-+**+,-/247:>AEJNRV[_cgkosw{ƒ†Š“–™œŸĄĪĶ§ĐŠŽ­Ŋ°ąēģīĩĩķķķ···ļļšžžšĩŪĐŠ­ąīīīīģģģģģģģīīĩĩąŠĢĢĐēšŋžŽ“~w~Ž ąūÆČÅŋ·­Ÿ…~zsibafoy~{{}†‹–›ĄĶŽą·ŧĀÃĮĘĖÎÏÏÎÍËÉĮÄÁ―šķēŪŠĨĄ™–’ŽŠ†‚~{xtqnkhfca_\[YWVTSRQPOONMMMLLKKKKJJHFCADM]ksrjaZVTRPMIB:47F`x…„{od[UUZbfeb_ahu…“œ  œ•Š~tlijmnmjfb^ZVSQNLJIGGFFGHIKMOQTWZ]`cfimpsvx{~€ƒ…‡‰‹Ž‘’“”••––––———–––•••–—šœœ™““˜™•Œƒ|ywwwxxxxwwx{€†Œ“šž  žž Ķ­īđļ̟œš˜–“ŒŽ˜ŠŋŌßįéæÝŌĘÉÎÕÖÎžĪŽ}uu{ƒˆ…|qifddddeeghikmortwy|„‡‰Œ‘”—™›ŸĄĒĪĨͧĻĐĐĐŠĐĐĻĶĪĄ›œ ĶĻ͟—ˆvpqx€‡Š‰†ƒ€}{xvspkd^[[_bdda\VNE?:851))7AD>1",AR\abdhloqqrrqponmkjhgecb`_]\[ZYXWWVVVVVVVWXXYZ[]^`bdfhjlnpruwz|~ƒ†ˆ‹’”—™› ĒĪ§ĐŽŊģļūĮÐÚßÝÐšĒ’Ž‘™ §ŠŦŽŪģđÃÏÞééÛÆīŦŠŊĩš――ūÂČŅÚãėōōíįãāÞÛØÚãņĸĸĸĸôčÝÕÏĘÅĀŧĩŊЧĶĶĨ š”‹ˆ…‚}zxvtqpnlkihgfeeddccccbbbbbbbaaaaaabbbbbbbbbbbbbbaaa`__^][ZWSNHB>>AGQas††|wtssuwwuph_ZWWYZZXUQMIEA=:63/,)'&&'(+/230+(+3=GLKGCDIR\fnuz~‚†ŠŽ‘”—™›žŸ ĄĒĒĒĒĒĒĄĄ ŸŸžœ›š™˜—–••”“’’‘ŽŽŽŽŽŽ“˜žĪĶ ”†zuttssu{…ˆ‰‹‘”“‹}ogejq{„ŠŽ‘”˜ĢĐŪīđūÄČĖÐÔÖØÚÚÚÚŲŨÕÔŌÐĖČÃūš·ģŊŠĨ ›—”‘Œˆ„{vqmlqxƒ|uoljihggffffgghiijjkklmnoppqqrrsssssssssrrqqponmljgc^YVUX\`eimqvz~ƒƒ}zyyzzyxuqnjfb]YTOID?;62.+(%$"""#$&(+.26:>ADGKPUZ_dhlptx{‚†‰ŒŽ‘“•˜™›ž ĄĒĢĢĪĪĪĪĪĨĪĪĪĢĢĢĒĒĄĄĄ ŸŸžžœœ››››šššššš›œž  ˜’ŒŽ“™ĄĻ°ķļĩŽ ”ŽŒ”˜˜“Ё{z}‚ˆŒŒŠ‰Š”™œŸĄĨĐ­ē·žÁÆËÐÔØÛÞāáââáāÞÛŲÕŌÎĘÆÂ―đī°Ŧ§Ēžš•‘ŽŠ†‚{xuroljgeca`^][ZYXWVUTRQPNLJIJOU]bc`ZTNJGEEHMSWXVRMIFDCBA@>;8547@MZaa\SKEA;4*!"4Oj~Š‹†yspopqsuuvuusqmiea]YTPLIEB?<:8766789:=?BEHKORUY]`dhlosvz}€„‡Š’•˜šŸĄĪͧĐŦ­Ŋ°ą°°ąēīķļšŧŧļģŊ­Ū°ģĩķķķķķķķķķķĩĩīģģēēąą°ŊŊŪŪŪŪŊ°ģđŋÅČÆŋēĢ”†|uqmida__behjlnquz‰‘™ŸĪĐŪīđŋÄĮĘÍÏÏÐÏÎĖĘĮÄÁ―đĩą­ĐĪ œ—“މ„€~}|yupjfb]ZWWWXXVSPNMMOPPOMJGEB?<BFKLLJGFHMWdq{„………„ƒ‚€~|zwurokhedba`_^\\[[[[[\]^_`bcegikmoqsvxz|ƒ…ˆŠŒ‘“•—™›ŸĄĢĨĶĻŠŽ­Ŋąģĩķļš―ĀÃČÍŌÖŨÓËŋ°Ē—’‘“–˜˜————˜š Ī§ŠŠŠĐŠŽąļĀĮĖÏŅŌŌÓÓÔÔÔÔÓŌŅÐÎĖÉÆÂŋžđ·ķĩīēŊŦĶ ›•Œ‡ƒzuqlhda^\YWVTSRQQQQQQRSSTUVWXY[\]_`abcefghijjkllmmnnnnnnmmlkigda_^_bglpsvz~‚„…†††††…‚}xqjaVMGHOX_cdca_[UME>:88887779;>BEGHGGFDA>;:<>@CGKQW]dks{†›ĪŠŊēĩ·ļđđļ·ķĩģ°ŪŦĐĶĪĄžœ™–”’‹‰ˆ†…„ƒ€€~~~~~~~€‚„†ŠŽ“˜Ÿ§­ŊĻ™„qc]]agmu~†Ž”—˜———˜˜—–—˜œ ĪĐŪģ·―ÂĮĖŅÖÚÝāáāßÝÜßäęïðíčáÚŌĖČÅÁžķŊĻ̟œš—“‹‡‚{rg\SLGB=98CHLQUZ_cgkosw{~‚…ˆ‹Ž‘“•˜šœžŸĄĒĢĪĨͧĻĻĐĐĐĐĐĻϧ§ĶĶĨĨĪĪĢĢĒĒĄĄĄ  ŸŸŸžžžžœœœ››››››››››œœžŸĄĒĪĨͧĨĒ–Ž…~xtssvy~ƒ‰•šžŸŸž›—”’‘’”–™›žĄĪ§ŠŪąī·šžūĀÁÂÂÂÂÁĀūžšļĩēŊŽĐĨĒž›˜–“‰…€|yuqnjfb]XUTV[`ceeeca_][[\\[XTPNNOQQOKD<5/,)(''''()+.1469::99;AM[hquuroos|†•˜™˜•‘Œ‡‚€~~€‚‚€}yuqlgb]XSMHC>:62/,*)((()+-/269=ADHMQUZ^bfjosw{€„‰’“““”˜žĪĐ­Ū­ŠĨ ŸĢ§ŠŽŪģđĀÆÉËĖÍÍÍÍĖËĘÉČÅÃĀ―ŧšļķĩīģģģīĩī°ĐŸ•Œ…zwx­ļŧ·Ž›ˆvh`]]^_`cfjoty~ƒ‰–ĨŽģŧÂÉÏÔØÜÞāááāßÝÛØÔŅÍČÄĀŧķē­ĐϚ–‘ŽŠ†{vsrrsqnid`\YXY\`cdb^XRMIGEDCCCCDDEEFHIKLNPQSUVWYZ[\^_`abcdddcb`\WQLIJR_n}‰’™œžžœ˜’ˆƒ{xuttvwwurojf`[UQNKHDA><:877789;=?BEHLOSVZ^bfjnquy}„‡‹Ž‘”—™œž ĒĪĶĻĐŦ­ŪŊ­Š§Ķ§ĐŦŽ­­ŪŪŪŽĐĶĪĢĢĪĨĨĨ§ŠŽŽŠĻĶĪ ›“Œ†ƒ‚~ysopsz€…‰Š‹‹Œ• Ū―ČĖĮšŠ›‘’—œĒ§ŪĩŧŋŋŋĀÂÁŧ°Ą”‹ŽŽŠ†‚€‚…Š“–—•ˆxutuvxy{~€ƒ…‰ŒŽ‘”–˜›œž ĄĒĒĒĒĄ Ÿž›™—”‘ˆƒ~€ƒ…††„ƒ‚}yupjfc`^^^]\[XUROMJIGD?8/&  )3;??<72138@HPYdq‚•§·ÂĮÉČÆÄÁūš·ģŊŠĨ ›–‘Œ†{upje`\WSOLIFECBAAABCEFIKNPTWZ^bfkoty„‡‰ˆ†„‚ƒ„‡‰‹’”—šŸĨŽģšŋÃÄÆČĖŅÕŨÕŅËÅÂÁÄĘÔßéðõũúüĸĸĸĸüóįÝÕŅŅÔØÜßÞÚÓĘŋģ͘‰{oe^ZXXXYZ[]_behkorvz}…‰Œ‘”–™›ŸĄĒĢĪĪĨĨĨĨĨĪĢĒĄ Ÿ›™˜–”’ŽŒ‰†ƒ€~~ƒƒ€|wqkfb``bdfghhgeb^ZVRNJGDDGKQTTOICACGLOPNID?>?ACC@;5228BP^iqtutqonnnnmkhecccefghhhhhijkkjgb\VSSUY\^][WTSSW[_``_`adhlorux{}|zxy{„‰‘”–™›ž ĢĶĻŠŽŪ°ģķļšššđđŧ―ĀÄČËĖËÄšŊĨ žŸĄĒĒĢĪĨĻŽ°ī··ĩ°ŦĶĶĐŊĩššļķ·ŧÂČÉÄķljq_VW`n}Œ˜ĄĻްģĩĩĩē­§ š–”“““‘Œ„zpg_YUQNJGDA@???>=;988:>CIMOOMKIJMSX]^^\ZZ[^bfimqux|‚„……†ˆŒ“œĨŽąģģē°ŪŦĻĨĢĄŸ›–‹ˆˆ‰Œ“””’Œ‰…}yupkfa[UOID>94/*%!!"###$$$$%&(*-04:AKVbnyƒŠ‘—ĪĐ­ŪŦ§Ģ ĄĶŪđÄÎÔŨØŨÖÔŌÏĖÉÅÁ―đī°Ŧ§Ēžš•Œ‡„€|yvtqnljhgfeedeefgjmrw{|zvqonooonlkkkkjjklnpsvy}‚‡’—œŸĢĻŊļÃÐÜæéčâÜØØÝäėōõõóîįāŲÓÐÏÍĘÅŋđīŊŦĨŸ—‡wpke`ZSMIFFFGHJLNQTWZ]`dgkorvy|‚…ˆ‹‘“•–—˜™™™™™—•““”˜›œ˜”ŽŽŽŽŒ‰…~|}ƒƒ}vohc`_``^ZURRUZ`eikkhaXNC9/&(5BLTWWTPKIHJNRUXZ\_behknpqoibYQMLOTWZ[[]_abba^\ZZ[^bhmrtvuuux|‚ˆŒŽ‰xpkknty~„ˆ•§Ŋĩš―ŋÁÂÃÃÃÂÂĀŋ―ŧđ·ĩģ°ŪŽŠ§ĨĢĄŸžœ›š™—–••–—š Ē ›”ŽŠ‰ŠŠˆƒ~{{~ƒˆ‹‹ˆƒ|tmiijot{„Ž™ĨąžÅËÏÏÎËÆÁžļĩģ°­ĐĪž™•”“””“‘‰„zwtrpomljiigfc`[VPH@930/0121/,++-00-&  $5FVcnw~ƒ‚€|wsolkklnpruy|ƒ‰‘šĄ§ŠŦŠĐĻϧĶĪĄžš–‘ˆƒ~ysmga[UOIC>:62/-,,,-/147;?CGKPTY^chmsx…Œ’–˜–“ŽŽ‘”–˜š›žĒ§ŪķĀËÕÛÞÛÕÎĮÂÁÃČÎÔØÛÛÚØÕÓÐÎĖĘĮÃŋŧķē­ĐΟ›–’Œ‰ˆ‡„~vme`_bflrwzzvne]WTRQPPRTW[_dimrvz~‚†‹•›Ą§­ģđŋĮÎÖÛÞāāááāßÝÚÖŅÍËĘËĖĖĖĘÆÁđąĻ š—”‘ˆ|xvvvusplhd_YRKEA@????@ACFILORSUVX\agmopppquy|~~|{xvttvz~‚†‰‹Ž’•——•“ŽŒŒŒŒ‹‰„}uleabfkpqojbXND:1)"#.:GS]fmty}€€€~{vqkea^]^`cdc^XQNNSZafjlmnnoooooooooopppppqqrstvx|†‹Œ‰€ujb__beimry‚™ĪŊĩ·ģŽĒš•“”–––”“”–˜›œžŸĄĢĢĢĢĪĐąžĮÐÖŲÚÛÛÜÜÚÖÏÃīĒ‘‚ytrpmid`^_bgjjg`YSONORW]dlsz€…ˆ‰‰ˆˆ‰ŒŽ’–™ĄĪ§ĐĐĐĻĐ­ģšŋÁĀūžđļķīē°ŽĐĨĄ™•‘ŽŠ‡ƒysmhdb`^]ZXWWWWVUQJA6+# !!"#%)-38<>>=93,%! #)09AJT_kx†”žĢĒ›”Ž‘˜žĢ§Š­°ģīģŊĐĒ›—–—™šš™•‘ˆƒ~ytoje`\WSOKHEBA@??@@BDGKORTUUVX\`eilorux{ƒ‡‹‘’“•—šŸĶ­ĩžŋĀ―đķĩ·ŧūĀÂÅĘŌÜåëîîėęįåãāÝŲÔÏĖÉČČČÉËËËĘĮÄūļąŦĶĄœ—ށqbUNMNPRSTVY]aejnrsssrtx}ƒˆ“““’’“–™ĄĪ§ŠŽŪąĩšŋÂÂŋ―ŧšŧžžšĩŪĶ ›™˜™™˜—–“Œ‡yph_WQKHGILQVY[\[YXWVTQLE=50/28?CDA;3*#!&,5?JT\dkrx|~}{xtromjgddfls{ƒ‚~wpiecbba`_aekry~‚„†††…‚}yvuuuvuspmkhgec`^\\^chov{‚…‡ŠŒŽ‘‘‘Ž‹‰†„}|zyyyz|ƒ‡ŠŽŽ‹ˆ…ƒ‚‚‚€€„‰Ž‘’‰ˆ‡ˆ‰‰‡ƒ}xtrrtx~…”šž ĄĪаļÁÉÎŅÓÔÖŲÜßāÝŨÎÂĩП—‰ƒ€ƒŒ– §ĐĻĢ›‘…wi\SNLLNQSUUVWZ^ab`[UOKKMQUX[^ckt}ƒ‡‰‹ŒŽ‘•š ĶŽąķđžūĀÂÂÂĀ―ļąĐ ™–—› ĪĶĶĨǟ›˜•’ŽŠ„~wqkhfedca_][YVTQMID@<82-($! &07;=>@EKSZ`fjotz‚ƒ‚€€‚…Š”šŸĪĐŪēĩļšžūŋūŧ·ąŦ§ĶĨĨĢ œ—‘Œ†|vqmhd`\XTQNLLMNOQRUWZ^aehjjjjkosx~‚†ˆ‰Š‹Ž‘”˜žĪŦēšÁČÏÕÚÜÝÝÜÜÛÛÚŲÚÞãéðöųųöņëåÞÕËŋģĶž™šŸĶ­ēīģą­ĐĨĒž™’Š€wohdbbbcdb^WLA70.049>CJR\gqz€ƒ„„„„…‡‰‰†{vsrsuwyz{|}|zyxxz|~~}|{{}€„†‡†…‚|zwuqle]VPMKJGB;50./0358IUbmv}ƒ‰‰„}|~‚‡Œ‘–˜™˜•Š„zvsokgc``cipvyyvrmkkmprtvy}„‹’—™™˜”‰‚zrkfcceiov~‡‘šĢĐŦŠĪ›’ŒŠŠŒŒ‹Š‰‹“–—•‘Š„}xusrsssttuvxz{{{ywusstw~‡™ŸĒĢĪĶŦēļžžļģŽ§ĪΧŠŪąī·―ÃÉÍÏÏĖĘÆÃūļąĐǜ™–”‹†‚‚ƒ†ˆ‡„€zvsrqqnib[TPOQTX[^`aaaa`_^^_adhlqv|…†ƒ}tkfdgmtz€…Š’›ĶŊķđļī­ĶŸ™•““’““”•••”’‹ˆ„yriaYSOLJGDBABDEED?80(""%(*+-/13431/./148>DKT^hr{ƒ‹‘—œ ĢĪĨĨĨĶĐŊ·ĀĮĖÏÎÍÍÍÎÎÍĘÅĀšķģēąąēģēąŊŽĐĨĄš–“Š‡ƒ€~||{xupkgeccbbaabeiou{€†ŠŽ“˜ĢĐŪģķ·ĩąŦĨĄ  Ģ§ŠŪ°ģķŧĀÆĖÐÐÍČÃÁÁÅÉĖÎÎÎÎÏÏÎËÆÁ𱧜‘…{tolkjhea\WSQPNLID@>?DLU]cefeddc`ZQG<3-+,07?HPY`fknppomjhgffhnvŒ”™™•‰ƒ~zvpib\XY\`dghhgec_[WSPOQTX]aeimprrplf_ZWVWXWVTTUX^elsx}€ƒ„………†††††††‡ˆ‰ŠŠŠŠ‰ˆ†…ƒƒƒ„……ƒ~||}‚‚‚€~~€‚ƒ„„„…†‡‰‹’”””’Œ‰†„‚€…Œ”ĨŦŊ°°Ū­ŠĻΟ™“Ž‹Š‘–›žŸžœ™•Šƒ|tnhda^^_bfkprqmga][[\]^`chpz…Ž””‡~vpnnqtx}„—̰žĮŅÚÞÞÚŅĮ―ķģīļŧūĀÂÂÂÁŋŧ·ēŦΜ–’Œ‰„{xwwwvuspmjfb^[Z[]__^[WRMHD?92*#%-5;866678:HOVZ]^]ZVRPORW^djnrtwy}…ˆ‹Ž’•™ŸĶŊļĀÆÉÉĮÅÄÅĮËÎŅŌŅÐÎĖÉĮÃūđīŪĐΟ™“Œ†}|}€„А•™››™–”’“•™œŸĄ ™–“‘ŽŒ‰†…†Š‘šĢ­ķ―ÁÃÄÄÃÁūžŧŧ―ÁĮĖŅÔÔŌÎĮŋĩŠĄ™”Œ‰„zwtsssqmhb[VSRSVY]acdca]XRJB:2+% !&+32\Q° . .!€?ĶŦĶ ˆąĶÖĶÖĶ--ÓŦĶMąÓ”AÁ!öĸ 0'tq!P: €ųu9xë 0 ˜% `‚š9:Þ9:$=„a â)‚a ļr.íÔ* ƒ„a Á r ę o‚$-ī'đđã‚a â w įG&”Ö2Āöß”Ö2Ā2Ē―.˜―%F#€?*  Ūč{wPõĮ75‚›9:Īā9:$`; Ã_ëV'à Âĸĸy€‡|€‡Čx7.ī”f›9:Þ9:$o‚$ÔüÍĖL=M°6 9?%6 Đ6 ß7Č7 ÂB`äŅ3 ÂĸĸøA6k ē r* E-§a ā6ž 9P4-99DĘ.‹žÕËEĖō„„‚w.‹* wžw.ō*w.æ*,%a§,D$ A-a Þ6ž 9P4 Ā~e͈Ē ō-ī' ‚-#š9:Ē9:$"% –"'a >ž ’9P6ÛŪŦŦÃ9?,6Û”9?ô6ÜŪŦŦÃ9?,6Ü”9?ô6 ŪŦŦÃ9?,6 ”9?ô 1 ”Ĩ"0-#'5á”á°5ū’đ6 9?,dqwaCB’(*-'á”Õūâ”Ĩš %+’Ĩ áÆ°áØ+’9?,Ĩ Í %á™ ,-'J--ī(đ#”#6Ųš%6õš%6ðš%o‚$)U.3a Áž ’9P -3a)$ ž- D;۔'3 C€ƒÅExŌ’ÅN LF/ˀ ÄNeËq ĀĸĸWclass SmegWeapon extends P2Weapon; /////////////////////////////////////////////////////////////////////////////// // Vars, structs, consts /////////////////////////////////////////////////////////////////////////////// var float ChargeStartAmmo;// Ammo amount we had before we started to charge a rocket var float ChargeRate; // Number of seconds between adding a betty var int NumBettys; // Number of Bouncing Betties fired var Sound FuelingSound; //var sound BettyIncSound; var bool bDeathStrike; // dropped a betty on death replication { // functions client sends to server reliable if (Role < ROLE_Authority) ShootIt, NumBettys; } /////////////////////////////////////////////////////////////////////////////// // Actually shoot the projectile /////////////////////////////////////////////////////////////////////////////// function ShootIt() { GotoState('NormalFire'); PlayAltFiring(); } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// simulated function ClientShootIt() { LocalAltFire(); GotoState('ClientFiring'); } /////////////////////////////////////////////////////////////////////////////// // Pretravel so you can clean up before the player goes to the next level /////////////////////////////////////////////////////////////////////////////// function GiveBackChargingAmmo() { local float giveback; giveback = ChargeStartAmmo - AmmoType.AmmoAmount; if(giveback > 0) AmmoType.AddAmmo(giveback); } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// simulated function AltFire( float Value ) { if ( !AmmoType.HasAmmo() ) return; bAltFiring=true; ServerAltFire(); NumBettys=0; if ( Role < ROLE_Authority ) { GotoState('Charging'); } } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// function ServerAltFire() { bAltFiring=true; GotoState('Charging'); } simulated function PlayFiring() { bForceReload=true; SetupMuzzleFlash(); Super.PlayFiring(); } simulated function PlayAltFiring() { bForceReload=true; IncrementFlashCount(); // Play MP sounds on everyone's computers if(Level.Game == None || !FPSGameInfo(Level.Game).bIsSinglePlayer) PlayOwnedSound(AltFireSound,SLOT_Interact,1.0,,,WeaponFirePitchStart + (FRand()*WeaponFirePitchRand),false); else // just on yours in SP games Instigator.PlaySound(AltFireSound, SLOT_None, 1.0, true, , WeaponFirePitchStart + (FRand()*WeaponFirePitchRand)); PlayAnim('Shoot1', WeaponSpeedShoot2, 0.05); } /////////////////////////////////////////////////////////////////////////////// // This will randomly change the color and the size of the dynamic // light associate with the flash. Change in each weapon's file, // but call each time you start up the flash again. // This function is also used by the third-person muzzle flash, so the // colors will look the same /////////////////////////////////////////////////////////////////////////////// simulated function PickLightValues() { LightBrightness=150; LightSaturation=150; LightHue=12+FRand()*15; LightRadius=12+FRand()*6; } /////////////////////////////////////////////////////////////////////////////// // Make sure the muzzle flash renders, and move it around some /////////////////////////////////////////////////////////////////////////////// simulated function SetupMuzzleFlash() { bMuzzleFlash = true; bSetFlashTime = false; // Gets turned off in weapon, in RenderOverlays // Slightly change colors each time if(IsFirstPersonView() && bDrawMuzzleFlash) { PickLightValues(); bDynamicLight=bAllowDynamicLights; } } /////////////////////////////////////////////////////////////////////////////// // See what we hit /////////////////////////////////////////////////////////////////////////////// function TraceFire( float Accuracy, float YOffset, float ZOffset ) { local int i; // Reduce the ammo only by 1 here, for the shotgun, but shoot // ShotCountMaxForNotify number of pellets each time. P2AmmoInv(AmmoType).UseAmmoForShot(); for(i=0; i 0) { // Arm the grenade SetTimer(DetonateTime,false); } } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// function Destroyed() { KillSmokeTrail(); Super.Destroyed(); } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// function MakeSmokeTrail() { if(GTrail == None) { if(Level.Game.bIsSinglePlayer) { // Send player as owner so it will keep up in slomo time GTrail = spawn(class'Fx.GrenadeTrail',Owner,,Location); GTrail.SetBase(self); } else GTrail = spawn(class'Fx.GrenadeTrail',self,,Location); } } function KillSmokeTrail() { if(GTrail != None) { GTrail.Destroy(); GTrail = None; } } /////////////////////////////////////////////////////////////////////////////// // Send it with a certain speed and arm it /////////////////////////////////////////////////////////////////////////////// function SetupThrown(float ChargeTime) { local float ThrowMod; // if ( Role == ROLE_Authority ) // { if(bArmed) { if(ChargeTime < MinChargeTime) ChargeTime = MinChargeTime; ThrowMod = 0.4; MakeSmokeTrail(); } else { if(ChargeTime < MinTossTime) ChargeTime = MinTossTime; ThrowMod = 1.0; } Speed = Speed*ChargeTime; if(Speed > MaxSpeed) Speed = MaxSpeed; //log(self$" setupshot "$ChargeTime$" speed "$speed); if(bArmed) // goes up a ratio of what it goes forward TossZ = Speed*UpRatio; else TossZ = 0; Velocity = GetThrownVelocity(Instigator, Rotation, ThrowMod); //log(self$" speed "$Speed$" vel "$Velocity$" charge time "$ChargeTime); RandSpin(StartSpinMag); // } } /////////////////////////////////////////////////////////////////////////////// // Take damage or be force around /////////////////////////////////////////////////////////////////////////////// function TakeDamage( int Dam, Pawn instigatedBy, Vector hitlocation, Vector momentum, class damageType) { // Don't do anything if there's no damage if(Dam <= 0) return; // If you're moving, you can't take damage (unless it's // kicking/bludgeoning from anyone or bullet damage from an npc damage, then you can take it anytime) if(Physics == PHYS_Projectile && !(ClassIsChildOf(damageType, class'BludgeonDamage') || (ClassIsChildOf(damageType, class'BulletDamage') && P2Player(Instigator.Controller) == None))) return; //log(self$" take damage "); // several things don't hurt us if(ClassIsChildOf(damageType, class'AnthDamage') || damageType == class'ElectricalDamage') return; SetPhysics(PHYS_Projectile); // Make sure it can move bBounce=true; Acceleration = default.Acceleration; // For kicking, shovel, baton type damages, the health is basically a // counter for how many hits (minus the last one) you can deliver // to a grenade before it blows up // Also, because of the nature of the instantaneous momentum delivery // and the full contact, don't add to the velocity, simply set the velocity. if(ClassIsChildOf(damageType, class'BludgeonDamage') && damageType != class'CuttingDamage') { // If you kick it, you know 'own' it, so it won't blow up on you // anymore, but will blow up on anyone else (like, if you kick it // back at the attacker). The explosion will of course still hurt anyone. //log(self$" setting instigator "$Instigator$" to instigatedby "$Instigatedby); Instigator = instigatedBy; Dam = 1; Velocity=(Momentum/Mass); } else { Velocity+=(Momentum/Mass); } MakeSmokeTrail(); Health-=Dam; if(Health <= 0) { GenExplosion(HitLocation, vect(0, 0, 1), None); return; } } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// simulated function BounceRecoil(vector HitNormal) { local vector addvec; // log(self$" BounceRecoil"); if(Physics != PHYS_Projectile) SetPhysics(PHYS_Projectile); // Make the normal a little crazy to promote some random bouncing addvec = (VRand()*0.05); if(addvec.z < 0) addvec.z = -addvec.z; HitNormal += addvec; Super.BounceRecoil(HitNormal); } // Here we spawn more Bettys. /////////////////////////////////////////////////////////////////////////////// // Bounces off walls /////////////////////////////////////////////////////////////////////////////// simulated function HitWall( vector HitNormal, actor Wall ) { local vector newhit, newnormal, EndPt; local bool bStopped; local float speed, VX, VY, VZ; local SmokeHitPuff smoke1; local GrenadeProjectile gren; local int NumBettys; local vector NewVelocity; if(bBounce == true) { if (!bBouncedOnce && Role == ROLE_Authority) // only spawn more bettys on the first bounce { for (NumBettys=0;NumBettys= SAME_SPOT_BOUNCE_MAX) bStopped=true; } } } // If we've stopped, zero out the appropriate entries if(bStopped) { bBounce=false; Acceleration = vect(0, 0, 0); Velocity = vect(0, 0, 0); RotationRate.Pitch=0; RotationRate.Yaw=0; RotationRate.Roll=0; SetPhysics(PHYS_None); KillSmokeTrail(); } else // do bouncing BounceRecoil(HitNormal); // Throw out some hit effects, like dust or sparks smoke1 = spawn(class'Fx.SmokeHitPuffMelee',Owner,,Location,rotator(HitNormal)); if(!bStopped) // play a noise smoke1.PlaySound(GrenadeBounce,SLOT_Misc,,,TransientSoundRadius,GetRandPitch()); } } /////////////////////////////////////////////////////////////////////////////// // Have the un-armed projectile give the player back itself (as weapon ammo) /////////////////////////////////////////////////////////////////////////////// simulated function MakePickup(Pawn Other) { local Inventory Copy; local P2Weapon p2weap; local GrenadePickup gp; // Has to have bounced at least once to allow it to be picked up // (other-wise you'd be picking them up as you dropped them) if(bBouncedOnce && Other != None) { if(Role == ROLE_Authority) { // Quickly make a pickup inside the player, then try to get the player // to touch it.. then remove them both, if he does. gp = spawn(class'GrenadePickup',,,Other.Location); if(gp != None) { gp.RespawnTime=0.0; // Don't allow this to respawn gp.AmmoGiveCount = 1; // There's only one grenade here. gp.MPAmmoGiveCount = 1; gp.GotoState('Pickup'); gp.Touch(Other); gp.Destroy(); // Conditional destroy if we're a single player game--it gets better // service. A server/client game will always destroy the grenade. if(gp == None || gp.bDeleteMe || Level.NetMode == NM_DedicatedServer) Destroy(); } } else Destroy(); } } /////////////////////////////////////////////////////////////////////////////// // We can hurt ourselves with this if it's bounced once. // Otherwise, it hurts everyone else all the same /////////////////////////////////////////////////////////////////////////////// simulated function ProcessTouch(Actor Other, Vector HitLocation) { local SmokeHitPuff smoke1; if (Pawn(Other) != None && Pawn(Other).Health > 0) { // If it was un-armed, // and the special alt-grenade, // allow it to be picked back up /*if(!bArmed && GrenadeAltProjectile(self) != None && Pawn(Other).bCanPickupInventory // Only allow maker to pick it back up && MadeMe(Pawn(Other))) { // SP players can pick them back up after alt-fired if(Level.Game != None && Level.Game.bIsSinglePlayer) { MakePickup(Pawn(Other)); if(bDeleteMe) return; } else // Let the guy that dropped them run over them in MP // it's better for team games and we wanted something consistent in MP. return; }*/ // If not, check to detonate if(!RelatedToMe(Pawn(Other))) { GenExplosion(HitLocation,Normal(HitLocation-Other.Location), Other); } } else { // Bounce off static things if(Other.bStatic) { // Throw out some hit effects, like dust or sparks smoke1 = spawn(class'Fx.SmokeHitPuffMelee',Owner,,Location,rotator(Normal(HitLocation-Other.Location))); // play a noise smoke1.PlaySound(GrenadeBounce,SLOT_Misc,,,TransientSoundRadius,GetRandPitch()); BounceRecoil(-Normal(Velocity)); } else Other.Bump(self); } } /////////////////////////////////////////////////////////////////////////////// // It explodes after DetonateTime no matter what /////////////////////////////////////////////////////////////////////////////// simulated function Timer() { GenExplosion(Location, vect(0,0,1), None); } /////////////////////////////////////////////////////////////////////////////// // Blow up and generate effects /////////////////////////////////////////////////////////////////////////////// simulated function GenExplosion(vector HitLocation, vector HitNormal, Actor Other) { local GrenadeExplosion exp; local vector WallHitPoint; if(Role == ROLE_Authority) { if(Other != None && Other.bStatic) { // Make sure the force of this explosion is all the way against the wall that // we hit WallHitPoint = HitLocation - FORCE_RAD_CHECK*HitNormal; Trace(HitLocation, HitNormal, WallHitPoint, HitLocation); } else WallHitPoint = HitLocation; exp = spawn(class'SmegBettyExplosion',GetMaker(),,HitLocation + ExploWallOut*HitNormal); exp.CheckForHitType(Other); exp.ShakeCamera(exp.ExplosionDamage); exp.ForceLocation = WallHitPoint; } Destroy(); } -class SmegPickup extends P2WeaponPickup; K\HJËe 5class SmegExplodedDamage extends ExplodedDamage; A&Z$š"øö‚-# w&*óš9:Ē9:$a š & ’ðw*Íô&ũ&q!{ U&að„„r*-čš9:Īā9:$aöa +class SmegDamage extends BulletDamage; SáˆļQBĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸĸ2TŅ­ß­ļZáz , … S]%o was blasted by %k's SMEG.Q]! %o blasted herself with a SMEG.R]! %o blasted himself with a SMEG.óPVIJ'ōj‚w.‹*—.‹Ó%gC.‹ âØ  ’ðā-§1a Áž ’9PâØ  ’1a)$ ž-.Óâ”ð@ 7class SmegBettyExplosion extends GrenadeExplosion; Eclass SmegBettyDaughter extends GrenadeProjectile; /////////////////////////////////////////////////////////////////////////////// // Blow up and generate effects /////////////////////////////////////////////////////////////////////////////// simulated function GenExplosion(vector HitLocation, vector HitNormal, Actor Other) { local GrenadeExplosion exp; local vector WallHitPoint; if(Role == ROLE_Authority) { if(Other != None && Other.bStatic) { // Make sure the force of this explosion is all the way against the wall that // we hit WallHitPoint = HitLocation - FORCE_RAD_CHECK*HitNormal; Trace(HitLocation, HitNormal, WallHitPoint, HitLocation); } else WallHitPoint = HitLocation; exp = spawn(class'SmegBettyExplosion',GetMaker(),,HitLocation + ExploWallOut*HitNormal); exp.CheckForHitType(Other); exp.ShakeCamera(exp.ExplosionDamage); exp.ForceLocation = WallHitPoint; } Destroy(); } €óUd|#-’#€?* Y ‡Ž.Þؚ9:Ē9:$a‚w*-§Ø Õ9?,2a  l  a *B Ũ ÕÕ G 8 á  åa 5class SmegAttachment extends P2WeaponAttachment; þXUË\ /class SmegAmmoPickup extends P2AmmoPickup; v3"p]q!M Lclass SmegAmmoInv extends P2AmmoInv; var float FleshRad; var Sound FleshHit[4]; /////////////////////////////////////////////////////////////////////////////// // Process a trace hitting something /////////////////////////////////////////////////////////////////////////////// function ProcessTraceHit(Weapon W, Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) { local Rotator NewRot; if ( Other == None ) return; if (Other.bStatic)//Other.bWorldGeometry ) { spawn(class'ShotgunBulletHitPack',W.Owner, ,HitLocation, Rotator(HitNormal)); } else { Other.TakeDamage(DamageAmount, Pawn(Owner), HitLocation, MomentumHitMag*X, DamageTypeInflicted); if((Pawn(Other) != None && Other != Owner) || PeoplePart(Other) != None || CowheadProjectile(Other) != None) { if(Rand(2) == 0) Other.PlaySound(FleshHit[Rand(ArrayCount(FleshHit))],SLOT_Pain,,,FleshRad,GetRandPitch()); } else // anything else--make a spark hit { spawn(class'BulletSparkPack',W.Owner, ,HitLocation, Rotator(HitNormal)); } } } /////////////////////////////////////////////////////////////////////////////// // Default properties /////////////////////////////////////////////////////////////////////////////// &"S!Z4Z $ðÁ$ðAZ $ðÁ$ðAZ $ðÁ$ðA6Ó(:Z$ÍĖĖ=7:Z$€?ÓSY $ÍĖĖ=$333? $€?$€?Z4Z $*C$\CZ $ČB$ČBZ $ČB$ČB$ČB Sâ*"+"@Ó#$Z $@$ @Z4Z $–Ã$–CZ $–Ã$–CZ $ČÂ$ČB>Z4Z $@$@Z $@$@Z $@$@%: Ä&"S!Z4Z $ðÁ$ðAZ $ðÁ$ðAZ $ðÁ$ðA6Ó(:Z$@7:Z$€?ÓSY$€? $€?Z4Z $ @$pAZ $ČB$ČBZ $ČB$ČB$–C Sã*"+"?Ó#$Z $€?$Ā?Z.Z $Ä$DZ $Ä$DZ$úCX%: €ŋGÓHY%*dx  $ÍĖL>*dd€ $€?*dd€IÓ&" S!Z4Z $ Á$ AZ $ Á$ AZ $HÂ$ ÁÓSY $š™™>$333? $€?$€?Z4Z $ČB$HCZ $HC$ČCZ $ČB$ČB$€;E Sä#$Z $ÍĖ @$ÍĖ,@Z4Z $ČÃ$ČCZ $ČÃ$ČCZ $\C$ C>Z4Z $Ā?$Ā?Z $Ā?$Ā?Z $Ā?$Ā?%: Ä&"SJÓ!Z4Z $@Ā$@@Z $@Ā$@@Z $@Ā$@@6Ó(:Z$@7:Z$€?ÓSY$€? $€?Z4Z $ @$ BZ $ČB$ČBZ $ČB$ČB$–C SÚ*"+"?Ó#$Z $€?$€?Z.Z $–Ã$–CZ $–Ã$–CZ$úC \ \ ]þĸĸĸF \ ]ĸĸĸĸO ]ĸĸĸĸ] dûĸĸĸ ]üĸĸĸK ]ĸĸĸĸe \z ]þĸĸĸI ]ĸĸĸĸg ]ĸĸĸĸ ]þĸĸĸW \R gýĸĸĸ{ \, eýĸĸĸp ]þĸĸĸF eýĸĸĸr ]öĸĸĸV ]üĸĸĸW ]ĸĸĸĸ] ]ĸĸĸĸj ]þĸĸĸV ]ņĸĸĸl \ ]üĸĸĸX ]þĸĸĸB gýĸĸĸ~ gōĸĸĸy ųĸĸĸ ]ņĸĸĸm Xýĸĸĸ_ ]ĸĸĸĸU gýĸĸĸJ \J íĸĸĸ TýĸĸĸA ]öĸĸĸU ]ïĸĸĸv \m ]ĸĸĸĸT ]üĸĸĸM \Öĸĸĸ$ dûĸĸĸK ]öĸĸĸS ]þĸĸĸ` ]þĸĸĸG ]ĸĸĸĸ^ gįĸĸĸf Týĸĸĸy Tøĸĸĸ UãĸĸĸW ]ĸĸĸĸ[ ]ïĸĸĸz eýĸĸĸ% eýĸĸĸf ]þĸĸĸG ýĸĸĸC UęĸĸĸO ęĸĸĸ ęĸĸĸA ýĸĸĸh ]öĸĸĸR ]øĸĸĸ` ]øĸĸĸ_ ]øĸĸĸU ]øĸĸĸx TÅĸĸĸg ]ýĸĸĸc ]ęĸĸĸ. Tōĸĸĸx eōĸĸĸw ]ýĸĸĸF`åĸĸĸB \O øĸĸĸb øĸĸĸa ]ōĸĸĸF ]øĸĸĸl ]øĸĸĸ\ íĸĸĸD ]üĸĸĸV íĸĸĸk íĸĸĸE \L ]ĐĸĸĸJ ]üĸĸĸP \s ųĸĸĸ ųĸĸĸ \Ķĸĸĸr Xýĸĸĸo ]ýĸĸĸQ Xįĸĸĸe Ũĸĸĸt ]ïĸĸĸ| gøĸĸĸD ]ïĸĸĸw eŨĸĸĸ~ÛĸĸĸL ]ïĸĸĸy Týĸĸĸc ]ïĸĸĸu ]ïĸĸĸxĢĸĸĸq Týĸĸĸj ]üĸĸĸU \k \l UŌĸĸĸt \j ]üĸĸĸY ]íĸĸĸV UÔĸĸĸb UŌĸĸĸC ]íĸĸĸb UÔĸĸĸD ]ãĸĸĸk UøĸĸĸW Tōĸĸĸu Tōĸĸĸs øĸĸĸ^ øĸĸĸK ]øĸĸĸU ęĸĸĸ| ]ęĸĸĸe eýĸĸĸ@ ōĸĸĸS ]øĸĸĸJ ]øĸĸĸe Tōĸĸĸv ^øĸĸĸM ^øĸĸĸP Tøĸĸĸ@ gøĸĸĸa äĸĸĸZ äĸĸĸv fäĸĸĸr Yĸĸĸc ]øĸĸĸ< ]õĸĸĸi ]øĸĸĸ: ]øĸĸĸn ]øĸĸĸ/ UõĸĸĸO gõĸĸĸq ýĸĸĸ` XýĸĸĸP XýĸĸĸZ \ĸĸĸi UŌĸĸĸdÓĸĸĸl ]ûĸĸĸA ]ûĸĸĸQ ýĸĸĸa ]öĸĸĸW TýĸĸĸA ]öĸĸĸT ]þĸĸĸRÓĸĸĸNÓĸĸĸMÓĸĸĸL ]þĸĸĸ_ ]ņĸĸĸn ]þĸĸĸ{ ]ýĸĸĸP ]ßĸĸĸ ]ņĸĸĸk \‘ĸĸĸn`åĸĸĸC`hĸĸĸZ`åĸĸĸD`åĸĸĸF`åĸĸĸG`åĸĸĸH`åĸĸĸE ]ýĸĸĸdUĸĸĸo’ĸĸĸpĢĸĸĸm ]ĸĸĸĸfÛĸĸĸM ]ýĸĸĸ9ģĸĸĸTÛĸĸĸKģĸĸĸPÛĸĸĸN \[HBĸĸĸ\`åĸĸĸI ]ïĸĸĸ{Œ[ apŒ•N npŒ€N {pŒZ HqŒ_YUqŒ_} cqũx_pq–VcqĢy bzŒšQ nzŒ]Q {z‰šR H{us U{‰]R a{Ģ@Rn{‰~} |{‰_n I|‰š~ V|Ŧ\ c|‰]~ o|‰| ||‰QI}‰} W}ŒšN d}‰šQ q}‰€R ~}ĢbI K~‰]Q W~Œt d~Œ]N q~Ģxi ~~‰•R KuK X́R dŦw pŦ@S |lv H€ŒNT€Ģ^ b€äSvn€Œa d„•emq„‰x ^†Œ@T k†Ŧh x†Y D‡X Q‡@u ]‡Œ•o j‡‰xS w‡Œo Dˆ‰€QQˆ _ˆŒ€H lˆ‰~Q yˆ‰_F‰‰_ T‰‰_ a‰œdhn‰ē@GVÔu]]ŽĄMOzŽT\I“ˆYb e•;s G ‰A T ‰@a Œ;" o ‰€| ‰xR JĄŒxTWĄ@[ eĄ†Û<AAqĄŲodrdžÃ@JMVĨ†Ō@/(cĶ_ K§bs W§br d§bq q§†@4>}§‰Wz {ω_R HІ@5 UЉ_QuЉ_ECІŌ@\@QІÐ@FFQŦēĮ@P,WŽ_v C­†@h1O­†Ņ@n,@Ū†é>flŪēÆ@M,Rą†@F~ą†@\&Dķ†IkAjķ†Ņ@lLH·†@HETļ°]ZÃYđ†Î@<Ssü†Tk5Fþ†Ð@:^cþ†Ä@U,A†Qk4mKh I‚ē<@*U‚†@NF‚†Ü<Q0E„·zu„·{ }„·|F…†Įc2N…†ËF%@††2]e††)1Bˆ†1_sˆ†@'%R‹zO w‹†ų9nCŒ‰€C q†č<PG~†Ã<_'E‘‰€l‘‰€z‘†Č._H’†Â<`'g“†ø;kWN”†Āe[e—†<;"@ŸŒDbŸ†Å<x&pŸ†L</V †Ä<e s ˜@E4cSĄŽh vūX Bŋ_ Oŋ` \ŋ˜E4oÃhŋ˜?E47Wƒ†K<JN„˜(E4?m„†ZOl…˜”E45{ˆŒBp‰Œp ‰ļBFLІóVuR˜*E4AG˜>E4PH‘œh X †ód1d †fUĄ˜=E4?{̆þ<UzĪ˜JE49XĨ†@3%QĶ˜;E4WvĶąagMŧąbjtĀącz^ÅąYnXË