* J4GX7 A D H I J K L W Z [               7 ; A B C D E F 2                    NoneCore UnrealGameEngineSystem LightColorForceKarma Lighting WhatToDoNext Collision MovementTimerTeamVoicePackAttack GetOrders OrderList BeginStateDefendBeginVectorReachedDestinationAddBotGetHumanReadableName EpicNames SendMessageSetAttractionStateGetMessageIndexTeamPlayerControllerPlayAnnouncement StopFiringOther SoakStopoffsetFindPathToObjective Freelance NotifyBumpFindBestPathToward FreeScriptPostBeginPlay ParseOptionMessageGameObjective EndState PositionSetCombatTimer LoseEnemyColor LostContact RosterEntry EnemyVisible GameEvent SetEnemyBotNearObjective WanderOrCamp ScoreEventAwardAdrenaline SendHome FightEnemyGetRestingFormationTimedFireWeaponAtEnemyPlayStartupMessageGetPriorityAttackObjectiveAddSquadWithLeader SeePlayerTouchFindNewEnemyForPriorityObjectiveEndGameCountDownSoundsDoRangedAttackOnFormationCenterUnrealScriptedSequenceBroadcastLocalizedMessage AssaultPathFocusOnLeader AutoTaunt FireWeaponAtEnemyNotVisible GameplayDMPropsDisplayText EnemyChanged FaceActorFindInventoryGoal TryComboEffectiveDoubleJump CachedSpeedDropStageNoneMustKeepEnemy NotifyKilledFollowResetSwitchToBestWeaponPickDestination GetString CheckScore IsSniping OrderNames AssignCombo SetLeaderIsHumanControlledRestartPlayer TacticalMoveStoppedTAUNT SameTeamAs Initialize GetIntOption DrawColorGetNumDefendersTellBotHowToDisable TryToDuck GetBotTeamStartMoveTowardGetMoveTargetCancelCampForGetLeastDefendedObjective DeathMatchOverrideInitialBotsGetPriorityFreelanceObjectiveCreateInventorySetObjectiveListsTesting SpreeSoundSelfSpreeNote CanMakeJumpTryToInterceptRelativeStrength DisplayDebug CanAttackAddDefaultInventory SpreeNote SetOrdersAssignSquadResponsibilityClientReceive ScoreKillBotFire CheckEndGameCanDoubleJumpPlayWinMessage JumpSpotReceiveLocalizedMessage SetHolderFaceMoveTargetShouldStrafeToReceiveWarningPosYGlobalInCurrentCombo NameSuffixesACKOrderHOLDPickRandomTauntForDisableObjective GoPickupFlagFriendlyTowardPickTag TakeDamage NeedPlayersTryTranslocatorStartNextPath StakeOutCautiousAdvance ClearPathForCheckSquadObjectivesFindNewObjectivesBotAllowDetourTo SetObjective RemoveBotUnrealTeamInfo NeedWeaponSetRouteToGoalDoTacticalMove SetAITarget DoStakeOut SetEnemyInfoSetAlternatePath GetItemNameShouldDeferTo ModifyThreat AddToTeam SetBotOrders TooManyBots NamePrefixesBelongsOnTeamRestFormation CheckPain OrderToIndexDirectedWanderDestroyableObjective TeamGame AdjustAround CelebrateCheckPathToGoalAroundFindNextJumpTargetCriticalPlayer NeedToTurn SetAlertnessRoaming Fallback ResetSkill DoChargeInitializeSkillAllBotsSpawnedGetLocationName IsPlayerPawnbCollideActorsPickupCheckIfShouldCrouch ScriptingFindInventoryType ClearShotAddRandomPlayermoving AllFinishedCanUseTranslocator MaxSquadSizeAllowTranslocationByUpdatePawnViewPitch ValidHolder LogTaken DestroyedNotifyTakeHit AddEnemy ComboNamesSameTeamTouch IsOnSquad GotoMenu FindMenu RemoveEnemy HasPathTagValidatePathTags AssessThreathomeClientSetViewTargetGetDifficultyCloseToLeaderScore SetFormationMayFallSetFinalStretchEngageDirectionDominationPending PutOnOffense PutOnDefense ModifyPlayerPickNewLeaderDoJumpTellBotToFollow SquadTypeHunting AllowTaunt FillPlayInfoAddTransientCostsRemoveFromTeamPickRetreatDestination NotifyLanded IsDefending LeaderSign TriggerEventScoreObjectiveSetFallChangeLoadOut ScoreFlagNone FRIENDLYFIRETGPropsDisplayTextUser TeamAITypeCheckMaxLives FindTeamForPlayEndOfMatchMessage MatchOver PreLoadBot AdjustSkill StackModeInitTeamSymbolsGetRandomTeamSymboldropped SameTeamInitPlacedBotRiffsError SpawnWait PassToSelfFindNewStakeOutDir BeDeviousSetClientTauntMessage ChangeNameFindNewObjectiveForFindHumanSquadRetaskPutBotOnSquadLedBy GOTYOURBACKInitBot IsHunting HearNoisePutOnFreelance BeaconNameLeaveFormation MergeWithGetLocationFor PostLoginGetViewPointFor BotDodge FootStepping IsInLoadoutNearFormationCenter DMMutator TryStrafeOwnsDefenseScriptWaitAtThisPositionCheckPrimaryTeamLandedPossessClientDelayedAnnouncementFinishedComboJumpingFinishedJumpingNone Finished PawnDiedDeadDontReuseTaunt LifeSpanPlayVictoryAnimationDodgeHasAmmoTriggerHeld LogReturned LogDropped SplashDamage KilledBy ChargingTranslauncher GameHasEndedClientGameEndedSetFacingActorIsHomeAllowImpactJumpByCanImpactJumpGatherThreshold GetNextBot DefendMelee CanStakeOutAssembleString FontSizeClientSetBehindView DoRetreat Lifetime bFadeMessagebIsConsoleMessageTeamScoreEventSetMovementPhysicsGetRandomPlayerDoMoveStrafeFromDamagebStatic NearWall TryAgainStartleGetHeadScaleForSetMaxDesiredSpeed SetFocusAddGameSpecificInventoryGetDesiredOffsetHigherPriorityThan SetLowGravGetOldEnemyName GetEnemyNamePlayerControllerClassName UnrealPawn GoalScoreNoneDoWaitForLanding TimerMessage SpecialEventShouldPerformScript FindRoamDestGetCollisionExtent UnrealPlayer IsRetreating Formation TakeOver RangedAttack PlayAlarm StartMatchLogout ReduceDamage RestartGame PickTeamFireCampingShouldRespawnCTFBase CanSpectate GroupName BreathTimer DoneRoamingMutatorIsAllowed ShortWaitFinishedStrafe DoStrafeMove KeyPickupLockedObjective SetFireYaw ClearScript SetNewScript GetDebugNameSetGRI mSizeRange mSpeedRangeScriptingOverridesAI RecoverEnemy mRegenRange IsInVolume mLifeRangeTestDirection StartledWeaponDamageTypeChooseAttackModeWaitingForLandingFindNextMoveTargetNoneAdjustFromWallDMMutPropsDisplayText BuoyancyCollisionRadiusCollisionHeightHUDTypeFillPlayerTeam NextLoadOutExecuteWhatToDoNextChooseBotClassRotatorbHiddenScriptedRangedAttackAI GiveWeaponCheckTouching GetNamedBotSetPeripheralVision Retreating GameEndedDiedGetFacingRotation LostEnemyUnLockFindTeamDesignationClientPlayForceFeedback FriendlyName ChangeTeam UnderFire BaseChangeNone IsStrafing RefireRateWeaponFireAgainTick DisruptedScoreBoardType MapPrefixParseChatPercVar RemovePlayer SeeMonsterSetDefenseScriptForbStasis bIsUniqueSetFreelanceScriptForFindPlayerStart RetaskingGetSizeAdjustAimErrorRenderComplexMessageClientSetRotationNotifyHeadVolumeChangeShouldDestroyTranslocatorBotSuitability AIController Controller FindViewSpot DrawScale AdjustAim CalcSetHomeNotifyHitWallYellAtShootSpotClass InitGame GoPickupBombCanComboMovingPreferShootScoreOrdersForBombCarrierProficientWithWeapon BeginPlay ClearHolder AirControlOrdersForFlagCarrier ImpactJumpNearEnemyBaseinjured NearHomeBase FlagNearBaseEnemyFlagTakenBy LightRadiusLightBrightnessMPGIPropsDisplayText IsFiring SplashJump ForceAddBot NumRoundsSendVoiceMessageEndMessageWaitRecommendSplashDamageNone ADR_Kill CheckReadyGetMinPlayers RemoteRole SpecialCostInit SpawnBotNoneInitializeBotAdjustedStrengthUpdateForTeam RotationRate SetWalkingNotifyJumpApex GOTOURFLAG CheckFit PendingMatchMatchInProgressGetTeamRestartCheckReplacement mSpinRange mMassRangeKillBot NotifySpree EndSpreeNonebScoreTeamKillsActionMPStartNone CombatStylebBeepGetServerDetails GetPathIndexNoneStartMonitoringNoneAggressivenessLightSaturationNone GetBlueTeam AdjustToss SetGameSpeed GetRedTeamGetMoveTargetForServerSpectateCanShowPathToClientPlayTakeHitIncrementGoalsScoredFindVictimsTarget NEEDBACKUP ServerTauntPlayerReplicationInfoClassAnnounceScore SetTeamFlags ReturnSoundsServerShowPathToBaseDroppedSounds TakenSounds SetHeadScaleSetAnimActionRecommendSupportHuman SoakPauseBotInitializeShowAILogMultiKillsSetClientAckMessageSetAckMessage PathWhispsAddDefensePointFindPreviousPath FindNextPathHiddenSetClientFFireMessageAddToSetFFireMessageSetTauntMessageSetClientOrderMessage FindTriggerFindKeySetClientHiddenMessageSetOrderMessageSetClientOtherMessageBetterObjectiveThanSetOtherMessageClientParseChatPercVarClientParseMessageStringPrecacheRosterFor AlwaysKeepPlayBeepSound DescriptionClientPlaySoundReAssessStrategy RemoveSquad OnThisTeamAddHumanSquadStyleRatePlayerStartNoRecommendationRecommendDefenseCheckFreelanceObjectiveRecommendAttack TimingOut SpawnGibsStayFreelanceGetPlacedRosterAlternateTranslocDest UpdateGamePostNetBeginPlayLineOfSightToRecommendPositionForHoldGameObjectLoadOutNone SquadNameAttackSuitability AddGameRulesbAcceptAllInventorybOptionalJumpDest IncomingbMustBeReachableInitGameReplicationInfoSetMoveTarget GameObjBoneEndJumpShouldUnCrouchFormationSizeOverridePickupQuery PlayFootStepRecommendFreelanceKilled CallForHelpNonebFirstObjective PlayTakeHitReviewJumpSpots INPOSITIONGetMostDefendedObjectiveDestructionMessageSetPlayerName KillBotsLocationPrefix SpectatingPitch FindSquadOf BaseExitTime bDisconnectOldMessageTimeTeamSymbolNotifyObjectiveStringSuffixGetSquadLedByConsoleCommand SleepingGetOtherStringGetTauntStringGetFFireString GetAckString bEnabled ORDERS_RoamORDERS_SupportDamageCapacityGetOrderString SpawnCopy bLeadTargetKeyTag bFirstPath bLastPathServerCallbackPickupMessageORDERS_Freelance PrioritybFixedRotationDirNone SoakBotsPlayDeathPhrase GetCallSign CommaTextChunkUpBlueTeamColor MenuName RedTeamColor YellowColorEnemyHasFlagStringYouHaveFlagStringUnderWaterTimeCountDownTrailerInventoryType LightTypeRiff NotReady BasePathTexturebUseCylinderCollisionEndFemaleSpree EndSelfSpreeENEMYBALLCARRIERHERE EndSpreeNoteFirstBloodSoundFirstBloodString MeleeRangeNoneGetWeaponClass OpenMenubMuffledHearing bIsPlayerHasRedHasBluebCanPickupInventory DroppedRed DroppedBlue CaptureRed CaptureBlue ReturnedRed ReturnedBlue bCanStrafebCanClimbLadders ReturnRed bCanSwim bCanCrouch ReturnBlueSetupSpecialPathAbilities RandomTauntORDERS_DefendNone SwitchWeapondamageAttitudeTo DamageShakeNeedsAdrenalineORDERS_Attack LightEffectNotifyMissedJump ADR_Control ADR_Return ADR_Goal CheckBobNone SoundRadiusCheckFutureSight ORDERS_None NearStringLastAttractCheck MaxTeamSizebScoreVictimsTargetPickupFunctionBaseAggressivenessbIsPartiallyUnique TranslocUse ViewNextBotbSpawnInTeamAreabPlayersBalanceTeamsbBalanceTeamsPathingFOLLOWSCRIPT_IgnoreAllStimuli ShowMenuStartUpAddBots AddNamedBotClearDoubleClickCalcDrawOffset mRandOrientInitPlayerReplicationInfo mGrowthRate UseLowGoreFOLLOWSCRIPT_IgnoreEnemies mAttenFuncmRandTexturesFOLLOWSCRIPT_StayOnScript DoComboNameGetOrderObject"FOLLOWSCRIPT_LeaveScriptForCombatJumpOutOfWaterLastSearchTime FovAngleDrawHUDMonitoredPawnAlert OwnerEventLoginRangedAttackTime VoiceTypeRecommendRangedAttack AmbientGlowAvoidCertainDeathNoneADR_KillTeamMateADR_MinorBonusADR_MinorErrorADR_MajorKill FireHackENEMYFLAGCARRIERHERE NEEDOURFLAG GetFireStartSinglePlayerWait WasKilledByNetUpdateFrequency PawnIsInPainSpawnProtectionTime TeamIndex DMSquadClass CountDownbWaitForNetPlayers bAllowTrans bAllowTaunts RestartWaitMinNetPlayersNetWaitSuggestAttackStyle weapon_boneSuggestMovePreparationSuggestDefenseStyleBotVoiceMessageReadyToPickup SetDisable FearThisSpot CrouchHeight EyeHeightBaseEyeHeightSkins WalkingPct AirSpeed BombTakenByPlayerWalking GroundSpeed SightRadius CanCombo RedColor PreBeginPlay ShowDebugbOnlyDirtyReplicationTeamNum RateWeaponDisplayPortraitWeaponPreferencePickBotToReassign GetFontSize GetColorClientSwitchToBestWeaponNotifyPhysicsVolumeChangeGetRelatedString bProjTargetbCollideWhenPlacingbCollideWorldSendHomeDisabledGetOrderStringForFillPrecacheStaticMeshesArrayCheckWaterJumpBotDesireabilityTakeDrowningDamageGetWeaponBoneForSpecialHandlingbReplicateMovement MaxDropTimebAlwaysRelevantmStartParticlesmMaxParticles MapListTypebHomeDyingDefaultPlayerClassNameNone bLoggingGamePhysics PostTouchSetHand bTeamGameGiveTobUnlitFillPrecacheMaterialsArray NetPriority bHideScopeActionsServerReStartPlayerNonePhysicsVolumeChangeGetInventoryClassHandlePickupQuery OtherTeamAltFire SetPause WaitForMoverGetDamageRadiusMergeEnemiesFrom SoundVolume MessageClassGetViewRotationFellOutOfWorldNoneObject ShieldGunRestingFormationClassIsLocallyControlledCurrentOrdersFreelanceString HoldString AttackString DefendStringSupportString RegisterGameSquadChangedWeapon RespawnTimeDesireability PlayerSpeechAlreadyExistsEntryNoneNoneClientInitialize MutatorClass ProcessMoveNeedsBotMoreThanGetConsoleColorClientOpenMenu bIsSpecialbCanChangeSkin HudTeamColorDesiredTeamSize ForceScale ForceRadius ForceType GravityZ bWeaponStaybIgnoreOutOfWorld PrePivot DrawType bPauseableMoveToGoalWithEnemybRestartLevel"EnemyAcquisitionScriptProbability bFreelancebAlwaysZeroBoneOffset bFirstScript WillowWhisp StartGame UTJumppadUnrealSecuritybDynamicLightMoveToGoalNoEnemyTriggeredObjective LightHueTranslocatorBeaconMass SpecialNavigTeamSayMessagePlusTeamPlayerReplicationInfoStartupMessageSnipingVolumeStringMessagePlusSayMessagePlus BaseRadiusRestingFormation TacticalTickInitActionForCompleteAction GetMyPlayerLeaveScripting MoveToGoal IsInPainSetEnemyReactionControllerClassFindAir AbortScriptMayShootAtEnemy RedShootSpotPlayerNameMessageScriptControllerClassPickupMessagePlus MutLowGrav MutBigHead mColorRangeLevelGameRules BallLauncherKillingSpreeMessageCriticalEvent SinglePlayer KeyInventoryAcceptInventory HoldSpot InitLoggingFirstBloodMessage PauseTimeContinueSinglePlayerGameACTION_GotoMenuAnnounceAdrenalineParseMessageString BigHeadRulesBlueShootSpot ShootSpotBombingRunSquadAISquadAIBombingRunTeamAITeamAICinematicGame CinematicHudCinematicPlayerSetPlayerDefaults Broadcast PickupQueryCTFFlag GameObjectCTFGameNoGoalCTFHUDMessage CTFMessage CTFSquadAI CTFTeamAI GOTENEMYFLAGUnrealMPGameInfoDiscardInventoryMANDOWN DMRoster GetAIRatingDMSquadDominationPoint DOMSquadAI DOMTeamAI FlagHandAlertnessLevelbPendingDoubleJumpSequenceScript ActionNum NewScriptDrowned BlockedPathAction_WAITFORTIMERAction_MOVETOPOINTScriptedActionCriticalEventPlusScriptedSequenceScriptedControllerNoneNonebRisingbForcedPrevbotname bWonMatchTeamSymbolName EnemyTeam EPlayerPosPortalOwner bDeleteMeCurYCurXClipYClipXEnemyAcquisitionScript CurrentUser bTearOffbDontChangeScripts TimerRatebRoamingScriptEnemyAcquisitionScriptTagZoneSnipingVolumeTag NumCheckedbAvoidRegion Instigator bMegaSpeed Touching LatentFloatsumPVXYDirZDiffDefaultRosterEntryRosterAllowedTeamMembers TeamAlliance tryCountEDoubleClickDir RosterNames eKillZTypeTemp TeamBots NewScaleDeltaCurrentLoadout Sequencelocpos DeltaTime bNoRecursionEventInstigator HitNormal NewVolume KillTypeNewBotDamage bHolding SquadLeader LeaderPRI NextSquadSquadObjectiveAlternatePathAlternatePathTag SquadMembers HitLocation MomentumExtent Loudness DestinationStartSupportStringTrailerDirEnemiesNumbFreelanceAttackbFreelanceDefendFreelanceScriptsHitLocEnd RelatedPRI_1 RelatedPRI_2OptionalObjectdistGRIYLYPosbNewbAddXLLostPbResult NewEnemybCurrentEnemy DistanceSecTypeDataTimeOut bSeeEnemy BestEnemy OldEnemybSeeNew BestThreat NewThreatGUIControllerbThreatVisibleDelay Material2 ThreatValue NewStrengthViewer instigatedByNoneCenterValue bGameEndedO bOverTime bResetSquadbWaitingToStartMatch StartTimeGatherWaitTimeDiffusebValue NumPlayersNumBots CurrentID MaxLives TimeLimitOtherMesgGroup BaseMutator bForceUpdateGameRulesModifiersCurrentGameProfilebStillTicking PlayerID ServerStateMPRIIndexResultInOpt LocalPlayerDesiredPositionPickedObjective bInPositionNoneNone StartSpotValBestVal SuitabilityBestSuitability EnemyList NewPlayerInTeamaPlayer bForceDeferDefaultPlayerClassPCPawnClassNameLastSeeFlagCarrierBomb EnemyBase BombBase ScoringRand PawnClass SelfPasser PassTargetExiting PlayerPawnbNeedTouchDownInv bPassing bCanPass bSelfPassKiller bSeeBombbOnBombHolderTeam BombPositionBombCarrierTarget BombCarrier KilledPawn FriendlyFlag EnemyFlag ReturnPathReturnPathTagbOnlySpectator ViewTarget NumPoints bAllowPickup bNameChange bSeeFlagFlagCarrierTarget FlagCarrier bNewTeambPreviouslyViewed MinPlayersbTeamScoreRoundsEndTime BeaconListCurrentSenderWinner LoadoutNameReason incomingNameNoneRed_Team_ScoresRed_Team_increases_their_leadRed_Flag_TakenRed_Flag_ReturnedRed_Flag_DroppedRampagered_team_is_the_winnerKilling_SpreeHumiliating_defeatGodLike first_bloodBlue_Team_ScoresBlue_Flag_ReturnedBlue_Flag_Dropped adrenalintwothreetensixsevenoneninefourfiveeightRed_Team_takes_the_lead UnstoppableYou_Have_Lost_the_MatchYou_Have_Won_the_MatchBlue_Team_takes_the_lead Dominating HatTrick WhickedSickblue_team_is_the_winnerFlawless_victoryBlue_Team_increases_their_leadBlue_Flag_TakenScorer botToRemoveWho TestLabelNonebForceDefaultCharacter bTournamentbPlayersMustBeReadybForceRespawn bAdjustSkill ComboName Requester NextMutatorbMustJoinBeforeStart bFirstBlood bQuickStartbStartedCountDownbFinalStartupbOverTimeBroadcast bEpicNames bKillBots StartupStageInventoryClassNameAdjustedDifficulty PlayerKills PlayerDeathsbSuperRelevantLevelRulesClass LevelRules HomeBase EnemyRosterEnemyRosterNameDefaultEnemyRosterClassRemainingBots InitialBotsLastPlayerStartSpot NameNumber bSuccessEndMessageCounter GameClassbMatchHasBegun ProbabilityRemainingTime ElapsedTime EndGameFocusStandalonePlayerRemainingMinuteTeams TeamSymbols PRIArray FlagStateDeathsHasFlag EpicOffset TotalEpic NumLives bEnemyKill bAutoNumBotsCharacterName SymbolName SymbolIndexTeamID bLastMan bIsFemalebWinnerNonebWaitingPlayer bReadyToPlay bOutOfLives RosterClassbBot GoalsScoredChosenBotTeamBestbFoundbTempDoubleClickMove NewAccelVelbReady TimeSecondsSecond NextDist OtherPlayerSinglePlayerTeamSizeLiving bNoneLeft OtherPRI LastTauntNoneInstigatorSkillPauser bStartupNetMode myPickUpGame BlueTeamName RedTeamNameNoneNavigationPointListControllerListNextCMessageStringmyHUDFriendlyFireScale RelatedPRI1 RelatedPRI2NextGameRules Recipient messagetype messageIndex Callsign PackOwner PhraseName bNoMature TempSymbols bNoHumanOnlyNDamageInTypeRedSymbolNameBlueSymbolName NewSymbolNewVelDirZ SmallTeamBigTeamNewTeamVelDir InjuredTeamInstigatorTeam bBlobShadowminDist currDistClosestnearwherelocNameGOOutMsgS_PawnDisabledObjective bJustLanded ScoringTeam ScoreSound bIsWalking BestFlag EndTimeDelaybWantsToCrouchtheFlagoppDistppp numtouchFlagLoc GameSounds FanfaresUT2K3Fanfare06UT2K3Fanfare11UT2K3Fanfare01UT2K3Fanfare04 bIsCrouchedbCanFly bAvoidLedgesbStopAtLedgesbNoJumpAdjustbUpdateEyeheightbInvulnerableBodyNonebShowDebugInfobShowScoreBoardbAmbientCreature PlayerOwner AlertnessPeripheralVisionAnchorCopyFindAnchorFailedTimeLastValidAnchorTimeSerpentineDistMultiKillStringSerpentineTime PickupForce UncrouchTimeEndSpreeNoteTrailer SpawnTimePendingWeapon SelectedItemFloor LastPainTimeNoneNonebobtimeShadow NameSound AckSound AckString AckAbbrevAckAnimnumAcks FFireSound FFireString FFireAbbrev FFireAnim numFFires TauntSound TauntString TauntAbbrev TauntAnim numTaunts MatureTauntHumanOnlyTaunt MessageAnimDisplayString OnLadder OrderSound OrderString OrderAbbrev OrderAnimLastStartSpot OtherSound OtherString OtherAbbrev OtherAnim OtherDelayedDisplayOtherMessagePhrase PhraseString PhraseNumDisplayMessageDelayedSender DeathPhrasesHumanOnlyDeathPhraseNumDeathPhrasesHiddenPhrases HiddenStringbDisplayPortrait PortraitPRINone AnimActionpdNum foundPhraseNoneHitDamageType MessageSoundbPhysicsAnimUpdate bWasOnGround bSniping bMeleeWeaponBotMode S_Weapon TauntAnimsShieldStrengthProjectileClass bTrySplashbTossedFFiredAmmunition projStartpickMesg SendMode WeaponClassjumpDir OrderGiver NewOrdersBigHeadMutatorAnnounceSoundNumSupportingPlayer ObjectivesSquads AttackSquadFreelanceSquadLoc2D OrderOffsetbFinishedFireAmountSkill PlusDiff MinusDiff HitActornewHeadVolumenewdist HitRotationChunkPerterbation NewActionMaxLandingVelocity ViewDistOldTeamfirst DeltaRotLeaderLastPlaySpeech PathListDoubleClickDirbNoMatureLanguage HumanSquadnextNavigationPoint LastGotFlagPrimaryDefenderbNoAutoTauntsbNoVoiceTauntsbNoVoiceMessagesNonebFrozen Occupant bBehindViewTransientCost FearCost bFullCheckbAlwaysUseStrafing projSpeedshooter ViewPointbNoDefaultInventoryaSpotbIsSquadLeader bSoakDebugbKeepTaunting NeededJumpSelectedEquipmentRequiredEquipmentOptionalEquipmentCalculatedGravityZ CurrentDirGameObjOffset GameObjRot JumpTargetbPlayerShadowsSpreeVel2D NoiseMakerBroadcastTypegameObjWait MessageID PainVolume markedItem OldBobTime TeamNumberInventoryClass invstringaPawnNoneproblemnewRotbOnlyTranslocatorbRealOnlyTranslocatorbNeverImpactJump bNoLowGravTranslocTargetTagTranslocZOffsetTranslocTargetFireDir BestDist JumpHeight bForceCheck AdrenalineDodgeV AllowedJumpZ RealJumpZRealGroundSpeedMonitoredPawn bDisabled RouteDistbTeamControlledbAccruePointsbHasShootSpotsDefenderTeamIndex StartTeamDefensePriorityObjectiveName RouteGoal CurrentPathLocationPostfixDefenseScriptTagsNextObjectiveDefenseScripts DefenseSquadAlternatePathsAreaVolumeTag MyBaseVolume RouteCacheObjectiveStringPrefix LastSeenTimeLastSeeingPosCurrentObjective LastSeenPosTargetEnemyRespawnPredictionTimeFocus FocalPoint MoveTargetDesiredTeamNumRequesterTeamNum TakenSoundmyFlag FlagType MoveTimerTakeDamageEventDamageEventThresholdAccumulatedDamage PrimaryTeambControllableControllingTeamControllingPawnnextController AdjustLocMyKey bAltFire MyTriggerbFireAssociatedObjective NextPath ObjectiveTagPathTag bNoReturn bReturnOnlybAllowedToImpactJumpbAllowedToTranslocate bNoGrouping bHuntPlayer bSoakingbEnemyAcquired bNotifyApex aPathTagbEnemyInfoValidbPreparingMoveSnipingPoints bAdjusting bLatecomerbDisplayLoserbDisplayWinner bGodModeLastWhispTimeMultiKillLevel LastKillTimeLastTauntAnimTime bWaterVolumeAnnouncementSoundLookDirRewardIgnored bInstantHitAimNoneGravitybAdrenalineEnabled tauntNumAcquisitionYawRateAdrenalineMax AnimNameFindPathToInterceptFindPathTowardNearestiDamInLatentExecutionbPrimaryStartJumpZModifierSS JumpVelocityMAXSTAKEOUTDISTENEMYLOCATIONFUZZTACTICALHEIGHTADVANTAGEMINSTRAFEDIST MINVIEWDIST bCanFire bStrafeDir bChangeDir bFrustratedbInitLifeMessagebReachedGatherPointbFinalStretchbJumpybHasTranslocatorbHasImpactHammerbTacticalDoubleJumpbWasNearObjective bPlannedShot bHasFiredbForcedDirection bFireSuccessbStoppedFiringbEnemyIsVisiblebTranslocatorHopbEnemyEngaged bMustChargebPursuingFlagbSingleTestSectionbRecommendFastMoveTranslocationTargetRealTranslocationTarget ImpactTarget TranslocFreqOldMessageType OldMessageID HidingSpot SetDrawColor bAutoTaunt AcquireTime AggressionLoseEnemyCheckTime StartleActorStartTacticalTimeBaseAlertness AccuracybEnablePickupForceFeedbackStrafingAbilitybEnableDamageForceFeedbackTacticsSetViewTargetFavoriteWeapon GoalString SoakStringNextSquadMember ReTaskTime GoalScriptEScriptFollowSetPosbOnlyDrawIfAttachedbAdjustFromWalls PointRegionScriptedCombatFormationPositionChoosingAttackLevelChooseAttackTimeChooseAttackCounterEnemyVisibilityTime VisibleEnemyStopStartTimeLastRespawnTime aimerrorLastSearchWeight CampTimeNumRandomJumps AccelerationLastFireAttempt GatherTime AIRatingLastKnownPositionLastKillerPosition TestStart TestPathCurrentRatingFearedDamageScaling noise2time noise1timeHealth MaxFallSpeedRealDestinationJumpZNone proficiencyMaxDesiredSpeed DesiredSpeed VisibilitybCanDoubleJumpMoron Threshold SeenPlayer bCanWalk bCanJump TargetLocbImmediateFire bSeeTargetSpeedrelstrDefaultGravityStartPositionTargetPositionmRegenIdealPlayerCountMaxcompareadjustedOtherIdealPlayerCountMinbNewEnemyVisible TimeDilation LocationName bFindDestOldMoveTarget NavLoc2DbStopCountDownInSkill TeamName AdjustedYaw TimeTooIdle LocalMessage SavePackage NewAlertness GameMessage CallingByte GameRulesGibbedGameMessageClassGameDifficulty MaxPlayers PlayerName bCanChargeEnemyStrength enemyDistAdjustedCombatStyle bFarAwaybOldForcedCharge Suicided VoicePack WeaponRatingRetreatThresholdNone BestWeight BestPathSetRelativeRotationSetRelativeLocationTouchingActorSuggestFallVelocityGetSoundDuration OtherDirSideDir AttachToBone WanderDirNone GameSpeedTypebCheckedReach bAllowDetour AccelRatetargNoneTriggerScript walldist ViewSpot FutureLocbNeverUseStrafing TargetDist bDefendMelee bInstantProjbLeadTargetNow FireRotation TargetLook FireDist FireSpot TargetVelrealYawbClean enemyDir MinHitWallduckDir bReversed bDuckLeftNoneTransientSoundVolume WayPointNone ColorNamesStrafingModifier RelativeDir SquadFacebEnemyNotEngagedbTranslocTactics bCatchupSize bMayCrouchServerResponseLineNItemkWallBaseSideE PackageName ScriptTextABCXMaxTimejiYtZSWGR Location Rotationpickdir enemyPart strafeSize Velocity StrafeDir collspecMinDest ReturnValueV nextSpotposZbCanSeeLastSeenDisable bAlwaysTryTimeDynamicLoadObjectScale GameStats xEmitter bNoChargeNoneWeapon AmbientSound LevelInfo GameInfo bFoundStart ReachSpec PathNodebSet Decoration Projectile xOffsetsxRates yOffsetsyRates bInitialized PlayerStartInventorySpot NextBeaconHUD LiftCenterbHeldHolder HolderPRI TakenTimePlayerReplicationInfo FirstTouchAssistsGameReplicationInfo Inventory Ammunition DamageTypePhysicsVolumeVolumeReplicationInfo TeamInfo HitNormallJumpPadNavigationPoint JumpDest AvoidMarker OldHolderMutatorNewGRI GameProfile ViewportflagCanvas WayPoints bHeadedRight LifeLeftBaseGUIControllerLevelCPEOrdersShader Combiner TexScaler FinalBlend ModifierMoverOrdersbTakenPawn PlayInfoPlayer Projector SecurityInfo MaterialActorPathListYawRollOptionsSoundConsolePlayCmdRoleTagEventClassPackageConstSwitchRot TextBufferEnum FunctionStateStructName StrPropertyStructPropertyArrayPropertyClassProperty NamePropertyObjectPropertyFloatProperty BoolProperty IntProperty BytePropertyDefensePointDefaultAction1DefensePointDefaultAction2 NextScriptNoneWanderNearLeader ReactionTimeNoneGetNumPlayersNoneNoneNoneNoneNoneNoneNoneFontArrayNamesLoadFontStatic GetLifeTime PostRenderLocalizedMessageFont SubTitlebCenterSubTitleKillTimeCriticalStringNoneFailedHuntTimeFailedHuntEnemyNoneNone KillStringMakeColorCodeRecommendLongRangedAttackDemoViewNextPlayerServerGetNextWeaponStatsClientSendMultiKillsClientSendWeaponClientSendCombosNoneClientSendSpreesAddWeaponDeathAddWeaponDeathHolding KillEventServerUpdateStatArraysServerUpdateStatsClientSendStatsAddWeaponKillUpdateWeaponStatsPlayerCalcView Headhunter SuicidesNextStatsString TeamMessage DropFlag WeaponStats BoxMaterial ClientSetHUDGetLastWeaponNoneCombatResultsDrawScoreboardDemoRecSpectator StatsString WeaponStringDMStatsScreen Combowhore FlakMonkeyNoneNoneNone FlagReturns AwardsString DeathsBy PlayerTickdeathsholding bDemoOwnerAdrenalineCombosEfficiencyStringLocalStatsScreenClassGetFontSizeIndexKills NextStatsKillsByWeapon FlagTouches GoalsBoxX MultiKills0Spree4Spree3newDeathsHoldingCombatOffsetY ScoreBoard GoalsNum CyanColorGEventnewComboCountSpree1SuicidesStringCameraRotation headcount NewColorSpree2 newsuicidesLongestSpreeString GrayColorSpree0CombatBoxSizeYLargeYLD MultiKills1 ScoreBoxA CombatBoxXCustomizedAnnouncerPack newDeathsIndentX DemoViewerTPRIPoints CombosNumWeaponsBoxSizeY AwardsNumbNewFirstBlood GreenColor WhiteColor ItemName ViewActorAwardX AwardWidthSpree5 bNetInitial PurpleColor WeaponWidth newFlakCountbDisplayNextMessage LastWeaponWeaponStatsArraynewFlagTouchesAwardsBoxSizeY MultiKills5 CombosBoxXDrawTileStretchedNewWeaponStats newgoalsCombos2Ordered bFoundPlayer MultiKills4GoalsBoxSizeY HudClass MultiKillsRealViewTargetnewFlagReturnsCombos MultiKills6MenuVictim ReplaceText combocountOffsetYScoreboardClassCombos1Combos0InterfaceContentNoneAwardsOffsetY TurqColor newKillsWeaponsOffsetYCombos4 MultiKills2CameraLocation flakcountCombosBoxSizeY bIsSpectator GoldColor GoalsOffsetYbTempBehindViewDesc newHeadCountCombosOffsetYCombos3 AwardsBoxX MultiKills3LastUpdateTime BlueColorNoneNonebShowMessageTextNoneBecomeViewTarget ViewClassbPlayOwnFootsteps IsSpectating bWeaponBobbCheataClassLastFootStepTimebQuietNoneNone ClearEnemies NetDamageWaitingForStatsbPreloadAllSkins bBrightSkinsbGameRestartedNoneNoneNoneNoneNoneServerDropFlagNoneNoneNoneSuperShockRifleNoneNoneNone BackToMenuNoneNoneTitleNoneNoneNoneCustomConfigurationPreLoadNamedBot Customize AtCapacityNotReachableBy IndexForLateEntryLivesCustomBotConfigNoneNoneNonebForceDoubleJumpNoneNoneNoneNoneDefaultMaxLives bSpectator ConfigArraybForcedSpectatorNumSpectators bCustomBotsMaxSpectatorsNoneNoneNoneNoneModifiedPlayerNameNone WantsPickupsxLastManStandingGame CanMultiJumpNoneNoneNoneNoneNoneNoneNoneNone VoiceChatDMPropDescText IsMemberGetDisplayTextAssaultGetPublicChannelCountNone GetChannelAtAddVoiceChannel GetChannel SetActiveGetVehicleBase IsRelevantObjectiveDescription GetMembersInitTriggerListTGPropDescText JoinChannelObjective_Info_Attacker SearchingOpenPositionForIsTeamChannelCanJoinChannelGetDescriptionTextMessageTriggerAnnouncer_DisabledObjectiveNone LeaveChannelObjective_Info_DefenderSuperPickupAvailable GetIDIndex RemoveMemberVehicleFightEnemyNoneIsPublicChannelFindSuperPickupNotifyTeamChangeAllowTranslocDelayedWarningbSkipActorPropertyReplicationUsedByGetOpposingTeamChannelbReplicateObjectiveSuperPickupNotSpokenFor ValidMaskChangeVoiceChannelPausing GetTeamNumGravityTrigger PerformDodge AddChild ChangeStrafeNoneSelfTriggeredEngagedUpdateAnnouncementsPostNetReceive TryWallDodge CheckVehicle Occupied ScanRotationNoneDMMutDescTextWaitForTargetRemoveVoiceChannelNoneGetPlayerChannelsNoneNotifyFallingHitWallNoneSpeakVoiceReplicationInfoType TauntWait AddMemberNoneNoneAcceptPlayInfoPropertyVehicleChargingNoneNoneClientIsBanned GetChannelsCanBeThrownByCanBePickedUpBy IsSuperItem GetStatus bNetNotifyJoinForceGiveWeaponShowLoginMenuVoiceReplicationInfoClass IsBannedNoneNoneGetChannelIndexInitVoiceReplicationInfo ShowPathToIsFullBallCarrierMessageTrackNewPlayerUnTrackPlayer InitChannels GetMenuNameProximityObjectiveChatRoomMessageDestroyVoiceChannelForceCelebrateConstraintPawnClassChatRoomClassNone CheckTeamNextNeededEventNoneCount BegunPlayTriggersEvent BotModeTextMPGIPropDescTextLoginMenuClassAggressivenessRatingTacticsRatingAgilityRating RoadRampageAccuracyRatingRatingModifierAddVoiceChatterGetDefenderNumNoneGetChannelCountNoneNone GetHashIndex NoPreferenceGetMemberChannels TeamLinkStopWeaponFiringRemoveVoiceChatterNoneVoiceMatchesGender SetGrammarUnrealVoiceReplicationInfoFindPlayerByIDbReplicateHealth CI_PawnClassShowMidGameMenu EncompassesNonePlayerWaitingStopForceFeedbackAutoJoinVoiceChatDeactivateSpawnProtectionClientSetActiveRoomEMT_SayLoadSRGrammarNone HasOptionIndependentVehiclexDeathMessageVG_MaleGetVehiclePositionStringSuperDesireabilityNoneNoneNoneNone VG_FemalebDefaultTranslocatorNoneUseDescriptionVG_NoneClientReplaceMenuEMT_CriticalEvent VoiceInfoShockProjectile UpdateHUDUnrealTeamChatRoom EMT_TeamSayUnrealChatRoomAddAmmoNonebSlowerZAcquireNonePrecacheAnnouncementsGetShortOrderStringFor EMT_DefaultbAnnounceNextObjectiveGetChannelMembersTeammateBoostbAllowPrivateChatbUsePriorityOnHUD bNotBasedReceiveProjectileWarningGetChannelMembersAtQueueAnnouncement LoadPlayersTurretControllerNone gibbedByPublicChannelNames SetViewPitchNone RemoveChildNone TossWeaponCheckSuperBerserkNoneEMT_DeathMessage ChooseFireAtMayDodgeToMoveTargetNoneGetPublicChannelsNoneReceiveBanInfoNone MutBerserkNoneCI_AllSentinelControllerInitializeVoiceChatNoneNeedNetNotifyCanThrowWeaponTeamVoiceReplicationInfo UseObjectiveNetworkEmitterbIgnoreEncroachersGetPlayerChannelCountParseVoiceCommandAnnouncer_ObjectiveInfo KDriverLeavebActivebInitiallyActive IsActiveGetDamageTypeMaxRecentServersGetFavoriteWeaponForNone ChannelsbReadyToStart bRealCrouchNoneKActorGravScale LeaderVelNone SuperPickupsLevelMinPlayers ChannelIndexNoneMainMenuClassWeaponBerserk BestEntry CurrentOwnerbFollowingPlayerVoiceChatReplicationInfo NextVehicleNoneAdd bWantJumpMembersMyTriggerListParticleEmitterRoom NewEventPROPNUMObjective_reachedcntNonebChangeStrafe Children bWallHitbOverrideZoneCheckAnnouncerVolumeVoiceChatManager bRefresh myMarkerAnnouncementLevel NewHitActorDP NewHitNormal TargetDir ShotTarget projTime FuturePos LineDistPlayerAddress SuperDistPlayerVoiceMask PropertyNameParentDodgeToGoalPctOldChannelIndexbLocalASoundConstraintInstigatorTossVelNoneIpDrv EVoiceGenderbOptionalObjective bPlannedJump MPPROPNUM PlayerGenderbTeamChatOnlyNone NewTeamIndex MemberMask ranovercount PasswordVoiceIDNewChannelIndex DDAverted bPrivateChatMsgTypeNoneNoneNoneTestPRILastActiveChannelbActiveStatusKParamsDesiredRotationDamTypeTelefragged TeamOwnerGetPlayerIDHashbAlwaysShowLoginMenuGetServerNetworkAddressVehicleScriptedTriggerNone NextEventChild CustomVoice CustomOrders CallSignsbCanDefenderDamage ChannelTitlebTriggerOnceOnlyHashbForceNewDirRejoinChannels Triggers PlayerHashBestInv GenderTypeArrAttenLastDetourWeightNone AutoJoinMask BestInvDistbMovingToSuperPickupbSkipPlaySoundNone bDefensive bNoCascadeObjectivePriorityTeamVCRNone SquadVehicleRecentServers KarmaParamsChannelIndexArray MemberIdsCross bStationary PropNamebOverrideVisibilityCheck VehicleListVoiceReplicationInfobForcePrecacheNone VRIClassFindBestSuperPickup BotOrdersidxNoneNone FocusLeadNoneWarningProjectileRoomsNoneNumSuperPickupsbForceTeamSkinsNewPRIMasterServerUplinkVoiceChatRoom RecipientIDNoneNone DMPROPNUM WarningDelaynewRanOverCount NewChannelDrawDistThresHold NewChildbNotifyFallingHitWall TGPROPNUMNoneDriverNonebDontShowLoginMenuMapNameNoneInGRIChannelbWorldGeometryObjective_destroyedbForceMessageSoundAnnouncerLevelbAllowLocalBroadcast bSingleTeam bNetDirtyMaxDist OldChannel ChatRoomNameWWclassNoneNonebAllowNonTeamChatproj VolumeTagObjective_accomplishedNoneNetworkAddressbCanWallDodge bSuperPickupRecognizedString JumpinessNonebColoredDMSkinsNoneNoneCanMakePathToNone EmittersLastUnderFireccNoneMidGameMenuClassLastRenderTime LeavingPRI MainVehiclebVoiceChatEnabledbOverrideTranslocatorbForceLoginMenu currInvDist LastDrawTime bInstantAckEMT_MessageTypeMove_onto_next_objectiveVoiceTypeNamebDodgingForward ActiveRoomDefendingTeamObjective_disabledEmitter DrawTime bBlockActors LinkHealMultVCRNone InPassword bTurnInPlaceEConstraintInstigatorNonePrivateChatRoomNoneNoneMinRangeMax RelativeTimeFemaleBackupNamesMaleBackupNamesPrecacheSound RangeVector GetTitle ChatManagerPlayStatusAnnouncement RelativeSizeGetPriorityAttackObjectiveForGetShootTargetAddServerDetailGetLocalPlayerControllerCanDisableObjectiveGetMaskIsValidCheckPlayCriticalAlarm UseSizeScale SizeScaleUseColorScaleAutomaticInitialSpawningInitialParticlesPerSecondIsPrivateChannelLifetimeRangeUseDirectionAs ColorScale MaxParticlesUseRegularSizeScaleStartSizeRangeUpdateTriggerCountSpreeSoundName HasWeaponStartVelocityRangeBotEnteredVehicleSpinParticlesSetMaskStartSpinRangeAnnouncerNamePlayRewardAnnouncementSetTeamIsTargetRelevant NeverBailFindEntryVehicle SoundPackageGetAllLoadHints AddScorer DrawStyle ValidRoom ActionString TryPassToAddPrecacheMaterialFallbackSoundPackageSetObjectiveOverlayGetPlayerHash StoreChatBanScoreGameObjectObjectiveTypeIconOverrideFollowPlayerSpecialVehicleObjectiveAdjustAntiPortalsVisibleToEnemiesOfIsLocalStartLocationRange IsCriticalTellBotHowToHeal BotOptions GetAimTargetEndGameSoundNameCanHeal GetSpree LoadingHints AcceptSpeechGetObjectiveProgressSetCriticalStatusPrecacheGameAnnouncementsAwardAssaultScore NearGoalCompleteObjectiveGetActionString bNoDeleteServerSendBotDebugStringCriticalObjectiveWarningStronglyRecommendedSetReservationRemoveTouchingPlayer bEnglishOnly ShareScoreClientDelayedAnnouncementNamed ValidEnemyMutMovementModifier LoadChatBanHoldObjectiveClientReceiveBotDebugString AcceptTextbPlayCriticalAssaultAlarmNearObjectivePlayDestructionMessageNewClientPlayTakeHit UniformSizeDestroyableObjective_SMDoClientResetServerGetNextVehicleStatsCheckSpecialVehicleObjectivesObjectiveDisabledIsAccessibleToGenerateBotOptionsShouldFireAgainReturnSoundNamesClearRestriction TweakSkillAdjustDestroyObjectiveDamageCreateNewVoiceChannel GetPassword ChatDebug DoChatDebugGetMaxChattersTooCloseToAttackClearTemporaryOrdersFindInstigatorVehicleDamageTypeSetBaseVisibilityVehicleDesireabilityGetWaitForTargetTimeOpacityClientSendVehicleIsTurretFiringGetInstigatorSetEndGameFocus ShieldSelfbMustHaveMultiplePlayersShouldKeepShieldingIsShootingObjectiveUnMergeRestrictionMergeRestrictionCaptureSoundNameAltEndGameSoundName TimerPopClientReceiveLoginMenuAddNewTouchingPlayerShouldSuppressEnemyParseRecipientsUpdatePrecacheMaterialsFindDestinationFindHidePathFor CallForBall ParseOrder ApplyOrderDroppedSoundNamesTakenSoundNamesLogChatRestrictionParseRecipientHighlightOverlaybDirectDamageIncrementSpreeServerPlayVehicleHorn AcceptVoiceGetGameObject UnPossessIncreaseLeadNameLast_Second_SaveMaxVehicleDist UnTriggerPickCustomTauntForDeniedServerSetReadyToStartDefaultChannelHighlightPhysicalObjectiveSpinsPerSecondRangeASCriticalObjectiveVolumeUpdateVehicleStatsAddVehicleKillAddRestrictionSetRestrictionKeepShieldingAddVehicleDeathDrivingJoinChannelAt TakeLeadNameVehicleScoreKillKillEnemyFirstAddVehicleDeathPlayVehicleHornToggleChatDebugGetCustomRewardAnnouncerClassUnrealPlayerChatManager NewGameSpeedbStaticLightingWeakObjectivesInstantWarnTargetAction_ChangeObjectiveTeam ShootTargetSetVoiceMemberMaskGetNextLoadHintLastKickWarningTimeDaredevilStringRegisterBroadcastHandlerTGHints MissedDodge GetAllFFireAcceptLocalizedMaleAnnouncerCheckForErrorsInitMaplistHandlerServerChatRestrictionServerPlayHornAcceptBroadcastSpeechNewRecommendCombogesture_pointAutoAimRegisterVehicleBioGlobbClearInstigatorGetPlayerControllerList GetAllTauntbCanBeDamagedVehicleDamageScalingbMonitorUnderAttackbDestinationOnlyAddRestrictionIDSetCustomStatusAnnouncerClassCanRestartPlayer bReceivePlayerToucherDiedNotify SpinCCWorCW CTFHints bLocationFXFireOnReleasebRoamingSquad%SetDelayedDamageInstigatorControllerDefaultPhysicsVolumePawnEnteredVolumeBombTargetMessage TeamSayQuietLastSecondMessage KickWarning NetDebugBotIdleKickWarningMessageUnrealChatHandler GetAllOrder ScorerRecordInitInputSystemTriggerControl DisplayHitChatBanAllowBecomeActivePlayerSexyFemaleAnnouncerACTION_DisableObjectiveAcceptBroadcastLocalizedClassicAnnouncerBotDamageScalingNumPassengers bBlockKarmaAnnouncer_DefendObjectiveConvoyPhysicsVolumeGetDefaultActiveChannelUnTouch DoDoubleJump HasUDamageNoneKillsByVehicleSetCustomRewardAnnouncerClassPrecacheAnnouncerbCausedByWorldMothershipHack PawnBaseDiedAcceptBroadcastVoice DeathStringShouldFireWithoutTarget SpokenForRecoverFromBadStateCode VehicleStatsChatRestrictionStoredChatBan ConvoyGibbed GetAllOtherVehicleString BotRatioGetKillerControllerbSpecialForcedUpdateLocationNameAcceptBroadcastTextPlayerChatTypebOnlyAffectPawns MutGameSpeedFemaleAnnouncerGetKeyVehicleUTClassicAnnouncer MPBotDescGetCustomStatusAnnouncerClassGetLinkVehicleLastSecondBlueGetOutOfVehiclePlayerToucherDiedCustomStatusAnnouncerPack MPBotTextbIgnoreVehiclesFX_HoldObjectiveAdjustBotInterfaceBecomeSpectator HealDamageCustomRewardAnnouncerPackCanChangeTeamNetworkTrigger StaticMesh HoldFlagUpdatePrecacheStaticMeshesTouchingPlayerGetPlayerRestrictionStartLocationOffsetChatBroadcastClassbEdShouldSnap GetAllAcksTargetMessageSetTemporaryOrdersACTION_DisableThisScript ACTION_SetObjectiveActiveStatus SPBotTextbBlocksTeleport SPBotDescbUseDynamicLights bNoDecalsLastSecondRedNeverAllowTranslocClearRestrictionID BareHandedServerChatDebugSetRestrictionIDAddPrecacheStaticMeshDMHints YouDestroyed FlagActorDemoMenuClass TexPropCubebLastSecondSave PendingTouch RecipientIDsHitDir RawIndex TouchTime BestHeldTimebVehicleTransitionNextBroadcastHandlerbAllowPlayerLightsDestroyedVehiclebIsUnderAttackDestinationOffset BestMoverCriticalObjectiveVolumeTagbForceNoPlayerLights AttackLocMaplistHandlerClassbReviewingJumpSpots LinkedMover AntiPortalsrest"DelayedDamageInstigatorControllerbTriggerObjectiveInstantlySpriteEmitterVoiceMemberMask LookTargetLastDamageTimebIsHeldbIsTriggerControlbPlayersVsBotsSpecialVehicleObjectives bInDodgeMove AntiPortalADefaultVoiceChannelEnergybDelayedDamagePctActiveChannelMAXFIREPickedHintsFemaleBackupNameOffsetPlayerChatManagerBANNED TeamStringChatBroadcastHandlerTPbDebug RedTeamMaskOBJ_Destroy_FBobjbRewardSoundsbNoFriendlyFire SteeringSavedObjectiveProgressEditor EndCamera InitialState TeamUseTimeLastAutoTauntTimeAssociatedActorbNotInVehicle TauntArrayMaleBackupNameOffset BaseDistbThisClassOnly HidePathbShowInstigatorControllerANameNetUpdateTime MyTeamNumObjectiveOverlay_Red VehicleClass BlueTeamMaskSetBaseDistance BotsGroupObjectiveOverlay_Blue bAliveCheck OBJ_Hold_FBbEnableVoiceChat ResetCountbSinglePlayer bIsCritical SenderPRI PointArrows NOSPEECH VolumeTimer Touchers TriggerCount bNewCritical RoadPathNode bTeamLockednewUV2MaterialAccessibleVehicleClasses CarrierBot EventDescBotPawnChatRestrictions UV2TexturebOldHighlightPhysicalObjective TravelTimeHealer HealthMaxNewType ThrottleSetStaticMesh SetDrawTypeEJoinChatResult AccelDir NewAngle desireddistBroadcastHandler KillInfoaimdist ServerGroup LocationFX VehiclePathRewardAnnouncerStoredChatRestrictionsFlyingPathNodeSpriteEmitter165SpriteEmitter166SpriteEmitter167SpriteEmitter168SpriteEmitter169SpriteEmitter171SpriteEmitter172LastVBase DodgeLandZbNewCriticalStatus MAXTAUNTNextSpecialVehicleObjective BaseVisiblebPlayerBecameActivebFollowLookDir BoundedLevel GameGroupmyMoverbSkipbAllowMPGameSpeed PhysAlphaAIShootOffset BestTimeNextFirePropertiesAssociatedActorTag bKeyVehicleGIPropDescTextOldTriggerCount Restriction bThumpedObjectiveDisabledTimeRealInstigatorEpicParticlesAc GoalListMaplistHandlerType AIScript EntryRadiusGibPerterbation MoverTagAnnouncerVoice Receiver RulesGroupCurrentInstigatorNewRestrictionNewMaskCurrentObjectiveProgress AnnouncementVehicleNameStringbHighScoreKillFlaresDrivenVehicleNOVOICENetBotDebugString DebugStringbIsBeingAttacked MenuClassbBadStateCodeAW-2004ParticlesWeaponStickinessBestDbSeparateTurretFocusMaplistManagerClassYouDestroyedTrailer FadeColorObjectiveTargetOutRestrictionNewDPlayerStartTime MaxRotationbCanCarryFlag AckArrayRise AngleConvertbEnableInitialChatRoom bDodgeUpOldOrderGiverOption OldOrders HoldTime mPosRelativeVehiclesOffsetY LastWarnTime HoldVehicle ZoneVelocityKSetBlockKarmaVehiclesBoxSizeYTotalHeldTime ChatGroup DamagePct bEjectDriverbNoTeamChangesMaplistHandlerMAXACKDonebAddTransientCostsObjectivesDisabledCountLastObjectiveTime MinFlySpeedbSoundsPrecached StuckCount MAXORDER DisabledByGIPropsDisplayTextFormerVehicle MAXOTHERStatusAnnouncerNextBot MoveTime MAXPHRASE PrevKeyNum OldVehicle EndCameraTag NewRatingnewDaredevilPointsNewAnnouncerClassAntiPortalTagTouchingPlayersOBJ_Proximity_FBbForceAllowDoubleJumping HornIndexNewVehicleStats VoiceClassnewDeathsDrivingMsg HealthTaken BestRatingGenericBotDifficulty AS_FX_TX PainTimer FFireArrayVehicleLostTime SoftFlareIconsOldResetCount PlayerCount OrderArrayNextTranslocTimeDaredevilPointsbIgnoreEnemyChangeAnnouncerAssault EnemyTeamNumbBotOnlyObjective bShieldSelfEclipseCirclebHighlightPhysicalObjective bOldCritical bOldDisabled AttachedAddVelocityFromOwnerbMustBoardVehicleFirst AIMarkerbPausePhysicalObjectiveActorsVehiclePathNamebNotFirstCallVehicleStatsArrayNOTEXTUnderAttackTimerDestroyedStaticMesh OriginalMeshOldStaticMeshLastPlayerTouchingDeathsDrivingGameObjectNameOrderIDDefend_next_objectiveKeyNumstr ViewPawn OtherArrayNumRecipients IsJoinedTobIgnoredObjective GameEngineMaplistManagerBase SharedScoreCarrierbShowLocalStatsAntiPortalActor CTFAlarm CacheManager HoldArrow MinReloadPctRemoteViewTargetPhysicalObjectiveActorsTagScorersNoneFindValidTauntNoneNone BigTeamBotsSmallTeamBotsNoneNone CrouchedPctHasSuperWeaponAddShieldStrengthNotifyAddInventoryInventoryGroupNewItembHasSuperWeapon CheckPawn NewObjectiveNoneNone AddMutator MapMutatorNoneNoneNone StripColorNoneNoneEndGameCommentsEndGameVictoryRemarksEndGameResponsesEndGameLossRemarksEndGameTauntsPickEndGameTauntForSayEndGameCommentForEndGameTauntFor JustStartedLegitimateTargetOfGetTargetLocationONSOnslaughtGame SwitchBotsONSMortarCameraChangedReservationNewReservationCostMultiplierNotifyPostLandedbNotifyPostLandedLastEndGameRemark reachFlagsMyBotEndGameCommented OtherSquadLastBlockingVehicleLastEndGameResponseEndGameRemark OtherBotLastEndGameTauntTimeDirectionHintLastEndGameCommentNoneNoneNoneNoneMultiMinPlayersAlternateFallbackSoundPackageSoundPackageNameNoneNonebLargeGameVOIPh1Y.jBy|*bQ bQ bQ bQ h3}ɢɢɢɢnwwgɢnwwgɢnwwg~ϡɢnwwg~ϡɢnwwg~ϡɢɢnwwghɢhɢhɢnwwgʁ)hɢh3}ɢɢɢɢnwwgɢnwwgɢnwwghɢhɢhɢnwwgɢnwwg~υʁ)hɢhɢhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhbQ hbQ hbQ ʁ)hhhh,ehhhh v v3}3}9uh3}3})B3})BhhhbQ 3}Zsɢɢ3}Zs3}3}$WSF3}3}Zs3}Zs3}ʁ)h3}hhh}L}L}LhhqYԄhhqYԄhhqYԄhhhh\fFʁ)\fFhhqYԄhhʁ)hhqYԄhhhhh3}hh3}hhqYԄhhh3}ɢɢh3}Zsɢɢhhh3}hhh3}hhqY\fF3}hhhqYԄhhhqYԄhhqY\fFhhhhhhhhhhh\fFhhhhhhhhhhhhhhhhhhhhhhh\fFh,eɢhhhhhhhhhhh3}3}hhʁ)ʁ)hhhhhhhhh\fFhhhhhhqYԄhhhhhhhhhhqYԄhhhhhhhhhhhhhbQ hhhhhh\fF\fF,eh\fF,eh\fF\fF,eh\fF,ehh\fF,eh3}hhhhhh}L}L}L\fFhhhhhhhhhhqYԄh3}hhhhqYԄhhhhhhqYԄhhhhhʁ)hhhhhʁ)hhhhhhhhhhqYԉ3}hhhhhhhhhhhhhhhhhhhhhhhhhhqYԄh\fFhhqY\fFhhqYԄhhhhbQ hhhhh3}3}\fFh3}\fFhʁ)ʁ)}L}L}L\fFhhhhʁ)hhh\fFhhhhhqYԉ3}h3}9u\fFh{hʁ)ʁ)h\fF{#ʁ)\fF\fF,e\fFd' vh\fFhhh|\fFhhʁ)hhhhhhhhhhh\fF,e\fF,ehhh\fF,e\fF,ehh\fF,ehhhhh\fFd'\fFd'\fFd'hhhhhhhhhhhqYԄhqYԄh,ehh}Lh3}\fF\fF,eh\fF,eh}Lh3}\fF\fF,eh\fF,ehh\fFd'\fF\fF,e\fF\fF,e\fF,e\fFd'\fF\fFd'hhh\fFd'hh\fFd'\fF,e\fF\fF,e\fF,e\fFd'\fF\fFh}L\fFd' vh\fFzVGB#zVGBJ||#|||##zVGBJ\fF||#zVGB|#|\fF#h##hqYԄhqYԄh@qqYԢqY@qhh\fF\fFh\fFhhqYԉ3}h3}hhhʁ)3}hʁ)hʁ)hʁ)hqYԄh}L3}hqYԅʁ)hh3}hhhhʁ)hʁ)hhh,ehhqYԅʁ)h}LhhqYԡɢɢɢ\fF\fF,e3}\fFhhhhbQ hhbQ hbQ hhhhhhhhh n nhh nhʁ)hhhhhhʁ)hʁ)h n n n nh nhhhhhhhhhhhhhh3}hhh\fFhhhhhhhhh3}3}hh3}zVGB3}hȵhȵȵȵhȵȵh3}3}ȵ\fFȵȵhhȵhȵȵȵhhȵȵhȵȵȵȵhȵhȵȵhʁ)ʁ)hʁ)ʁ)ʁ)ʁ)ʁ)bQ ʁ)bQ ʁ)bQ ʁ)bQ ʁ)ʁ)ʁ)ʁ)ʁ)ʁ)ʁ)ʁ)ʁ)ʁ)hʁ)hʁ)ʁ)ʁ)hhqYԅʁ)ʁ)ʁ)ʁ)ʁ)ʁ)hhhhhqYԄhhhqYԄhʁ)ʁ)ʁ)ʁ)hʁ)hʁ)ʁ)hhhʁ)ʁ)ʁ)3}hhqYԉ3}3}3}hhʁ)3}ʁ)hhhhhhhʁ)hhʁ)ʁ)hhhhhhhh}Lh}L\fF'\fFh}L}L3}ʁ)h}L3}\fFh3}hʁ)ʁ)hnwwgnwwghʁ)hhhhʁ)ʁ)hhhhhhhhh\fF}L}L}L\fFh\fFhhhhhhhhhhh,ehhh,ehhhhhhhhhh3}3}hbQ h}L}Lh}Lhhhhhhhh3}hh\fF v%IPÄhhh3}3}3}9uh3}3}h3}3}9u3}{zVGBzVGBJ#zVGBJ3}\fFhqYԊzVGB\fFhqYԄhqYԄhqYԄhqYԄhqYԹ{{#3}hhhqYԄhhhhhhqYԄhhhhhhh\fF\fFhqYԄhhqYԄhqYԄhh}LhhzVGB3}}Lh\fF\fFhhh3}3}3}hh3}Zs}L}Lh}Lhhhhhhhʁ)ʁ)hʁ)hh\fF\fF\fF3}hh3}3}h3},e,e u u u,e,e,ehhhhhhhhhhhhhhhhh3}9uhhhhhhh3}ɢɢhɢh3}ɢɢhɢhɢɢhqYԊzVGBhqYԄhqYԄhqYԄhhqYԄhhhhhhbQ hbQ ʁ)hhʁ)ʁ)hʁ)h n n n nh nhhh nhhhhhbQ hhhhhhhhhhhhh3}Zs,ezVGBzVGB3}3}hh\fF||||h\fFhhhhhhhhqYԄhqYԄhhqYԄhhhqYԄhhhhh3}3}\fF v vhhqYԄh vhhhqYԄhhqYԄhhhhhhhhhh3}hhhhhhhhhhhqYԄhhqYԄhh3}\fF3}3}\fFʁ)zVGB'y\fFzVGB,ezVGB,e,ezVGB'y3}3}Zs3}ZszVGBzVGBp^hh\fF\fF\fF\fF\fFҽ\fFҽҽҽҽhh3}3}ҽh@qqYԢqY@qҽҽqYԓҽҽҽҽҽҽhhhqYԄhhqY vqY vh vqYԄhhqYԄhqYԄhhqYԄhhhhqYԄhqYԄhhhhqYԄhhhʁ){/ E{/ E{/ E3}hhhqYԅʁ)hhhqYԄhʁ)hhqYԄh3}hqYԅʁ)hhhhhhhhh3}\fFh\fFqYԄh\fF\fF,e3}3}3}3}3}h3}ZshhhhbQ hbQ }L3}}L}L}L}L\fF}Lhhhhhhhhh\fFh\fFhqYԒ}Lh@qqYԢqY@q3}$WSF\fF vPPl m$>y $@} $>f$L> $?\X $@e]xGame.ComboSpeedexGame.ComboBerserkexGame.ComboDefensiveexGame.ComboInvisdd[dd]d$d d d d dY $BU \ $|=e7~V/dQ+ku$9:9:$-B?-G@3vؚ~ϊzVGB3}Zs,e,ezVGB3}Zs,e3}Zs3}Zso>+,e3}3}3}ʁ)3}3}_ ._ ._ ._ .VD_ ._ ._ ._ .VD_ ._ ._ ._ .VD_ ._ .3}$WSF3}ؚ3}- =1J3}Zs3} u u3}$WSF3}hhhh,eh,e,e,e,ezVGBJ3}Zs3}Zs3}$WSF3}$WSF\fF|\fFJ v3}- =1J3}Zshhh|||||h|| v v v vؚؚ V V 3}ɢɢɢ3}D(@(n(m(N r"S ]Objective Disabled!V ]Near^ = Team BaseZ $AH$DW0$?T%]Disable Objective.Y%]Disable Objectivec%]Defend Objectiveo']USE`%k(Z0w.w. j$A ]1f SP n $?Fu $De7q,Rp"N9:9:$G2`\fF,]'y||||h,eh|h,eh|h||||ҽҽ,eҽ,eҽhҽҽ||zVGB|hؚ||| n| n|||3}$WSFc"g:c"g:c"g:c"g:h|c"g:h|hc"g:|||c"g:||||||,e||h|||QA_t$||}L|}L'|||h||||||{||{|{#||{||'y|h|h|h|3}|h|||{||| v||h|||}L|}L|| v|ؚ'ؚؚ||ؚؚ|h|||| v|||||3}|ؚ'|||||||| v|{/ E||3}||||h||||||h|h|h|zVGB||h|zVGB|| v||hؚ||'yؚؚ'{/ Eؚؚ'|ؚ3}||~D|h~D|~D||||~D||}L'~D'|~D'||}L$WSF~D~D|'~D'~D|h|}L|~D||~D|||||||||h|||||}L|zVGB}L}L}L||}L'}L}L|||||h|ʁ)|h|}L|||||}L3}3} uzVGB u u|}L|}L}L}L|||}L'}L|}L}L'|h|hqY||}L||h|hqY||}L}L}L}L}L|h}L|h}L}L|||3}|||}L|}L3}|}L|h|h|h|||}L3}|}L|h}L}L,e,e,eʁ)|}L|h|,e,eh|h,e}L|,e||||h|h|}L||,e,e}L,e}L,eʁ)|h,e}L|||}L|}L|}L||}L3}3} uzVGB u u3}Zs}L|h}L}L}L'}L}L|h|h}L}L||h}L||||}L||||h||}L|||ʁ)|h||}L|||,e|h,e|||h|h}L|h|||||h||||||||ɢ|,e|,e||||,e||'yؚؚؚؚ|hؚ|ؚؚ'ؚ{/ E||||h|hqY|||||zVGB||h|h|||zVGB|,e3}=8f=8f=8f=8f=8fؚؚؚ'3}|||3}|||||h|}L|}L||||||||||h|||||3}ؚ'ؚؚؚ'ؚؚ3}ؚ'ؚؚ||||| v| v|h| v|| v| v v v v|| v|| v|ؚ|| v|||h| v||| v|| v|h| v|| v|ؚ v v|| v|| v||\fF|||\fF||||=8f||||||||'y3},e,e3}||||h|h|ؚ}Lؚ|}L3}|}L||ؚ|hؚ|}L'|}L|}L3}|}L|}L||||}L3}|}Lؚ|ؚ| V ||||hʁ)||||||||h|||||3}||3}|||||| V ||| V |||||||||||||||||||3}||||h|||||||||||||||||||3}|h||||||ؚ V V V V V V V V V |\fF|\fF,e,e,e}L,eh,e,ehh,eh,ehhh,ehd'bQ ,eh,eh,eh,ehh,e,e,eʁ)hd'h,e||,e||h|,e|h|h||3}||h|h|3}||h|||||hhh|hhh||||||||hh|hh|h|h||||||,e,ezVGB||||||||||3}Zs||||||||||||||||||||||||3}hhh||||h|h|||||||||||\fF\fFؚ',e,eؚ',eؚ,eh,e|,e}L,e,e,e}L,e'yd'|h|3}||||||||3} Z$?T= supportingS] defendingR] attackingQ] holdingP] Sweeper]"A0Mdn $?e7I+]%n2'Jyy,e,e,e!p!p!p!p!p''3}$WSF g"f*0e7i0N1y 9:9:$GBZ$X53}$WSF'3}Zs- =1 n n n n n n n n3}$WSF'3}$WSF',e,e3}$WSF3}Zs- =13}$WSF'ؚؚؚ3}3}Zs- =1ؚؚؚ3}ؚ3}$WSF',e3}$WSF',e,ezVGB,ezVGB3}$WSF$ؚ,e|\fF n n3}$WSF' nh,ezVGBbQ |,ezVGB'y^!ri,e,e3}3}Zs- =1q|Hx" - =1l D n n}$\C|$@jSx{WSx $@@f$?n:@?i v p$@Bq$AS] t @$Ao$AR:w0u0uGme7e7_ @e7e7(e7e7`e7U+BxB Y7W nh3},e,e,eʁ)3}צ9,e,e,e3},e,e,e3}3}3}Zs3} u,ebQ 3}3}\fF\fF\fF\fF3}$WSF3}3}ZsjW@q@q3}Zs3}Zs@q,e u3}3}|3}|zVGBX5X5X5X5X5X5X5X5X5ҽҽҽҽҽҽҽҽҽ,eҽҽҽҽҽҽhhqYԄhhqYԄhzVGBzVGB?4P~ |#y | $?{ VZc b ` _ X T K $;FP $AJ $DG $Dt$33>F $>k6$>D $pBC $pBB $BA $AR~(n}$B|$@WSa (I o$BR:w Nji$Bh$ @e7e7ne7e7V e7}1R!K@( V ɢؚ V V V V V V V V V V V V ؚ V V V V V V V V V V V V ؚؚؚ V V V V V V V V V f n o s $?e7M+`)I v7z|,e,e|| v v|| v v v vBl Pvts$?z Y[2\2Xe7e7re7 e7je7e7r e7e7\e7e7fe7e7ne7 e7e7e7E e7e75e7W/ozT9:9:$GBJX5?4 n n3}ؚؚh3},e,e,e,e,eh,e|\fF,e3}Zs3}9uhh|hhhhhh|h|}L3}h|}L n3}Zs- =1- =1zVGB- =1zVGB- =1zVGB3} nzVGB nzVGB3}3},e,e,e,e nؚؚ,e n n,ezVGB,ezVGB3},e ng $AD KuE1I e7e7ce7e7@ e7e7 e7e7y!+e7H(e7e7He7e7re7S,W!r2ay׿e]\fF\fF\fF\fF\fF\fF||=8f|=8f| uʁ) u|QA_t$ u uʁ)| v|!p'!p!p!p\fF\fF\fF\fF\fF\fF3}\fF\fF\fFؚؚؚ\fFؚؚؚؚؚ'ؚؚؚؚؚؚؚؚؚ'ؚؚؚؚؚؚؚؚؚؚؚ'ؚؚؚؚؚؚؚ\fF\fF\fF\fF\fF\fF3},e,e,ezVGB,ezVGB,e\fF\fF,e\fFؚ|\fF\fF\fFhhzVGB}L'\fF\fF\fF\fF\fF\fF\fF\fF\fF\fFؚ\fF\fFؚ\fFؚ\fF\fF\fF\fF\fF\fF\fF\fF\fF3}Zs3}9u\fF\fF''\fF''\fF\fF\fF\fF\fF\fF\fF\fF\fF|||\fF##|## ~]$]$e7e7^e7},Y22!p@Es6)X8||||||||||||zVGBm$>f$L>e7e7Qe7e7Xe7V+TXB6.$WSFZsввввo>+ n#hh@qʉ3}3} _zVGB3}=8f=8f=8f=8f=8fzה_zה_3}3}zהzהzהzה3}3} u3}3} u Kf$@r0$?C(L"`5~] Min Players~Delay at End of Game~  Bot Mode~Allow Private Chat|&]ZXBots fill server if necessary to make sure at least this many participant in the match.|&JHHow long to wait after the match ends before switching to the next map.|&<;Specify how the number of bots in the match is determined.|&geControls whether clients are allowed to create and join individual private chat rooms on this server{&]650;Specify Number;1;Use Map Defaults;2;Use Bot RosterZ1MNumber Of BotsD1] Min Players\1]98Specify the number of bots that should join your match.}0][YBots fill server if necessary to make sure at least this many participants in the match.a-MSpecify Numbera-Use Map Defaultsa-Use Bot Rostera-Players vs Botsw]UnrealGame.UnrealPlayera&v:e7N+JUA$~(9:9:$9:9:$9:9:$G 6x%IPÍ uҽҽҽ|\fF|3}3}ZsJFHezVGBzה___3}3}zהzהzה3}3}3}3}zVGBzVGB?4hzVGBʁ)u)h nh3}3}9u3}hu)h3}hhh3}hL3}3}}L3}}L3}}L3}3}h3}hh3}h3}h3}hhzVGBzVGBp^3}3}3}3}Zs3}$WSF3}$WSFzVGBu) n3}$WSF|3}3}3}3}3}3}3}u) nu)3}=8f=8f=8f3}$WSF3}_ _ _ _ h3}=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8f=8fPC1]UnrealGame.FemaleAnnouncerJ1]UnrealGame.MaleAnnouncerq("`/$zw0]$#UnrealGame.UnrealPlayerChatManagerY $B|=e7e7Ze7e7Be7e7pe79R,BXC6M )B9u3},e,ezVGB,ezVGB,e,ezVGB3}|zVGB|zVGB- =13}'yؚؚ{/ Eؚ uzVGB uzVGBJ uG8&D''''3},e,e u,eвввв'y'y- =1J- =1Jʁ)- =1Jʁ)ʁ)- =1Jʁ)- =1J- =1J,e,eh,eh,ehqYԃ,e,e}L,e3}ɢ{{,ehؚ,ehɢ{{#,e,ezVGBؚ,e3}Zs u''''3},e,e'',ezVGB,ezVGB u u,ezVGB,ezVGB u u,e3},e,e'' u u,e3},e,ezVGB,ezVGB'''',ezVGBJ,ezVGBJhphh,ehh,eh|,ehh,eh,e,e}Lo>+hhhhzVGBh,eh,e,e,e,e,e,ezVGB,ezVGB,ezVGB,ezVGB,ezVGB,e,ezVGBX5,ezVGB,ezVGB3},ehhzVGB,ezVGBh,ezVGB,ezVGB3},eo>+,e,e,ezVGB,ezVGB,ezVGB,ezVGB3},e,e,e,ezVGBJ,ezVGBJ3},ezVGBJ,ezVGB,ezVGB,ezVGBJ,ezVGBJ3},ezVGBJ,ezVGB3},ezVGB,ezVGBJ,ezVGBJ3},ezVGBJ,e,e,eh,eh,eh,eh,eh,eo>+,e,ezVGBo>+zVGBzVGBJq}oB- =1ʃ,e,ezVGB,ezVGB,ezVGB,e,ezVGB,ezVGBJ',e,e3}''3}''3},e,e,ezVGB,ezVGB,ezVGB,e'''',ezVGB,ezVGB'',eh',eh3}3}''' uzVGB uzVGBJ'',e,ezVGB,e,ezVGB,ezVGB uzVGBhhzVGB uzVGBzVGB,eʁ)3},e uzVGB uzVGB- =1 u u u uʍ uzVGB- =1,e,e3},e,e,ezVGB,eo>+zVGBJzVGBJ3}''- =1zVGB''- =1- =13},e,e,ezVGB- =1,ezVGBzVGB,e,e3}zVGBzVGBzVGBzVGB%IP'y'y3}3},ezVGBJJ,e'yؚؚ uzVGBJؚ u uh''''- =1- =1'''''' uzVGBJ'''''zVGB3},e,e,e,ezVGB,ezVGB,e,e,ezVGBzVGB,e_ ._ ._ ._ ._ ._ ._ .|||\fF|zVGB|h||||h|hzVGB|| v|h|\fFؚ|\fF|\fFh|h|\fF|\fF|\fFh|h|h|\fF|| v|h|\fFؚ|h||\fF|\fF,e||\fF,e|3}3},e|,e,ezVGB uzVGB,ezVGB|h|,ezVGB,e3},e|,e,ezVGB uzVGB,ezVGB|,ezVGB,e3}3},e|,e,ezVGB uzVGB,ezVGB|,ezVGB,e3}3},e|,e,ezVGB uzVGB,ezVGB|h|h,ezVGB,e3},e|,e,ezVGB uzVGB,ezVGB| u,ezVGB,e3},e,e,ezVGB uzVGB|,e,ezVGB,e||,e'''y- =1'y'y'y'y C B bz " B($>QQM ]XEffects.RedWhispM XEffects.BlueWhispx ] Near theb1] Bare Handedf.nf.yP/GP/K~.o~.QO]Bots Balance TeamsOPlayers Balance TeamsOFriendly Fire ScaleOCross-Team Priv. ChatOMax Team SizeW%]<;Bots will join or change teams to make sure they are even.W%>=Players are forced to join the smaller team when they enter.W%MKSpecifies how much damage players from the same team can do to each other.W%^\Determines whether members of opposing teams are allowed to join the same private chat roomW%('Maximum number of players on each teamc/iwIf you miss a player's chat message, you can use %INGAMECHAT% to display a box of all chat messages you have received.bUse the link gun alt fire beam to link up with link gun carrying teammates. While linked, the teammate will receive a significant power boost to their link gun.KYou can toss your current weapon for a teammate by pressing %THROWWEAPON%.~Teammates who have a link gun equipped will have a green team beacon above their heads instead of the standard yellow beacon.0Press %VOICETALK% to voice chat with your team.TPress %TEAMTALK% and type your message to send text messages to other team members.sThe text-to-speech feature that makes the game read text messages aloud can be enabled in the audio settings menu.r $Aq $@p $@~6] lllllllamas~6bye~6gg~6gg~6  gg everyone~6Teams~6omg~6 dammit!~6my team sux0rs~6 ggB7]wootB7 DENIED!B7  gg everyoneB7ggB7ggB7PANTS!B7ownedB7 Booyah!B7W00T!B7 oh yeah!6]Take that to the bank, punks!6omg, so owned.6Our Victory, Your Defeat6You know, practice might help6You suckas got served6That was pathetic6  Ya mamma!6pwned!6  u r teh suk6 Humans need better AIA7]was using an aimbotA7-,Take a screenshot, this wont happen again.A7 crappy mapA7this server suxA7  Campers.A7Omg wtf wallhacking mofosA7$#Where's Malcolm when you need him?A7  my team suxA7OMG Epic plz fix kthxbyeA7 Vwvwvwvwvwvwvwvwvwvwvwvzxcjjj@7-:)@7;)@7haha@7LOL@7lol@7ROFL@7rofl@7werd@7ahaha@7 omga.B"D"c-tc-Ol "eSt Q]%$XInterface.ScoreBoardTeamDeathMatcho]Teamy"<a&G8c ]hfTwo teams duke it out in a quest for battlefield supremacy. The team with the most total frags wins.e7e7W#e7e7}e7e7z6e7e7Qe7e7e7e7X e7e7u e7e7Z6@e7e7@e7e7e7e7e7e7V!e7e7P e7e7W e7e7Ze7$B0]Lx6i9u$WSF_ ._ ._ ._ ._ ._ .,e3},e,e u,e u,e,e,e,e,e,e=8f,e=8f,e3},e u,e,eввввввввввввв|ɢɢ||3},e u u%IPÃ,eh||3}||}L|}Lh|}L||h||3}3},e3}3}3}h3}Zsh3}h3}hh _hhhqYԄhhqYԄhhh _ _| _ _,ezVGBzVGBzVGB,e,e,ezVGB,e,e,ezVGBp^,e,ezVGBp^,e,e,e,ezVGBo>+o>+zVGB3},e,e,e,ezVGBzVGB,ezVGB3},e,e,e,ezVGB,ezVGB,e,e,eq}oBq}oBbQ q}oB3},e,e,e,ehɢ,ehɢ,eh,ehɢ,eh,ehɢɢ,eh,e- =13}3},e,e uu)ʍ uʉ3}ʁ)3},e u,e3}3},e,e uu)zVGB3},e,e,e,ezVGB u,e- =1- =1- =1- =13}3}3}3},e,e,e,e,ezVGB,ezVGB,e3}3},e%IPÃ,e- =1zVGB- =1zVGB3},e,e,e- =1,ezVGB u u,e3},e,e,ezVGB,e- =1 u u,e,e,e3}- =1|!p'!p|!p'!p!p!p|zVGB||||''!p!p!p n'''- =1- =1- =1- =1- =1- =1- =1- =13},e3},ezVGB3},e,e,ezVGB,e u,ezVGB3},e,e,ezVGB,e,e,e,ezVGB3},e u u,e,e#,e,ezVGB3} n||zVGB3}|3}3}%IPÃ,ezVGB,e,e%IP%IPÉ3},e,e,ezVGB,e- =1%IPÉ3} uzVGB3}3},e,e,ezVGB,e%IPÉ3},e,e,ezVGB,eo>+3},e,e,ezVGB,ezVGBzVGB,e,e3},e,e,e,ezVGBzVGB,ezVGB,e3}- =1ʊzVGBzVGB,eʁ)3} uzVGB u u u u u,e,ehh@qhh3}3}3}3}3} uzVGB|zVGB||K v 3}3}3}h u,e}L}L}L,e,e,ezVGB,ezVGBh,e,e,e%IPÛp,e,e,e=8f,e,e,e,ezVGB,ezVGB,e,e,e,eh,eh,eh,e,e}L}L,e,ezVGB,ezVGB3},e3}3}'- =1- =1- =1- =1- =1- =1 y "x "w "Lv t B"p $@e$"s "r `D"c-Jc-Ig.Pg.v|]Mr_|  The_Real_|Evil_|Owns_|Evil_X  _is_lameX_sucksX  _OwnsYouX_jrX 's_cloneQ]Net Start DelayQMin. Net PlayersQRestart DelayQTournament GameQPlayers Must Be ReadyQForce RespawnQAuto Adjust Bots SkillQ Allow TauntsQSpawn Protection TimeQ Allow TranslocatorQ Use Team SkinsQ Use Map DefaultsQ Late Entry CutoffQ Enable Player HighlightingH%]:9Delay before game starts to allow other players to join.H%87How many players must join before net game will start.H%QOHow long the server waits after the end of a game before loading the next map.H%Tournament GameH%>=If enabled, players must click ready before the game starts.H%87Players are forced to respawn immediately after dying.H%KIBot skill adjusts automatically based on how they are doing against you.H%-,Enables players to use the recorded taunts.H%SQSpecifies how long players are invulnerable after they spawn (unless they fire).H%5 4If enabled, players will start with a translocator.H%; :If checked, players will have brighter red or blue skins.H%2 1Use default number of bots specified by the map.H%p nSpecifies the maximum number of lives a player can have lost before new players can no longer enter the game.H%2 1At a distance, players have a team colored glow.g1]You destroyed aG$@g $ Af $e $@d $]Eepers Bellheimer  Shanesta EpicBoyTurtle  Talisman  BigSquidCedAndrew DrSin The_Reaper ProfessorDeath DarkByte JackLankii  MarkRein PerninatorSteveG  Cpt.Pinhead  ChristophTimb,]Shivab,Aresb,Reaperb, Samuraib,Lokib,  Cuchulainb,Thorb,  Talismanb, Paladinb, Scytheb, Jugularb, Slashb, Chiselb, Chiefb,Primeb,  Oligarchb,Caliphb,Duceb,Krugerb, Saladinb,  Patriarchb,Wyrmb, Praetorianb,Moghulb,  Assassinb,Baneb,  Svengalib,  Oblivionb, Magnateb, Hadrianb,Dirgeb,Rajaha,]Shonnaa,Athenaa,Charma,Voodooa, Norannaa,Ranua,Chasma,Lynxa,Elyssa, Malicea, Verdicta, Kismeta, Wyrda, Qiraa,Exodusa,Grimma,  Brutalitya, Adamanta,Ruina, Moshicaa,Demisea,Sharaa, Pestilencea,Quarka,Fionaa,Ulannaa,Karaa, Scourgea, Minervaa,Woea,Corala, Torment}&]GUI2K4.UT2K4PlayerLoginMenuf1iuBEvery weapon has two firing modes, a regular fire mode when you press %FIRE% and an alternate fire mode when you press %ALTFIRE%.>Press jump again at the peak of a jump to get an extra boost.dPressing a movement key twice in rapid succession will make your character dodge in that direction./You can also dodge off walls while in the air.EYou can change weapons by pressing the associated weapon number, or scroll through your weapons using %NEXTWEAPON% and %PREVWEAPON%.oThe shock combo is a powerful explosion created with a shock rifle by shooting a shock ball with a shock beam.WWhen loading up rockets using the rocket launcher alt fire, press the regular fire button before releasing the rockets to fire them in a tight spiral.VYou can toggle the scoreboard display on or off at any time by pressing %SHOWSCORES%.zYou receive adrenaline for killing enemies and other accomplishments. Once your adrenaline reaches 100, you can start an adrenaline combo by using the correct movement key combination.4%SHOWSTATS% will bring up a personal stats display.DYou can shoot down enemy Redeemer missiles with a well placed shot.KPress %TALK% and type your message to send text messages to other players.cYou can play taunts or other voice messages through the voice menu by pressing %SPEECHMENUTOGGLE%.GWhile crouching (by holding down %DUCK%), you cannot fall off a ledge.rSpSlp o/$?n ] XGame.xPawnQ]! XInterface.ScoreBoardDeathMatchr]XInterface.HudCDeathMatchk ]XInterface.MapListDeathMatchR-DMo-DMf" y"^"_]UnrealGame.DMMutatorw]XGame.XPlayerc ]HFFree-for-all kill or be killed. The player with the most frags wins.e7e7| e7 e7e7e7\+~+\VC(&- 9:9:$9:9:$G2=8fzVGBKEGKEG,e,e,eh}L,eJ1'iJ1'i3}3}$WSF e7e7e7e7Pe7e7r e7e7e7e7[ @n[(e7we7e7de7e7We7e7L8@e7e7Je7e7@e7e7Te7e7VKe7ie7e7e7e7e7e7je7e7Ge7e7He7e7r e7e7a e7d/K H n9:9:$G@2STؚ|h|\fF||n $ Be7e7Me7e7Oe7e7}e7e7Re7e7{ e7e7@e7e7r e7e7t)e7e7oe7e7oe7e7De7e7k(e7e7Se7P/y.b2a/@q`03}$WSFpQ@e7e7\e7s+S/" c"g:ȵ3}$WSF$WSF$WSFc"g:c"g:c"g:c"g:3}$WSF$WSFH$e7,lI2Hd'׿e]|h|hɢ|hɢ|h|hɢnwwgɢ||hɢnwwgɢ|h|hɢnwwgɢ|hɢnwwgʁ)|h|h||h|h|h||h|h|h|\fF|h|hʁ)|h\fF|\fFʁ)\fF||ʁ)|| ":BC"C"B"C""""C"" B" C" " CC" C"HC"HG $;De7e7e7e7r@e7e7L@e7e7He7e7U@e7`/e7}e7e7ze7e7~e7e7we7e7ie7N0D!@2p=y$^!ri^!ri ~^$e7e7P e7e7f e7 e7a e7e7s<e7e7je7e7ye7e7Je7e7[e7e7@e7e7Ue7e7Le7e7e7e7@e7T/pOk~Dh|||h||||||hqYԄhhqY|hh n nh|||hhhhɢhhhhhhh||h,ehh,enwwgbQ bQ hhh,enwwghhh,ehh,enwwghhhh,ehhhhhh||h,enwwgbQ bQ hhh nh nh,ehh,enwwghhhhh,e nhhhhhh|||h|||||hqY||hhhh,ehhhhhh||hh,ebQ bQ hhhnwwgnwwgbQ bQ hhh nh nh,ehnwwgh,enwwgnwwgnwwgɢnwwgɢhbQ bQ hbQ bQ hʁ)ʁ)hW:$tI$tI$tIW$tI$tI$tIW$tI$tI$tIW$tI$tI$tIW$tI$tI$tIW$tI$tI$tIW$tI$tI$tIW$tI$tI$tIe7e7e7e7Ve7e7e7e7ae7e7T e7e7ye7e7_e7e7K'e7e7q e7e7e7e7e7e7Z$@e7e7z@e7e7ue7e7Oe7e7S@e7e7me7 e7' e7e7e7e7T+@e7e7D e7e7fe7e7e7e7Ge7e7le7 e7{e7e7L e7e7d e7e7[e7e7z e7_0L!2[^!ri\fFhhzVGB|hh|h|hqYԄh$ؚh|zVGB$ؚ$,ezVGB$||$ؚ V V V V V V V V V ||||$||||zVGB$|$'|||$|h$ʁ)|h$ʁ)$$||h|hzVGB|||3}3}|||||$$||$3}$$ؚ||$$$||3}||||$$$|$|$ؚ3}|$$|$$|||$$$ؚ|$,e$ n$ n$ n}L||h,e||,e$,e$||$|||||,e,e,e,e,e,e,e,e,e||,e|||||||||$ n||,e|h,eh,eh|h,eh,e$,e$|||||$$ؚ$ؚ3}$$ؚ$ʁ)$ؚ$ؚ$ؚ$ʁ)$ؚ$ؚ|h$ؚ|h$ؚ$|h$ʁ)$ؚ$ؚ$ؚ|h$ؚ|h$ؚ$|h$ʁ)$ؚhhzVGBh|||h||$'|||$||h|hzVGB|||3}3}|||$$$|$|h$|h|3}||||||||$$ؚ|h'y|h|h|h|||||h|||$||$|$||||||h$$ؚ$|$|h$ʁ)|zVGB|h$ؚ'3}ɢɢɢɢ{{#{#|{{#{{#{#|{{#{#|ɢ|ʁ)|h|hؚ'$,e$,e3}'p='p=3}||||$||hʁ)||||}L3}|}L||h||h|zVGB$|ؚ|||||hʁ)|}L|hʁ)|||||||||h||| V |||||||||||||zVGB|$$ɢ| ]"e7e7Ye7e7v e7e7Xe7e7{e7e7le7e7e7ce7te7e7o#e7e7we7 e7Me7e7e7`e7}e7e7oe7e7e7e7De7 e7Qe7e7G&e7e7R&e7e7_e7e7we7e7Oe7e7e7e7Te7e7le7e7^e7e7j e7e7pe7e7e7e7e7e7e7e7~ e7e7e7 e7@e7e7^e7e7n e7e7Fe7e7e7e7ve7e7b e7e7e7e7We7e7fe7e7kK e7e7e7e76e7e7xe7e7qe7e7j e7 e7^Ie7e7De7e7Ue7e7`e7e7r)e7e7ge7e7De7e7Re7e7Re7e7e7e7e7e7e7e7e7e7y e7e7e7e7x7@e7e7e7e7be7e7e7e7ge7e7Ye7e7]e7e7F2qe7e7e7`@e7e7Me7e7Ie7e7A@e7e7cIe7e7N e7e7|e7e7ie7e7f e7e7o e7e7e7 e7We7 e7xe7e7xe7e7Ye7e7Ke7e7Je7e7Q@e7e7e7e7Ke7de7e7Je7 e7TIe7e7j,e7e7e7e7oe7e7we7 e7~e7e7{ e7e7Ye7e7he7e7e7e7De7e7e7e7f2e7e7tWe7e7]@e7 U/V)dQA_t$ v}L}LPjS\ Se7e7we7e7e7e7v1e7e7i e7e7Se7e7ge7e7e7e7O e7e7J  e7e7ke7e7@e7e7IKe7C e7e7@e7e7Ve7e7e7e7e7e7He7y,[!ndqYAɢH e7e7w#A e6mjwA *A 3SQ!A UDMRandomjA URandom Gj1Zo2efF\fFhhzVGBhؚh|hh|hh|hqYԄh|zVGBؚX5,ezVGBX5ؚX5|||||||X5|X5X5X5|X5 nX5||||X5|||||,eX5 n|X5 n||h,e||||,eh,eh|h||,eh|h|,e,e,e,eh,e,e,e|,eh|h,e,e,e,e,e,e,e,e||h|||||||||,e||||||X5X5|X5|||3}3}||||X5X5ؚ|||X5X5X5X5ؚX5ؚX5h|hbQ |hbQ |ʁ)|h|h|ʁ)|h|h|ʁ)|h|hqY|||||hqY|||h||||hؚ|hؚ|h|zVGBX5||3}||||hؚ|h3},e| u u,e|||h|hbQ |||h|h|h||hqY|||'||||||||||hؚ|||hhhhh,eh,ehhhhh||h,e|h,e|h,e|hhhqY||hqYؚ|3}|3}- =13}- =13}- =13}9u'9u'9u'J'JJ'9u9uؚ|hqY|hؚؚؚ'X5,eX5,eX5||hX5|X53}'b 'b 3}||||X5||ؚ|h||||X5|X5|X5ɢ| k`kAZ$=]"e7e7e7e7je7e7Ie7e7{e7e7q<e7e7VFe7e7xe7e7we7Ne7Oe7e7:e7e7je7e7e7e7Ee7e7Me7e7^ e7e7e7e7Je7e7we7e7e7e7;e7e7ke7 e7^%e7e7]e7e7@e7 e7W%e7e7Te7e7@e7 e7Ce7e7Se7e7Ge7e7e7ce7e7e7@e7e7ke7e7ue7e7s e7e7Se7e7|e7e7l'e7e7| e7e7e7e7Be7e7ne7e7c#e7e7Pe7e7h'e7e7T e7e7O e7e7e7e7[e7e7e7e7Ue7e7[ e7e7he7e7Se7e7e7e7je7[/WJ2TdW{y||=8f|ؚ uʁ)ؚ,e uʁ)ؚؚ|\fF\fF\fF\fF\fF\fF\fFST\fF\fFST\fFؚSTؚ'ؚؚ'ؚؚST'ؚ'ؚؚST'ؚؚؚؚؚؚؚ\fF\fF\fF\fF\fF\fF\fF\fF\fFؚ'\fF\fFؚ'\fF\fFؚ'ؚؚ'ؚ\fF\fF3}\fFؚؚ'ؚؚ ~T$e7e7ge7e7N)e7e7oe7e7e7e7Y#e7e7e e7e7e7e7SOe7je7e7e7e7\e7e7qe7e7se7e7~ e7e7nJe7ce7qe7e7e7ce7e7e7ye7e7}e7e7ce7e7e7e7iIe7e7e79e7e7e7ce7e7G e7e7{e7e7ee7e7e7e7e7e7e7e7e7e7e7e7q@e7e7Ne7e7e7e7e7e7Me7e7H@+e7e7e7qe7e7e7e7se7e74e7e7Ue7e7Ce7e7Ee7e7Ee7e7e7e7e7e7Ge7e7r"e7e7ue7e7e7e7ve7e7Ae7e7t2e7e7e e7e7e7e7Oe7e7e7e7Ge7e7|e7e7_Kq $"K #K Ge7zGe7e7}e7e7\e7e7xe7e7ie7e7M e7=e7Fe7e7e7e7e7e7OGe7 e7e7e7ve7e7e7e7ne7e7\ e7e7e7e7e7e7|@xe7e7fe7_@e7e7e7 e7X e7e7i e7e7_6e7e7Be7e7P e7e7be7e7e7e7A e7e7h@e7e7ke7e7V@e7e7hKe7e7e7g;e7e7Ke7e7x+@e7e7e7e7e7e7l e7e7e7e7e7e7[e7e7e7e7e7e7t e7 e7@e7e7J+e7e7ke7ae7Z( n e7ne7!e7Ne7e7\e7e7[ e7e7M e7e7`e7!e7e7e7Pe7e7e7e7@Lh* +r.Q* A&'Ar*'o TNeed weapon or ammo'w. *w *r.Q*Y-'} a' -w.*w.Q*w.QFF.l((  .r-w*'((-9?&r.Q*r.*9:D%q9HD!q9;E!w*q9Dq9HE-~+- =1zVGB''''- =1- =1- =1'p=$ʁ)3}3},e,e u u u uzVGB uzVGB- =1 uʍ uzVGB- =1,e$ؚ$,ezVGB,ezVGB$'p=$'p=$$$'$$'p=$'p='p= _zVGB3}|^!ri$,ezVGBJw0D$,ehzVGBJʁ)_ ._ ._ ._ ._ ._ ._ . ~/ivYou can use %BASEPATH 0% to see the path to the Red Team base and %BASEPATH 1% to see the path to the Blue Team base.Firing the translocator sends out your translocator beacon. Pressing %FIRE% again returns the beacon, while pressing %A:TFIRE% teleports you instantly to the beacon's location (if you fit).\Using the translocator to teleport while carrying the flag will cause you to drop the flag.gPressing %SWITCHWEAPON 10% after tossing the Translocator allows you to view from its internal camera.NPressing %FIRE% while your %ALTFIRE% is still held down after teleporting with the translocator will switch you back to your previous weapon.bSA { QpQpu m'a.SG$@R]CTFo]CTFy"c mMKYour team must score flag captures by taking the enemy flag from the enemy base and returning it to their own flag. If the flag carrier is killed, the flag drops to the ground for anyone to pick up. If your team's flag is taken, it must be returned (by touching it after it is dropped) before your team can score a flag capture.e7e7X&aRc-(t-a Ge7q e7e7Q3e7e7L e7e7be7e7aIe7e7n%e7e7@e7e7f e7e7W e7e7D%e7e7e7e7Be7e7m$e7e7E e7e7Re7e7V e7e7\=@e7e7oe7e7R@e7e7e7e7W e7A2r#j2_  ׿e] u u H$Ae7e7ce7e7e7i1M!q2b yfFfFfFfFؚؚؚؚ'ؚX5X5 nzVGBX5 n|fFX5 n ~f$e7e7Oe7e7{e7e7y e7e7qEe7e7e7e7o e7e7e7^e7e7e7e7e7Ke7e7l e7e7~1e7e7e7e7ke7e7e7e7A e7e7e7e7e7e7Ke7e7|e7e7z :khq!n Ge7he7e7Fe7e7_YXc ,a  OYq![ Ge7} e7e7e7e7]e7e7e7e7e7e7ie7e7e7e7te7e7be7e7ke7e7e7$e7Xe7e7e7e7m9@e7e7Se7F/F]2K v ׿e]Zs e7e7Ve7e7a e7e7m0e7e7@@e7e7O e7e7ue7e7Te7e7K9e7e7Ne7e7e7e7h^/f-UJ(L*C?-K(ycF*7D%F/(Q%-O;i-(DE* Ge7Re7e7@e7e7e7e7e7^e7Me7e7we7e7Ie7e7e7V,vF2_ Hl F dSe7e7pe7e7e7e7`e7e7|e7e7|e7e7{e7e7e7e7e7e7e7e7@e7e7A e7e7d@e7e7xe7e7te7e7iYe7oe7e7e7e7e7e7je7!e7se7e7e7e7Ae7e7ae7e7 Ie7H"V@9Tgaagm7WVgMWWgg Ge7Xe7e7bIe7[e7e7a9@e7e7e7e7rKe7e7e7e7Ye7e7V<e7e7B e7e7e7 e7Z8e7e7Ce7e7 Z9WT ~8T--% vr* 5W 9?,9:9:$9:9:$L>> IW  0I9?r.W* j  MtyCW  6C6MCM333? $m9?%r.W*v;Im$v;G=>"j9?%q!i f9?,9?,dj9?%q!i nt9?%t9?-YIrt'-YIrt(-YI m9?%w.W*-'-' Ge7e7e7e7e7Oe7e7e7e7e7e7e7e7e7e7e7Ce7S e7e7De7e7e7e7de7e7u(e7e7m#e7e7t(e7e7S*|hN6-w.%|*.%|-T S|- |a/!j {||a | Ge7e7e7Ae7e7^ e7e7e7e7me7e7h e7e7k e7e7a e7e7Ie7e7A(@e7e7_e7e7e7e7S e7e7]e7e7ae7e7~Ee7e7de7e7xe7e7e7e7Xe7e7s$e7e7~0 e7Te7e7F%e7e7e7e7y%e7e7e7e7e7e7g @e7e7]&e7e7He7e7#e7e7L%e7e7J#e7e7d@e7e7Ce7e7e7e7^;@e7e7e7e7we7de7Je7e7D e7 e7RMe7e7G e7e7we7e7e7e7L e7e7me7e7M e7e7Ce7e7Ae7e7e7e7Y&e7e7^=e7e7V e7e7~e7e7|%e7e7Y e7e7n6e7e7g3 e7e7X%e7e7ae7e7Ce7e7@e7e7@e7e7je7e7Ue7e7a  e7`e7K e7e7e7i e7e7Be7e7k@e7e7g%e7e7Ke7e7E@e7e7l e7e7e7e7u0@ e7{@ e7u#e7e7e7e7We7e7O%e7e7e7e7me7e7be7e7e7e7ZMe7e7A e7e7L6 e7B0@ e7K@ e7@e7e7Ye7e7f#e7e7@e7e7D'e7e7De7e7P'e7e7We7e7e7e7e7e7e7e7@e7e7e7e7Re7e7ce7e7`b#D6$ Ge7e7e7m e7e7Ze7e7ue7e7_#e7e7ge7e7e7e7te7e7v@e7e7Ge7e7Z'e7e7se7e7e7e7We7e7ge7e7re7e7m)e7e7Jr'v  Ge7we7e7Le7e7e7e7ne7e7e7e7c e7e7g e7e7c@*e7i @*e7e7e7O$e7e7G$e7e7] e7e7e7e7g(e7e7B$e7e7\ e7e7y#e7e7e7e7_ e7e7se7e7ue7e7e7e7L#e7e7 e7e7Ce7e7L"e7e7e7e7e7e7{e7e7e7e7e7e7Ie7e7I e7e7e7_ e7e7e7^Ae7v;e7e7e7e7E e7e7[e7e7Ne7e7}Fe7e7^)e7e7e)e7e7p8e7e7QJe7 e7c"e7e7e7e7~e7e7} @e7e7e7e7WIe7| e7e7qe7e7fe7e7Se7e7Re7e7]e7e7e7e7e7e7u e7e7R*e7e7e7!e7{Fiq 4qGe7g e7X*t1w 9:9:$G@h1qiB3}3}3} u,e,eh,eh,eh,e,eh,e,e,e,e,eʁ),eh,ehi "j "e$?e?c$BcB`$`]$] #L \$\B_$pA_AN $PA\0Q R xq JH$ AE Y i me7e7c*e7e7ie7e7k*e7e7REe7e7ee7e7qe7e7e7e7Re7e7te7e7O TH?|K=!T-VT{{wT*r.QT*T'eT-SMBT?hT'FrT*T- T TT'FrT -RM!$T( Ge7Ke7e7Te7e7j e7e7we7e7r:e7e7ie7e7e7=e7{e7e7g e7e7n:e7e7de7$e7e7e7u> e7e7r,e7t,`!E 2Bl h v|\fF|e7e7He7e7e7e7J!e7e7we7e7e7e7Ne7e7Ge7e7\ e7e7} e7e7O@e7e7L@e7e7e7e7e7e7Le7e7Ie7e7T e7e7e7e7e7e7qe7e7Be7 e7Ne7e7Ke7e7e7e7zM@e7e7t=e7e7{+e7r=@e7H/L)_2^k 6nx@ u uzVGB u uh u uzVGBzVGBzVGBzVGBzVGBzVGBzVGBzVGBzVGBzVGB3} uhP M ]'s killing spree ended byK ]*)was looking good till he killed himself!J ]+*was looking good till she killed herself!F]is on a killing spree!Fis on a rampage!Fis dominating!Fis unstoppable!F  is Godlike!Fis Wicked SICK!MKilling Spree!  Rampage!  Dominating! Unstoppable!  GODLIKE! WICKED SICK!~,u~,s~,L~,H~,w~,N_"e7e7v6e7e7k@e7e7i e7e7_e7e7RDQQ8q2aQ. Q]'n.=QQ9?&q!MQb@rc*cQ| % | 7jr| jQ | 7j7j&7j&jQ Ge7B e7e7ae7e7ne7e7Ie7e7ke7e7~e7e7F<e7e7e7`0x)~2m@x@JzVGBzVGBJJzVGBzVGBJzVGBzVGBJJzVGBzVGBJJzVGBzVGB u uJ uJ uJP d ]returned the blue flag!a ]returned the red flag!^ ]The blue flag was returned!] ]The red flag was returned!\ ]captured the blue flag![ ]captured the red flag!Z ]dropped the blue flag!Y ]dropped the red flag!W ]took the blue flag!V ]took the red flag!^^^K.qK.zs.rs.{t.pt.RXU$=e7e7e7e7ae7e7we7e7te7e7e7e7e7e7e7e7e7e7Ve7e7@e7e7d e7e7c e7e7a e7e7hEe7e7\e7e7C2e7e7Ye7e7e7e7ue7n1t#l2CHbo>+,e,e,e}L,e}Lhv0,e,ehv0,eo>+ e7e7`2 e7Xe7e7r2e7e7e7e7e7We7B2CWi64J!8.ɛ@?@?* uPK[ e7e7Le7e7e7e7e7e7Z2e7e7}e7e7e7!e7Ie7e7e7e7Te7e7UOe7qKOe7@2fI/lwY* wYg&gR wJN*wKEN*%ffgY{@NrY*f9?,gR rgY9:9:$f?w.Y*29:9:$w.x<Y*C .YC 9?,gg]wY*Y-]wg*g-*g Y 9?Xf9D9?f\B? ף=C f9D9?f>>C 9D9?fY Ge7MOe7l(I-S-l Ge7We7e7[ ze71EJʤFgWewg*ge%gg-'-d wE* wEWEMwE*wE*9Ea/!EDg!M9=E \E(( A!VEDg!M9=E \E(' A!VEWrE* rW* C- (Ea/!Wa/!Ea/!cW.E.W'CWa/!cW.W.E( Ge7\7@2e7e7e7UG=lAzUlX-l9bbAdjustSkillJ%bAdjustSkill$$Check 'lQbSpawnProtectionTimeJ%SpawnProtectionTime$$Text8;0.0:30.0 'l>bLateEntryLivesJ%LateEntryLives$2$Text3 ''l?bbColoredDMSkinsJ%bColoredDMSkins$$Check 'lEbbAllowPlayerLightsJ%bAllowPlayerLights$$Check 'l7bbAllowTransJ%bAllowTrans$$Check 'l9bbAllowTauntsJ%bAllowTaunts$$Check 'l;bbForceRespawnJ%bForceRespawn$$Check ''lGbbPlayersMustBeReadyJ%bPlayersMustBeReady$$Check ''lAbMinNetPlayersJ%MinNetPlayers$d$Text3;0:32 ''l5bNetWaitJ%NetWait$$Text3;0:60 ''l=bRestartWaitJ%RestartWait$$Text3;0:60 ''  Allb G e7P6e7e7\@2e7e7e7z@e7e7e7e7|e7e7b@@ce7e7e7 ]Tj 24G.TTrG*G- G-tG- GKGJrTp rToG@FG9? w*-w*Ir6 6T G9?q  T q G$tIq 9? )b$T  G@Fq ,G9?, T b$T  G9?'G@ Ge7fe7e7ae7e7ie7e7[@e7e7[e7e7he7e7\e7e7\e7e7oe7e7s=e7e7pe7e7We7e7e7e7 e7e7L+e7k e7e7we7e7<e7e7M@+e7M+e7e7e7Ce7e7aHCA(4 T\%%s9D?9?\9?&&p9D?9?\9?&r%s%&p%A%A,AAAaA[A7AAAAy%W &&W %%|&|a Ge7C+e7o0t0f^ Ge7q0e7e7n0e7e7eP+e7z {~X5P6@ 69D9?9D9?@ 9?6?9?@ 9?6ծL>~ի9?-?z  Ge7XzPE(KX9:9:$Q%-O;yh{!e7/a0 M{gfM-t g10BMwB*B-a(BBVs-SL /a0 EwEL L {EE-S(L E10/a0 V@?VVVS 10eK!e7/a0 KeKK Ka/!H/CriticalObjectiveVolumeTag is not a ASCriticalObjectiveVolume actor!!!10rK*/a0 K@10OwK*|KunspecifiedKHGa-va?'_K!e7/a0 yN_K10^K!e7ZFwZF*ZF^KAEZFZFZFH9:9:$ `K!e7/a0 [K`KG7bFbF[K10 Ge7re7e7P e7e7I W : Ge7J,R`o$ Ge7Z0Ko$ak( Ge7ce7e7qNS ]/%2o(!.$m, 9?&^-UJS *bwS *wS *K9S wS *wS *K9S CwDE*rS *S DECrK9*wDE*K9DEb-RG {M@.-QwK9*9=K9-K'Q%(i-(cFK9wK*Ka/!H/Kq!G.-vIK9<IK99?\e-RG.$G.HS .$i Ge7V0/G-'-a'-(a(((a   x U Ge7R e7e7P,-R(E  Ge7O0P;v!B-R'a  a+ u!B Ge7ke7e7e7e7X Be7F  e7e7\ U @0z ? Ge7C0E0a Ge7L7A0~HwH*wH*w.H*wHwH*H 9?@Hb.Hh.HHH Ge7e7e7X e7e7[^` -i(s .^jrs *s %s -s R( w.s * w.s OG*6.s OG.s OG' Ge7ae7e7e7e7e7e7crX"9v!Ba  a+ hq!n Ge/P#G2M`W7\fF||3}Zs|hqY|hqYԉ3},e,e,e3},eh3},eh|3},eh3},eh|,eh|,eh|,eh|,e|||||||||h|||||hhhh||||||3}|3}Zs|ҽhҽҽ||| O$e7e7e7e7R(".a* Ge7u m }Ljw. *N!F O-Z -J  -G N!$w*!9:N!N!NQ9?&QNQ Ge7e7e7fe7e7ge7e7e7e7jKe7NIe7e7^Ke7ce7e7Z/@e7e7~ e7e7 e7=e7e7I:C/}@Y@!2pQ@I: 7ha/a/|ha/ɉ3},e,e,e,ezVGB|zVGB,eha/|\fF,e||||||||`0m Xe7e7We7e7Pe7e7e7e7Ue7e7te7}.s([2v0jWhjWhzVGBhzVGBhzVGBhzVGBCHb3}Zs3}Zs3}Zso>+ Q] BigHeadG] BigHeadc ].-Head size depends on how well you are doing.e7e7e7e7H!e7e7G\Wr\ Gw\*\ m\r\(##\\w.=\*.=\W Ge7e7`e7e7e7Q!e7e7{e7e7}e7e7K.e7e7e7e7e7e7{e7e7\!#B -}FR%jr}F*}F.jr}F*(r.{/5*wAE*}FAE.9?, .l(((Kr5*5Kr5*No SquadObjective(5r5w.*wAE*!r.{/*'AE.-.X0.9?,.-(.l((w* ;(' q!~!u%'.9?,.l((55AE-` w5 6 p5r:*w:v u(r:* p5*b55 55B(5%@*palmost at 9V55'-U :pppFind path to 9V5 now near 9V::l-U-U'@ w*3N@@NA@ N X9?&M9?rgh#gwh*Pwh*$h-Uh-`M9?&hh(~:-RM9?rX X9?&h#wh*h-U(hh(:: P | Pr:*pFinal stretch to 9V5u' &5''f &:'' t5w* 1@/w* ;('Waiting for Squad7''u pppFind path to 9V5 through 9V:/  &:''ppFind path to 9V5 no path to alternate path -9:9:$5!pCOULDN'T FIND PATH TO ALTERNATEPATH 9V: &5''u r:@ -U' t5 Ge7X!e7e7e7e7b-e7e7k e7e7be7e7LWG)z.=WRw.QW*z-Z (W'DG![z-Z 'ikWW.ka Qw..k*.QWFF..kA9:.k9:$ Wo$ aG!yW~G!xWG!]W'ikWG!$nW  Ge7pe7e7e7e7e!^zy%~rP*|pr\*\k K7%E%e9D9?E9?,BE\l e!\n e!\E e!]e!$e! y^ e!$n^ 4e!x^ pe!]nh pwn*n ^ x^ Ge7Y e7e7[ e7e7Pe7e7ne7e7e7e7e7e7e7e7je7e7ke7e7k!e7e7l,e7e7[e7e7ce7e7e7e7He7e7]e7e7_e7e7_Ae7Ke7e7e7e7be7e7e7e7ae7e7Ze7e7zIe7e7e7e7e7e7e7e7e7e7e7e7e7e7`"T|5/a0 T10T-SPT110 Ge7R e7e7]e7e7ne7e7de7e7e7e7se7e7M,e7e7LLe7e7Ae7e7g"e7e7Be7e7te7e7e7e7a"e7e7w e7e7se7e7O#e7e7Z#jx' j Ge7j+e7e7b e7e7]e7e7}9e7e7Dcshw`*`w*{a ra*訨Invalid EnemyTeam class: Expecting subclass of UnrealTeamInfo`aaNo EnemyTeam set in CurrentGameProfile, is this correct?HH{y ay Hwa*`aar`*ag wa*`aa` mc` Ge7e+Yvfo.r%*%Z&]r&*&Z, ]  Ge7Be7e7T=ZYhcQdT=Yk,YGoalScore9Sk,YTimeLimit9Sk,YTranslocator9T-Y k,YWeaponStay9T-k,YForceRespawn9T-g Ge7He7e7t e7e7Y+e7e7Z+e7e7e7e7p#k#[( Ge7ne7e7Fe7e7ze7e7e7e7|@e7e7{PPHGZajP&Pa/!j8-Y kUbkg%R* Ge7ve7e7Ye7e7e7e7Te7e7e7e7qIe7e7~8e7e7K e7e7e7ve7|#x#HH6w*!9:  Ge7C+e7e7]2e7e7H$E$^p ' Ge7Qe7e7Q e7e7s2e7e7h*e7e7e7e7fe7e7ge7e7he7e7N e7e7@ q = Ge7ke7e7W*@e7e7e7e7n@e7e7@ e7e7tUR$k[' Ge7e7e7be7e7@ Ro#-f Ge7e@e7e7}e7e7e7e7})vsjMVvSw.%v*.%vi.c=-d=.%v >o Ge7`e7 e7U e7e7e7e7K*sO oGe7@e7e7FEe7e7yUES fI Ge7je7e7O:@e7e7q@e7e7Ze7e7e7e7e7e7@%e7e7 lH%{r29:9:$1 Ge7e7e7] e7e7J@*e7S@*e7e7e7r%OAMHQ ,a 5O $~rOBA-_' Ge7u%e7e7Me7e7e7e7L!Ow*q!Lq!K Ge7}e7e7e7e7ye7e7Ve7e7`PIA|'II3bMinPlayersW@$$Text3;0:32I1bEndTimeDelayW@$$Text 'I/bBotModeW@$$Selecti=I:bbAllowPrivateChatW@$$Check Xv'' G e7Ze7e7e7e7u)e7e7w)@e7e7\e7e7q@e7e7]e7e7Ge7e7Om7Q LB--m- @?q!~ Ge7e7e7aIe7x e7e7kIe7ee7e7XIe7e7e7ee7e7 @e7e7T e7e7ke7e7e7e7Te7e7e7e7Z@e7`&e7me7e7pe7e7ze7e7e7Be7e7e7h&0 e7M0 e7t0@ e7m 0 e7x e7e7Ge7e7k& e7Fe7e7y@ e7WF e7e7n  e7 @De7e70 @De7e7Ke7e7y 0 e7A0@ e7YIe7e7F e7e7X e7e7z 0 e7we7e7F e7[6@ye7H e7J@ e7{  e7te7e7L e7G)fl1(fr/a0 K c $$10@wc *c t r*|9V,TUT|%,% , , L,<-B (-T ' r%nfMaxLives%-g'  p6%-g'p6%nfGoalScore%nfTimeLimitzp6%%F)fTranslocator{FpTranslocators: 9T9KF-Y 9KFF)fbAutoNumBots'{FpbAutoNumBots: 9T9KF-^;9KF-9:9:$F)fVsBots{FpbPlayersVsBots: 9T9KF-FE9KF-FE-^;(F)fAutoAdjust {F- -9KFpAdjust skill 9T- F)fPlayersMustBeReadyn{FpPlayerMustBeReady: 9T9KF-f9KFy )fDMTeam{y -n6'w*%-Y -\=- (b'fNumBots-^;(|-^;9:9:$L8IT--N<L8,L8,QQL8&&L8hhL8,L8,\%L8&1nfMinPlayers1%, \nfNumBots\%, -FE1,L,<F)fWeaponStay9{FpWeaponStay: 9T9KF-9KFg-B -B nfTournament&%-B nfTournament%%-B H-F9:9:$F)fQuickStart{F-T 'o Ge7N e7P@ e7Q@ e7w;@e7e7e7e7R e7U e7me7e7s&@e7e7HJe7e7e7e7J e7e7{&@e7e7z&d IaQ Q ,pppppppCHOOSEATTACKSERIAL in state 9Wa enemy v old enemy u CALLING BYTE 9RdaQ %P \ u\ p Ge7WD(pb6z, } , HJ, GJ, L---[=--OJ-FE w*-'-OJ--[=--~NYs\r*-n6 ws*y3-FE9D Ge7ee7e7k e7e7e7e7`e7e7L'e7e7he7e7e7e7j@e7e7e7%e7d(e7e7qe7e7Le7e7i'e7e7Pe7e7^(e7e7_ e7e7e7e7e7e7w'e7e7e7e7 x'^ F G e7N(e7e7 |'%Lw.*r.*r.w.*r.R%^I. J-w^I*^I o%w.*A- $5'v!%R.rR*rR* rR(8 5R $(IrR(YFR(}DRvR( Ge7K(e7e7Ke7e7Ie7e7}F(EKBz-(-(-(-Q:(uw*d  6d d   9?% #w.*.uuw.*  Y? 06  B6 *  9? - '( Ge7 B(J5"-o$ J--( -' b 6  # Ge7'e7e7@(e7e7{e7e7e7e7Q(e7e7q'e7e7Ee7e7V(e7e7s'@e7e7a sg7w.* +Ds _w*\3-q!i j-A s  Ge7Ie7e7e7e7Ko'F( Ge7e'Z,)- Mq!K!SU. Ge7Y(e7e7Ne7e7j'@e7e7X(e7e7me7e7a(e7e7*e7R*e7U'e7e7e7e7R'@e7e7H'UGUq!E Ge7S@*e7Y@*e7e7e7h e7e7i e7e7\e7e7J'@e7e7^e7e7ay\s y\* Ge7C'E'{E q!j' Ge7_e7e7n(e7e7i(^Egw  )w6^E*z6^EPr*Pr*zw.*.b- {  $r.*-6^E9P /$cqz/ 'a+9Pc-G-6^E-{-J r \{X 9D]9?X {-J -6^E-G-Gl YH{z*9:9:$s6 6 6l6lë6 ?{z*6l6l?YH6  YHleaxx (-G(*we*x#@-G?333??lYH66 6A9:9:$  ?/9?z  9:9:$6z %-O99z  5?b$/U-Ob$/-O> ? -O(M-6^Ew.*9?,-J 9:9:$/6 9?,P6 V6 9?,6 #-J @?eaxx#?9?,(-Ore*-Ox#@@-Ob$/M-O9:9:$b$/w*-j9?,9?,66 fff?-Ob$/)-O66 -Ob$/-6^E -O-eaxx/(we*-J(ի9?,x-O' -O66 fff?-Ob$/ -O r-~6 66>eaxx/( we*ի9?,x[ w*P 9?,eaxx/([ we*ի9?,x w* Mp}?-J( -6^Ecqz/' c/ w.*cc. I7 ]9Pc[6]6]Z6]X c99] /C/ ceaxx/( we*9 6x333?6]Z[X c99]/ ceaxx/( we*x9?, 9?,eaxx/( we*xc/]9Pc[/^E99] .a+]] Ge7}(e7e7@|e7fN |e7(e7e7e7e7DO@e7e7ne7e7Ie7e7e7e7oe7e7pe7e7F@e7e7e7e7lxe7s@e7e7u@e7e7e7e7Ce7e7k=rrK *"w.*J$6-(aj9?%q!izz?-Z<L9?,-9:9:$;6 6 (D--9:9:$(6rr9?O-B -E  @Z8 #A^a{KZ8rZ8(E V:CF;{ r^* F;9?,1r^*{Z8r^a{K{ B# @{(E -C w^*6K333?-V<-9?,T89?,V:AV:F;-C -B -B r9?^a{KZ8rZ8(E -C r^*{ V:-C r^*{Z8r^a{K{ B# @{(E -C w^*6K333?-C -Z<z%(C-#9?,T89?,9?,-'f--V<-B -B -B . Z $. Z $-'6 J. Z ' Ge7I@ye7n&xe7xe7@0 e7P)e7e7@e7e7ke7e7~e7e7}@e7e7@e7e7He7e7X)e7e7ze7e7Ie7e7e7e7|e7e7Z)e7e7Ke7e7s0 e7Le7e7a)PS =Y_w.{/*r!-[ (YVwY*Yw*L(w.*N\-[r*9?&-_w.*l.w.*-[-_-fw9?,9?,-fw9?,-f-fw @9?,-f ^r.*&w 9?,9?,  w.*w.*r. *-[-xw.*3  9?9?&6-_ ff&?bw.*-x(-[ 'UOUE  A C9?,(w (w.*7  9?9? bUOUE U A 9?,9?E| s w| *U| OUE U |  EA 4EA 9?,a/!SU*OU-[ (_-x(-)r.*.-  r*#9?,PR4rw.*2b9?,-7  9?,`9?,PR @w.*h  #?6 6   #?6 6 VhY?h>w.*rb9?,RPw*- h>b9?,P>hL?R Ge7@e7e7SN e7e7p6@e7e7g&e7e7f&e7e7Ve7e7ne7e7Q @e7e7W @e7e7\&a&ie Ge7e;@e7_&e7h)'! `* Ge7g)@e7e7\@e7e7le7e7]@e7e7^e7e7e7e7e7e7kFe7e7Y @e7e7be7e7g@e7e7fe7e7ie7e7je7e7V&e7e7dIe7 i)_LI=,-%'-f ',w,*w,*,--f (,,9-f '-f |YLastMan-f  w*L_Y(r_*,w,*,-,-5r_*(,__,,,-f ,w,*x,-w_,(,_,-v-~o$>-~'(,,qZ6_w*-w._*0._-w0*0-','w,*t.,wt*t-Ntrt_t`'w0*t o0t 0tUz6,,T,z6A' Ge7e7e7B @e7e7e7e7X e7e7n@e7e7o@e7e7`Ie7ve7e7[e7e7e7e7E&e7e7v)z)B T( Ge7r e7e7Ue7e7Se7e7w%A&]=! Ge7ze7e7J&u y j-p u `-p wu *}u u -p  Ge7{%e7e7ge7e7PA, Ge7e7e7x|)| VGe7PNe7e7De7e7Ee7e7e7e7l%e7e7e7e7e7e7Ie7e7e e7e7h%e7e7e7e7Qe7e7TKj%K Ge7e7!e7e7e7Fe7e7I@*e7T@*e7e7e7Z  e7e7Ye7e7[@e7e7e7e7a@e7e7 _2B'w*N'-e '-J($ $ Ge7G%e7e7e7e7B%]D1 D] Ge7U@*e7k@e7e7e7e7`@*e7Ee7e7|$e7e7e7e7e7e7~$e7e7t$e7e7e7e7s@e7e7yh`?!h-yDj9:9:$L,?@9?,y-FE Ge7e7e7e7e7d$mm!M8w.* STARTLED!zmq!g Ge7qe7e7e$@e7e7e7 e7u@e7e7Je7e7Q@e7e7j @*e7e7de7v@*e7 d2Y$N( Ge7C)C V( Ge7e7e7e7e7~@e7e7@e7e7Q*@e7e7P* o.u!% Ge7@e7e7bT2L($\r2@62 9F^ @- r ^ @ 9:@M%\ ^ & \ ^ % 4flag_returnedp9S@62J m&2*@6Zr 9?r \ 29?,82@@flag_ret_friendlyZ29?,82@flag_ret_enemyZ\ 9?29?,82@flag_denial w@c*8@c@flag_cap_1st_touch@c9?,@c9?&29?&29?,x22 9I] A%A7@jwA@j*] ] ?An A] ?@A%A7@jwA@j*8A@jn flag_cap_assistA@j9?9Dn A2?29?&82@flag_cap_finale2?flag_cap4flag_capturedp9S@62J m%2*@6}2b2!-E2timelimit Ge7|Eje7T*EdReME6re*Failed to spawn bot.(J&ee9:9:$hee q!F!d' Ge7U*@e7e7{{V*| pGe7f\*g*L[+bY-w.*r.*. taS?rS $-!STUCK IN FALLBACK!p STUCK IN FALLBACK! Ze7Ge7xiC`*Bw7   9?% Ge7 ^**P[U} r]*(Xw.]*w.]* .]-9:9:$-M Gb*f!h3J1'ipx.e7e7l*si q!e Ge7t*e7e7]e7e7JE P S V e7_A$XuY ' Ge7O~#Vz * Ge7A+e7e7D+e7e7F+e7e7P+e7K+R)z2Uئ⁀ e7e7e7e7Xe7e7Ve7e7re7e7R^+bUbi"9:9:$k%--(R-FE,9DuJ9?1 Ge7Se7e7[e7e7lC_+L ( Ge7e7e7\Ud5 S,rUdx-U(>dU([Up#wp*wpdwpUCpwp*p3pp(W-cICdwd*d3I-cIrdUdI-cI Ge7Ee7e7f+e7e7Ue7e7me7e7X#e7e7E7Vm`Y Ge7y+e7e7U#e7e7{+@e7e7Te7e7~"e7e7@e7e7pe7e7qe7e7Ge7e7Yz|/YJ.zor. *r *(qz Ge7e7e7Xe7e7e7e7z"NfKw.N * <N-ZvzffN!vi,Nrv*vwwv*wvL*N!NqvL yvvi,Nrv*NqyL jrv*+N-ZN!vi,NNlv-x Ge7`+C,l-%( Ge7ve7e7We7e7|e7e7ye7e7we7e7m"e7e7e7e7K,e7e7e7e7@e7e7Ce7e7e7e7te7e7a2| x1OHrO*'RrO Pw. *q| R(O |  <B (| bO Ge7_"e7e7U,e7e7Ge7e7me7e7e7e7e7e7He7e7T,Y,Ss s Ge7O"e7e7e7e7Ce7e7]e7e7fe7Z,H)D2+U2x@zVGB3}zVGB3}zVGB3}9uzVGB3}- =1- =1- =1zVGB- =1zVGB- =1zVGB- =1- =1zVGBzVGB u3} u3} u u u3} u3}Zs u3}9u u3}9u u u uP Y]Waiting for other players.Y+*Waiting for ready signals. You are READY.Y! The match is about to begin...3Y! The match is about to begin...2Y! The match is about to begin...1YThe match has begun!YThe match has begun!Y OVER TIME!F ] You are NOT READY. Press Fire!a]Press FIRE to start!E dSo*0@ e7e7We7e7y!e7e7ee7e7`e7e7y v!wEsPws*s-Ks-v7!9:s7|rO*#9:O<9:s<H9:O<9:s<!OpspOsss{ O Ge7Fe7e7[e7e7ae7e7]e7e7^e7e7qe7e7Ye7e7q!m!?_ i,* Ge7he7e7e7e7MOl!zw i,* Ge7eVy~!qTwlwT*MrTL*TL@VTjTL V'( Ge7e7e7Xe7e7ie7e7Re7e7Xe7e7he7w,e7e7_,D-j  - Ge7C-e7e7e7e7Ae7e7F e7e7ve7e7e7e7a-@e7e7Ge7e7~e7 e7~,>T*z.9?%#.9?,>w>*>a/!r>>-.>g,%tE$'.>g,&tE$'>>_>w>*>a/!>-r>.>g,%WF$'.>g,&WF$'>>) Ge7e-e7e7d-e7e7T!e7e7e7e7~e7e7e7e7V.e7dn-VAw/dqYAQ e7e7Je7e7ue7e7|e7e7^We7e7Ee7e7N!omVwo o*rcr#o#o(`r#*a x#wx*rx(ox(o(xx(nr o{ Ge7K!e7e7e7pe7|.e7e7G!e7e7e7e7Fe7e7Ke7e7Me7e7De7X/j)f2QG\x@ u uzVGBzVGBP O ]drew first blood!o*0e7e7Ke7l_/vL&H-%'-a 'sws*ws*s--a (ss9-a '-a |lLastMan-a  w*Lvl(S-uPwv*v9?&v9?&-a #&%-~o$>-~'(-a v%&%&%%rv*sws*ws*(rs5rv*(svvsssDqZ6_.v' G^/s#I2TO\fF|'dW{ST|||'dW{'dW{ؚ'3} Z$]"e7e7NMe7e7]Ke7p e7e7e7e7e7e7j e7=e7t/w/W ( Ge7e7e7]/q1U(*Ge7z/e7e7g@e7e7be7e7_e7e7ze7e7J e7e7VO Ge7eN Ge7SBe7gBe7fOn#X!aL=| e7Ge7W Oe7ke7e7H0e7e7iX0MC_Ge7W0e7e7mH[YGe7 ofCDf9=,9=,9=,r*fZappppp ORDERS 9W on v9V no objective. Leader  (fkappppppp ORDERS 9W on v9V objective v9V. Leader  (P Gf@P O  Enemies: @%@,w@'*O O @'@Bf aO (P Gf@P  Ge7^0e7e7]e7 e7YK "!~{9:,9:9?\*e9:9?\game_objective_score Ge7pUcx( Ge7ve7e7e7!e7xI6,-I.rII9? <I-_ (I CI-_ ''I-_ (( Ge7}PF Ge7e7e7Re7e7cf0UQ'!1w.U*i .^.U{{w.U*i .^.Ugwi *i {UcUU**! U !A A! Ge7{@e7e7|@e7e7e7e7te7e7K+e7e7e7Ie7e7y0xA  Ge7GEF '!'wE* Ge7~e7e7D1Ce7}@+e7G@+e7FCe7e7e7xe7e7jKe7e7xe7e7v+e7|S_-. r*( _S Ge7se7e7e7e7Ye7e7oe7e7]e7de7e7e7He7e7Ze7e7g e7e7e7e7e7e7ie7dl1m`CxdqYAe7e7e7e7ce7{1e7e7exe7fe7e7}ze7be7e7]e7e7QhM: K-h-)6 6  Ge7gn R\fa%7wn *n -Rn -s'Z wZ* wZ*Z-Z-Z-rR*RZ  wZR-s( ZZSa-sKwR*ERLastMan_En LastMan'( Ge7` e7e7Ye7e7 jJ b5RJ  6w* bJ  2wJ *%J 9?EJ fraglimit22-Q3wQ3*wQ3*wQ3J (Q3J  Q3Q3EJ fraglimit Ge7Xe7e7pe7e7Ze7e7Dw m g r h g e7u2e7`e7e7e7e7v2e7y2e7E2e7e7D2e7e7e7@e7e7ze7e7e7e7re7e7e7e7Ne7e7he7e7e7e7h @e7e7F2e7Ze7e7_22e7@e7e7e7e7H e7e7e7e7ze7e7Ke7e7e7e7e7e7 N2Pd  !{  Ge7Qe7e7e7e7 OLs p^z  LKj9:9:$9?, 'w.*.- K9D?I@AzI@L9D?I@A I@KL - -v%[[- -Q6 - -P633>P6v% Ge7@e7e7 US][w.*.-w*._ uw*v9V Ge7 VJD 5 Ja  G e7WF  Ge7[E  Ge7 REwz -e'w9VEr%dr,E|rzw'ZZzrzdrr%r,|r|w'zr|rk( Ge7^EH 1 6   9?u'ggr.E*w Xu']*^*w EfEX#wX*rX rXXXL=>XX( Ge7re7e7sOvx /ZM!e7vo$va va*v# vMva<pv MMvov NM Ge7ze7e7X.EBN.%I.,?{.z{.z..%.,9:.b&{.|{.|.Pqhq.,(.%9:.b&{.|{.|..,h.%^{.z{.z.0w* \ !y X  Ge7e[Sh" -x(Ar p]]r *G  -R^*]*w *^*]*-c l N -R-c o TNeed weapon or ammo'O --zbO-zo TNeed weapon or ammo'-c !R a/!:r  !]; w ; g;f;Tw*'v ;%b9?,Fight enemy threatening flag carrier ;''r.;*-z; #;  9? -x'}^}i9?,<;  9?-x'}^}};};;'w;*'; #r%;@;w&;@*B?-x';  9?}; w,;@*w,;@* 333?},;@},;@ }&;@$};;};#}r^ }%w*Fight enemy while waiting for flag carrier 1A/%w* ;('-T-T'7;!  !j A!7'Back up the flag carrier!'pppFind the 9V} - move to 9Vw*B? -zrr *o -R m'  -c w Cw*b> u9?,u**!  !L  A!Attack enemy bomb carrier| c(A D=  -R  6Near bomb base!#: : !Go to bomb base!#  !Go to bomb w *A D # e Ge7 ]C{o  ~ Cwo *rWo *h ao wh *h u wh *h |  Ge7UY~@3"?9:D~& Ge7e7e7Ldo[ B=ro  wo*o%'( Ge7 t?C J(d(--9:9:$(NSB9:C 9:$ի?NSS?9:C 9:$իNSS?9:C 9:$ի?SNN??9:C 9:$իSNN6RCZ C o$' Ge7gAa6A 6A [6A 6A A B<A A 9?U99A A A 333?]AArAA-m'AAAK( Ge7Ne7e7Ne7e7ETpUxGame.ComboSpeedw*,<**!  !zA!-m(]*^*: ^ 9? 3 D 9? W-A '-l.Y&-A %w 9?, /w9?,9?,Ir*3 D 9?-A j99 ~w~*Z.~wZ* lZwZ*Q-jZ-A (-r 'Z*~~e-A N#wN*wN*S9:N9:$/6N 9?|Q-jN-r 'NN(%-r  ow.d*0-m' r^ G^'r:* X(Kw*-lapMove to shoot spot 9V'-!NO PATH TO SHOOTSPOT#^No path to enemy base for bomb carrier(Sr^Near enemy Base with bomb!P ^^Bp-r -x'-la' Ge7Ge7e7 c(=8. +- -dE Ge7 iVu H 9:9:$-r.$*w.*/a9 VZll10rV*Va VZ-frV *V fV.Pr .$]P Ge7ve7e7uAu +GA6GG Ge7jnr c["* Ge7e7!e7 mfh"49:9:$ ,-o$1o$ Ge7 oc rH#Ya,*#?ի333?99 #  Ge7wO}I o$KH9:9:$r.*.-v}  Ge7e7e7 q|z %W9:9:$ w*K-EWa-' 9:9:$9:9:$q!o 9:9:$  O a p |z9:9:$a Ge7Y`Qw3.wQ*'YQ Ge7 r?DCM=2"-} Ddb D$DaTESTdbb9?,dD@bD9=,9=,$\]-\p\ DELETED (bDeleteMe == true)D a\(b9?,dD@b{r*D9=,$$DaNO CONTROLLERbdD@bCDdbb9?,dD@bD$9=,9=,DFapppppAnchor 9V Serpentine Dist 9U  Time 9U bdD@b\pppppppFloor 9X  DesiredSpeed 9U Crouched 9T- Try to uncrouch 9U w *9:9:$ \pp\ on ladder 9V Da\bdD@b Ge7swp ( Ge7xe7e7e7e7vAo 1+Gae7 R) Ge7 z|a0* Ge7}e7e7~e7e7e7e7@e7e7e7e7{S*Uo$a(((?Rw*F-ERa Ge7yGm .G ie7 R+ Ge7 CE~+59:9:$ 2w * a Ge7e7e7 DJm,   G"e7 FAG,a'((8-9:9:$?Aa@(o$- 'w*~-EaAG%AG7wAG*AGf0AG Ge7OioX^-L(Uri*%i9?,(r%v&v%|.9C|%%9?|,%9?|,-v 'v-v v9?,-v v9?,-v |%|L,Z(^pG >Gia/!T$ ?'i,^pG >^pG  Ge7e7e7M tYD4Y<wY*9^ 6Y9=,$Sw *$$ Ge7x Oe7e7e7\TNHKJ6w*!9:w *! a/!   Ge7\ @e7e7Xs@?9:s9:$'8-lHw.f*'-n!6 I 6I`'6 I (-hhs6Ih`6Ihh6Ih`B f 6B 6B fsdB @`h6Ih`6Ihh6Ih6d6d` Ge7P@e7e7e7e7Vam457$ Z&a(ca    Ba(2#a -.b ~9?,.b ~a**! a !AA!aPick up bomb'( Ge7e7e7P_^V$#w^ *r^*^9?,3^ ^ 9? ^w.d^*^^ Ge7e7e7de7e7e7e7~LSx5Zw[*w[*-k[ D 9?3[ `  9?I[` [gS9?&S?J`  [ 9?"` -S9?,WS?|[gS>S Ge7be7e7Q6e7e7e7e7ihV@ wh*wh*wh*A6h 6h 9?, 33?? Ge7OelX{"wl  Ge7e7e7 ^UKK3 w.U*29:U9:$,dPU-,-l4-U)6 6 D ifMU-lH-qK,d_UVf-lH_UL@U_UD f(,df)6 6 w. U*-v6UUUb. U u#?Uv6Bb. U u#?@U6bVU9?&U6bD f',d-T6D 9?L$-U-  Ge7e7e7e7e7D e7e7_kg^'"wg  Ge7e7e7de7e7 a| a r*(-lHI.ErI*(\.  u#?. Z $-(II I-'%w*NF @NF 6NFNFNF 6\NF6 6\ NFo$ I-'I-'(aio9? c'-U)6 6 c-lN@a(|(I.ArI*(V-lcMx-qKm@Va(TV|T6 6 ?333?I-'I-'()6 6 w. *-n\.  u#?n\.  u#?@6\V9?&6\a'Tn6\6\V9?&T. Z $|nT6 333?6 ?I-'I-'(c'-T6a9?LIY #I-'I|I*I I #Ba/!LIvI_' MTV|T6 6 ?333?I-'I-'(( Ge7ge7e7ae7e7ommkK#wm 'h m9?, Ge7q_tLw_*hE%hE7_whE_*]_ hE_ 9? >Q_ hE_ 9?,dSb$_ hE_ tIhE_hE$wtI*tI ի?_#?Y_-w._*d_ 9?6d6_ d_ _ _ 9?%d9?,_ dVb$d_ d_ |.Hr|*_ 9?,d9?,_ | 6d6_ d Ge7eu^e !e^ Ge7ecTe !eT Ge7re7e7hVc lV.VVU*VO*gV\V #V-'VUVOW!e7rx */a0 x W10wx *VUx V|VVVa/!SV*V aL>(eV_'( Ge7vsr;g .H9rg *g W. Bpo\rg  6s}p6s}or Ge7Ve7e7e7e7|e7e7onpk#wp'\wp-R'w p9?, Ge7qw *|,$sq|'||%[|,Qsq|'||+|%|,sq|(||b, Ge7ze7e7Me7e7e7e7e7e7ye7e7D{f( Ge7Cu#pw.* w.H*w.w0H*3 H 9?bHOG..9?,.l((pr.* 9:9:${6 'wwHCH-` rr*&rH 6 pH*bHw.*;6 6H 9? w.H*w.w0H*.l(( HHB(H%@*palmost at 9VHH-`'' rpppFind path to 9VH now near 9Vrrrr O f xrr*-`' &H'' &r''pppFind path to 9VH through 9Vr &r''ppFind path to 9VH no path to ReturnPath-9:9:$2!pCOULDN'T FIND PATH TO RETURNPATH 9Vr &H'' tH Ge7e7e7Am sk .H9rk *k m rl @ *l @ C-KwaMxk  rl m (ww*6x333?(pm l @ m ' Ge7e7e7@ np 74rnw@ nnw@ * Ge7_}B^a "wB Ge7B e7e7fWe7e7ae7e7HDt LI7gW%fW%IfW7gWDv69VfWgWfW Ge7TWgd-XwWa#Zwa*CwaWwa*Ka W A6K6KC6KaW'K9?,a/-Xa gWCa vWaa(-X Ge7gWN  Ge7e7e7Bu ^i #u .pw9?,.pwu **! u !UA!u Pickup friendly flag'( Ge7e7e7]KMpst  Ge7e7e7iLOMx' Ge7Pe7e7e7e7\JSHx( 6w*!9:w*! a/!  Ge7e7e7e7e7tzDzD Ge7e7e7pR8u~=A&88Go to vehicle8'8,(8UxGame.ComboDefensive8UxGame.ComboSpeed-Rt&8o8 T8'1r*,^8'(tw8*w8*(w8C8w8*8b8c9?,c8Attack enemy flag carrier;8c(8-Z'A8r*8b-18  D ^8'wqE*8 qEr8*%89?, 333?qE*r8*87'8s'8 pqE'8-Z(qE*!89?,r.8*!-R< 8 9? d%8w8*0888 j%HD8Get super pickup8'w8*8,<8**! 8 !zA!8Return to Base with enemy flag!#88No path to home base for flag carrier(yr88Near my Base with enemy flag!-R8**! 8 !j A!8NEED OUR FLAG BACK!89?&qEo.8wqE*8 pqE'(y8  B8' Ge7IXy G F<.=y Rw.Qy *F<-Z (y 'F![w.r*kDRP8wR*!.r R krbRwRk.r R RR{ww*wy wKWwK*rKwr.K *K y  KKMo@y w IF9=,F!IF$''F!IF$M9:IF,Iy FrwN*(9:.SNu9:IFN y wR*(9:.SRu9:IFR y RPLwR*5w.SR*9:.SRu9:IFLRR{w.SR*rN*N@y RrR*R@y R Ge7Lguz|t 4!7&%B!$Luv Ge7e7e7e7e7sr{"{r Ge7LVe[? $a\we*we*ree%'( Ge7e7e7 [` u"L{zz${zzpp}9: | Ge7@e7e7e7e7\@ wF$r6@  6 ;w6@  6 P-R<w6@  6- ' 6@  Ge7e7e7hepa$  rL*%L\ Ge7e7e7re7e7ejOfzqu rPzwr*cw.Sr*.r~ *!9:~ 7~ rrr{ ~  Ge7CQQ\ S.R"o(9:9:k(MrQ*9:Q<9:<'( Ge7e7e7bC yP!&4~r6C  6 ;w6C  6 '-R<r6C  6- ;w6 6 ' 6C  Ge7le7e7e7e7[e7e7xmU  [#w[*[-T [  }r[ T KR b[rR* R TR T T NR[NT TR [[( R Ge7jr J-(W aRprW *pppp9V could not spawn flag of type '9VR' at 9X W W M Ge7xfQF1xa@(j Ge7sr 7 * Ge7e7e7jI z^' <E 'r6- 6 ;w6 6 '-  C Ge7De7e7e7e7Fbsr F*S!? F_ F_ Ge7Ea<()3OEF~J#eHa qG ~JeHa*^ Ge7hFXd qp 89:a<9:$"ad b<(9:d 9:$d 9?%jwAE*d  AEd d ff?d d - 'pJd  tF%:tF7AErrF*rFtFAEtJpJrF AE 0rJpJtFAE AE 0rJtJtJrJrFtFAEtF7jwrF*d rFd 'd Dj,d d ff?d d d Nd Attack Objectived  #d d Gj,d  d d  '-oJhd M-oJw.d *!d 9?d d ff?d |d d -oJ<d -d  T.j,d Back off from objectived d b d %d @d 'd Dj,dR/d (d Attack Objectived Gj,'hd  Ge7~e7e7tFe7e7V HW^3S@hX %- '-sF(a'-JwEE*EEaEE*V  Ge7}va)7J-v7-K v%!.$m, `Hj qw.j *vaNwC *vC  rj *rj * wDE*j DE{FDECwj *wj *{Fj .j _0v9?,vj 9:a<9:$&rj *aj b< -w>Pwj *j v%9:&w{F*{Fv%9: v.$N.v{F9?&X vgS% X SHgj X %IK9?v@@vwL* w`H*w`H*xJ?xJL q-`HkJIK9?hbwj *wj *M-j kJ}}wDE*M-DEkJ@&]j -|J-sF'wJp,rEE*EEa  Ge7elaJw.l*wl*l9?,(~.$pr~*(d~swd*dPwd*wd*)lld3l d 9?lbdlDestroy Translocatorl Gd'ddH( Ge7ie7e7B e7e7C e7e7kJe7e7e7e7ZN vwWADPwD*w.SD*%.SD}9=7|rv*#9:v<9:D<H9:v<9:D<!vpDpvDDD{ v Ge7G  e7e7e7e7ud}9:d9:u Ge7e7e7e7e7hH `qV-T*` 9?` #`lw`*(`7'' Ge7eiR hx* -r u B ?q-R-J  b-_& o T '_w*i  -   - # --J r*^ ')r *Gw *(w C w * b c9?,c **!  !i  A! Attack enemy flag carrier c( -Z'A !X -Z-J  bE  y JE w  -Z' Go after enemy holding flag rather than attackingEw*A UU^ ' -U @ 9?, qqr. * c7Q!-J  -Zz -Z' Go find my flagaw*A qq^ ' -Z(rw * 6 % 9?,`-Rr* b-# - **!  !@ pA! Intercept incoming enemy!(Hr*E-R 6  Near enemy flag!# -q q ! a/!4r4*w*4w 4 g4f4w *' v 4 Fight enemy threatening flag carrier ;'' r4!r&4@w * b Fight enemy while waiting for flag carrier to scorew  1@ / w * ;('U w.4*w4*44> r%4@4w&4@*S&4@R S4i S4# S r Sr 4T w * Fight enemy while waiting for flag carrier)  1@ /T w * ;('  -T -T' @!  !j A!M r 4d  4 9?,'4 #(   S'4 #r4!r&4@ 7' Back up the flag carrier!' pFind the flag carrier - move to 9V w *e  Ge7e7e7vZ ~fF~w.~ * <~-Zzzgw~*z~~!zi,~rz*zw~lz-c Ge7UaB7_{_#w_*w_aw._*__._ 9D9?b__(  Ge7n X G#wi*i- i*/a0 `in CC10 Ge7d

] ` LL<9-K.$m,]\ Ge7\e7e7e7e7h_ [qX#-tW rt*(w.t*[ txt-tB[w[*[3[G['rEte [rrE*(\[brE[rE[pGo to activate trigger 9Vt['w.[*)[I-[3rE [ 9?.[9?,.[l(([brE[rE[pGo to activate trigger 9Vt['w.[* wAE*h[[ &rE''r[*([pFollow path to 9Vt[' Ge7e7e7rEe7e7wb g6 /wK*g dK'<rt*(t g 9?gbt Ge7ACc \p%w. *r&"r Ge7e7e7 uS\r % \a. \(ra* u .awu *)6 6 u u S@ Ge7L Z{-YB%w.Z*r*f !e7WXL>.Z-`' .Z-`(FDwF*F-IF-]F-ho~Foo,FFA o%k%Vkowk~k"^wwk%kowk~^wrk~f k~` kwr%~f %~`%.Z-`'Qr. * w ZfZG#wG*rGrGGGL=>GG(\ Ge7@e7e7o M q (OwM *59:M 7w(rM **9:M 7 Ge7cZ_ jlVwn*n-9Z-Z kYnuu-Z r*sQ![Q!a9WQ Ge7Ne7e7Ui W@f/G"?9:DW& Ge7s sm !Ows*59:s7w tPwt*w.St*.rv*!9:v7vttt{Zwvssv9?&su( Ge7e7e7@e7e7ue7e7Nr w puPkwu*T9:u79:u,(uu{ ' Ge7q Okh@#w@*w@*@p9?%w@p@ $+-d'@@( -dq!e7 Ge7w t [wjGe7Yn mwkG.wm*'Ym Ge7 |hFiew.|*|-!r.|R%*.|l((|-(|*|*| $A|||-|-(| $?W9:|9:$w.~|* |>r.|*|L=>|pL=>q![ Ge7v y L-I-I Ge7z e7e7e7e7x lN!%]!e7%] Ge7{ z S (SA*v z 8rz D*z D lXz DPwX*l%l, l]!e7Xkl]XJJX-](-^(  XJJX-^(-](ld9rXA*XA XXAR Ge7Z e7e7e7e7B!rl)burrr* e9:rL*Lr-P Jw*!9:rLL*9?&rJw*C9:rL*Lu'D#wD*wD*hDDD(U Ge7| A!`MdwlZ%]q%nq,dq]!e7sd9?&sZq]qZ Ge7Ze7e7C!mY ^wm*m-x \m-`?L?1mmu wm*m- 'm'#rF */a0 ~"!~-a~-t F ~"10~F w~*r~smmm~~~V.wm*m`m Ge7JX+VZQqw+*{+6+-oKr.+*+-s3++u +-sw+*q+-x p+-s+-`?Y?1++u w+*+- '+'}Mw}*}s+++}}}VNw+*+`+ Ge7y JN@ vrK*K\ Z .^y NKmwZ *Z JZ \ Z  Ge7@!Kk_l?l~ %:~ ,0~ ]K'~  ( Ge7M v xDr/HbEwx*B 6x9=,$\w*$$ Ge7~ e7e7e7e7E!HP n Pv DQwP*:P-IPJJP-jP kHr%m*!PJ%mJD%DyDm*D%mPy&::PJ%mJymPy:y,QPPAy%D%DyxDmDc@xxD%DyxDm@xDmD%m* Ge7{e7e7Pe7 e7~F!` x[I9wp*wp*-D| p 9?Aw|*"|-3p  9?` 9?, ` ?60pg` ?6`  Ge7y P!F@/rE*E{{.fy FE{ ~{D}{^{{{{ Ge7O!ETT|w E !r#*a ^Wi,sw^W^W9?&{ Ge7U!@ fdSx @ Uwn@ n.=@ 9?&uw.@ *.@  Ge7lgOR|/a0 R10R-SPR110RPwR*m9:R,{R9:R7}R{RRR{= Ge7e7e7I!|O  gv Dwg*g-IgJJg k|g-hr%w*!gJ%wJgwggg,gJ%wJggAg%W%YWg|WwW%E||W%Wg|WwE|WwWz%w* Ge7ef e ?DAwf *f 3f UDMRandom Ge7ge7 e7CCuRFu#Cwu*u-`-Cuu(  Ge7he7e7Z!e C -Yw.e *{WVw{*{T.e {{Mw.e *{Ww{*{m.e {{Mt Ge7e7e7e7e7IY!L s- Ge7e7e7c!`A>>orS``^! wS*`bS` ;('rS*r.D*%``w9?,#`S`*`bS`palmost to 9VS6w`S5`Sdw`*` ;''Not attacking intercepted enemy!`S`'`` SD'?r`*<rS``r2``s2jj``(` tS Ge7D xN E~%B~,8r~D *~D xB~ Ge7pS!wCw9=,9=,9=,k  Enemies: d%d,wwd'*k k d'd8w ak (Gww@G Ge7D^!a!F!@( Ge7]!sBaF .s3rF *F R D%D,]rDD *C.DD `wC*#C5CF C $)D: Ge7b!e7e7e7e7}!ru},::*| !e7j-rb#jwb*b-`(b-U(bb(&vDwv*v-Iv-^v-j^Av^^,vvA~^%@%I@^@A@H@%@^@AH:@A| @A` @j:%A| %A` Ge7y_!K&pyK K Ge7i!Qn"HrB*BrBBB@Qz\B QB-ZB-Z'9?& Ge7 mg!R  9Vm G e7@e7e7Te7e7gSx"`IrR*RrRBR@Si,*]R S Ge7Gd!dm,wd a Ge7Te7e7e7e7e7e7Yj!o!w6M( Ge7s!e7e7ne7e7Zp!R S<nPwn*n-Kn-v7!9:n7|rQ*#9:Q<9:n<H9:Q<9:n<!QpnpQnnn{ Q Ge7Y4`9]nk- ``r*Ww-!|$` Ge7e7e7VT\@AFa _ FX\Fa=9<[( GBe7en!w!h;( Ge7se7e7z!e7e7t!XJ +-e^9?,9Xw.=*zIH,zI.=29=&H%"9:zI&.=2%zI&.=29=&H.$ }pmultikill_9SH H%(-e^ Ge7ge7e7e7e7x!I gFO Cw. *. -}- Ge7{!K  K  Ge7A"YmpT9%Yfql`( Ge7|!!MB F-- K9?,(K' Ge7e7e7~!LG LX'IL%L&'XL&%%L( Ge7K"Cq`98 rC I#dwI*BwH*C HHIII(wH*C Ha Ge7e7e7@"gv "VStart Soaking.$-}'/a9 gRg-'10 Ge7ru!F"|@( Ge7C"M G "opSoak pause by 9VM M B'-'-'lw. M *. M -}' Ge7N"e7e7E"QG #&r* @ 9:Q Ge7U"\i*]WHw]*1r] \H]]M wr]*w.\*]@\*w]*] S Ge7G"B@  $<9:9:$[? [r*-&.$ vB .$ g&B Ge7he7e7ENq53J#rN*r *'{r.N*xw. *&w.  [%N*(w. *r. *(rNR%  r R%N'QwN*w *(w N(hN   h<B (-  9?%(##     (Nb  Ge7Oe7e7I"P$%8r*$ P Ge7e7e7e7e7M"if -_&I r* i7,k,i Ge7ED"W"xE' Ge7P"kk7<'*w.* k!n/T/% w*%_? d6k{k_ Ge7Ue7e7R"M{F(w*%_> d6M D M_ Ge7\"S"h UgwU*U~w~*~a/!r~7~-@~*~~1 Ge7kTL>{2P U9:L G e7^"e7e7ye7e7lZ"gVSyWPwy*9y a/!yyyM  Ge7~AIc!9ImR S Dk R tR %,YwI*LLI A.LLm 9=tS  Ge7e7e7e7e7f"F_Hg F Ge7e7e7tQ"e"cMH#9?,,ff&?>9? Ge7se7e7rTuw <A.uA@ Ge7e7e7i"SY t$w.S*.SsWows*Xrs SsssM/* Ge7e7e7d"~NV=-~-i'-j' G e7o"vg ln3wv*rv7iw.v*9:.v 7( Ge7ABn"I JBGe7 }E/?\?9:9:$$J a) #==?G$W8E}'( Ge7cb"p"S# Q Ge7e7e7k"{`@sA69:W9:$9:9:$$||9:W9:$9:W9:$|.  JW${yWu Ge7vxf k%rxWWWM tWwt*{rtMxtMtMM ttM0 Ge7e7e7`l"L5Zxr[*[%r[*;w.[* r.[(d[(-aJCLwL*Lb# -aJrL[LI-aJ Ge7aJe7e7j"y"F^2D}a@@cr* r ?a?`w*-'i ! e7Gle7v"QNC Ge7e7e7 u"x"i N,C Ge7e7e7w"sLR`C\3-1 ?-( N-uYs Ge7E#tiTXWQwX*:rXtfX'XXM  Ge7|"i w*/a0 T X%X7T w.JXT *0.JXT m&X710  Ge7X@e7e7Rq"K#_k( Ge7e7e7 {"@#L#N F  Ge7e7e7 "B#A( F  Ge7e7e7 A#F -hi Ge7C#nh2?){n S n` DISCONNECT Ge7V#o\O NGWKwG*G\opqGGM  Ge7 2000e7F# 1200e7G# 320e7H# 200e7I# 200e7M#e7e7Xe7e7e7e7Q#\m*k{ \ B[X{ ?C[ \ C9?XL>C9?XL>C9?XL>C9?XL>-y X9?&#w[\w\*.-y X9?,__\9?,X9?&C333?\ \ X>XL>#\l { L>6\\I @X>XxX[-y \b[gX>X Ge7ze7e7s}"*HtX e*r***9?,&N*333?"*-qwq*w.q*wq*Pqq 9?,.q 9?,*-'q 9?,.q 9?,* zq * zq 9? 3* q 9? *-'qq* T*-(*'*-*-(*Hunt Player2*bPP P|P *;bP*-r.**wP **P *bP5*P*'*( Ge7~xI(z#wz*wz}wz*rzxrzxu} x x z x x z3'zz( ( Ge7e7e7R#e7e7S#e7e7T#e7e7[#Ve x z rB* f%E%I ,c.9L,I %vE,I ,B-J (B-G (7W 9?EB-G 'Vw=17W 9?I B-J 'Vi,B=VzwwV*wVBB lV' Ge7Pe7e7Qe7e7Ve7e7\#KCz!(rK*'YwK*[KK3(}K@Kw}*}%r}*K*}*x}-iK9?,(a mK}-iV%V,wV'*V'%wV'*r}*}V'-iKbV'a mK}-iwV'}8V' K 9?-b KbV'V-b KbV'k mKV'-b k a }V'a k -i-b V'*VK}#wK@wK*K R-i'( Ge7\6g_ jmPQWKwQ*4rQ gQQQM * Ge7^#f\a rm* w*wm*rmgmL#wL*wLmLbc L**! L !D A!LL(j jc L.fwL*rLrL*wL* @LLc LE Ge7d# H e  Ge7`#AjFsuo%?o,5ro'Ao'*o\- ]#rw]*[r]A]*C]([w]*r]*]-bIJ]]w.]*]-]q!K[] $*]](g Ge7e7e7M R g;7'w.R *r.R rR   Ge7e7e7a#e7e7pe7e77(a@' Ge7e_eF!e_ Ge7le7e7L~ dl%4l,*rl'~ (ll%ul,krl'*l'~ 'l;l%l,-G (z#wz*rzl'-G 'zz(-G l'~ 'l|( Ge7e7e7ce#j# w. *B!F X-Z.dq B!$w*!9:B!B!BQ9?&QBQ Ge7Be7e7h#e7e7M i#n#D)#.dw$$ Ge7Pe7e7q#e7e7E e7e7v#fCwnf%rf*f*jfCf('[f(E ff*F#'wF*wFfrFE F 1@-N''FF(G-NfE ^jE Cf(wfE  Ge7e7e7X ticw.*=qI!e7. F-qI$ccwX*. X$a Ge7sl#jH&9'!jURandomN-Z.dm w.S*.S-Tj T8jNeed weapon or ammoj'sj Ge7 [gJwg*wg*w.g*w.g*.g#C [ngg#C [ngw*JgV Ge7I e7e7\o E ro *(I %}I ,[wI o  '*-WdI o  '-q -q -WI -q  Ge7x ^+Z9?&*:*x %Wx ,x '*x 4 Ge7e7e7@e7e7e7e7ye7e7jU{#B9 "r*y  Z9:6yw *y9P   6y6y%6 y%y Ge7e7e7}#e7e7F$s b ?;B-{s us us m  G e7e7e7@$e7e7@e7e7@e7e7e7e7D$e7e7N$q c 7A-{q Bq Bq z  G e7@e7e7J$bg] D$w*f ;wD *D a Ge7e7de7oI$<`#rD *D awD  Ge7e7e7K$e7e7e6P$E&^  Ge7Q$m d /@-{m Km Km {  G e7@e7e7e7e7W$l e '^@-{l Ql Ql R G e7L$e7e7 M$T$r+4??a' Ge7e7e7S$ns5DYwn*wn*nnH!xnn Ge7U$rH?[b.rwb*wb*wb*bbr Ge7 X$yZ:-y !Y !N 4! g!o* !Zg!U @U e[.e[-zto*\%\7[yw\[*%z\[t<r\[.eo\[\ !k !Q g!Vo* g!Vo*.e-g!V.e/C.eoy9=U g G e7c$r 5r.U-`  E% wj*. S jwEx*-X49:Eb %|_ a Ej {|rr!a |!F0wEx*=r9?, E%-e;rwr*r$aEx$? @(r$aEx$? @(z!e7.%r kzrE&x*aa Ex(Ea Ge7[$e7e7o@e7e7e7e7UUb3m*w*' Ge7\$(QB.mL ?.$-}-' Ge7 VUe -\-Y Ge7]U`$MiR-;6 6  Ge7a$e7e7e7e7_$_U W l F|_Random_,mpp|_DMRandom_&,&m_ m/_ T _WWARNING - bot failed to start combo! Ge7f$t_ 2 oq~J%qdq%opoJqJJqq%N }JAJq,N ,%JJN ,Jopo^ tAq~J%{JopoJo G e7b$rA &#9?&@r Ge7@e7e7l$p^ 2+(|q%Lpp(pQ) G e7ne7e7o.*(a?Q= A]2' Ge7h$j$M/G ' Ge7e7e7i$U G4 U h'IU %U &'hU &%%U ( Ge7z${] /n'9:{M%a @?(n{vK{m U{sz{t Ge7e7e7k$M D!  Ge7 n$p$MI!;1w. *   Ge7e7e7o$_P|"'$w*N(6 Ge7 q$iR Yd#iFL= Ge7je7e7e7e7r$v$Y^#F-i,P 9?,X Ge7e7e7u$x$\cK$I-s 9?,ZM^ Ge7e7e7w$Dvk-%&h $D| -'o$  9? 6 9?6 6 ?-'-'D|*-( Ge7$p [ .Gjp vKp m Up szp t Ge7y$fC_'"fC Ge7@e7e7{$dN(n*r*w*6+w*-0I  D-J'-e (w*-n K-E! V(-n'-n3-J(-J J.dw* r--e (w*-n K-E V(-n'-n( Ge7e7e7E%Aj |a-RA, A@AeC{A{A{An  G e7e7e7^U=/0$r* N.-a=' Ge7 A%R N@0rR *R 4rR * wR (R w*KNM(NM(( Ge7be7e7e7e7K%}Z r+^}@}b}}K}n z}y Ge7^e7e7e7e7U%e7e7 \W241w* s  Ge7 I%} T >3nw*wX* a} Xu>w*r.*w^*a} ^r} >>r} PH=} L? r*PH=x9?,PH?=PH= Ge7V%s Y i*Gs s %7m&^s mKs Zz!e7 Ge7PHe7e7J%N%q%Y6#r*r*(R hw^* a^R 9?,R 9?,9?, Ge7R e7e7Ze7e7M%Q%n0t7e49?, a^'L9?,fff?9?,9?, Ge7e7e7P%S%L 9F8c j'&9:9:$(Y # r'n Ge7e7e7R%GCO(:GJhG9=,9=,9=,CGJhw*Gaappppppp  goalscript v9V Sniping 9Tc ReTaskTime 9Up(G+appp  ReTaskTime 9Up(h9?,JG@hw*GapppppppppEnemy Dist 9U   Strength 9UB Acquired 9T- LastSeenTime 9U AcquireTime 9UIhJG@hwEww*.w.w*-] (C%C,rCH*-] 'CH.wCZ.-] { .wC%.C,$CH{ H{ { CHCHHCww0GaapppppWeapons Fire last attempt at 9Un success 9T-n stopped firing 9T-e (hJG@hC%:C,0wCH*^ ^ v9VCH9UCHCGapWeapons: ^ (hJG@hGXapppppPERSONALITY: Alertness 9UZ Accuracy 9UK  Favorite Weap 9V^hJG@hGappppppppp Aggressiveness 9UL  CombatStyle 9U{ Strafing 9Ub Tactics 9Uw TranslocUse 9U^hJG@h Ge7e7e7\%r V a)6Zr }Kr n zr y Ge7Ve7e7Ge7e7~[%[ y lNw.[ *Ga.9TG.[ [ *' Ge7FJO - ,w* h Fq  Ge7e7e7e%BU T'BB%y &Z9:Bq &.-B\.''VBFKBz zBAa?( Ge7k%KCq-K*w* CK Ge7Re7e7 T%`%AHw.Q*![5w. *!] Ge7e7e7 _%b%U B:(w. *  Ge7e7e7a%d%jC'r.d%*d 33s?K@r*d >Kd 333?Yd  d%!N$@! Ge7d e7e7m%dF%%y &Z9:q &.-\.'(RFKz zA Ge7c%MD8r*$ M Ge7Ne7e7e7e7 f%LEEe G9:i H K -- H9:i Ge CLe i I Ge7p%e7e7q%Oz'$w*zOQ Ge7w e7e7t%h T >~$6Nh LKh { zh J Ge7Je7e7 i%k GG,wl  mL ak ![ k !]m9?&-f9l !Y9=,@!l !Y$@!-f9(.Gk l  $ Ge7@e7e7~H}C 9w %4w , *rHw ['w ( Ge7 fUs%mMa^Q ,a wG*5G $ Ge7Ge7e7v%N R 6W#LN N %H&JN LKN { zN J Ge7e7e7z%NL )!a@@(%xNU%j NR9:9:$M%.-&xMV%j %j MCzNP Ge7 hPQ x1 9w*H Q W R9:R&tw. Q *%. Q wW (rQ *'Q   W  Ge7PYXO2r*! Y9?(-t b$Y #?- -t --t b$Y կ#?=-t 8b$Y #?(P2 YD8b$Y#fff? (' Ge7p e7e7C&P K *P P %N&BP UKP Rwf *9:9:$f %.-&xf VzP P Ge7t e7e7Re7e7x%~%]/NSs B-u -L  ?9?s {9?JI @@@9?,s {X((' Ge7s e7e7e7!e7}%{UB0V|- - y9?,E-( Z\]G k Z\]GG{ 6G6Gff? r aVTSG(Yrr *-' 6G6Gff? r aVTSG(rr *-( -' Ge7B&e7e7e7!e7 F&S ^5xa S U$-` (-X4-L6 @!k @!Mr. @! jS -` 'r* @!ZjS -` 'w.S @!Z @!Y w*a .- 7.- @!k @!M&.-  @!Ma S -H S @V a?(@!YK 9:VS@!NR 9:VSD@!kd9:VSv@!Md9:VSa?(@!ZV 9:VS@!Q Y 9:VS[ 9:VS%xS%j K%b U.r.S -e;'uur. @!k @!M-e;' Ge7%@e7e7e7e7H&K @aw @K  G e7Re7e7W&pH )a pU$SV !YL NX JP9:E ,a>(&a=(V !NT HX JV !M V !kU 9:E X JV !ZZ 9:E X J] 9:E X J%xJ%j K%b U Ge7S&D&} [ Ge7@&L&caYvw*-sw*-u Ge7e7e7K&'gaZ$!w*'* Ge7M&O&HpZBM(MH Ge7e7e7N&pB\fDr*pRelative strength with no pawn in state 9Wa_9D?9?ppq #<9?_qqPpP}w*q?}?q>}wp*p?q>wp*q?pp 6p 6 9?@qL>II6 6p 9?@q>xqp Ge7Ce7!e7qe7e7M7Q&[tI C%^C7BTCB-FCB-F'CBCC7B7B7B&CBgCB-F'CB Ge7MJ@e7e7 P&cL`T ce <rc%  5e Ge7e7e7 VPh\0B/h-i-j% G e7U&cta-s'l-cI  -'z-(kF#wkF*rkFIIkFIkFkF( Ge7O e7e7o&v Y`Gv 7B7B7B&v Bgv B`  Ge7^&S w q  n%(M %x-L  M ,dO nfS g9:O V&n-L 'M -L PlayDeathPhrase: Could Not Find Suitable Phrase.(S +aO U$ @S 'C' G e7 H `~ duK-(wl r`!ZG9:^Cl Ge7@e7e7>z x d prz *^9:9:$z %z Cmz  Ge7@e7e7e7e7b&e7e7c&e7e7d&e7e7e7e7 YSY ~fpw.*(xS--(N-uu9:9:$o$kk9:9:$-o$ko$k-26 6 9?% 66  a r W r-'-'( Ge7c e7K e7re7e7x0 e7 M>no tguNw-s* r*-s 9?,nwn*n  9? bnnnnUx  6x nwn*6n 6 A n 6A F A x F 6 6n r* DF  bnnDF nn r*w a/!^w* r-m'K(@@-s 9?,@- wU-'UO|:a/!S* aL>(@_? Ge7e7e7v@e7e7j&e7e7l&@e7e7txe7y&m&[Y( Ge7hUn g}}n -(M̌?fs9:9:$o$u!% Ge7e7!e7p&kO~ k@M Ge7| @e7e7r&ZMl.9M.:9?,Y@@T89?,mL w*-9?,~$-{9?,.~]29?,6_R']29?,69D9?X9?']2R69D9?0u9?]2Z@?L=]29?6 9DZo Ge7o e7e7t&oRURw*09?,?R?= Ge7v&~  r* X-9:9:$-(333 -'9?,333?9?,-(L?L>ZL? Ge7w&J J.Z[XJ 4?J J  Ge7I'q&gU1 Ge7 x&K m 9Z- RwR*Ra/!r.Rr.R*.R@ RR&wK *wK *K   Ge7e7!e7u&e7e7vN'|&^-?{ro *| o QMz| o :Xxppppo  (| ): X G e7 e7e7`@'u](rP *NONE%P  Ge7@e7e7&B'ves(r*NONE% Ge7@e7e7A'um-j(pWhatToDoNext at 9Uhr*p WhatToDoNext with no pawn r*r.*pppp WhatToDoNext with no weapon, 9V health 9Sr*{w*ow.*w.*.Q.%A  a n*-u(r*)w.*.% a~ 29:9:$fX9:9:${ wz*z-1z  zmz -bI'w*(%r*/r*C( [ 3oFl1@/1@/-bI(Hr* _ ~ w*ipWhatToDoNext Wander or Camp at 9U7'_ Ge7~&e7e7e7e7cG'3h0A rB-_BA-_b-_ Ge7e7e7dBj ;"" fr* r* r*pppppHERE 3 Squad 9V Enemy 9V pawn 9Vw.*g%-j a rr2s2FAILED HUNT - HANG OUT3-j (T 7' -h-P -P (h   S {z N?L?9?,S ?a    w*N9?,} 5h 9?N?F9:9:$9:9:$6 6 9?@NN?S F9?,h ff&?9?-g'N?FF6 6 N{3 [Hunt priority enemyq! Enemy not visible-j Stake Out - no charges.F 1@ X(pStake Out 9XsN9?&1@@9?,c]Stake Out2sHuntq! n*--j -hChargeN /^!Long Ranged AttackG -j  9?,-g N9?& ?Charge closerN ` c/{.>w9?&\h Ranged AttackG 6-j 6N9?&Charge 2N Do tactical moveE 333?9?,T89?, ^i ]Try to Duck ?i 9?ri 'ri (q Ge7O'\vO"z\[}\ Ge7@ e7e7ee7e7e7e7F^p< r@ * F$9=,$Fap@  (F)FFe @ Q{ F$$9=,Fapp ( ):(Fa: (F)FFeF $$$F a`( G e7W'faJ!0ufuf Ge7e7e7 `'B b* V'rB *rB * MB %HSI G e7@e7e7C e7e7Xpip ChooseAttackMode last seen 9Ur* r* r*pppppHERE 1 Squad 9V Enemy 9V pawn 9VpBw.*g%'p -u [g mD?g g 33>L=pg Retreatw* L=*! !xpA!a 9:D%w9?,0p?w?Np>qtq9?p>q9?q9?Tq3r.*pfallback - inventory goal is not pickup but 9VpppFallback to better pickup 9V. hidden 9T.-q!L ChooseAttackMode FightEnemy;'p Ge7Xe7e7S'e7e7['Tt7T %[X%X, &frX[T`wX&[*T X&[zzrX[*XT  Ge7gBY T+e fY (kw.9*!.9|$(-w.*(efY 9?, r*@\ bY  w\ *\ '( Ge7e7e7\ e7e7d'Y's0  Ge7X']'D/T'qr*r b l%qr*(rl*lb-r.*wl*l'*( Ge7le7e7e7e7 \'i!JPi_ i_ /a9 %jLj G L10 Ge7vn'V'^!ErC *&zC pC : W G e7e7e7_'c'XcpNo anchor 9U 9?,-!NO PATH AVAILABLE!!!:N ,-%w.*w.*.Q.5A  'N r.*9:9:$o$ ի?6 (N %pFind roam dest 9Ur*r Ynw*uk*b k%r*-9:9:$!COULDN'T FIND ROAM DESTINATION(rk*kb( wk*k'Q-9:9:$!pCOULDN'T FIND ROAM PATH TO 9V*'( Ge7ke7e7g'^'m. Ge7b'] f>W] 9?,ȫ9?,,ralq Wի?]  (wr*Wlq] 9?,b$W (W W_ W -9:9:$6_ _ 9?, Ge7e7e7y'f'P+( Ge7le7e7a'e7e7ne7e7e7e7Me7e7b^fu[,-F9:9:$-U (-V (EEL,<q!W Ge7HP^v rn* P$9=,$Papn: (P)PPMP $$$P aN( G e7p'e7e7e7e7k'e7e7e7e7@e7e7Fe7e7GtD`b  @b  (w b 6wyt  6yyy]wyL?- '6c6w6c6wcy9?%c9?  ի?t?wc Ge7t'e7e7b e7e7v'e7e7z'Cy& C Ge7b(^63.$-u Ge7@e7e7u'AAopDIRECTED WANDER --`fAq!~!Zlq!~! Ge7@e7e7}'e7e7~'e7e7Re7e7AW@e7{'e7 xC(D09:D% Ge7e7e7~e7e7D(a ~ G e7G(e7e7d e7e7d e7e7KXytqNr*Fry wy*s2r2-9:9:$!pCOULDN'T FIND ROUTE TO ypppNo path to y(9Vy)w* Ge7CXH2/% %,L,< Ge7e7e7I(wp;-(w&w('tw Ge7J(&K -k -w&* w&Z wZ*w&*wZ*1w&ZwL *L e-,-k  w&*& 9`&Z<w&*&- wZ*Z-gw.%&*.%&J -k -k cJ&Z?-h w&Z-k & 9-h'w.=&*.=&-g3'J Q%&}&first_blooder&Z& 9|<-1rZ&& 9t<& 9}<w&*&y.<&e-,_&&e-w&*&-w&*w.L *"wZ*.L - .L c'~EQ/&Z.L rG~E%CwZ*C-k wZ*~E~ErGpTeamKill_rG~E%&9?~E&9?&8&9?~ErG&ZL c Ge7e7e7 L(Bk kB Ge7I I?I @{IH 1rH * gwI *H u'I I - I FH  G!e7e7e7O(b&&-D bbbrbb-E-r.*w.b*w*'w.*9:9:$rb wb*/.-e-Pw.*?.0r-(]IR%r]I*r]I*.9?, b  .l((bb-Ew.b*w*'Wrb wb*s2r2-9:9:$!pCOULDN'T FIND BEST PATH TO 9Vb( Ge7@e7e7S(e7e7T(e7e7]Ie7e7R(LI IL Ge7U(e7e7e7e7une7@e7!e7W(pkYo 99L #?uo poaPmLuL(ro*(um#?p?u9?*b$LuL u'0b$LuL u' o 9?,' Ge7f(Oa O%[Y G e7oe7e7e7e7_(e7e7`(e7e7Bn!e7` e7e7c(e7e7 \(p v ?r*#r*(Z #A A  p w*A p b$A 9:9:$(:b$  p A'( Ge7 [QW Q%RS G e7Ae7e7q(k[` .kkw` *6`  6`  [ ` -'` $I.k@wI*h I I g 6h c  @I g [ I h c 6I g c ?[ c w.k*w.k *.k 6  [ ' Ge7e(_] Qia/!L7Rw.*R9:.,_ @__@@A9?,    ?   *w.*.-_>9?9D9?,__?-b_? #_L>=9?,@%%K 9?,ZI 6ZIUH 6UH%UH#ZIUH33s?_L?BjCiK 9?,_@?w*-_? ף=@L?C>>?B_@ ף=@C>333??-b_33S@\>K A?9?, ?& L>_ff?,9:9:$9:9:$_? #=K I??9?,@_?-e_?_@__`_9?-eFGBFGCFGXL8_k(`XLFG[IFGk(8N_9?%_[I`_[I_ Ge7e7e7be7e7 |Oe'   Ge7@)yIyl d_\l % l , wy*ry*;y, y%yH(l &fN$$$ G e7o(e7e7XLe7e7@e7e7r(j(T ' Ge7[ (Z[  Ge7v(t z<t C nt 9w* zt  Ge7]e7e7x e7e7w(V nFV 9?&x V 9?&x V 9?&V 9?&x ?@ Ge7Q (^Q a CQ [ar*Q  } Q  Ge7p(e7e7x(e7e7{(e7e7e7e7igawp9Sgh G e7yE@e7e7 D)ja % w* a j( Ge7e7e7z@C)T_' Ge7A)e7e7E)e7e7ADTq&'>0l%T{XWeapons.TransLauncherT Ge7I)Q a(Fwu* 9:u9:$w.9u*'.9u-T Q ,u7Q % wu*bEurbE*%W yE%yE7bEwyEbE*!yEbE-DyEbE-yEbE-lIyEbElI%pp%W (9SbElI)77Q &ru*u-%W 71u-&W 7vQ W  G e7W eI\etqpolt,ew (e` (e}'Xt, we*we*we*ea/!xV.9e-T ).9e-^=eg,!d $'t& t,eb t,e d s G!e7T)pIW pEX Gw,wG* rX p\p-w.p*$r.pX pF-ESN$'pb  G!e7@e7e7M)e7e7qOS)Is8H2r*,   , , Ge7{e7e7   Ge7U)Q)G !a9?&( e7Ge7e7e7Y)Aa3Mrf*rk*J{kkAXrk*{ff-f\f]pk_fP G e7Dp rD@ Ge7[ES'`a Ge7 zE\ 3!\EHI Ge7@e7e7 d)xZ &x5rz*xWaxGzF G e7\Ie7e7W)\)R N4/&w w Ge7e7e7[)oS 5-w.*.- 'Db9?,(row*-(b9?,9?&r.o*m.orm*m- (m,'m-  L?'w.o*5w *ro b9?,9?&b9?,9?&(-` r*>~89?,'w*3Y?? Ge7e7e7me7e7f)nsR {W?- - ((D-oKw.O*(w`*`- w`O` lOw.`*w.`.`*(rn*9:n{ 9:{ '9:n{ 9:{ (MwO^*rO^X'nW9?&9?&nW Ge7])b)s G9a4r.*w% r%**r.&*r.&*r.&*?w.**  9? b*G>r.&*;w.,*w.,*w.,* b,,\b&&* Ge7e7e7Ne7e7 _c)V LrL*rKN,K-\I.Kl,w\I*r\IN,  G e7he7e7OSRr4/b!e7/a0 xb..10{!e7p9V has no tag - won't be assigned to any objective!-t QJ/a0 RwRQJVRR-t (QJR10d!e7/a0 BqdqN 10 Ge7X@e7e7x^v-rK(' Ge7 O)ec;Z,we*eae*e *Ee Ge7o)^ IS^ gfeb9wf^  ^ F-!x$' G!e7@e7e7k)e7e7l)e7e7` e7e7rn)a J?r` *&z` ` r G e7^q)oY Mw.*(N?Kawa*w.a*.a?.aK(aab' Ge7ae7e7@e7e7 p)XYh AO@(wXX b  Ge7Ve7e7e7e7 `Ctj THE% v9?% 5t $ Ge7,e7e7{)uaZw |r.V*u w%,r[*^.V%[`t[cv &r[*.V%i j .V%[v[xv W, r[*>.V%[TT[Uv ,~.V%i j v ,r[*.V%[J[Iv , .V%i j v s,(r[*Z.V%[Jp[Iv  G e7l@N5bF-*w.%@*.%@ N-g Ge7e7e7xQI8 QQ}zU1r.U* Q X%Qd ,D \& a, ,Q"g,.UPN$' ,Q"g,.UQN$' , ,Q"g,.URN$'  G!e7H CR UE6wr*-(t-Cr DB8R-C Ge7F=Q7}] _Ir%]3w]3*w]3*]3w6~p?SpectatorOnly=1~]3]3JF=}~--.%J-T'i9:9:$^J-[-n6)-^;-9?\9?,9?&\iu JJ Ge7e7e7e7e7CzI*~ [b- !u%w.*:.-r r *)rR%  !M !u%`- !u%w.*:.-r r *)rR%  !M !u% w.*wR%*kR%<B w w *)rH k <B *a 'bA x*< tw #1-a@a? $ #*< twkHCaw.*wR%*kR%<B wpw *)rH k <B w*a@@b |B! $? !M ! #Zr.*.-*< twkHCaagb $  O&ZUMAu%Ze7Gpe7a {v hW2A {  Ge7~)e7e7zA*D*C W' Ge7e7e7C* WZJw*i0K(.u!% Ge7E* X_*-(-'-'S'>_ Ge7F*, Y*<p>w*-(-(S(9?%-' Ge7 G*[ Z  $ Ge7H*` [Hw<w < rw Ge7BB*L:  Ge7gCN*g m)a? $  ! e7Ge7o|m k%STARTLED!z| Ge7]XTJ*U; Ge7L* ol  z 6 -(-( #    Ge7BPC!q|nwP*wP*.PX?P P Ge7JbF ntCr*r.b*lb(o.bg'( Ge7Je7e7e7e7Pw_KN Ge7AHLAQA89:9:$11&& Ge7ee7e7H lR oE6wr*-(t-lr DB8R-l Ge7U e7e7|'class WillowWhisp extends xEmitter; var vector WayPoints[11]; var int NumPoints; var int Position; var vector Destination; var bool bHeadedRight; var float LifeLeft; replication { reliable if ( Role == ROLE_Authority ) NumPoints,WayPoints; } function PostBeginPlay() { local int i,start; local Controller C; local Actor HitActor; local Vector HitLocation,HitNormal; Super.PostBeginPlay(); C = Controller(Owner); if ( C.Pawn == None ) return; SetLocation(C.Pawn.Location); WayPoints[0] = C.Pawn.Location + C.Pawn.CollisionHeight * Vect(0,0,1) + 200 * vector(C.Rotation); HitActor = Trace(HitLocation, HitNormal,WayPoints[0], C.Pawn.Location,false); if ( HitActor != None ) WayPoints[0] = HitLocation; NumPoints++; if ( (C.RouteCache[i] != None) && C.ActorReachable(C.RouteCache[1]) ) start = 1; for ( i=start; i= NumPoints ) { mregen = false; LifeSpan = 1.5; LifeLeft = 1.5; Velocity = vect(0,0,0); Acceleration = vect(0,0,0); return; } bHeadedRight = false; Destination = WayPoints[Position]; Acceleration = 1200 * Normal(Destination - Location); Velocity *= 0.5; Velocity.Z = 0.5 * (Velocity.Z + Acceleration.Z); SetRotation(rotator(Acceleration)); Position++; } auto state Pathing { simulated function Tick(float DeltaTime) { if ( LifeLeft > 0 ) { LifeLeft -= DeltaTime; if ( LifeLeft <= 0 ) { Destroy(); return; } return; } Acceleration = 1200 * Normal(Destination - Location); Velocity = Velocity + DeltaTime * Acceleration; // force double acceleration if ( !bHeadedRight ) bHeadedRight = ( (Velocity Dot Acceleration) > 0 ); else if ( Velocity Dot Acceleration < 0 ) StartNextPath(); if ( VSize(Destination - Location) < 80 ) StartNextPath(); } } e7S_*jLw -%'-q'dwd*wd*d--q(dd9-q'-q|kLastManw*Ljk(-qjY&%W-~o$>-~'(&%&%U .p.J0U 0-(qZ6dUwd*dTO.d>wO*O`'O o0O 0O-NOrOOU>w*-rOdd1U -(U -'' Ge7f[*r `q`=r *w <B ? Ge7e7e7FZ*]*K ra_b-w.*9:D%r.*. t@w.*.  gpShort wait for inventory 9Vq!~!UaS?rSb $ D-!STUCK IN ROAMING! Se7GHe7t ^rN-w*/9:9:$a/!T Ge7D~ EpT2$w. ~ *. ~ Ev~  Ge7RgT} Hk ^Pw} *.} X#R}  Ge7e7e7xHi% 3xMw.i*r.*ri.w.*ri.R%TI. J-wTI*TI o%w.*A- $6'v!%rir,=G(B.iJrB*rB*(lBr% w&*B &  9?&& 5B-ri==FB(DB( Ge7}class WeaponDamageType extends DamageType abstract; var() class WeaponClass; static function string GetWeaponClass() { return string(Default.WeaponClass); } e7Be7e7n*t~PC/a0 tt69:tMt6t.pt6Jt9:tM%.p&\ t.p%\ t10 Ge7a*tA}N-w*/9:9:$a/!T Ge7e*OG}=,C( r* $ :u!Av!O Ge7H f*dRR~.-(t-d+-dv!Au!O Ge7e7e7Gl1pҁi r*'<9:,l@l9?,dIl'( Ge7Tclass UTJumpPad extends JumpPad placeable; function PostBeginPlay() { local int i; Super.PostBeginPlay(); if ( (Level.Game != None) && Level.Game.IsA('ONSOnslaughtGame') ) { // fixme - useful for all gametypes, but only tested with Onslaught // should be in path creation code for ( i=0; i PhysicsVolume.Default.Gravity.Z) ) B.Focus = B.FaceActor(2); } /* defaultproperties { JumpSound=sound' } */ e7e7e7i*m*/ r*'Z%w*OL>(OC-u('( Ge7e7e7lHAc`>!c-yD9:9:$L,.^.c-R ,?@9?, Ge7KNw.*q!T& S-P-q --q q!R Ge7o*q`V-9?%L,GS7']q!i Ge7p*aцDq! 3No retreat because frustrated-u'w*-q!Rw.*q!T&q Stakeout because no retreat dests Ge7q*L\5Ew*-L9? Ge7~@I( F~~ Ge7e7e7Gr*{*Ge7Hw*B׉' Ge7e7e7Ov*y*S$8S@ Ge7z*e7e7e7e7sx*e#-f Ge7fu*]+Rj͗;9:9:$ bNr* $f&('q-NaS? S $-!STUCK IN CHARGING! Zfe7Ge7tKw -bH- Ge7z}*`rR-(4?8r`-QOrz` Ge7Me7e7wPAAs]qwAnwA*4TeamChangep9SAA Ge7e7e7Y~*Ri .R>{9?(;-S'p   #? p 9?%p 9?zp  Ge7e7e7Se7e7yITNVT Ge7p e7j*h y G+ 5udƄhbQ bQ ||ʁ)ʁ)ʁ)3}3}Zsnwwgnwwge7e7B+Yzao  @Raoq 9?,Y (o wR*Y9?Raoq 9?,Y (o wR*(J9:9:$Raoq 9?,Y B#? 9?,Y(o JrR*( 9?,,Yq!i!W' Ge7b Roster; var() class AllowedTeamMembers[32]; var() byte TeamAlliance; var int DesiredTeamSize; var TeamAI AI; var Color HudTeamColor; var string TeamSymbolName; var array RosterNames; // promoted from Team/DM rosters // Assault var float CurrentObjectiveProgress; // If team didn't beat all the objective, keep the progress of the current one var int LastObjectiveTime; // Time when last objective was disabled var int ObjectivesDisabledCount; // Number of objectives disabled /* Reset() reset actor to initial state - used when restarting level without reloading. */ function Reset() { Super.Reset(); if ( !UnrealMPGameInfo(Level.Game).bTeamScoreRounds ) Score = 0; } function int OverrideInitialBots(int N, UnrealTeamInfo T) { return N; } function bool AllBotsSpawned() { return false; } function Initialize(int TeamBots); function FillPlayerTeam(GameProfile G); simulated function class NextLoadOut(class CurrentLoadout) { local int i; local class Result; Result = AllowedTeamMembers[0]; for ( i=0; i (T.DesiredTeamSize - T.Size) ); } function RosterEntry ChooseBotClass(optional string botName) { if (botName == "") return GetNextBot(); return GetNamedBot(botName); } function RosterEntry GetRandomPlayer(); function bool AlreadyExistsEntry(string CharacterName, bool bNoRecursion) { return false; } function AddRandomPlayer() { local int j; j = Roster.Length; Roster.Length = Roster.Length + 1; Roster[j] = GetRandomPlayer(); Roster[j].PrecacheRosterFor(self); } function AddNamedBot(string BotName) { local int j; j = Roster.Length; Roster.Length = Roster.Length + 1; Roster[j] = GetNamedBot(BotName); Roster[j].PrecacheRosterFor(self); } function RosterEntry GetNextBot() { local int i; for ( i=0; i PawnClass) { local int i; for ( i=0; i // ==================================================================== class UnrealSecurity extends Security; event ServerCallback(int SecType, string Data) // Should be Subclassed { Super.ServerCallback(SecType,Data); } auto state StartUp { function Timer() { // Police the client by checking key packages for modifications // ClientPerform(0,"core",""); // Check the QuickMD5 // ClientPerform(1,"engine.actor.setinitialstate",""); // Check a CodeMD5 // ClientPerform(2,"core.u",""); // Do a full MD5 // ClientPerform(3,"",""); // Get Package List } begin: SetTimer(frand()+1,false); } e7YAm}#m&N %N &bmN 9?&zGmtMmN 9?,zGmoMzGmyMi wi* ia/!.ig,zG$'ii Ge7q1class UnrealScriptedSequence extends ScriptedSequence; var UnrealScriptedSequence EnemyAcquisitionScript; var Controller CurrentUser; var UnrealScriptedSequence NextScript; // list of scripts with same tag var bool bFirstScript; // first script in list of scripts var() bool bSniping; // bots should snipe when using this script as a defense point var() bool bDontChangeScripts; // bot should go back to this script, not look for other compatible scripts var bool bFreelance; // true if not claimed by any game objective var() bool bRoamingScript; // if true, roam after reaching var bool bAvoid; var bool bDisabled; var() bool bNotInVehicle; // bot should not attempt to use this script while in a vehicle var() byte priority; // used when several scripts available (e.g. defense scripts for an objective) var() name EnemyAcquisitionScriptTag; // script to go to after leaving this script for an acquisition var() float EnemyAcquisitionScriptProbability; // likelihood that bot will use acquisitionscript var() name SnipingVolumeTag; // area defined by volume in which to look for (distant) sniping targets var() class WeaponPreference; // bots using this defense point will preferentially use this weapon var float NumChecked; /* Reset() reset actor to initial state - used when restarting level without reloading. */ function Reset() { bDisabled = false; FreeScript(); } function FreeScript() { CurrentUser = None; } function bool CheckForErrors() { if ( Tag == '' ) { log(Self$" has no tag - won't be assigned to any objective!"); return true; } return Super.CheckForErrors(); } function BeginPlay() { local UnrealScriptedSequence S, Last; local SnipingVolume V; Super.BeginPlay(); if ( EnemyAcquisitionScriptTag != '' ) { ForEach AllActors(class'UnrealScriptedSequence',EnemyAcquisitionScript,EnemyAcquisitionScriptTag) break; } if ( Tag == '' ) warn(self$" has no tag - won't be assigned to any objective!"); else if ( bFirstScript ) { Last = self; // first one initialized - create script list ForEach AllActors(class'UnrealScriptedSequence',S,Tag) if ( S != self ) { Last.NextScript = S; S.bFirstScript = false; Last = S; } } if ( SnipingVolumeTag != 'None' ) ForEach AllActors(class'SnipingVolume',V,SnipingVolumeTag) V.AddDefensePoint(self); } function bool HigherPriorityThan(UnrealScriptedSequence S, Bot B) { NumChecked = 1; if ( bAvoid ) { bAvoid = false; return false; } if ( bNotInVehicle && Vehicle(B.Pawn) != None ) return false; if ( (CurrentUser != None) && !CurrentUser.bDeleteMe && (CurrentUser != B) && CurrentUser.SameTeamAs(B) ) { if ( (Bot(CurrentUser) != None) && (Bot(CurrentUser).GoalScript != self) ) Bot(CurrentUser).GoalScript = None; else return false; } if ( (S == None) || (S.Priority < Priority) ) return true; if ( S.Priority > Priority ) return false; if ( (B.FavoriteWeapon != None) && (B.FavoriteWeapon == WeaponPreference) ) return true; S.NumChecked += 1; return ( FRand() < 1/S.NumChecked ); } e7v//============================================================================= // UnrealPlayer. //============================================================================= class UnrealPlayer extends PlayerController config(User); var bool bRising; var bool bLatecomer; // entered multiplayer game after game started var bool bDisplayLoser; var bool bDisplayWinner; var int LastTaunt; var float LastWhispTime; var() int MultiKillLevel; var() float LastKillTime; var float LastTauntAnimTime, LastAutoTauntTime; var globalconfig string CustomizedAnnouncerPack; // OBSOLETE var globalconfig string CustomStatusAnnouncerPack; var globalconfig string CustomRewardAnnouncerPack; var transient globalconfig array RejoinChannels; // Channels which player was a member of during last match var globalconfig array RecentServers; //IPs of recently visited servers - always in order with RecentServers[0] being the most recently visited server var globalconfig int MaxRecentServers; //Max length of RecentServers list (0 = always show login menu) var globalconfig bool bDontShowLoginMenu; //Don't show the login menu unless forced by the server var bool bReadyToStart; //Ready to start the game - used to prevent player from clicking in until he's had a chance to see the login menu var string LoginMenuClass; //Set by replicated function called by DeathMatch to the name of the login menu var bool bForceLoginMenu; //Set by replicated function called by DeathMatch to whether it wants to force player to see login menu var float LastKickWarningTime; var string NetBotDebugString; replication { // Things the server should send to the client. unreliable if( Role==ROLE_Authority ) NewClientPlayTakeHit, ClientDelayedAnnouncement, ClientDelayedAnnouncementNamed; reliable if ( Role == ROLE_Authority ) PlayWinMessage, PlayStartupMessage, ClientSendStats, ClientSendSprees, ClientSendMultiKills, ClientSendCombos, ClientSendWeapon, ClientSendVehicle, ClientReceiveLoginMenu, ClientReceiveBotDebugString; reliable if ( Role < ROLE_Authority ) ServerDropFlag, ServerTaunt, ServerPlayVehicleHorn, ServerShowPathToBase, ServerUpdateStats, ServerUpdateStatArrays, ServerGetNextWeaponStats, ServerGetNextVehicleStats, ServerSetReadyToStart, ServerSendBotDebugString; } // Local stats related functions function ServerUpdateStats(TeamPlayerReplicationInfo PRI) { ClientSendStats(PRI,PRI.GoalsScored,PRI.bFirstBlood, PRI.kills,PRI.suicides,PRI.FlagTouches,PRI.FlagReturns,PRI.FlakCount,PRI.ComboCount,PRI.HeadCount,PRI.RanOverCount,PRI.DaredevilPoints); } function ServerUpdateStatArrays(TeamPlayerReplicationInfo PRI) { ClientSendSprees(PRI,PRI.Spree[0],PRI.Spree[1],PRI.Spree[2],PRI.Spree[3],PRI.Spree[4],PRI.Spree[5]); ClientSendMultiKills(PRI,PRI.MultiKills[0],PRI.MultiKills[1],PRI.MultiKills[2],PRI.MultiKills[3],PRI.MultiKills[4],PRI.MultiKills[5],PRI.MultiKills[6]); ClientSendCombos(PRI,PRI.Combos[0],PRI.Combos[1],PRI.Combos[2],PRI.Combos[3],PRI.Combos[4]); } function ServerGetNextWeaponStats(TeamPlayerReplicationInfo PRI, int i) { if ( i >= PRI.WeaponStatsArray.Length ) { ServerGetNextVehicleStats(PRI, 0); return; } ClientSendWeapon(PRI, PRI.WeaponStatsArray[i].WeaponClass, PRI.WeaponStatsArray[i].kills, PRI.WeaponStatsArray[i].deaths,PRI.WeaponStatsArray[i].deathsholding,i); } function ServerGetNextVehicleStats(TeamPlayerReplicationInfo PRI, int i) { if (i >= PRI.VehicleStatsArray.Length) return; ClientSendVehicle(PRI, PRI.VehicleStatsArray[i].VehicleClass, PRI.VehicleStatsArray[i].Kills, PRI.VehicleStatsArray[i].Deaths, PRI.VehicleStatsArray[i].DeathsDriving, i); } simulated function ClientSendWeapon(TeamPlayerReplicationInfo PRI, class W, int kills, int deaths, int deathsholding, int i) { PRI.UpdateWeaponStats(PRI,W,Kills,Deaths,DeathsHolding); ServerGetNextWeaponStats(PRI,i+1); } simulated function ClientSendVehicle(TeamPlayerReplicationInfo PRI, class V, int Kills, int Deaths, int DeathsDriving, int i) { PRI.UpdateVehicleStats(PRI, V, Kills, Deaths, DeathsDriving); ServerGetNextVehicleStats(PRI, i+1); } simulated function ClientSendSprees(TeamPlayerReplicationInfo PRI,byte Spree0,byte Spree1,byte Spree2,byte Spree3,byte Spree4,byte Spree5) { PRI.Spree[0] = Spree0; PRI.Spree[1] = Spree1; PRI.Spree[2] = Spree2; PRI.Spree[3] = Spree3; PRI.Spree[4] = Spree4; PRI.Spree[5] = Spree5; } simulated function ClientSendMultiKills(TeamPlayerReplicationInfo PRI, byte MultiKills0, byte MultiKills1, byte MultiKills2, byte MultiKills3, byte MultiKills4, byte MultiKills5, byte MultiKills6) { PRI.MultiKills[0] = MultiKills0; PRI.MultiKills[1] = MultiKills1; PRI.MultiKills[2] = MultiKills2; PRI.MultiKills[3] = MultiKills3; PRI.MultiKills[4] = MultiKills4; PRI.MultiKills[5] = MultiKills5; PRI.MultiKills[6] = MultiKills6; } simulated function ClientSendCombos(TeamPlayerReplicationInfo PRI,byte Combos0, byte Combos1, byte Combos2, byte Combos3, byte Combos4) { PRI.Combos[0] = Combos0; PRI.Combos[1] = Combos1; PRI.Combos[2] = Combos2; PRI.Combos[3] = Combos3; PRI.Combos[4] = Combos4; ServerGetNextWeaponStats(PRI,0); } simulated function ClientSendStats(TeamPlayerReplicationInfo PRI, int newgoals, bool bNewFirstBlood, int newkills, int newsuicides, int newFlagTouches, int newFlagReturns, int newFlakCount, int newComboCount, int newHeadCount, int newRanOverCount, int newDaredevilPoints) { PRI.GoalsScored = newGoals; PRI.bFirstBlood = bNewFirstBlood; PRI.Kills = NewKills; PRI.Suicides = NewSuicides; PRI.FlagTouches = NewFlagTouches; PRI.FlagReturns = NewFlagReturns; PRI.FlakCount = NewFlakCount; PRI.ComboCount = NewComboCount; PRI.HeadCount = NewHeadCount; PRI.RanOverCount = NewRanOverCount; PRI.DaredevilPoints = NewDaredevilPoints; ServerUpdateStatArrays(PRI); } simulated event PostBeginPlay() { local class VoiceClass; Super.PostBeginPlay(); if ( Level.NetMode != NM_DedicatedServer ) { VoiceClass = class(DynamicLoadObject(CustomStatusAnnouncerPack,class'Class')); StatusAnnouncer = Spawn(VoiceClass); VoiceClass = class(DynamicLoadObject(CustomRewardAnnouncerPack,class'Class')); RewardAnnouncer = Spawn(VoiceClass); PrecacheAnnouncements(); } } function AwardAdrenaline(float amount) { if ( bAdrenalineEnabled ) { if ( (Adrenaline < AdrenalineMax) && (Adrenaline+amount >= AdrenalineMax) && ((Pawn == None) || !Pawn.InCurrentCombo()) ) ClientDelayedAnnouncementNamed('Adrenalin',15); Super.AwardAdrenaline(Amount); } } function ClientDelayedAnnouncementNamed(name Announcement, byte Delay) { local AnnounceAdrenaline A; A = spawn(class'AnnounceAdrenaline', self); A.Announcement = Announcement; A.settimer(0.1*delay,false); } // OBSOLETE function ClientDelayedAnnouncement(sound AnnouncementSound, byte Delay) { local AnnounceAdrenaline A; A = spawn(class'AnnounceAdrenaline', self); A.AnnounceSound = AnnouncementSound; A.settimer(0.1*delay,false); } function LogMultiKills(float Reward, bool bEnemyKill) { local int BoundedLevel; if ( bEnemyKill && (Level.TimeSeconds - LastKillTime < 4) ) { AwardAdrenaline( Reward ); if ( TeamPlayerReplicationInfo(PlayerReplicationInfo) != None ) { BoundedLevel = Min(MultiKillLevel,6); TeamPlayerReplicationInfo(PlayerReplicationInfo).MultiKills[BoundedLevel] += 1; if ( (MultiKillLevel > 0) && (TeamPlayerReplicationInfo(PlayerReplicationInfo).MultiKills[BoundedLevel-1] > 0) ) TeamPlayerReplicationInfo(PlayerReplicationInfo).MultiKills[BoundedLevel-1] -= 1; } MultiKillLevel++; UnrealMPGameInfo(Level.Game).SpecialEvent(PlayerReplicationInfo,"multikill_"$MultiKillLevel); } else MultiKillLevel=0; if ( bEnemyKill ) LastKillTime = Level.TimeSeconds; } exec function ShowAI() { myHUD.ShowDebug(); if ( UnrealPawn(ViewTarget) != None ) UnrealPawn(ViewTarget).bSoakDebug = myHUD.bShowDebugInfo; } function Possess(Pawn aPawn) { Super.Possess(aPawn); } function bool AutoTaunt() { if (!bAutoTaunt || LastAutoTauntTime > Level.TimeSeconds - 2) return false; LastAutoTauntTime = Level.TimeSeconds; return true; } function bool DontReuseTaunt(int T) { if ( T == LastTaunt ) return true; if( T == Level.LastTaunt[0] || T == Level.LastTaunt[1] ) return true; LastTaunt = T; Level.LastTaunt[1] = Level.LastTaunt[0]; Level.LastTaunt[0] = T; return false; } exec function SoakBots() { local Bot B; log("Start Soaking"); UnrealMPGameInfo(Level.Game).bSoaking = true; ForEach DynamicActors(class'Bot',B) B.bSoaking = true; } function SoakPause(Pawn P) { log("Soak pause by "$P); SetViewTarget(P); SetPause(true); bBehindView = true; myHud.bShowDebugInfo = true; if ( UnrealPawn(P) != None ) UnrealPawn(P).bSoakDebug = true; } exec function BasePath(byte num) { if (PlayerReplicationInfo.Team == None ) return; ServerShowPathToBase(num); } function ServerShowPathToBase(int TeamNum) { if ( (Level.NetMode != NM_Standalone) && (Level.TimeSeconds - LastWhispTime < 0.5) ) return; LastWhispTime = Level.TimeSeconds; if ( (Pawn == None) || !Level.Game.bTeamGame || !UnrealMPGameInfo(Level.Game).CanShowPathTo(Self, TeamNum) ) return; UnrealMPGameInfo(Level.Game).ShowPathTo(Self, TeamNum); } function byte GetMessageIndex(name PhraseName) { if ( PlayerReplicationInfo.VoiceType == None ) return 0; return PlayerReplicationInfo.Voicetype.Static.GetMessageIndex(PhraseName); } exec function RandomTaunt() { local int tauntNum; if(Pawn == None) return; // First 4 taunts are 'order' anims. Don't pick them. tauntNum = Rand(Pawn.TauntAnims.Length - 4); Taunt(Pawn.TauntAnims[4 + tauntNum]); } exec function Taunt( name Sequence ) { if( Vehicle(Pawn) != None && Sequence == 'gesture_point' ) { PlayVehicleHorn(0); return; } if ( (Pawn != None) && (Pawn.Health > 0) && (Level.TimeSeconds - LastTauntAnimTime > 0.5) && Pawn.FindValidTaunt(Sequence) ) { ServerTaunt(Sequence); LastTauntAnimTime = Level.TimeSeconds; } } function ServerTaunt(name AnimName ) { if ( (Pawn != None) && (Pawn.Health > 0) && (Level.TimeSeconds - LastTauntAnimTime > 0.3) && Pawn.FindValidTaunt(AnimName) ) { Pawn.SetAnimAction(AnimName); LastTauntAnimTime = Level.TimeSeconds; } } exec function PlayVehicleHorn( int HornIndex ) { local Vehicle V; V = Vehicle(Pawn); if ( (V != None) && (V.Health > 0) && (Level.TimeSeconds - LastTauntAnimTime > 0.3) ) { ServerPlayVehicleHorn(HornIndex); LastTauntAnimTime = Level.TimeSeconds; } } function ServerPlayVehicleHorn( int HornIndex ) { local Vehicle V; V = Vehicle(Pawn); if ( (V != None) && (V.Health > 0) && (Level.TimeSeconds - LastTauntAnimTime > 0.3) ) { V.ServerPlayHorn(HornIndex); LastTauntAnimTime = Level.TimeSeconds; } } simulated function PlayStatusAnnouncement(name AName, byte AnnouncementLevel, optional bool bForce) { local float Atten; if ( AnnouncementLevel > AnnouncerLevel ) { if ( AnnouncementLevel == 2 ) { Atten = FClamp(0.1 + float(AnnouncerVolume)*0.225,0.2,1.0); ClientPlaySound(Sound'GameSounds.DDAverted',true,Atten,SLOT_Talk); } else if ( AnnouncementLevel == 1 ) PlayBeepSound(); return; } Super.PlayStatusAnnouncement(AName, AnnouncementLevel, bForce); } simulated function PlayRewardAnnouncement(name AName, byte AnnouncementLevel, optional bool bForce) { local float Atten; if ( AnnouncementLevel > AnnouncerLevel ) { if ( AnnouncementLevel == 2 ) { Atten = FClamp(0.1 + float(AnnouncerVolume)*0.225,0.2,1.0); ClientPlaySound(Sound'GameSounds.DDAverted',true,Atten,SLOT_Talk); } else if ( AnnouncementLevel == 1 ) PlayBeepSound(); return; } Super.PlayRewardAnnouncement(AName, AnnouncementLevel, bForce); } simulated function PlayAnnouncement(sound ASound, byte AnnouncementLevel, optional bool bForce) { local float Atten; if ( AnnouncementLevel > AnnouncerLevel ) { if ( AnnouncementLevel == 2 ) { Atten = FClamp(0.1 + float(AnnouncerVolume)*0.225,0.2,1.0); ClientPlaySound(Sound'GameSounds.DDAverted',true,Atten,SLOT_Talk); } else if ( AnnouncementLevel == 1 ) PlayBeepSound(); return; } Super.PlayAnnouncement(ASound,AnnouncementLevel,bForce); } event KickWarning() { if ( Level.TimeSeconds - LastKickWarningTime > 0.5 ) { ReceiveLocalizedMessage( class'IdleKickWarningMessage', 0, None, None, self ); LastKickWarningTime = Level.TimeSeconds; } } function PlayStartupMessage(byte StartupStage) { ReceiveLocalizedMessage( class'StartupMessage', StartupStage, PlayerReplicationInfo ); } simulated event PostNetReceive() { Super.PostNetReceive(); if ( ChatManager != None ) ChatManager.PlayerOwner = Self; } simulated function InitInputSystem() { Super.InitInputSystem(); if (LoginMenuClass != "") ShowLoginMenu(); bReadyToStart = true; ServerSetReadyToStart(); } function ServerSetReadyToStart() { bReadyToStart = true; } simulated function ClientReceiveLoginMenu(string MenuClass, bool bForce) { LoginMenuClass = MenuClass; bForceLoginMenu = bForce; } simulated function ShowLoginMenu() { local int x; local string NetworkAddress; if (Level.NetMode != NM_Client || (Pawn != None && Pawn.Health > 0) || (bDontShowLoginMenu && !bForceLoginMenu)) return; //Show login menu if first time in this server or if server is forcing it to always be displayed if (!bForceLoginMenu) { NetworkAddress = GetServerNetworkAddress(); if (NetworkAddress == "") return; for (x = 0; x < RecentServers.length; x++) if (NetworkAddress ~= RecentServers[x]) { RecentServers.Insert(0, 1); RecentServers[0] = NetworkAddress; RecentServers.Remove(x+1, 1); SaveConfig(); return; } RecentServers.Insert(0, 1); RecentServers[0] = NetworkAddress; if (RecentServers.length > MaxRecentServers) RecentServers.length = MaxRecentServers; //kill oldest entries SaveConfig(); } ClientReplaceMenu(LoginMenuClass); } function NotifyTakeHit(pawn InstigatedBy, vector HitLocation, int Damage, class damageType, vector Momentum) { local int iDam; local vector AttackLoc; Super.NotifyTakeHit(InstigatedBy,HitLocation,Damage,DamageType,Momentum); DamageShake(Damage); iDam = Clamp(Damage,0,250); if ( InstigatedBy != None ) AttackLoc = InstigatedBy.Location; NewClientPlayTakeHit(AttackLoc, hitLocation - Pawn.Location, iDam, damageType); } function NewClientPlayTakeHit(vector AttackLoc, vector HitLoc, byte Damage, class damageType) { local vector HitDir; if ( (myHUD != None) && ((Damage > 0) || bGodMode) ) { if ( AttackLoc != vect(0,0,0) ) HitDir = Normal(AttackLoc - Pawn.Location); else HitDir = Normal(HitLoc); myHUD.DisplayHit(HitDir, Damage, DamageType); } HitLoc += Pawn.Location; if( bEnableDamageForceFeedback ) // jdf ClientPlayForceFeedback("Damage"); // jdf if ( Level.NetMode == NM_Client ) Pawn.PlayTakeHit(HitLoc, Damage, damageType); } function ClientPlayTakeHit(vector HitLoc, byte Damage, class damageType) { NewClientPlayTakeHit(Location, HitLoc, Damage, DamageType); } function PlayWinMessage(bool bWinner) { if ( bWinner ) bDisplayWinner = true; else bDisplayLoser = true; } auto state PlayerWaiting { exec function Fire(optional float F) { LoadPlayers(); if ( !bForcePrecache && (Level.TimeSeconds > 0.2) && bReadyToStart ) ServerReStartPlayer(); } function bool CanRestartPlayer() { return ((bReadyToStart || (DeathMatch(Level.Game) != None && DeathMatch(Level.Game).bForceRespawn)) && Super.CanRestartPlayer()); } } // Player movement. // Player Standing, walking, running, falling. state PlayerWalking { ignores SeePlayer, HearNoise; function bool NotifyLanded(vector HitNormal) { if (DoubleClickDir == DCLICK_Active) { DoubleClickDir = DCLICK_Done; ClearDoubleClick(); Pawn.Velocity *= Vect(0.1,0.1,1.0); } else DoubleClickDir = DCLICK_None; if ( Global.NotifyLanded(HitNormal) ) return true; return false; } function ProcessMove(float DeltaTime, vector NewAccel, eDoubleClickDir DoubleClickMove, rotator DeltaRot) { if ( (DoubleClickMove == DCLICK_Active) && (Pawn.Physics == PHYS_Falling) ) DoubleClickDir = DCLICK_Active; else if ( (DoubleClickMove != DCLICK_None) && (DoubleClickMove < DCLICK_Active) ) { if ( UnrealPawn(Pawn).Dodge(DoubleClickMove) ) DoubleClickDir = DCLICK_Active; } Super.ProcessMove(DeltaTime,NewAccel,DoubleClickMove,DeltaRot); } } state Dead { ignores SeePlayer, HearNoise, KilledBy, SwitchWeapon; exec function Fire( optional float F ) { if ( bFrozen ) { if ( (TimerRate <= 0.0) || (TimerRate > 1.0) ) bFrozen = false; return; } if ( PlayerReplicationInfo.bOutOfLives ) ServerSpectate(); else Super.Fire(F); } Begin: Sleep(3.0); if ( (ViewTarget == None) || (ViewTarget == self) || (VSize(ViewTarget.Velocity) < 1.0) ) { Sleep(1.0); if ( myHUD != None ) myHUD.bShowScoreBoard = true; } else Goto('Begin'); } exec function DropFlag() { ServerDropFlag(); } function ServerDropFlag() { if (PlayerReplicationInfo==None || PlayerReplicationInfo.HasFlag==None) return; PlayerReplicationInfo.HasFlag.Drop(Pawn.Velocity * 0.5); } function ShowMidGameMenu(bool bPause) { // Pause if not already if(Level.Pauser == None) SetPause(true); if ( Level.NetMode != NM_DedicatedServer ) StopForceFeedback(); // jdf - no way to pause feedback // Open menu if (bDemoOwner) ClientopenMenu(DemoMenuClass); else if ( LoginMenuClass != "" ) ClientOpenMenu(LoginMenuClass); else ClientOpenMenu(MidGameMenuClass); } simulated function string GetCustomStatusAnnouncerClass() { return CustomStatusAnnouncerPack; } simulated function SetCustomStatusAnnouncerClass(string NewAnnouncerClass) { CustomStatusAnnouncerPack = NewAnnouncerClass; } simulated function string GetCustomRewardAnnouncerClass() { return CustomRewardAnnouncerPack; } simulated function SetCustomRewardAnnouncerClass(string NewAnnouncerClass) { CustomRewardAnnouncerPack = NewAnnouncerClass; } simulated function bool NeedNetNotify() { return Super.NeedNetNotify() || ChatManager == None; } // ===================================================================================================================== // ===================================================================================================================== // Voice Chat // ===================================================================================================================== // ===================================================================================================================== simulated event PostNetBeginPlay() { Super.PostNetBeginPlay(); if ( Level.NetMode == NM_Client || Level.NetMode == NM_ListenServer ) bVoiceChatEnabled = bool(ConsoleCommand("get ini:Engine.Engine.AudioDevice UseVoIP")); } simulated function AutoJoinVoiceChat() { local int i, j, cnt; local string DefaultChannel; if ( !bVoiceChatEnabled || (Level.NetMode != NM_Client && Level.NetMode != NM_ListenServer) ) return; if ( VoiceReplicationInfo == None ) { log(Name@"AutoJoinVoiceChat() do not have VRI yet!",'VoiceChat'); return; } cnt = VoiceReplicationInfo.GetPublicChannelCount(True); for ( i = 0; i < cnt; i++ ) { if ( bool(AutoJoinMask & (1 << i)) ) { Join(VoiceReplicationInfo.PublicChannelNames[i],""); for ( j = RejoinChannels.Length - 1; j >= 0; j-- ) if ( RejoinChannels[j] == VoiceReplicationInfo.PublicChannelNames[i] ) RejoinChannels.Remove(j,1); } } // Rejoin any channels we were members of during the last match for (i = 0; i < RejoinChannels.Length; i++) Join(RejoinChannels[i],""); // If we were speaking on a particular chatroom last match, re-activate the same room, if possible if ( LastActiveChannel != "" ) Speak(LastActiveChannel); else if ( ActiveRoom == None && bEnableInitialChatRoom ) { DefaultChannel = GetDefaultActiveChannel(); if ( DefaultChannel != "" ) Speak(DefaultChannel); } if (RejoinChannels.Length > 0 || LastActiveChannel != "") { RejoinChannels.Length = 0; LastActiveChannel = ""; SaveConfig(); } } function ClientGameEnded() { local int i; local array Channels; if (bVoiceChatEnabled && PlayerReplicationInfo != None && VoiceReplicationInfo != None) { log(Name@PlayerReplicationInfo.PlayerName@"ClientGameEnded()",'VoiceChat'); Channels = VoiceReplicationInfo.GetChannels(); // Get a list of all channels currently a member of, and store them for the next match. for (i = 0; i < Channels.Length; i++) { if ( Channels[i] != None && Channels[i].IsMember(PlayerReplicationInfo, True) ) RejoinChannels[RejoinChannels.Length] = Channels[i].GetTitle(); } if ( ActiveRoom != None ) LastActiveChannel = ActiveRoom.GetTitle(); } if (RejoinChannels.Length > 0 || LastActiveChannel != "") SaveConfig(); Super.ClientGameEnded(); } function ServerChatDebug() { local BroadcastHandler B; for ( B = Level.Game.BroadcastHandler; B != None; B = B.NextBroadcastHandler ) if ( UnrealChatHandler(B) != None ) UnrealChatHandler(B).DoChatDebug(); } //debug bot when a net client exec function NetDebugBot() { if (Level.NetMode == NM_Client && ViewTarget != Pawn) ServerSendBotDebugString(); } function ServerSendBotDebugString() { if (Bot(RealViewTarget) != None) ClientReceiveBotDebugString("(ORDERS: "$Bot(RealViewTarget).Squad.GetOrders()$") "$Bot(RealViewTarget).GoalString); else ClientReceiveBotDebugString(""); } simulated function ClientReceiveBotDebugString(string DebugString) { NetBotDebugString = DebugString; if (NetBotDebugString != "") ServerSendBotDebugString(); } simulated function DisplayDebug(Canvas Canvas, out float YL, out float YPos) { Super.DisplayDebug(Canvas, YL, YPos); if (NetBotDebugString != "") { Canvas.SetDrawColor(255, 255, 255); Canvas.DrawText("Bot ViewTarget's Goal: "$NetBotDebugString); YPos += YL; Canvas.SetPos(4, YPos); } } e7Z9H+Wc7.mZ9WXVTY~8-K9:9:$f% i9?VT' jj-K r9:9:$r?-@rt  #?6t իr333?tjL>-@-@ Ge7e7e7 E+qeTWzO O{6OB|qO OO, O _-X w.q*Y,O9D9?} 9?,l} YOpp9D9?z9?, ~CliffyB9D9?z9?, zvwv*v-|vOqa/!.q P, q-O9D9?GJ9?, GOGJO9D9?HJ9?, DOHJVFwVF*zVF-|VFOOpp9D9?z9?, ~O9D9?z9?, zVFVFOpp9D9?z9?, ~O9D9?z9?, zvv -S4NameChangeOq7|OCliffyB-X 'q T O-Snwn*w.n*w..n*.nP ,qnnq Ge7^S+yAw^yy/bbBalanceTeamsH I $$Checky9bbPlayersBalanceTeamsH I $$Check 'y@bFriendlyFireScaleH I $$Text8;0.0:1.0 'y:b bAllowNonTeamChatH I $<$Check Xv'' G e7kNW+Uio1A% iU& iU Ge7}@e7e7kclass UnrealPawn extends Pawn abstract config(User); var () bool bNoDefaultInventory; // don't spawn default inventory for this guy var bool bAcceptAllInventory; // can pick up anything var(AI) bool bIsSquadLeader; // only used as startup property var bool bSoakDebug; // use less verbose version of debug display var bool bKeepTaunting; var config bool bPlayOwnFootsteps; var byte LoadOut; var config byte SelectedEquipment[16]; // what player has selected (replicate using function) var() string RequiredEquipment[16]; // allow L.D. to modify for single player var string OptionalEquipment[16]; // player can optionally incorporate into loadout var float AttackSuitability; // range 0 to 1, 0 = pure defender, 1 = pure attacker var float LastFootStepTime; var eDoubleClickDir CurrentDir; var vector GameObjOffset; var rotator GameObjRot; var(AI) name SquadName; // only used as startup property // allowed voices var string VoiceType; var globalconfig bool bPlayerShadows; var globalconfig bool bBlobShadow; var int spree; function DropFlag() { if (PlayerReplicationInfo==None || PlayerReplicationInfo.HasFlag==None) return; PlayerReplicationInfo.HasFlag.Drop(Velocity * 0.5); } simulated function bool FindValidTaunt( out name Sequence ) { local int i; for( i=0; i 0.35) ) { LastFootStepTime = Level.TimeSeconds; FootStepping(0); } } /* IsInLoadout() return true if InventoryClass is part of required or optional equipment */ function bool IsInLoadout(class InventoryClass) { local int i; local string invstring; if ( bAcceptAllInventory ) return true; invstring = string(InventoryClass); for ( i=0; i<16; i++ ) { if ( RequiredEquipment[i] ~= invstring ) return true; else if ( RequiredEquipment[i] == "" ) break; } for ( i=0; i<16; i++ ) { if ( OptionalEquipment[i] ~= invstring ) return true; else if ( OptionalEquipment[i] == "" ) break; } return false; } function AddDefaultInventory() { local int i; if ( IsLocallyControlled() ) { for ( i=0; i<16; i++ ) if ( RequiredEquipment[i] != "" ) CreateInventory(RequiredEquipment[i]); for ( i=0; i<16; i++ ) if ( (SelectedEquipment[i] == 1) && (OptionalEquipment[i] != "") ) CreateInventory(OptionalEquipment[i]); Level.Game.AddGameSpecificInventory(self); } else { Level.Game.AddGameSpecificInventory(self); for ( i=15; i>=0; i-- ) if ( (SelectedEquipment[i] == 1) && (OptionalEquipment[i] != "") ) CreateInventory(OptionalEquipment[i]); for ( i=15; i>=0; i-- ) if ( RequiredEquipment[i] != "" ) CreateInventory(RequiredEquipment[i]); } // HACK FIXME if ( inventory != None ) inventory.OwnerEvent('LoadOut'); Controller.ClientSwitchToBestWeapon(); } function CreateInventory(string InventoryClassName) { local Inventory Inv; local class InventoryClass; InventoryClass = Level.Game.BaseMutator.GetInventoryClass(InventoryClassName); if( (InventoryClass!=None) && (FindInventoryType(InventoryClass)==None) ) { Inv = Spawn(InventoryClass); if( Inv != None ) { Inv.GiveTo(self); if ( Inv != None ) Inv.PickupFunction(self); } } } function bool PerformDodge(eDoubleClickDir DoubleClickMove, vector Dir, vector Cross); function bool Dodge(eDoubleClickDir DoubleClickMove) { local vector X,Y,Z; if ( bIsCrouched || bWantsToCrouch || (Physics != PHYS_Walking) ) return false; GetAxes(Rotation,X,Y,Z); if (DoubleClickMove == DCLICK_Forward) Velocity = 1.5*GroundSpeed*X + (Velocity Dot Y)*Y; else if (DoubleClickMove == DCLICK_Back) Velocity = -1.5*GroundSpeed*X + (Velocity Dot Y)*Y; else if (DoubleClickMove == DCLICK_Left) Velocity = 1.5*GroundSpeed*Y + (Velocity Dot X)*X; else if (DoubleClickMove == DCLICK_Right) Velocity = -1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z = 210; CurrentDir = DoubleClickMove; SetPhysics(PHYS_Falling); return true; } simulated function PostBeginPlay() { Super.PostBeginPlay(); if ( Level.bStartup && !bNoDefaultInventory ) AddDefaultInventory(); } simulated function PostNetBeginPlay() { local SquadAI S; local RosterEntry R; Super.PostNetBeginPlay(); if ( (Role == ROLE_Authority) && Level.bStartup ) { if ( UnrealMPGameInfo(Level.Game) == None ) { if ( Bot(Controller) != None ) { ForEach DynamicActors(class'SquadAI',S,SquadName) break; if ( S == None ) S = spawn(class'SquadAI'); S.Tag = SquadName; if ( bIsSquadLeader || (S.SquadLeader == None) ) S.SetLeader(Controller); S.AddBot(Bot(Controller)); } } else { R = GetPlacedRoster(); UnrealMPGameInfo(Level.Game).InitPlacedBot(Controller,R); } } } function RosterEntry GetPlacedRoster() { return None; } function SetMovementPhysics() { if (Physics == PHYS_Falling) return; if ( PhysicsVolume.bWaterVolume ) SetPhysics(PHYS_Swimming); else SetPhysics(PHYS_Walking); } function TakeDrowningDamage() { TakeDamage(5, None, Location + CollisionHeight * vect(0,0,0.5)+ 0.7 * CollisionRadius * vector(Controller.Rotation), vect(0,0,0), class'Drowned'); } function int GetSpree() { return spree; } function IncrementSpree() { spree++; } simulated function PlayFootStep(int Side) { if ( (Role==ROLE_SimulatedProxy) || (PlayerController(Controller) == None) || PlayerController(Controller).bBehindView ) { FootStepping(Side); return; } } //----------------------------------------------------------------------------- /* Pawn was killed - detach any controller, and die */ simulated function ChunkUp( Rotator HitRotation, float ChunkPerterbation ) { if ( (Level.NetMode != NM_Client) && (Controller != None) ) { if ( Controller.bIsPlayer ) Controller.PawnDied(self); else Controller.Destroy(); } bTearOff = true; HitDamageType = class'Gibbed'; // make sure clients gib also if ( (Level.NetMode == NM_DedicatedServer) || (Level.NetMode == NM_ListenServer) ) GotoState('TimingOut'); if ( Level.NetMode == NM_DedicatedServer ) return; if ( class'GameInfo'.static.UseLowGore() ) { Destroy(); return; } SpawnGibs(HitRotation,ChunkPerterbation); if ( Level.NetMode != NM_ListenServer ) Destroy(); } // spawn gibs (local, not replicated) simulated function SpawnGibs(Rotator HitRotation, float ChunkPerterbation); /* TimingOut - where gibbed pawns go to die (delay so they can get replicated) */ State TimingOut { ignores BaseChange, Landed, AnimEnd, Trigger, Bump, HitWall, HeadVolumeChange, PhysicsVolumeChange, Falling, BreathTimer; function TakeDamage( int Damage, Pawn instigatedBy, Vector hitlocation, Vector momentum, class damageType) { } function BeginState() { SetPhysics(PHYS_None); SetCollision(false,false,false); LifeSpan = 1.0; if ( Controller != None ) { if ( Controller.bIsPlayer ) Controller.PawnDied(self); else Controller.Destroy(); } } } State Dying { ignores AnimEnd, Trigger, Bump, HitWall, HeadVolumeChange, PhysicsVolumeChange, Falling, BreathTimer; function Landed(vector HitNormal) { if ( Level.NetMode == NM_DedicatedServer ) return; if ( Shadow != None ) Shadow.Destroy(); } singular function BaseChange() { Super.BaseChange(); // fixme - wake up karma } function BeginState() { local int i; SetCollision(true,false,false); if ( bTearOff && (Level.NetMode == NM_DedicatedServer) ) LifeSpan = 1.0; else SetTimer(2.0, false); SetPhysics(PHYS_Falling); bInvulnerableBody = true; if ( Controller != None ) { if ( Controller.bIsPlayer ) Controller.PawnDied(self); else Controller.Destroy(); } for (i = 0; i < Attached.length; i++) if (Attached[i] != None) Attached[i].PawnBaseDied(); } } e7@//============================================================================= // UnrealMPGameInfo. // // //============================================================================= class UnrealMPGameInfo extends GameInfo HideDropDown CacheExempt config; // Sort of a hack here to keep single player and multiplayer bot options seperate without having two properties // 0: SP - Use MinPlayers 1: SP - Use Map defaults 2: SP - Use Roster // 4: MP - UseMinPlayers 8: MP: Use Roster 16: players vs bots var globalconfig byte BotMode; var globalconfig int MinPlayers; // bots fill in to guarantee this level in net game var globalconfig float EndTimeDelay; var globalconfig float BotRatio; // only used when bPlayersVsBots is true var bool bPreloadAllSkins; // OBSOLETE var string DefaultVoiceChannel; // default active channel for incoming players var config bool bAllowPrivateChat; // Allow private chat channels on this server var bool bTeamScoreRounds; var bool bSoaking; var bool bPlayersVsBots; var float EndTime; var TranslocatorBeacon BeaconList; var SpecialVehicleObjective SpecialVehicleObjectives; var class LocalStatsScreenClass; var() string VoiceReplicationInfoType; // mc - localized PlayInfo descriptions & extra info const MPPROPNUM = 4; var localized string MPGIPropsDisplayText[MPPROPNUM]; var localized string MPGIPropDescText[MPPROPNUM]; var localized string BotModeText; // var localized string SPBotText, MPBotText, SPBotDesc, MPBotDesc, BotOptions[4]; // event PlayerController Login ( string Portal, string Options, out string Error ) { local PlayerController PC; PC = Super.Login( Portal, Options, Error ); if ( PC != None ) { if ( Level.NetMode == NM_DedicatedServer || Level.NetMode == NM_ListenServer ) { PC.VoiceReplicationInfo = VoiceReplicationInfo; if ( Level.NetMode == NM_ListenServer && Level.GetLocalPlayerController() == PC ) PC.InitializeVoiceChat(); } } return PC; } // rjp -- function InitVoiceReplicationInfo() { local class VRIClass; local int i; if (Level.NetMode == NM_StandAlone || Level.NetMode == NM_Client) return; if ( VoiceReplicationInfoType != "" ) { VRIClass = class(DynamicLoadObject(VoiceReplicationInfoType,class'Class')); if ( VRIClass != None ) VoiceReplicationInfoClass = VRIClass; } if (VoiceReplicationInfoClass != None && VoiceReplicationInfo == None) VoiceReplicationInfo = Spawn(VoiceReplicationInfoClass); Super.InitVoiceReplicationInfo(); VoiceReplicationInfo.bPrivateChat = bAllowPrivateChat; i = VoiceReplicationInfo.GetChannelIndex(DefaultVoiceChannel); if ( i != -1 && i != VoiceReplicationInfo.DefaultChannel ) VoiceReplicationInfo.DefaultChannel = i; } function InitMaplistHandler() { local class MaplistManagerClass; if ( MaplistHandler != None ) return; if ( MaplistHandlerType !="" ) MaplistManagerClass = class(DynamicLoadObject(MaplistHandlerType, class'Class')); if ( MaplistManagerClass == None ) MaplistManagerClass = MaplistHandlerClass; if ( MaplistManagerClass != None ) MaplistHandler = Spawn(MaplistManagerClass); } function ChangeVoiceChannel( PlayerReplicationInfo PRI, int NewChannelIndex, int OldChannelIndex ) { local VoiceChatRoom NewChannel, OldChannel; if ( PRI == None ) { log("ChangeVoiceChannel - no PRI!",'VoiceChat'); return; } if ( VoiceReplicationInfo == None ) { log("ChangeVoiceChannel - no VoiceReplicationInfo!",'VoiceChat'); return; } if ( NewChannelIndex >= 0 ) { NewChannel = VoiceReplicationInfo.GetChannelAt(NewChannelIndex); if ( NewChannel == None ) { log("ChangeVoiceChannel - invalid channel index requested! ("$PRI@NewChannelIndex$")",'VoiceChat'); return; } NewChannel.AddMember(PRI); } OldChannel = VoiceReplicationInfo.GetChannelAt(OldChannelIndex); if ( OldChannel != None ) OldChannel.RemoveMember(PRI); } // -- rjp function SpecialEvent(PlayerReplicationInfo Who, string Desc) { if ( GameStats != None ) GameStats.SpecialEvent(Who,Desc); } function KillEvent(string Killtype, PlayerReplicationInfo Killer, PlayerReplicationInfo Victim, class Damage) { local TeamPlayerReplicationInfo TPRI; TPRI = TeamPlayerReplicationInfo(Victim); if ( TPRI != None ) { if ( Killer == None || Killer == Victim ) TPRI.Suicides++; TPRI.AddWeaponDeath(Damage); } TPRI = TeamPlayerReplicationInfo(Killer); if ( TPRI != None ) if ( TPRI != Victim ) TPRI.AddWeaponKill(Damage); if ( GameStats != None ) GameStats.KillEvent(KillType, Killer, Victim, Damage); } function GameEvent(string GEvent, string Desc, PlayerReplicationInfo Who) { local TeamPlayerReplicationInfo TPRI; if ( GameStats != None ) GameStats.GameEvent(GEvent, Desc, Who); TPRI = TeamPlayerReplicationInfo(Who); if ( TPRI == None ) return; if ( (GEvent ~= "flag_taken") || (GEvent ~= "flag_pickup") || (GEvent ~= "bomb_taken") || (GEvent ~= "Bomb_pickup") ) { TPRI.FlagTouches++; return; } if ( GEvent ~= "flag_returned" ) { TPRI.FlagReturns++; return; } } function ScoreEvent(PlayerReplicationInfo Who, float Points, string Desc) { if ( GameStats != None ) GameStats.ScoreEvent(Who,Points,Desc); } function TeamScoreEvent(int Team, float Points, string Desc) { if ( GameStats != None ) GameStats.TeamScoreEvent(Team,Points,Desc); } function int GetNumPlayers() { if ( NumPlayers > 0 ) return Max(NumPlayers, Min(NumPlayers+NumBots, MaxPlayers-1)); return NumPlayers; } function bool ShouldRespawn(Pickup Other) { return false; } function float SpawnWait(AIController B) { if ( B.PlayerReplicationInfo.bOutOfLives ) return 999; if ( Level.NetMode == NM_Standalone ) { if ( NumBots < 4 ) return 0; return ( 0.5 * FMax(2,NumBots-4) * FRand() ); } if ( bPlayersVsBots ) return 0; return FRand(); } function bool TooManyBots(Controller botToRemove) { return ( (Level.NetMode != NM_Standalone) && (NumBots + NumPlayers > MinPlayers) ); } function RestartGame() { if ( bGameRestarted ) return; if ( CurrentGameProfile != None ) { CurrentGameProfile.ContinueSinglePlayerGame(Level); return; } if ( EndTime > Level.TimeSeconds ) // still showing end screen return; Super.RestartGame(); } static function Texture GetRandomTeamSymbol(int base) { local string SymbolName; local int SymbolIndex, RawIndex; local array TeamSymbols; local texture Result; class'CacheManager'.static.GetTeamSymbolList( TeamSymbols, True ); RawIndex = Rand(TeamSymbols.Length - base); SymbolIndex = base + RawIndex; if ( SymbolIndex >= TeamSymbols.Length ) SymbolIndex = RawIndex; SymbolName = TeamSymbols[SymbolIndex]; result = Texture(DynamicLoadObject(SymbolName, class'Texture')); if ( result == None ) result = Texture(DynamicLoadObject(TeamSymbols[0], class'Texture')); if ( result == None ) warn("No Team Symbol! (TeamSymbols[0] is invalid)"); return result; } // Stubs function ObjectiveDisabled( GameObjective DisabledObjective ); function FindNewObjectives( GameObjective DisabledObjective ); function GameObject GetGameObject( Name GameObjectName ); function ScoreGameObject( Controller C, GameObject GO ); function ChangeLoadOut(PlayerController P, string LoadoutName); function ForceAddBot(); function bool CanShowPathTo(PlayerController P, int TeamNum); function ShowPathTo(PlayerController P, int TeamNum); function int AdjustDestroyObjectiveDamage( int Damage, Controller InstigatedBy, GameObjective GO ) { return Damage; } function bool CanDisableObjective( GameObjective GO ) { return true; } /* only allow pickups if they are in the pawns loadout */ function bool PickupQuery(Pawn Other, Pickup item) { local byte bAllowPickup; if ( (GameRulesModifiers != None) && GameRulesModifiers.OverridePickupQuery(Other, item, bAllowPickup) ) return (bAllowPickup == 1); if ( (UnrealPawn(Other) != None) && !UnrealPawn(Other).IsInLoadout(item.inventorytype) ) return false; if ( Other.Inventory == None ) return true; else return !Other.Inventory.HandlePickupQuery(Item); } function InitPlacedBot(Controller C, RosterEntry R); function GetServerDetails(out ServerResponseLine ServerState) { Super.GetServerDetails(ServerState); AddServerDetail( ServerState, "MinPlayers", MinPlayers ); AddServerDetail( ServerState, "EndTimeDelay", EndTimeDelay ); } // static function AdjustBotInterface(bool bSinglePlayer) { if ( bSinglePlayer ) { default.MPGIPropsDisplayText[0] = default.SPBotText; default.MPGIPropDescText[0] = default.SPBotDesc; default.BotModeText = GenerateBotOptions( True ); } else { default.MPGIPropsDisplayText[0] = default.MPBotText; default.MPGIPropDescText[0] = default.MPBotDesc; default.BotModeText = GenerateBotOptions( False ); } } static function string GenerateBotOptions(bool bSinglePlayer) { local string option; local byte value; if ( bSinglePlayer ) { // Get the value of MP botmode value = default.BotMode & 12; // Give three options - 0, 1, 2 option = value $ ";" $ default.BotOptions[0]; option $= ";" $ value | 1 $ ";" $ default.BotOptions[1]; option $= ";" $ value | 2 $ ";" $ default.BotOptions[2]; } else { // get the value of SP botmode value = default.BotMode & 3; // Give three options - 4, 8, 16 option = value | 4 $ ";" $ default.BotOptions[0]; option $= ";" $ value | 8 $ ";" $ default.BotOptions[2]; if ( Default.bTeamGame ) option $= ";" $ value | 16 $ ";" $ default.BotOptions[3]; } return option; } // static function FillPlayInfo(PlayInfo PlayInfo) { local int i; Super.FillPlayInfo(PlayInfo); // Always begin with calling parent PlayInfo.AddSetting(default.BotsGroup, "MinPlayers", default.MPGIPropsDisplayText[i++], 0, 0, "Text", "3;0:32"); PlayInfo.AddSetting(default.GameGroup, "EndTimeDelay", default.MPGIPropsDisplayText[i++], 1, 1, "Text", , , , True); PlayInfo.AddSetting(default.BotsGroup, "BotMode", default.MPGIPropsDisplayText[i++], 30, 1, "Select", default.BotModeText); PlayInfo.AddSetting(default.RulesGroup, "bAllowPrivateChat", default.MPGIPropsDisplayText[i++], 254, 1, "Check", , "Xv", True, True); } static event string GetDescriptionText(string PropName) { switch (PropName) { case "MinPlayers": return default.MPGIPropDescText[0]; case "EndTimeDelay": return default.MPGIPropDescText[1]; case "BotMode": return default.MPGIPropDescText[2]; case "bAllowPrivateChat": return default.MPGIPropDescText[3]; } return Super.GetDescriptionText(PropName); } function int MultiMinPlayers() { return MinPlayers; } e7 d+\kQ}|~S%|d|%}p}S|SS||%J}SQS|,J,%SSJ,S}p}S\[Q|~S%{S}p}S} G e7xO+J%O|mrJw*->=G(8%J Ge7@e7e7e7e7iX+ Zߖu!%= Ge7[+OaO  $ Ge7\+,f74w*9?%-' Ge7e7e7e7e7]A,ia ף<!r*a #< !V\9:9:$ bmr* !V`w*L(a-aa-e YL>O,9?,9?,-P ' $3RangedAttack from failed tacticalGr*3b$ /w*- !VRecover Enemyt  a=L>ի9?, alN #w*PaL=a=>u=9?,@l>Nu!Ot ի9?,t   !h $-!STUCK IN TACTICAL MOVE! VlbWhsJe7G e7]b+Lz' Ge7e7e7 B,kEB'Prk*r%k*r&k*I %k I &k p%k p&k  G e7FB meEq Ge7ae7e7}a+J9 # 8J Ge7SLg+i^w.j+*r.*rj+.w.*rj+.R%PI.j+ J-wPI*PI o%w.*A- $7'(9:9:$K&j+( r* $(i-w  ?+  9?% $-w ' 9?' Ge7hkMm`sa` vkIraD*aLw .aaD ww *Ow `aw  Ge7k+e7e7PIe7e7h+ <u!%3w* -=9. Ge7l+OUKmBCb$ q!i!bK $v!O Ge7 m+o+o *ݧ/ 9?,  Ge7e7e7oCc`?4Br*p9V Tactical move pick destination with no pawn -w (--- 9?,K#?69?,d P  xP#?J9:9:$6x6Pf6P6P-qL>ml Pmm?mcmx-@c9?-q<r:99  r: l c9?,  r: l c9?,  -@-@c9?-@-@vl c( vl c( -e 'Yvl c' Ge7x9class TriggeredObjective extends GameObjective; var Array MyTriggerList; var Actor MyTrigger; var bool bInitialized; function InitTriggerList(name NewEvent) { local Actor A; local name NextEvent; local ScriptedTrigger S; bInitialized = true; log(self$" InitTriggerList event "$NewEvent); ForEach AllActors(class'Actor', A) if ( A.Event == NewEvent ) { MyTriggerList[MyTriggerList.Length] = A; if ( A.SelfTriggered() ) return; InitTriggerList(A.Tag); return; } ForEach AllActors(class'ScriptedTrigger', S) if ( S.TriggersEvent(NewEvent) ) { MyTriggerList[MyTriggerList.Length] = S; NextEvent = S.NextNeededEvent(); if ( NextEvent != NewEvent ) InitTriggerList(NextEvent); break; } } /* FindTrigger() Find Trigger or ScriptedTrigger that triggers me. */ function Actor FindTrigger() { local int i; local name NewEvent; if ( !bInitialized ) InitTriggerList(tag); for ( i=0; i 0) && (Switch < 11) && (P.GameReplicationInfo != None) && (P.GameReplicationInfo.Winner == None) && ((P.GameReplicationInfo.RemainingTime > 10) || (P.GameReplicationInfo.RemainingTime == 0)) ) { P.QueueAnnouncement( default.CountDown[Switch-1], 1, AP_InstantOrQueueSwitch, 1 ); } } t+m(|2 u+k x@ u u- =1 u- =1 u- =1 uP s Bs }s ~s Ds Es @s As Fs Cs B ]...dSb"o*0XU$=_"e7e7p+yvj 9?,y-is @6s@ B-n:r.*9:9:$GL=?T8$@qP6 6  BI c a|}j (swc *-n:-(b9:9:$6s`A?6s6sc a|}jի9?, B#?j(sbrc *}9?y(-n:@-'-u '-'6 -'o$ j ?6  #-#9?,T89?,9?,-'j'jy?9?,  HC' Ge7W//============================================================================= // TeamVoicePack. //============================================================================= class TeamVoicePack extends VoicePack config abstract; var() Sound NameSound[4]; // leader names const MAXACK = 16; var() Sound AckSound[MAXACK]; // acknowledgement sounds var() localized string AckString[MAXACK]; var() localized string AckAbbrev[MAXACK]; var() name AckAnim[MAXACK]; var() int numAcks; const MAXFIRE = 16; var() Sound FFireSound[MAXFIRE]; var() localized string FFireString[MAXFIRE]; var() localized string FFireAbbrev[MAXFIRE]; var() name FFireAnim[MAXFIRE]; var() int numFFires; const MAXTAUNT = 48; var() Sound TauntSound[MAXTAUNT]; var() localized string TauntString[MAXTAUNT]; var() localized string TauntAbbrev[MAXTAUNT]; var() name TauntAnim[MAXTAUNT]; var() int numTaunts; var config bool bShowMessageText; var() byte MatureTaunt[MAXTAUNT]; var() byte HumanOnlyTaunt[MAXTAUNT]; // Whether this taunt should not be used by bots var float Pitch; var string MessageString; var name MessageAnim; var byte DisplayString; var String LeaderSign[4]; /* Orders (in same order as in Orders Menu 0 = Defend, 1 = Hold, 2 = Attack, 3 = Follow, 4 = FreeLance */ const MAXORDER = 16; var() Sound OrderSound[MAXORDER]; var() localized string OrderString[MAXORDER]; var() localized string OrderAbbrev[MAXORDER]; var() name OrderAnim[MAXORDER]; var string CommaText; /* Other messages - use passed messageIndex 0 = Base Undefended 1 = Get Flag 2 = Got Flag 3 = Back up 4 = Im Hit 5 = Under Attack 6 = Man Down */ const MAXOTHER = 48; var() Sound OtherSound[MAXOTHER]; var() localized string OtherString[MAXOTHER]; var() localized string OtherAbbrev[MAXOTHER]; var() name OtherAnim[MAXOTHER]; var() byte OtherDelayed[MAXOTHER]; var() byte DisplayOtherMessage[MAXOTHER]; var() name OtherMesgGroup[MAXOTHER]; // Used to only show relevant comments in menu const MAXPHRASE = 8; var Sound Phrase[MAXPHRASE]; var string PhraseString[MAXPHRASE]; var int PhraseNum; var() byte DisplayMessage[MAXPHRASE]; var PlayerReplicationInfo DelayedSender; var Sound DeathPhrases[MAXPHRASE]; // only spoken as alternative to death scream, not available from menus var byte HumanOnlyDeathPhrase[MAXPHRASE]; var int NumDeathPhrases; var array HiddenPhrases; var array HiddenString; var bool bForceMessageSound; var bool bDisplayNextMessage; var bool bDisplayPortrait; var PlayerReplicationInfo PortraitPRI; enum EVoiceGender { VG_None, VG_Male, VG_Female }; function string GetCallSign( PlayerReplicationInfo P ) { if ( P == None ) return ""; if ( (Level.NetMode == NM_Standalone) && (P.TeamID == 0) ) return LeaderSign[P.Team.TeamIndex]; else return P.PlayerName; } static function bool PlayDeathPhrase(Pawn P) { local int pdNum, tryCount; local bool foundPhrase; if ( Default.NumDeathPhrases == 0 ) return false; for(tryCount = 0; !foundPhrase && tryCount < 100; tryCount++) { pdNum = Rand(Default.NumDeathPhrases); if( !P.IsHumanControlled() && Default.HumanOnlyDeathPhrase[pdNum] == 1 ) continue; foundPhrase = true; } if(!foundPhrase) { Log("PlayDeathPhrase: Could Not Find Suitable Phrase."); return false; } P.PlaySound(Default.DeathPhrases[pdNum], SLOT_Pain,2.5*P.TransientSoundVolume, true,500); return true; } static function int PickCustomTauntFor(controller C, bool bNoMature, bool bNoHumanOnly, int Start) { local int result, tryCount; bNoMature = bNoMature || class'PlayerController'.Default.bNoMatureLanguage; if ( Start >= Default.NumTaunts - 1 ) Start = 0; for(tryCount = 0; tryCount<8; tryCount++) { result = Start + rand(Default.NumTaunts- Start); if(C.DontReuseTaunt(result)) continue; if(bNoMature && Default.MatureTaunt[result] == 1) continue; if(bNoHumanOnly && Default.HumanOnlyTaunt[result] == 1) continue; // Pick mature taunts less often... if(Default.MatureTaunt[result] == 1 && FRand() < 0.5) continue; return result; } if(bNoMature && Default.MatureTaunt[result] == 1) return Rand(3); return result; } static function int PickRandomTauntFor(controller C, bool bNoMature, bool bNoHumanOnly) { return PickCustomTauntFor(C, bNoMature, bNoHumanOnly, 0); } function BotInitialize(PlayerReplicationInfo Sender, PlayerReplicationInfo Recipient, name messagetype, byte messageIndex) { local Sound MessageSound; DelayedSender = Sender; DisplayString = 0; if ( messagetype == 'ACK' ) { SetAckMessage(Rand(NumAcks), Recipient, MessageSound); if ( messageIndex == 255 ) SetTimer(0.3, false); } else { SetTimer(0.1, false); if ( messagetype == 'FRIENDLYFIRE' ) SetFFireMessage(Rand(NumFFires), Recipient, MessageSound); else if ( (messagetype == 'AUTOTAUNT') || (messagetype == 'TAUNT') ) SetTauntMessage(messageIndex, Recipient, MessageSound); else if ( messagetype == 'ORDER' ) SetOrderMessage(messageIndex, Recipient, MessageSound); else // messagetype == Other SetOtherMessage(messageIndex, Recipient, MessageSound); Phrase[0] = MessageSound; PhraseString[0] = MessageString; DisplayMessage[0] = DisplayString; } } static function int OrderToIndex(int Order, class GameClass) { return GameClass.Static.OrderToIndex(Order); } function ClientInitialize(PlayerReplicationInfo Sender, PlayerReplicationInfo Recipient, name messagetype, byte messageIndex) { local Sound MessageSound; DelayedSender = Sender; DisplayString = 0; bDisplayPortrait = false; bDisplayNextMessage = bShowMessageText && (MessageType != 'TAUNT') && (MessageType != 'AUTOTAUNT'); if ( (PlayerController(Owner).PlayerReplicationInfo == Recipient) || (messagetype == 'OTHER') ) { PortraitPRI = Sender; bDisplayPortrait = true; } else if ( (Recipient == None) && (messagetype == 'ORDER') ) { PortraitPRI = Sender; bDisplayPortrait = true; } else if ( (PlayerController(Owner).PlayerReplicationInfo != Sender) && ((messagetype == 'ORDER') || (messagetype == 'ACK')) && (Recipient != None) ) { Destroy(); return; } if(PlayerController(Owner).bNoVoiceMessages || (PlayerController(Owner).bNoVoiceTaunts && (MessageType == 'TAUNT' || MessageType == 'AUTOTAUNT')) || (PlayerController(Owner).bNoAutoTaunts && MessageType == 'AUTOTAUNT') ) { Destroy(); return; } if ( Sender.bBot ) { BotInitialize(Sender, Recipient, messagetype, messageIndex); return; } SetTimer(0.6, false); if ( messagetype == 'ACK' ) SetClientAckMessage(messageIndex, Recipient, MessageSound); else { if ( messagetype == 'FRIENDLYFIRE' ) SetClientFFireMessage(messageIndex, Recipient, MessageSound); else if ( messagetype == 'TAUNT' ) SetClientTauntMessage(messageIndex, Recipient, MessageSound); else if ( messagetype == 'AUTOTAUNT' ) { SetClientTauntMessage(messageIndex, Recipient, MessageSound); SetTimer(1, false); } else if ( messagetype == 'ORDER' ) SetClientOrderMessage(messageIndex, Recipient, MessageSound); else if ( messagetype == 'HIDDEN' ) SetClientHiddenMessage(messageIndex, Recipient, MessageSound); else // messagetype == Other SetClientOtherMessage(messageIndex, Recipient, MessageSound); } Phrase[0] = MessageSound; PhraseString[0] = MessageString; DisplayMessage[0] = DisplayString; if ( PlayerController(Owner).PlayerReplicationInfo == Sender ) bForceMessageSound = true; else if ( (PlayerController(Owner).PlayerReplicationInfo == Recipient) && (MessageType != 'TAUNT') && (MessageType != 'AUTOTAUNT') ) bForceMessageSound = true; } function SetClientAckMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound) { messageIndex = Clamp(messageIndex, 0, numAcks-1); MessageSound = AckSound[messageIndex]; MessageString = AckString[messageIndex]; if ( (Recipient != None) && (Level.NetMode == NM_Standalone) && (recipient.TeamID == 0) && PlayerController(Owner).GameReplicationInfo.bTeamGame ) { Phrase[1] = NameSound[Recipient.Team.TeamIndex]; } MessageAnim = AckAnim[messageIndex]; } function SetAckMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound) { SetTimer(3 + FRand(), false); // wait for initial order to be spoken Phrase[0] = AckSound[messageIndex]; PhraseString[0] = AckString[messageIndex]; if ( (Level.NetMode == NM_Standalone) && (recipient.TeamID == 0) && PlayerController(Owner).GameReplicationInfo.bTeamGame ) { Phrase[1] = NameSound[recipient.Team.TeamIndex]; PhraseString[0] = PhraseString[0]@LeaderSign[recipient.Team.TeamIndex]; } MessageAnim = AckAnim[messageIndex]; } function SetClientFFireMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound) { messageIndex = Clamp(messageIndex, 0, numFFires-1); MessageSound = FFireSound[messageIndex]; MessageString = FFireString[messageIndex]; MessageAnim = FFireAnim[messageIndex]; } function SetFFireMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound) { MessageSound = FFireSound[messageIndex]; MessageString = FFireString[messageIndex]; MessageAnim = FFireAnim[messageIndex]; } // Taunts from Players function SetClientTauntMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound) { messageIndex = Clamp(messageIndex, 0, numTaunts-1); // If we are trying to set a mature message but its turned off - pick a new random one. if(MatureTaunt[messageIndex] == 1 && PlayerController(Owner).bNoMatureLanguage) messageIndex = PickRandomTauntFor(PlayerController(Owner), true, false); MessageSound = TauntSound[messageIndex]; MessageString = TauntString[messageIndex]; MessageAnim = TauntAnim[messageIndex]; } // Taunts from Bots function SetTauntMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound) { messageIndex = Clamp(messageIndex, 0, numTaunts-1); if(MatureTaunt[messageIndex] == 1 && PlayerController(Owner).bNoMatureLanguage) messageIndex = PickRandomTauntFor(PlayerController(Owner), true, true); MessageSound = TauntSound[messageIndex]; MessageString = TauntString[messageIndex]; MessageAnim = TauntAnim[messageIndex]; SetTimer(1.0, false); } function SetClientOrderMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound) { MessageSound = OrderSound[messageIndex]; MessageString = OrderString[messageIndex]; MessageAnim = OrderAnim[messageIndex]; } // 'Hidden' Messages - only from players function SetClientHiddenMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound) { messageIndex = Clamp(messageIndex, 0, HiddenPhrases.Length-1); MessageSound = HiddenPhrases[messageIndex]; MessageString = HiddenString[messageIndex]; MessageAnim = ''; } // function SetOrderMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound) { messageIndex = OrderToIndex(messageIndex, Level.Game.Class); MessageSound = OrderSound[messageIndex]; MessageString = OrderString[messageIndex]; MessageAnim = OrderAnim[messageIndex]; } // for Voice message popup menu - since order names may be replaced for some game types static function string GetOrderString(int i, class GameClass) { if ( i > 9 ) return ""; //high index order strings are alternates to the base orders i = OrderToIndex(i, GameClass); if ( Default.OrderAbbrev[i] != "" ) return Default.OrderAbbrev[i]; return Default.OrderString[i]; } function SetClientOtherMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound) { MessageSound = OtherSound[messageIndex]; MessageString = OtherString[messageIndex]; DisplayString = DisplayOtherMessage[messageIndex]; MessageAnim = OtherAnim[messageIndex]; } function SetOtherMessage(int messageIndex, PlayerReplicationInfo Recipient, out Sound MessageSound) { if ( OtherDelayed[messageIndex] != 0 ) SetTimer(2.5 + 0.5*FRand(), false); // wait for initial request to be spoken MessageSound = OtherSound[messageIndex]; MessageString = OtherString[messageIndex]; DisplayString = DisplayOtherMessage[messageIndex]; MessageAnim = OtherAnim[messageIndex]; } // We can't use the normal ParseMessageString, because thats only really valid on the server. // So we use a special one just for the %l (location) token. static function string ClientParseChatPercVar(PlayerReplicationInfo PRI, String Cmd) { if (cmd~="%L") return "("$PRI.GetLocationName()$")"; } static function string ClientParseMessageString(PlayerReplicationInfo PRI, String Message) { local string OutMsg; local string cmd; local int pos,i; OutMsg = ""; pos = InStr(Message,"%"); while (pos>-1) { if (pos>0) { OutMsg = OutMsg$Left(Message,pos); Message = Mid(Message,pos); pos = 0; } i = len(Message); cmd = mid(Message,pos,2); if (i-2 > 0) Message = right(Message,i-2); else Message = ""; OutMsg = OutMsg$ClientParseChatPercVar(PRI, Cmd); pos = InStr(Message,"%"); } if (Message!="") OutMsg=OutMsg$Message; return OutMsg; } function Timer() { local PlayerController PlayerOwner; local string Mesg; PlayerOwner = PlayerController(Owner); if ( bDisplayPortrait && (PhraseNum == 0) && (PortraitPRI != None)) PlayerController(Owner).myHUD.DisplayPortrait(PortraitPRI); if ( (Phrase[PhraseNum] != None) && (bDisplayNextMessage || (DisplayMessage[PhraseNum] != 0)) ) { Mesg = ClientParseMessageString(DelayedSender, PhraseString[PhraseNum]); if ( Mesg != "" ) PlayerOwner.TeamMessage(DelayedSender,Mesg,'TEAMSAYQUIET'); } if ( (Phrase[PhraseNum] != None) && ((Level.TimeSeconds - PlayerOwner.LastPlaySpeech > 2) || (PhraseNum > 0) || bForceMessageSound) ) { PlayerOwner.LastPlaySpeech = Level.TimeSeconds; if ( (PlayerOwner.ViewTarget != None) ) { PlayerOwner.ViewTarget.PlaySound(Phrase[PhraseNum], SLOT_Interface,1.5*TransientSoundVolume,,,Pitch,false); } else { PlayerOwner.PlaySound(Phrase[PhraseNum], SLOT_Interface,1.5*TransientSoundVolume,,,Pitch,false); } if (MessageAnim != '') { UnrealPlayer(PlayerOwner).Taunt(MessageAnim); } if ( Phrase[PhraseNum+1] == None ) Destroy(); else { SetTimer(GetSoundDuration(Phrase[PhraseNum]), false); PhraseNum++; } } else Destroy(); } static function PlayerSpeech( name Type, int Index, string Callsign, Actor PackOwner ) { local name SendMode; local PlayerReplicationInfo Recipient; local int i; local GameReplicationInfo GRI; switch (Type) { case 'ACK': // Acknowledgements case 'FRIENDLYFIRE': // Friendly Fire case 'OTHER': // Other SendMode = 'TEAM'; // Only send to team. Recipient = None; // Send to everyone. break; case 'ORDER': // Orders SendMode = 'TEAM'; // Only send to team. Index = OrderToIndex(Index, PackOwner.Level.Game.Class); GRI = PlayerController(PackOwner).GameReplicationInfo; if ( GRI.bTeamGame ) { if ( Callsign == "" ) Recipient = None; else { for ( i=0; i