home *** CD-ROM | disk | FTP | other *** search
/ GameStar Special 2004 September / GSSH0904CD2.iso / UT2004 / Mutator / TeamOverlayV10.ut4mod < prev    next >
INI File  |  2004-09-18  |  162KB  |  1,631 lines

  1. [Setup]
  2. Product=TeamOverlay
  3. Language=int
  4. Version=1
  5. Archive=TeamOverlay.ut4mod
  6. SrcPath=.
  7. MasterPath=..
  8. MasterPathUnrealGameContent=..
  9. Requires=UT2004Requirement
  10. Group=SetupGroup
  11. Group=TeamOverlay
  12.  
  13. [UT2004Requirement]
  14. Product=UT2004
  15. Version=3204
  16.  
  17. [SetupGroup]
  18. AddIni=System\UT2004.ini,Engine.GameEngine.ServerPackages=TeamOverlay
  19. Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=604,Flags=3)
  20. Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=505,Flags=3)
  21. File=(Src=System\TeamOverlayReadMeV1.0.txt,Size=4107)
  22.  
  23. [TeamOverlay]
  24. File=(Src=System\TeamOverlay.int,Size=240)
  25. File=(Src=System\TeamOverlay.u,Size=151597)
  26. File=(Src=System\TeamOverlay.ucl,Size=336)
  27. File=(Src=System\TeamOverlayReadMeV1.0.txt,Size=4107)
  28.  
  29. [Setup]
  30. LocalProduct=TeamOverlay
  31. ReadMe=System\TeamOverlayReadMeV1.0.txt
  32. SetupWindowTitle=Teamoverlay V1.0 Install
  33. AutoplayWindowTitle=Teamoverlay V1.0 Install
  34. ProductURL=http://www.malevolence.com.au/teamoverlay
  35. VersionURL=
  36. Developer=Heywood
  37. DeveloperURL=mailto:teamoverlay@malevolence.com.au
  38.  
  39. [UT2004Requirement]
  40. LocalProduct=UT2004
  41. ProductURL=http://www.unrealtournament2004.com/
  42. VersionURL=http://unreal.epicgames.com/
  43. Developer=Epic Games, Inc.
  44. DeveloperURL=http://www.epicgames.com/
  45. TeamOverlay - Teamplay HUD Mutator Version 1.0 - June 6 2004
  46.  
  47. Game: Unreal Tournament 2004
  48. Mod Type: Mutator
  49. Game Types best used with:  TDM, CTF, DD, Assault, Onslaught
  50. Coding: Adam 'Heywood' Booth  - email teamoverlay@malevolence.com.au
  51. Vehicle Icons: Russell 'Yeti' Whitehead (Except the Hellbender)
  52.  
  53. *** Brief Description:
  54. This Mutator adds to the Players HUD a list of team mates, their health/armor status, what vehicle they're driving (if applicable) if they have the flag, or
  55. are running wild with the double damage.  This mod was inspired from the FireTeam display in Enemy Territory, and cg_teamoverlay from Q3A.
  56.  
  57. When the mutator is running, go to the Configure Input Controls menu to set your keys - from there you can call up the Configuration Menu to adjust colours
  58. Otherwise you can manually bind keys to:
  59.  
  60. TO_ShowOverlay  -  each time this is called, the display of the overlay will be toggled on or off
  61. TO_Config  -  this will bring up the Team Overlay Configuration Menu
  62. TO_ContrastMode  -  this will change between Primary and Alternate Colour Schemes
  63.  
  64. Alternate Colouring is made available for maps that may disagree with your regular colour choice (eg good for Indoors, bad for snow)
  65.  
  66. *** Installation Instructions - Umod (Server and Client):
  67.  
  68. Download and Run TeamOverlayV1.0.ut4mod file - provided UT2004 is properly associated with this filetype, automatic installation should occur. If this doesn't
  69. work for you, the manual installation will be required.
  70.  
  71.  
  72. *** Installation Instructions - Manual - Client:
  73.  
  74. Download and extract the files from TeamOverlayV1.0.zip
  75.  
  76. Copy TeamOverlay.u, TeamOverlay.int and TeamOverlay.ucl into your UT2004 System directory (possibly its located at C:\UT2004\System but it depends on where you installed
  77. UT2004)
  78.  
  79. It's probably best to start an instant action game and go to the Input Controls section to set up the keys you want to use, and then call the configuration menu
  80. and adjust the colours and other settings to your liking.
  81.  
  82. Remember unless the server is actively running this mutator you will not get a chance to use this mutator.
  83.  
  84. *** Installation Instructions - Manual - Server:
  85.  
  86. Download and extract the files from TeamOverlayV1.0.zip
  87.  
  88. Copy TeamOverlay.u, TeamOverlay.int and TeamOverlay.ucl into your UT2004 System directory (possibly its located at C:\UT2004\System but it depends on where you installed
  89. UT2004)
  90.  
  91. Open the UT2004.ini file
  92.  
  93. In the section called [Engine.GameEngine]
  94. After the last "ServerPackages=" entry
  95. add
  96. ServerPackages=TeamOverlay
  97.  
  98. When you start the server, ensure that the mutator has been selected, then the players should be able to make use of it.
  99.  
  100. *** Change Log:
  101.  
  102. June 6 2004 Version 1.0
  103.  
  104. Internal code reduction/optimisation
  105. Removal of left in debug code leaving stuff in the Client log when Bombing Run is being played
  106. Addition of capability of moving the Overlay Display Horizontally
  107. Slight modification to the Onslaught Teamplayer location Filtering code
  108. Included a umod version for simpler installation.
  109.  
  110. May 25 2004 Version (Release Candidate 1)
  111.  
  112. More Optimisation reduced network bandwidth slightly and included the capability to show who has the ball in Bombing Run
  113. First public release for feedback purposes.
  114.  
  115. May 13 2004 Version (Internal release)
  116.  
  117. While working on the Onslaught power node issue (now fixed), a better way of transmitting the required information gave big bandwidth
  118. savings compared to previous versions of the mutator.
  119.  
  120. May 6 2004 Version (First documented internal release)
  121. User side Configuration Enabled
  122. Powernode display issue (Fixed with the first UT2004 Patch) caused the code to not display player locations in Onslaught
  123.  
  124. *** Thanks
  125.  
  126. BugBunny at #unrealscript for helping me when I was first starting out
  127. Squirrel from FragOps fame for the same
  128. Lotus of UTComp fame who's been very helpful and has incorporated some of the TeamOverlay features into UTComp 1.3
  129. Skar and Alkoholk for being my play testers and not getting too annoyed when I find things break as soon as you join the server :)
  130. [Public]
  131. Object=(Name=TeamOverlay.TeamOverlay,Class=Class,MetaClass=Engine.Mutator,Description="Show the details of other team members on your HUD")
  132. Object=(Class=class,MetaClass=Xinterface.GUIUserKeyBinding,Name=TeamOverlay.TOKeys)
  133.  
  134.  
  135. ┴â*₧å@
  136. X?|;₧├╤ß+oåD╛{á╠8╫5U
  137. åNone    GetValueWinTopWinLeftCaptionbScaleToParentbBoundToParent    WinWidthColor
  138. WinHeightUpdateHUDSettings__OnChange__DelegateInternalOnCreateComponent__OnCreateComponent__Delegate    MaxValue    SetValueUClampVBitsVSizebAlphaTextureVClampUBitsMipZeroUSizePalette
  139. TextColor TeamOverlayCore    MaxColorGetComponentValueGetFont bIsSection    KeyLabelAliasAutoPickFontUpdateDefaultsResetControlsEngineVehicleUser CancelClickGetTOInteraction__OnClick__DelegateUpdateTeamForInternalOnCloseSystemInternalOnKeyEventOkClick__OnKeyEvent__DelegateSetComponentValue GetGUIFontONSStationaryWeaponPawnUpdateTeamDetailsRedeemerWarheadGetTeamDetailsGetlongestPlayerNameLocationFilterPlayerControllerDisplayTeamDetailsbAlwaysRelevantGetHumanReadableName XInterfaceTOInteraction
  140. CloseMenuClientMessageAddInteraction
  141. ABGroundRClientOpenMenu
  142. ABGroundGGetDescriptionText Initialized PostRenderRemoveInteraction ALocationB ALocationRANameB
  143. ScaleFont
  144. PBGroundB
  145. PBGroundG
  146. PBGroundR PLocationG PLocationRPNameBPNameGPNameR
  147. GroupNameTOKeysbShowTeamOverlaybShowLocation TeamDetailsPreBeginPlayTickKarma    Lighting
  148. CollisionForce LightColor    MovementFormat bShowIcons NetPriorityAIControllerFillPlayInfobNetTemporaryModifyPlayerTO_ContrastModeGetLocalPlayerControllerTO_ShowOverlayTimerFriendlyNameGetLocationName STY_AlphaZSTY_ParticleSTY_SubtractiveSTY_Additive
  149. STY_AlphaSTY_ModulatedSTY_Translucent STY_Masked STY_Normal    STY_NoneONSWeaponPawnCreateInventory    ASTurret
  150. TO_ConfigInternalPreDrawbAffectPlayersKeyDatabRenderWorld__OnPreDraw__DelegateOverlayActiveDescTextbAllowedAsLast__OnClose__DelegatebOverlayActiveXPos    MinValue RemoteRoleDisplay Description
  151. TextAlign    ControlsNotifyLevelChange    TOConfigInitComponentError    bVisibleYPosOldPawnLocalInteractionsGUIController
  152. Palette13
  153. Palette11    Palette9    Palette7    Palette3PXLPCYLGRI
  154. DeltaTimeViewportOwnerInvMaster
  155. bCanceledERenderStyleWhiteTextureSizeX    Palette1UpdatedFontArrayNamesVehicleNameStringObject RulesGroup    bDrivingCounter MaxTeamSizeGenericIcons PlayerCount    Palette5
  156. Palette23
  157. Palette21
  158. Palette15
  159. Palette17
  160. Palette19ballxPawnSenderxp UDamageTimeGoliathGUIPage HUDContent    RedeemerEnumTeamOnCloseGUIMultiComponentGUIComponentGUIGUIFont
  161. GUIButtonGUISectionBackground    GUILabel    FunctionStructName
  162. Onslaught
  163. TeamIndex    PRIArrayHasFlagTeamID    XWeaponsXGamebIsSpectator StrProperty TimeSecondsStructPropertyArrayPropertyClassPropertyControllerListmyHUDFontScreenWidthMedium TextBufferbShowScoreBoard moCheckBoxSpacerShieldStrength
  164. IconScaleDriverMyControllerMyOwnernextControllerCancelButtonFontClassNameResXFntClsfnt    OkButtonDialogBackground DialogText DialogText2GUIUserKeyBindingNamePropertySetDrawColorObjectPropertyFloatPropertyBoolProperty    DrawIcon    moSliderSetPosDrawTextJustified S_FlagIconMantaDrawTileStretchedTurret ONSVehicleHealth    GameName VehicleBase HELLBENDERRAPTOR    SCORPION
  165. TempColor
  166. DrawColor TeamMembers
  167. LEVIATHAN    tempPawn IntPropertyConstPackageClassRole    HFighter    SFighter NodeRunnerUnknown
  168. TeamMatesOldScaleFont
  169. YStatStep StatSpacer    YLocStep    LocWidthOldScreenWidthbDispLocationbContrastMode
  170. StatsFontLocationFont ScreenScale    PropName ScriptTextiX1Y1 PLocationBX2Y2    Location ReturnValueANameRANameGStaticSaveConfigDynamicLoadObject ALocationGScale
  171. LevelInfoHUD
  172. ABGroundBPlayerReplicationInfoGameReplicationInfo
  173. Inventorytm    tempfont ControllerNameWDLinesDisplayedIconsplayercounter
  174. XlocationBoxWBoxH loopcounter
  175. tempstyleVehicleTextureTeamMemberPRITempLocationStr    TeamInfonewlocationstringcharposMutator    Viewport
  176. TeamstuffCanvas    ScrWidthSizeModifierrecommendedfontFontInteractionMasterLevelUPDATECOUNTERbAffectSpectatorsPlayerbHasInteraction    PlayInfoPawnInfoTeamMemberIDPHealthPArmor    PVehiclePDDmgShowLocation
  177. ShowIconsTOIntActor InteractionbFindInteractionBytePropertyStyleTextureRedRRedGRedB DialogText3BlueRBlueGBlueB DialogText4EmptyREmptyGEmptyB DialogText5 chkLocationchkIconVertPos ADialogTextADialogText2APNameRAPNameGAPNameBADialogText3 APLocationR APLocationG APLocationBADialogText4 APBGroundR APBGroundG APBGroundB    HorizPosÆyK>                  k¢MåòÆ\    ï┬╪,╟░Äuφ*FÅétτÄuφ*FÅétτÄuφ*FÅétτÄuφ*FÅétτÄuφ*FÅétτçl┴ò╟Äuφ*FÅétτê╩,kαçl┴ò╟Äuφ*FÅétτê╩,kαçl┴ò╟Üâ@qΘÜâ@qΘÄuφ*FÅétτçl┴ò╟Äuφ*FÅétτçl┴ò╟Üâ@qΘÜâ@qΘæ╥ílJæ╥ílJì°±ùÄuφ*FÅétτçl┴ò╟ì°±ùæ╥ílJÄuφ*FÅétτçl┴ò╟à¥≥æ╥ílJì°±ùÄuφ*FÅétτæ╥ílJà¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥æ╥ílJæ╥ílJì°±ùæ╥ílJì°±ù₧╔J╕ÆÄuφ*FÅétτçl┴ò╟ì°±ù₧╔J╕Ææ╥ílJÄuφ*FÅétτçl┴ò╟═├^═├^à¥≥à¥≥à¥≥à¥≥à¥≥═├^à¥≥à¥≥à¥≥à¥≥ì°±ùà¥≥Äuφ*FÅétτæ╥ílJà¥≥à¥≥à¥≥à¥≥Äuφ*FÅétτçl┴ò╟ì°±ù₧╔J╕Æà¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥ì°±ù═├^à¥≥═├^à¥≥═├^à¥≥à¥≥à¥≥═├^à¥≥═├^à¥≥à¥≥à¥≥═├^à¥≥═├^à¥≥ì°±ùà¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥à¥≥Äuφ*FÅétτ╙ìT7_æ╥ílJæ╥ílJì°±ùÄuφ*FÅétτçl┴ò╟ì°±ùæ╥ílJÄuφ*FÅétτçl┴ò╟╨£kÄuφ*FÅétτ%½-T" S"ëR"JQ" P"òO"N"M")L"²   K" J"WI" B"*D"!F"
  178. R"^W╙X╙c╙Q╙ÜTY TÜ9:█9:$GÇ          2═├^Üâ@qΘ%½-;╙d$@@Çà
  179. ä4Æ╣vgN                  2 BE1I╣ΓmAî¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòñ┤┬Zî¢Måòñ┤┬Zî¢Måòåí5≡î¢Måòåí5≡î¢Måò╩b^╢╩b^╢¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòåí5≡¢Måòñ┤┬Z¢Måòñ┤┬Z¢Måòåí5≡¢Måòåí5≡ÅétτÅétτÄuφ*FÆ\    ïåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòåí5≡î¢Måòñ┤┬Zî¢Måòñ┤┬Zî¢Måòåí5≡î¢Måòåí5≡î¢Måò=½'@╙C╙D,LYG#]LklIJPpuTWtcdfgyhlo}~^nVBikqFrst[p$ÜÖÖ>    $═╠╠>1  Ü)ƒt@oÇàIæHAÜm@=$ *lFÇ!    @Ü8    wç     Çä:ä9+ì(n@>@DajÅ" {2#▒6@f@-x.u»»5@?@@@O@yÜz@@E@F@C@D@Lå}B@G@MåNåiåK@QåRåSåTåUåVåXå,@YåZå\åW@]å`å[@^@båcåeå_@gåd@hññPåzEJ@3H@rî┬┬NÇ@ »&kÅX<»wÇç ΦEÇ@Ç╥p@b»v7C$C]RedWI $≥εê>$Ç>$═╠L>    $
  180. ╫#=╙╙ 
  181. $C]GreenWJ $ïêó>$Ç>$═╠L>    $
  182. ╫#=╙╙ 
  183. [Çà]Save$└?$Ç>$═╠L>    $
  184. ╫ú=╙╙*/0WL.dê├LÇo*"#" *■■■ ╙"@"@"@"@π>@@""!,`\<8â╙╔╞½╢▐αΓ╒Θ┌┘ó<å═╬╔╠┘╓┘ßεΦΦε┌╧acyîêòVf⌐¬íÿÑÿ£ù``±╡öôäåèHME#bBVVS+,Vb5ÿÑùT▒ºì╣╜╜╗éìäS</£╦ùT`»ƒ╢╘π╒╓╟╟┴┴X╖╢⌐│:cdk)∩≥Φε·±··⌡···╖≥∙÷∩»0ZQH]╦╦í\å±·÷∙···⌠±σ╫±·°┘┐╕Φ«3╔≥∩╔),╫π└ߣå╬╤╧╩╡╖╢╗▐ε±α·∙▐└α±δkîî╬æ")¥π¥ö₧o    ê░╟·ä'(ÿτ⌡·Σ╝┤ΦΦ║O]çK,'₧ñùáƒ{}¬▒⌐u«σ┼°╒₧uá∩αS^ïa'«₧íôûù5. I:Cxnrvä}⌐3<₧q»tò╚ï╠╣âQd│╝ZFvtv│}éëåëüÄz$[-^èKSÆΘ±├σφ≥Θσ▄ßtk╤rííáX)Å╨¬├├«êé{émZ¬╬╫╓τ╘∞┴╛─┐┐┼ë¡▌▌⌐h≥╤éÿü╣║⌐┴┐║└Θñ▀┤╫τ╒└≤┘▀▀α╠╠═╚╔ττ╓ß│┤è}yvxy|t┤┐éüëüåzR¢∞▀╪¬«XSKVBEH@BH9Kr«¬α÷Φ═╠ß▀▄ß╟╥┼╨│╒▄╠╢╖ç{HKQILFLQPWOKPNà⌐úñ¿πáFGPes9?;ACG;V}┴ß╒▐╒▒╥╙╦╘╓╘╤╗░╔╕êüèh\EGIBh\\`\\X\XKSSi|¼ÑπßàNiço?67L9DDHSKé║⌐╕┘╬┘┌╚▒╖╣ôì╘ònSqTJ@KôXæÅa[aX\K[QMEmóåñ█¡jÇÇ{l┬╖«~BCQ^SML}╗{t½ƒüxnxmÆèk\\XEFIÅ╡ò°ε─σßσπ╦└èSEEphÜ▀¡gàà║▀µ⌡Ω▀µzSHO^\{▓üXy{vqo}nrftf`B>EEî╢┐┼╕±∩φτΘ▀·┼ÅènH`fò╚ÄgÖ┐≈╟òûÖ╠≡µöd^Xfùx^ü{{q{ƒmhmXaLOSHé░äy┴⌡⌡╦éuìå«╞╟åkK<TéÜï¿┬╩Äb]ë¥Ö¥≤▐^Thatòv\kkkihiX\`HOx┐«Ñ{═εëd^{å}å╠╟dX{Oïçç│¿â_]]_{zo¥┼{m\itèxk^\fOLaOhdhnäs▒½╢v╟╦andmxÅ\iådOS:ÉïĪÄrbYeWssrwäÉå`dkåx{éqéîyüüééxLO).TS}╟`kdft\hk`ê:X|wru=JzYYbp_jüìäâckmdSnotÆnmdK1╢`XxOSdrnrn*~peN;RzgRR]W[î{:*J{SZ^HMok\qv.?9iPUXçRseUR|m    BrTft{mhƒXQZk*=PYJ[bprieR^F8XVT[kkxühHaL8lRNRUIe[b^1<xZacZOkOS1    D?SRJPCoK6TWXinITXO.*9DNCP=9)4XOMKEH4 270 /,-)    @@$C]BlueWP $%"╝>$Ç>$═╠L>    $
  185. ╫#=╙╙ 
  186. ÉSÇ@JÇ$C]GreenWT $"?$Ç>$═╠L>    $
  187. ╫#=╙╙ 
  188. fÇ@$C]BlueWV $%"╝>$?$═╠L>    $
  189. ╫#=╙╙ 
  190. $C]BlueWW $ßε$?$Ç>$═╠L>    $
  191. ╫#=╙╙ 
  192. ZG]Cancel$└?$═╠ ?$═╠L>    $
  193. ╫ú=╙╙*(0W[.SÇ]Team Overlay V1.0$Ç>$ÜÖ>$333?    $333?A']}$C]RedW^ $≥εê>$?$═╠L>    $
  194. ╫#=╙╙ 
  195. \Ç* ╙"@"@"@"@Q@@n└.##4!..0.&;[:[8.à&ÿ(E,mmC9-# 4;:40,/,$å}E$,   (;;:#/:(!∞E7ï÷E$Æ;÷E#öål^B█*æ╟ÅqjiB*>█äïm fillE@mE>.$≤█╟5└9o9&7}`lC*)ù0>) >)C.C)&*)ö.>â@0 Éc/E00.;4 ; .4470&*)$,#)))#)*$p-!)^;p.-!'!  *CjCBB4B!7,&0-$#*79B>B>9!#.C)!#'jï(4:(344;(34( *╟ì*9E;0-6-;!0!=9*#)èò▓¢╦╔ÿb:4- ! ,#.0=#!0&.>.!*9.C[4(;    .[     iE&.)#*># 0     9h_ÿvvc<-  /:4<(:▓`_^)@F490)B0"*0'á6;-;ud<;;)  34;[(-::(;0$,>777)), *0;ó4ùC7_üd;)(4( &3/;[:(Ç4ì;>#9*)*  ╣@é0 ;0∞█m<[c4-(4 ( &:4(-╪▐=i.!@#).$*e11!&7£$        4└ƒ}    ÿîè;)(44(  ]bu3}└E.EC!-Ç6C# 60>&#>kï    B    7╓ë9;^<  )( :;)4}╫m.$$    #├0     !) Ç7CCíoB> ╩o u»Ä  (`u<3Ö╩k7)$á9BCj!C #!B9Ei╣BBE.bïÇ.4(;][!   9
  196.  
  197. ;;((;ûi9;δ! 0$o*╕áï&ô Ej>    q"        [₧¥@& [    3(;4ák40#Ç#>n 4# #!E.qÇik9    4---   (-/--> &oBBBà     ."!##  <─D+-;<≤Ö+-$#$!0$$ =ì 6@*     <Ö>/!<&[∩ÿB4k ## $ m    '    a¡>:^Ç╗o:$çE?  0$];│ï[]#│Ç<=0"£@@mÇ╩@$C]RedWc $3R?$Ç>$═╠L>    $
  198. ╫#=╙╙ 
  199. $C]GreenWd $π ^?$Ç>$═╠L>    $
  200. ╫#=╙╙ 
  201. c* ╙"@"@"@"@ßa@@$(░Wà\9êVOOVD)$╩╔O9997┴êô╢j$ $"ô╢╩YôEO|ì(\Vöv\─├ûvvyÄ╖ûÆ╚┌ONlk$DYR$è╕òÆ\??V\ààï\(         9æ┬kiNN6OX\xèò╣Γ╩╩█╓─û╢ûö│╝»æææ┤öO
  202. Eî╔▌δ╚░j 9ì╡ë╢╩δ▌▌∞δ°▄╓╩╓╕├███σ ±√²√√±∩∩╥QU Oèè{{┌┬ì> 9èì╢╩▌Γδ╔δΓΓδα▄╕yDD&$7xè╠≤¥gäáÇâÑ┐∩·╥A ░╞⌠≥φß▀╪╧╧╧╧╧╬╜÷≈▄≈⌡δ▄╩¢┘xxS¢┴ò
  203. [OOjäε亽ºººña╥µτΩM ▓≡ⁿ╒è\D===E=j▓╚∙∞╔╓╓╩╟╖Æ╔ò┴ûê┴ï≥╨╪÷wπѽ¡¡⌐ª₧└c3oMoM≤²Φ╥ǃ┬÷╟Æÿ╢ÖvxÆ├╣¢Öê╕èv|▐╤╒┌xòzΣ┐¬¼¬ñ₧«¥pª½äé.±■Φ«ñíüPACC__545£▒δ┘ôïyy\Yî╟▄├╢¢╡xyöΘ╨┼╞ìΓkΦ╗éíƒü╘╥½¥é~hr≤ε╙¬¥íü0;< om]^mé|╟├îÆêyyåy╓╤┬┴┘òèêV╕»│╛ëαÉ╥┐º¿ºº╥ªóéƒúáÇ╘═¡ñéP<e}}}dí4/-n~[╖ÆyêvìxVYòæ»æèêyJ:▒{{xR╫w═gAPP1`ñr1PP/A;½í£₧7Ppqpqqsp2bBboO╖ïyvV\VEEx{SR?RVè:ÄiY[E┬Q¬~üoc5í║p}aó¿¥drrsâéáágafcoo9Öï[\WS?8*:?>&":O▒ê= &=xê6óóú║épqfqhg
  204. 1`ofo}~}}}qffnopn`&åêVJI8$"$$&&*8(&87c_ccg_CC242@0 ""'#"$8"""""&:R8Wà788&9Z:V\"":Ü*"Åv$>8&8*>+L╢ÿ8I:*'#J+L(╡ù*:$>#*%%Y╢Z"$I"òÅ*$R(╦)J\Åà?Iu' &ïçIIt*$êàITI!vàZIT8($(IWJKJFX,,åGL+L(L++F+KFGF!L,FFH,F,G+X>W++%*%% **!!%    @@$C]BlueWf $»╠k?$Ç>$═╠L>    $
  205. ╫#=╙╙ 
  206. $Ç@G$Ç└]
  207. Font SizeWg $%│é?$Ç>    $
  208. ╫#=╙╙ 
  209. ]
  210.     LocationWh $ "ª?$Ç>$═╠L>╙╙ 
  211. $C]RedWi $GU ?$?$═╠L>    $Å┬u=╙╙ 
  212. {
  213. xwvutsrqpo$C]GreenWk $"?$?$═╠L>    $
  214. ╫#=╙╙ 
  215. ]Health/Armor IconsWl $ "ª?$?$Ç>╙╙ 
  216. ê├$C]GreenWn $ïêó>$?$═╠L>    $
  217. ╫#=╙╙ 
  218. $≡C]Vertical PositionWo $±Å?$Ç>    $
  219. ╫#=╙╙ 
  220. $ D]Horizontal PositionWp $ïë?$Ç>    $
  221. ╫#=╙╙ 
  222. $C]BlueWq $ßε$?$?$═╠L>    $
  223. ╫#=╙╙ 
  224. $C]RedWr $3R?$?$═╠L>    $
  225. ╫#=╙╙ 
  226. $C]GreenWs $π ^?$?$═╠L>    $
  227. ╫#=╙╙ 
  228. $C]BlueWt $»╠k?$?$═╠L>    $
  229. ╫#=╙╙ 
  230. $C]RedWu $GU ?$Ç>$═╠L>    $Å┬u=╙╙ 
  231. s{// TOConfig - TeamOverlay Config
  232. //-----------------------------------------------------------
  233. // This is the GUI Component for the user Preferences
  234. //-----------------------------------------------------------
  235. // Part of TeamOverlay by Adam 'Heywood' Booth - heywood@malevolence.com.au
  236.  
  237. class TOConfig extends GUIPage;
  238.  
  239. var moSlider PNameR, PNameG, PNameB, PLocationR, PLocationG, PLocationB, PBGroundR, PBGroundG, PBGroundB, ScaleFont, YPos, XPos;
  240. var moSlider ANameR, ANameG, ANameB, ALocationR, ALocationG, ALocationB, ABGroundR, ABGroundG, ABGroundB;
  241. var moCheckBox ShowLocation, ShowIcons;
  242.  
  243. var Interaction TOInt;
  244.  
  245. function InitComponent(GUIController MyController, GUIComponent MyOwner)
  246. {
  247.     Super.InitComponent(MyController, MyOwner); // Call Parent's InitComponent
  248.  
  249.     //Point our local control variables at their equivalent control
  250.  
  251.     PNameR = moSlider(Controls[4]);
  252.     PNameG = moSlider(Controls[5]);
  253.     PNameB = moSlider(Controls[6]);
  254.  
  255.     PLocationR = moSlider(Controls[8]);
  256.     PLocationG = moSlider(Controls[9]);
  257.     PlocationB = moSlider(Controls[10]);
  258.  
  259.     PBGroundR = moSlider(Controls[12]);
  260.     PBGroundG = moSlider(Controls[13]);
  261.     PBGroundB = moSlider(Controls[14]);
  262.  
  263.     ScaleFont = moSlider(Controls[15]);
  264.  
  265.     ShowLocation = moCheckBox(Controls[17]);
  266.     ShowIcons = moCheckBox(Controls[18]);
  267.     XPos = moSlider(Controls[34]);
  268.     YPos = moSlider(Controls[19]);
  269.  
  270.     ANameR = moSlider(Controls[22]);
  271.     ANameG = moSlider(Controls[23]);
  272.     ANameB = moSlider(Controls[24]);
  273.  
  274.     ALocationR = moSlider(Controls[26]);
  275.     ALocationG = moSlider(Controls[27]);
  276.     AlocationB = moSlider(Controls[28]);
  277.  
  278.     ABGroundR = moSlider(Controls[30]);
  279.     ABGroundG = moSlider(Controls[31]);
  280.     ABGroundB = moSlider(Controls[32]);
  281.  
  282.     //Initialize sliders to their default values, then get the interaction we'll need to work with.
  283.     ResetControls();
  284.     GetTOInteraction();
  285.  
  286. }
  287.  
  288. //Initializes the controls. Is also used when the user hits cancel.
  289. function ResetControls()
  290. {
  291.     PNameR.SetValue(String(class'TOInteraction'.default.PNameR));
  292.     PNameG.SetValue(String(class'TOInteraction'.default.PNameG));
  293.     PNameB.SetValue(String(class'TOInteraction'.default.PNameB));
  294.  
  295.     PLocationR.SetValue(String(class'TOInteraction'.default.PLocationR));
  296.     PLocationG.SetValue(String(class'TOInteraction'.default.PLocationG));
  297.     PLocationB.SetValue(String(class'TOInteraction'.default.PLocationB));
  298.  
  299.     PBGroundR.SetValue(String(class'TOInteraction'.default.PBGroundR));
  300.     PBGroundG.SetValue(String(class'TOInteraction'.default.PBGroundG));
  301.     PBGroundB.SetValue(String(class'TOInteraction'.default.PBGroundB));
  302.  
  303.     ANameR.SetValue(String(class'TOInteraction'.default.ANameR));
  304.     ANameG.SetValue(String(class'TOInteraction'.default.ANameG));
  305.     ANameB.SetValue(String(class'TOInteraction'.default.ANameB));
  306.  
  307.     ALocationR.SetValue(String(class'TOInteraction'.default.ALocationR));
  308.     ALocationG.SetValue(String(class'TOInteraction'.default.ALocationG));
  309.     ALocationB.SetValue(String(class'TOInteraction'.default.ALocationB));
  310.  
  311.     ABGroundR.SetValue(String(class'TOInteraction'.default.ABGroundR));
  312.     ABGroundG.SetValue(String(class'TOInteraction'.default.ABGroundG));
  313.     ABGroundB.SetValue(String(class'TOInteraction'.default.ABGroundB));
  314.  
  315.     ScaleFont.SetValue(String(Class'TOInteraction'.default.ScaleFont));
  316.  
  317.     ShowLocation.SetComponentValue(String(Class'TOInteraction'.default.bShowLocation));
  318.     ShowIcons.SetComponentValue(String(Class'TOInteraction'.default.bShowIcons));
  319.     XPos.SetValue(String(Class'TOInteraction'.default.XPos));
  320.     YPos.SetValue(String(Class'TOInteraction'.default.YPos));
  321. }
  322.  
  323.  
  324. function GetTOInteraction()
  325. {
  326.   local int i;
  327.   local PlayerController PC;
  328.   local bool bFindInteraction;
  329.  
  330.   bFindInteraction = false;
  331.  
  332.   ForEach AllObjects(class'PlayerController',PC)
  333.   {
  334.     if ( Viewport(PC.Player) != None )
  335.     {
  336.       While (!bFindInteraction)
  337.       {
  338.         TOInt = PC.Player.LocalInteractions[i];
  339.         if (TOInt == none)
  340.           break;
  341.         else
  342.         if (TOInt.IsA('TOInteraction'))
  343.           bFindInteraction = true;
  344.     i++;
  345.       }
  346.       if (!bFindInteraction)
  347.     TOInt = None;
  348.     }
  349.   }
  350. }
  351.  
  352.  
  353. //
  354. //UpdateHUDSettings updates the client's hud with the new colors etc in realtime.
  355. //
  356. function UpdateHUDSettings(GUIComponent Sender)
  357. {
  358.     TOInteraction(TOInt).PNameR = int(PNameR.GetValue());
  359.     TOInteraction(TOInt).PNameG = int(PNameG.GetValue());
  360.     TOInteraction(TOInt).PNameB = int(PNameB.GetValue());
  361.  
  362.     TOInteraction(TOInt).PLocationR = int(PLocationR.GetValue());
  363.     TOInteraction(TOInt).PLocationG = int(PLocationG.GetValue());
  364.     TOInteraction(TOInt).PLocationB = int(PLocationB.GetValue());
  365.  
  366.     TOInteraction(TOInt).PBGroundR = int(PBGroundR.GetValue());
  367.     TOInteraction(TOInt).PBGroundG = int(PBGroundG.GetValue());
  368.     TOInteraction(TOInt).PBGroundB = int(PBGroundB.GetValue());
  369.  
  370.     TOInteraction(TOInt).ANameR = int(ANameR.GetValue());
  371.     TOInteraction(TOInt).ANameG = int(ANameG.GetValue());
  372.     TOInteraction(TOInt).ANameB = int(ANameB.GetValue());
  373.  
  374.     TOInteraction(TOInt).ALocationR = int(ALocationR.GetValue());
  375.     TOInteraction(TOInt).ALocationG = int(ALocationG.GetValue());
  376.     TOInteraction(TOInt).ALocationB = int(ALocationB.GetValue());
  377.  
  378.     TOInteraction(TOInt).ABGroundR = int(ABGroundR.GetValue());
  379.     TOInteraction(TOInt).ABGroundG = int(ABGroundG.GetValue());
  380.     TOInteraction(TOInt).ABGroundB = int(ABGroundB.GetValue());
  381.  
  382.     TOInteraction(TOInt).ScaleFont = int(ScaleFont.GetValue());
  383.  
  384.     TOInteraction(TOInt).bShowLocation = bool(ShowLocation.GetComponentValue());
  385.     TOInteraction(TOInt).bShowIcons = bool(ShowIcons.GetComponentValue());
  386.  
  387.     TOInteraction(TOInt).XPos = int(XPos.GetValue());
  388.     TOInteraction(TOInt).YPos = int(YPos.GetValue());
  389. }
  390.  
  391. function bool OKClick(GUIComponent Sender)
  392. {
  393.         UpdateDefaults();
  394.     Controller.CloseMenu(false);
  395.     return true;
  396. }
  397.  
  398. function bool CancelClick(GUIComponent Sender)
  399. {
  400.         ResetControls();
  401.         UpdateHUDSettings(Sender);
  402.     Controller.CloseMenu(false);
  403.     return true;
  404. }
  405.  
  406. // Escape hit - act like save was pressed
  407. function InternalOnClose(optional Bool bCanceled)
  408. {
  409.         UpdateDefaults();
  410.     Super.OnClose(bCanceled);
  411. }
  412.  
  413. function UpdateDefaults()
  414. {
  415.     //Update the defaults
  416.  
  417.     class'TOInteraction'.default.PNameR = int(PNameR.GetValue());
  418.     class'TOInteraction'.default.PNameG = int(PNameG.GetValue());
  419.     class'TOInteraction'.default.PNameB = int(PNameB.GetValue());
  420.  
  421.     class'TOInteraction'.default.PLocationR = int(PLocationR.GetValue());
  422.     class'TOInteraction'.default.PLocationG = int(PLocationG.GetValue());
  423.     class'TOInteraction'.default.PLocationB = int(PLocationB.GetValue());
  424.  
  425.     class'TOInteraction'.default.PBGroundR = int(PBGroundR.GetValue());
  426.     class'TOInteraction'.default.PBGroundG = int(PBGroundG.GetValue());
  427.     class'TOInteraction'.default.PBGroundB = int(PBGroundB.GetValue());
  428.  
  429.     class'TOInteraction'.default.ANameR = int(ANameR.GetValue());
  430.     class'TOInteraction'.default.ANameG = int(ANameG.GetValue());
  431.     class'TOInteraction'.default.ANameB = int(ANameB.GetValue());
  432.  
  433.     class'TOInteraction'.default.ALocationR = int(ALocationR.GetValue());
  434.     class'TOInteraction'.default.ALocationG = int(ALocationG.GetValue());
  435.     class'TOInteraction'.default.ALocationB = int(ALocationB.GetValue());
  436.  
  437.     class'TOInteraction'.default.ABGroundR = int(ABGroundR.GetValue());
  438.     class'TOInteraction'.default.ABGroundG = int(ABGroundG.GetValue());
  439.     class'TOInteraction'.default.ABGroundB = int(ABGroundB.GetValue());
  440.  
  441.     class'TOInteraction'.default.ScaleFont = ScaleFont.GetValue();
  442.  
  443.     class'TOInteraction'.default.bShowLocation = bool(ShowLocation.GetComponentValue());
  444.     class'TOInteraction'.default.bShowIcons = bool(ShowIcons.GetComponentValue());
  445.  
  446.     class'TOInteraction'.default.XPos = int(XPos.GetValue());
  447.     class'TOInteraction'.default.YPos = int(YPos.GetValue());
  448.  
  449.     class'TOInteraction'.static.StaticSaveConfig();  // Save all the Mutator's config variables
  450. }
  451.  
  452.  8Z╝//====================================================================
  453. // TeamOverlay - HUD Mutator
  454. // By Adam 'Heywood' Booth
  455. // Vehicle Icons thanks to Yeti
  456. //====================================================================
  457. //-----------------------------------------------------------
  458. // Now with Team mate buffering support - increase or decrease UPDATECOUNTER to taste
  459. //-----------------------------------------------------------
  460. class TeamOverlay extends Mutator Config(User);
  461. const MAXTEAMSIZE = 8; // Maximum amount of team mates we'll report on - keep it realistic, it helps reduce the arraysizes
  462.                        // If you change this, also update TeamDetails.uc
  463. const UPDATECOUNTER = 5; // Maximum number of TimerValues a player can go without before being pulled from the TeamDetails
  464.                           // Don't make this too big or people that have left the server can show up in a team for a long time
  465. var bool bAffectSpectators; // If this is set to true, an interaction will be created for spectators
  466. var bool bAffectPlayers; // If this is set to true, an interaction will be created for players
  467. var bool bHasInteraction;
  468. var string OverlayActiveDescText;
  469.  
  470. var() config bool bOverlayActive;
  471.  
  472. static function FillPlayInfo(PlayInfo PlayInfo)
  473. {
  474.     Super.FillPlayInfo(PlayInfo);
  475.  
  476.     PlayInfo.AddSetting(default.RulesGroup, "bOverlayActive", default.OverlayActiveDescText, 0, 1, "Check");
  477. }
  478.  
  479. static event string GetDescriptionText(string PropName)
  480. {
  481.     switch (PropName)
  482.     {
  483.         case "bOverlayActive":            return default.OverlayActiveDescText;
  484.     }
  485.     return Super.GetDescriptionText(PropName);
  486. }
  487.  
  488. function PreBeginPlay()
  489. {
  490.    if(bOverlayActive)
  491.       SetTimer(0.5,true);
  492. }
  493.  
  494. function ModifyPlayer(Pawn P)
  495. {
  496.    if(bOverlayActive)
  497.    {
  498.       Super.ModifyPlayer(P);
  499.       P.CreateInventory("TeamOverlay.TeamDetails");  // Add the Inventory Item that will store the team details
  500.    }
  501. }
  502.  
  503. function Timer()
  504. {
  505.   if (bOverlayActive && (Role == Role_Authority))
  506.   {
  507.      UpdateTeamDetails();
  508.   }
  509. }
  510.  
  511. simulated function Tick(float DeltaTime)
  512. {
  513.     local PlayerController PC;
  514.  
  515.     // If the player has an interaction already, exit function.
  516.     if (bHasInteraction)
  517.         Return;
  518.     PC = Level.GetLocalPlayerController();
  519.  
  520.     // Run a check to see whether this mutator should create an interaction for the player
  521.     if ( PC != None && ((PC.PlayerReplicationInfo.bIsSpectator && bAffectSpectators) || (bAffectPlayers && !PC.PlayerReplicationInfo.bIsSpectator)) )
  522.     {
  523.         PC.Player.InteractionMaster.AddInteraction("TeamOverlay.TOInteraction", PC.Player); // Create the interaction
  524.         bHasInteraction = True; // Set the variable so this lot isn't called again
  525.     }
  526. }
  527.  
  528. function UpdateTeamDetails()
  529. // Goes through the list of controllers that are human and goes updates their team mates details
  530. // called Serverside only
  531. {
  532.   local Controller P;
  533.  
  534.   for ( P = Level.ControllerList; P!=None; P=P.nextController )
  535.   {
  536.       // human players only need this info
  537.       if ( P.IsA('PlayerController') && !P.PlayerReplicationInfo.bIsSpectator && (P.Pawn != None))
  538.       {
  539.         UpdateTeamFor(P);
  540.       }
  541.    }
  542. }
  543.  
  544. simulated function UpdateTeamFor (controller Player)
  545. // Updates the team details for Player
  546. {
  547.   local int TeamMemberID, loopcounter, teammembers;
  548.   local Controller P;
  549.   local Inventory Inv, Teamstuff;
  550.   local TeamDetails tm;
  551.   local xPawn xP;
  552.   local pawn tempPawn;
  553.  
  554.    // Lets find the player's TeamDetails inventory item so we can update it
  555.    Teamstuff = None;
  556.    if(Player.Pawn.IsA('RedeemerWarhead'))
  557.    {
  558.       temppawn = RedeemerWarhead(Player.Pawn).OldPawn;
  559.       For (Inv=RedeemerWarhead(Player.Pawn).OldPawn.Inventory; Inv!=None; Inv=Inv.Inventory)
  560.         if ( TeamDetails(Inv) != None )
  561.            Teamstuff=Inv;
  562.       if (Teamstuff != None)
  563.          tm = TeamDetails(Teamstuff);
  564.    }
  565.    else if(Player.Pawn.IsA('Vehicle') && Vehicle(Player.Pawn).bDriving)
  566.    {
  567.       For (Inv=Vehicle(Player.Pawn).Driver.Inventory; Inv!=None; Inv=Inv.Inventory)
  568.         if ( TeamDetails(Inv) != None )
  569.            Teamstuff=Inv;
  570.         if (Teamstuff != None)
  571.            tm = TeamDetails(Teamstuff);
  572.    }
  573.    else
  574.    {
  575.       For ( Inv=Player.Pawn.Inventory; Inv!=None; Inv=Inv.Inventory)
  576.         if ( TeamDetails(Inv) != None )
  577.            Teamstuff=Inv;
  578.       if (Teamstuff != None)
  579.           tm = TeamDetails(Teamstuff);
  580.    }
  581.  
  582.    // Now we cycle through all the players and bots and add them to our team details if they're on our team
  583.    teammembers = 0;
  584.    if (tm != None)
  585.    {
  586.       for ( P = Level.ControllerList; P!=None; P=P.NextController )
  587.       {
  588.           // On our Team?
  589.           if((P.Pawn != None) && (P.Pawn.PlayerReplicationInfo.Team != None) && (Player.Pawn.PlayerReplicationInfo.Team.TeamIndex == P.Pawn.PlayerReplicationInfo.Team.TeamIndex) && (P.Pawn.PlayerReplicationInfo != None) && (Player.Pawn.PlayerReplicationInfo.Team.TeamIndex != 255)  && P.Pawn.PlayerReplicationInfo.Team.TeamIndex < MAXTEAMSIZE)
  590.           {
  591.             if(P.Pawn.IsA('RedeemerWarhead'))
  592.             {
  593.               TeamMemberID = P.Pawn.PlayerReplicationInfo.TeamID;
  594.               tm.PVehicle[TeamMemberID] = 9; // redeemer = 9
  595.               tm.PHealth[TeamMemberID] = RedeemerWarhead(P.Pawn).oldpawn.Health;
  596.               tm.PArmor[TeamMemberID] = RedeemerWarhead(P.Pawn).oldpawn.ShieldStrength;
  597.               tm.Updated[TeamMemberID] = UPDATECOUNTER ;
  598.               temppawn = RedeemerWarhead(P.Pawn).oldpawn;
  599.               xP = xPawn(temppawn);
  600.             }
  601.             else if((P.IsA('PlayerController') || P.IsA('AIController')))
  602.             {
  603.               if(P.Pawn.PlayerReplicationInfo != None)
  604.               {
  605.                  // Team mate is in a standalone turret perhaps?
  606.                  if(P.Pawn.IsA('ONSStationaryWeaponPawn') || P.Pawn.IsA('ASTurret'))
  607.                  {
  608.                    TeamMemberID = P.Pawn.PlayerReplicationInfo.TeamID;
  609.                    tm.PVehicle[TeamMemberID] = 6; // turret = 6
  610.                    tm.PHealth[TeamMemberID] = Vehicle(P.Pawn).Driver.Health;
  611.                    tm.PArmor[TeamMemberID] = Vehicle(P.Pawn).Driver.ShieldStrength;
  612.                    tm.Updated[TeamMemberID] = UPDATECOUNTER;
  613.                    temppawn = Vehicle(P.Pawn).Driver;
  614.                    xP = xPawn(temppawn);
  615.                  }
  616.                  // Team mate is in a vehicle turret?
  617.                  else if(P.Pawn.IsA('ONSWeaponPawn') && !P.Pawn.IsA('ONSStationaryWeaponPawn'))
  618.                  {
  619.                    TeamMemberID = P.Pawn.PlayerReplicationInfo.TeamID;
  620.                    if(ONSWeaponPawn(P.Pawn).VehicleBase.VehicleNameString == "Goliath")
  621.                       tm.PVehicle[TeamMemberID] = 7; // Goliath Turret = 7
  622.                    else if(ONSWeaponPawn(P.Pawn).VehicleBase.VehicleNameString == "HellBender")
  623.                       tm.PVehicle[TeamMemberID] = 8; // Hellbender Turret = 8
  624.                    else if(ONSWeaponPawn(P.Pawn).VehicleBase.VehicleNameString == "Leviathan")
  625.                       tm.PVehicle[TeamMemberID] = 11; // Levi Turret = 11
  626.                    else if(right(ONSWeaponPawn(P.Pawn).VehicleBase.VehicleNameString,10) == "NodeRunner") // Charge or Minigun Node Runner
  627.                       tm.PVehicle[TeamMemberID] = 13; // NodeRunner Turret = 13
  628.                    else
  629.                       tm.PVehicle[TeamMemberID] = 255; // Unknown Vehicle Turret = 255
  630.                    tm.PHealth[TeamMemberID] = Vehicle(P.Pawn).Driver.Health;
  631.                    tm.PArmor[TeamMemberID] = Vehicle(P.Pawn).Driver.ShieldStrength;
  632.                    tm.Updated[TeamMemberID] = UPDATECOUNTER;
  633.                    temppawn = Vehicle(P.Pawn).Driver;
  634.                    xP = xPawn(temppawn);
  635.                   }
  636.                   // Team mate is in a vehicle perhaps?
  637.                   else if(P.Pawn.IsA('Vehicle') && Vehicle(P.Pawn).bDriving && (Vehicle(P.Pawn).Driver != None))
  638.                   {
  639.                     TeamMemberID = P.Pawn.PlayerReplicationInfo.TeamID;
  640.                     if(Vehicle(P.Pawn).VehicleNameString == "Manta")
  641.                       tm.PVehicle[TeamMemberID] = 1; // Manta = 1
  642.                     else if(Vehicle(P.Pawn).VehicleNameString == "Goliath")
  643.                       tm.PVehicle[TeamMemberID] = 2; // Goliath = 1
  644.                     else if(Vehicle(P.Pawn).VehicleNameString == "Scorpion")
  645.                       tm.PVehicle[TeamMemberID] = 3; // Scorpion = 3
  646.                     else if(Vehicle(P.Pawn).VehicleNameString == "Raptor")
  647.                       tm.PVehicle[TeamMemberID] = 4; // Raptor = 4
  648.                     else if(Vehicle(P.Pawn).VehicleNameString == "HellBender")
  649.                       tm.PVehicle[TeamMemberID] = 5; // Hellbender = 5
  650.                     else if(Vehicle(P.Pawn).VehicleNameString == "Leviathan")
  651.                       tm.PVehicle[TeamMemberID] = 10; // Levi = 10
  652.                     else if(right(Vehicle(P.Pawn).VehicleNameString,10) == "NodeRunner")  // Charge or Minigun Node Runner
  653.                       tm.PVehicle[TeamMemberID] = 12; // NodeRunner = 12
  654.                     else if(Vehicle(P.Pawn).VehicleNameString == "Human Spacefighter")
  655.                       tm.PVehicle[TeamMemberID] = 13; // AS H Spacefighter = 13
  656.                     else if(Vehicle(P.Pawn).VehicleNameString == "Skaarj Spacefighter")
  657.                       tm.PVehicle[TeamMemberID] = 13; // AS S Spacefighter = 14
  658.                     else
  659.                       tm.PVehicle[TeamMemberID] = 255; // Unknown Vehicle = 255
  660.                     tm.PHealth[TeamMemberID] = Vehicle(P.Pawn).Driver.Health;
  661.                     tm.PArmor[TeamMemberID] = Vehicle(P.Pawn).Driver.ShieldStrength;
  662.                     tm.Updated[TeamMemberID] = UPDATECOUNTER;
  663.                     temppawn = Vehicle(P.Pawn).Driver;
  664.                     xP = xPawn(temppawn);
  665.                   }
  666.                   // Team mate must be on foot
  667.                   else
  668.                   {
  669.                     TeamMemberID = P.Pawn.PlayerReplicationInfo.TeamID;
  670.                     tm.PVehicle[TeamMemberID] = 0; // Foot = 0
  671.                     tm.PHealth[TeamMemberID] = P.Pawn.Health;
  672.                     tm.PArmor[TeamMemberID] = P.Pawn.ShieldStrength;
  673.                     tm.Updated[TeamMemberID] = UPDATECOUNTER;
  674.                     xP = xPawn(P.Pawn);
  675.                   }
  676.                 }
  677.               }
  678.               // see if the player has amp
  679.               if(xP.UDamageTime - Level.TimeSeconds >0)
  680.                  tm.PDDmg=TeamMemberID;
  681.               else if(tm.PDDmg==TeamMemberID)
  682.                  tm.PDDmg=255; // if they used to but no long do - reset
  683.               teammembers++;
  684.           }
  685.  
  686.       }
  687.  
  688.       // Lets Check the active Team Mates
  689.       // Each time team mate data is updated, the "Updated" value is reset - however if theres no new updates (they left the game/died etc)
  690.       // We can buffer the last values for a little while - if the player is still about, hopefully they'll respawn again before the updated value
  691.       // hits zero
  692.       for(LoopCounter=0; LoopCounter<MAXTEAMSIZE; LoopCounter++)
  693.       {
  694.         // Hasn't been updated in awhile - assume player has left or something
  695.         if(tm.Updated[LoopCounter] <= 0)
  696.         {
  697.            tm.PHealth[LoopCounter] = 0;
  698.            tm.PArmor[LoopCounter] = 0;
  699.            tm.PVehicle[LoopCounter] = 0;
  700.            tm.Updated[LoopCounter] = 0;
  701.         }
  702.         // Hasn't just been updated - assume player is dead
  703.         else if(tm.Updated[LoopCounter] <= (UPDATECOUNTER-1))
  704.         {
  705.            tm.PHealth[LoopCounter] = 0;
  706.            tm.PArmor[LoopCounter] = 0;
  707.            tm.PVehicle[LoopCounter] = 0;
  708.            if(tm.PDDmg==TeamMemberID)
  709.                  tm.PDDmg=255; // if they had the amp before - they dont now
  710.         }
  711.         tm.Updated[LoopCounter]--;
  712.       }
  713.    }
  714. }
  715.  
  716.  
  717. H«// TOInteraction - TeamOverlay Interaction
  718. //-----------------------------------------------------------
  719. // This is the client side display stuff
  720. //-----------------------------------------------------------
  721. // Part of TeamOverlay by Adam 'Heywood' Booth - heywood@malevolence.com.au
  722. Class TOInteraction extends interaction;
  723.  
  724. #exec TEXTURE IMPORT NAME=Manta FILE=TEXTURES\Manta.PCX GROUP="Icons" MIPS=OFF ALPHA=1
  725. #exec TEXTURE IMPORT NAME=Goliath FILE=TEXTURES\Goliath.PCX GROUP="Icons" MIPS=OFF ALPHA=1
  726. #exec TEXTURE IMPORT NAME=Scorpion FILE=TEXTURES\Scorpion.PCX GROUP="Icons" MIPS=OFF Flags=1 ALPHA=1
  727. #exec TEXTURE IMPORT NAME=Raptor FILE=TEXTURES\Raptor.PCX GROUP="Icons" MIPS=OFF Flags=1 ALPHA=1
  728. #exec TEXTURE IMPORT NAME=Hellbender FILE=TEXTURES\Hellbender.PCX GROUP="Icons" MIPS=OFF Flags=1 ALPHA=1
  729. #exec TEXTURE IMPORT NAME=Turret FILE=TEXTURES\Turret.PCX GROUP="Icons" MIPS=OFF Flags=1 ALPHA=1
  730. #exec TEXTURE IMPORT NAME=Redeemer FILE=TEXTURES\Redeemer.PCX GROUP="Icons" MIPS=OFF Flags=1 ALPHA=1
  731. #exec TEXTURE IMPORT NAME=Leviathan FILE=TEXTURES\Leviathan.pcx GROUP="Icons" MIPS=OFF Flags=1 ALPHA=1
  732. #exec TEXTURE IMPORT NAME=HFighter FILE=TEXTURES\HumanSpaceFighter.pcx GROUP="Icons" MIPS=OFF Flags=1 ALPHA=1
  733. #exec TEXTURE IMPORT NAME=SFighter FILE=TEXTURES\SkaarjSpaceFighter.pcx GROUP="Icons" MIPS=OFF Flags=1 ALPHA=1
  734. #exec TEXTURE IMPORT NAME=NodeRunner FILE=TEXTURES\NodeRunner.pcx GROUP="Icons" MIPS=OFF Flags=1 ALPHA=1
  735. #exec TEXTURE IMPORT NAME=Unknown FILE=TEXTURES\Unknown.PCX GROUP="Icons" MIPS=OFF Flags=1 ALPHA=1
  736. #exec TEXTURE IMPORT NAME=Ball FILE=TEXTURES\Ball.PCX GROUP="Icons" MIPS=OFF Flags=1 ALPHA=1
  737.  
  738. Var GameReplicationInfo GRI;
  739. Var int TeamMates, OldScaleFont, Spacer, YStatStep, StatSpacer, YLocStep, LocWidth, OldScreenWidth;
  740. Var bool bDispLocation, bContrastMode;
  741. Var font StatsFont, LocationFont;
  742. Var float IconScale, ScreenScale;
  743. var config int PNameR, PNameG, PNameB, PLocationR, PLocationG, PLocationB, PBGroundR, PBGroundG, PBGroundB, ScaleFont;
  744. var config int ANameR, ANameG, ANameB, ALocationR, ALocationG, ALocationB, ABGroundR, ABGroundG, ABGroundB, XPos, YPos;
  745. var config bool bShowTeamOverlay, bShowLocation, bShowIcons;
  746. const MAXTEAMSIZE = 8; // Maximum amount of team mates we'll report on - keep it realistic, it helps reduce the arraysizes
  747.  
  748. // Style for rendering sprites, meshes.
  749. var(Display) enum ERenderStyle
  750. {
  751.     STY_None,
  752.     STY_Normal,
  753.     STY_Masked,
  754.     STY_Translucent,
  755.     STY_Modulated,
  756.     STY_Alpha,
  757.     STY_Additive,
  758.     STY_Subtractive,
  759.     STY_Particle,
  760.     STY_AlphaZ,
  761. } Style;
  762.  
  763.  
  764. event Initialized()
  765. {
  766.     foreach ViewportOwner.Actor.DynamicActors(class'GameReplicationInfo', GRI)
  767.         If (GRI != None)
  768.             Break;
  769. }
  770.  
  771. event NotifyLevelChange()
  772. {
  773.         Master.RemoveInteraction(self);
  774. }
  775.  
  776. function PostRender( canvas Canvas )
  777. {
  778.     local TeamDetails tm;
  779.     local float XL, YL;
  780.     local font tempfont;
  781.     local int playercount;
  782.  
  783.     // Do this only if we change the font size, screen resolution, or we (first start up and the ScaleFont Value is zero)
  784.     if((ScaleFont != OldScaleFont) || (Canvas.SizeX != OldScreenWidth) || StatsFont==None)
  785.     {
  786.        StatsFont = GetFont(AutoPickFont((Canvas.SizeX),ScaleFont),1);
  787.        LocationFont = GetFont(AutoPickFont((Canvas.SizeX),ScaleFont-1), 1);
  788.        OldScaleFont = ScaleFont;
  789.        OldScreenWidth = Canvas.SizeX;
  790.  
  791.        tempFont = Canvas.Font;
  792.  
  793.        Canvas.Font = StatsFont;
  794.        Canvas.StrLen(" ", XL, YL);
  795.        Spacer = XL; // The width between stats items
  796.        YStatStep = YL; // Height of Name
  797.  
  798.        Canvas.StrLen("199", XL, YL);
  799.        StatSpacer = XL;  // the width of a maximum state
  800.        IconScale = YL/64; // Icons are 64 Pixel textures
  801.  
  802.        Canvas.Font = LocationFont;
  803.        Canvas.StrLen("  XXXXXXXXXXXXXXXX", XL, YL);
  804.        YLocStep = YL; // Height of Location font
  805.        LocWidth = XL;
  806.  
  807.        Canvas.Font = tempfont;
  808.        ScreenScale = float(Canvas.SizeX) / 640.0;
  809.     }
  810.     if(!ViewportOwner.Actor.myHUD.bShowScoreBoard)
  811.     {
  812.       tm = GetTeamDetails();
  813.       if(tm != None)
  814.       {
  815.         TeamMates = 0;
  816.         for (playercount=0;playercount<(GRI.PRIArray.Length);playercount++)
  817.           if(GRI.PRIArray[playercount].Team == ViewportOwner.Actor.Pawn.PlayerReplicationInfo.Team  && GRI.PRIArray[playercount] != ViewportOwner.Actor.Pawn.PlayerReplicationInfo)
  818.             TeamMates++;
  819.  
  820.         if((TeamMates>1) && (bShowTeamOverlay))
  821.         {
  822.             DisplayTeamDetails(Canvas, tm);
  823.         }
  824.       }
  825.     }
  826. }
  827.  
  828. // Display Team Details
  829. function DisplayTeamDetails(canvas Canvas, TeamDetails tm)
  830. {
  831.    local int NameW, DLines, DisplayedIcons,x1,x2,y1,y2, playercount, playercounter, Xlocation, BoxW, BoxH, loopcounter;
  832.    local font tempFont;
  833.    local byte tempstyle;
  834.    local color tempColor;
  835.    local texture VehicleTexture;
  836.    local PlayerReplicationInfo TeamMemberPRI;
  837.    local string TempLocationStr;
  838.    local float XL, YL;
  839.  
  840.    tempFont = Canvas.Font;
  841.    tempColor = Canvas.DrawColor;
  842.  
  843.    tempFont = Canvas.Font;
  844.    Canvas.Font = StatsFont;
  845.    NameW = GetLongestPlayerName(Canvas);
  846.    if (LocWidth > NameW)
  847.      NameW = LocWidth;
  848.  
  849.    Xlocation = (XPos * ScreenScale) + 2 * (IconScale*64);
  850.  
  851.    if(bShowLocation==True)
  852.    {
  853.      DLines = 1;
  854.      bDispLocation = True;
  855.    }
  856.    else
  857.    {
  858.      DLInes = 0;
  859.      bDispLocation = False;
  860.    }
  861.  
  862.    // Draw the Box enclosed the displayed team details
  863.    BoxW = (NameW + 2 * Spacer + 2 * StatSpacer);  // Base position
  864.    BoxH = (TeamMates * (YStatStep + DLines * YLocStep));
  865.    if(bShowIcons)
  866.      BoxH = BoxH + YStatStep;  // Increase the size if we're showing these icons
  867.  
  868.    if(!bContrastMode)
  869.       Canvas.SetDrawColor(PBGroundR,PBGroundG,PBGroundB,255);
  870.    else
  871.       Canvas.SetDrawColor(ABGroundR,ABGroundG,ABGroundB,255);
  872.    Canvas.Style = ERenderStyle.STY_Translucent;
  873.    Canvas.SetPos(Xlocation, (YPos* ScreenScale) - BoxH);
  874.    Canvas.DrawTileStretched(material'Engine.WhiteTexture',BoxW, BoxH);
  875.    playercounter=0;
  876.  
  877.    for (playercount=0; playercount < MAXTEAMSIZE; playercount++)
  878.    {
  879.       // Find the PRI of the Team Member
  880.       TeamMemberPRI = None;
  881.       for(loopcounter=0; loopcounter < (GRI.PRIArray.Length); loopcounter++)
  882.       {
  883.         if((GRI.PRIArray[loopcounter].TeamID == playercount) && (GRI.PRIArray[loopcounter].Team.TeamIndex == ViewportOwner.Actor.Pawn.PlayerReplicationInfo.Team.TeamIndex))
  884.         {
  885.           TeamMemberPRI = GRI.PRIArray[loopcounter];
  886.         }
  887.       }
  888.       // Don't display non-existant players or ourself
  889.       if((TeamMemberPRI != None) && (TeamMemberPRI != ViewportOwner.Actor.Pawn.PlayerReplicationInfo))
  890.       {
  891.         DisplayedIcons = 0;
  892.  
  893.         // Draw Vehicle Icon if necessary
  894.  
  895.         switch( tm.PVehicle[playercount] )
  896.         {
  897.         case 0:
  898.           VehicleTexture = None; // on foot
  899.           break;
  900.         case 1:
  901.           VehicleTexture = texture'Manta';
  902.           break;
  903.         case 2:
  904.           VehicleTexture = texture'Goliath';
  905.           break;
  906.         case 3:
  907.           VehicleTexture = texture'Scorpion';
  908.           break;
  909.         case 4:
  910.           VehicleTexture = texture'Raptor';
  911.           break;
  912.         case 5:
  913.           VehicleTexture = texture'Hellbender';
  914.           break;
  915.         case 6:
  916.           VehicleTexture = texture'Turret';  // stand alone turret
  917.           break;
  918.         case 7:
  919.           VehicleTexture = texture'Goliath'; // Goli Turret - To be updated sometime
  920.           break;
  921.         case 8:
  922.           VehicleTexture = texture'Hellbender'; // Bender Turret - To be updated sometime
  923.           break;
  924.         case 9:
  925.           VehicleTexture = texture'Redeemer';
  926.           break;
  927.         case 10:
  928.           VehicleTexture = texture'Leviathan';
  929.           break;
  930.         case 11:
  931.           VehicleTexture = texture'Leviathan';  // Levi Turret - To be updated sometime
  932.           break;
  933.         case 12:
  934.           VehicleTexture = texture'NodeRunner';
  935.           break;
  936.         case 13:
  937.           VehicleTexture = texture'HFighter';  // Assault Human Fighter
  938.           break;
  939.         case 14:
  940.           VehicleTexture = texture'SFighter';  // Assault Skaarj Fighter
  941.           break;
  942.         default:
  943.           VehicleTexture = texture'Unknown'; // Vehicle doesnt map to anything we know of
  944.           break;
  945.         }
  946.       // Display The Vehicle Symbol if they have it
  947.       if(tm.PVehicle[playercount] != 0)
  948.       {
  949.         Canvas.SetPos(XLocation - (DisplayedIcons+1)*(64 * IconScale), (YPos* ScreenScale)-((Playercounter+1) * (YStatStep + DLines * YLocStep)));
  950.         Canvas.Style = ERenderStyle.STY_Translucent;
  951.         if(!bContrastMode)
  952.           Canvas.SetDrawColor(PNameR,PNameG,PNameB);
  953.         else
  954.           Canvas.SetDrawColor(ANameR,ANameG,ANameB);
  955.         Canvas.DrawIcon(VehicleTexture, IconScale);
  956.         DisplayedIcons++;
  957.       }
  958.  
  959.       // Display The Amp Symbol if they have it
  960.       if(tm.PDDmg == playercount)
  961.       {
  962.         Canvas.SetPos(XLocation - (DisplayedIcons+1)*(64 * IconScale), (YPos* ScreenScale)-((Playercounter+1) * (YStatStep + DLines * YLocStep)));
  963.         Canvas.Style = ERenderStyle.STY_Normal;
  964.         Canvas.SetDrawColor(255,255,255);
  965.         Canvas.DrawTile(material'HudContent.Generic.Hud',64*IconScale,64*IconScale,0,164,78,78);
  966.         DisplayedIcons++;
  967.       }
  968.       // Display the flag/ball symbol if we're holding one!
  969.       if(TeamMemberPRI.HasFlag !=none)
  970.       {
  971.         Canvas.SetPos(XLocation - (DisplayedIcons+1)*(64 * IconScale), (YPos* ScreenScale)-((Playercounter+1) * (YStatStep + DLines * YLocStep)));
  972.         if(ViewportOwner.Actor.GameReplicationInfo.GameName=="Bombing Run")
  973.         {
  974.           Canvas.Style = ERenderStyle.STY_Translucent;
  975.           Canvas.SetDrawColor(255,255,255);
  976.           Canvas.DrawIcon(Texture'Ball', IconScale);
  977.         }
  978.         else
  979.         {
  980.           Canvas.Style = ERenderStyle.STY_Normal;
  981.           if(ViewportOwner.Actor.Pawn.PlayerReplicationInfo.Team.TeamIndex == 1)
  982.             Canvas.SetDrawColor(255,0,0); // Blue Team has the red flag
  983.           else
  984.             Canvas.SetDrawColor(0,0,255); // Red Team has the Blue flag
  985.           Canvas.DrawTile(material'xInterface.S_FlagIcon',64*iconScale,64*iconScale,0,0,90,64);
  986.         }
  987.         DisplayedIcons++;
  988.        }
  989.  
  990.        // Display the Player Name
  991.        Canvas.Style = ERenderStyle.STY_Normal;
  992.        Canvas.Font = StatsFont;
  993.        if(bContrastMode)
  994.           Canvas.SetDrawColor(ANameR,ANameG,ANameB);
  995.        else
  996.           Canvas.SetDrawColor(PNameR,PNameG,PNameB);
  997.        y1 = (YPos* ScreenScale)-((Playercounter+1) * (YStatStep + DLines * YLocStep));
  998.        Canvas.SetPos(XLocation, y1);
  999.        Canvas.DrawText(TeamMemberPRI.GetHumanReadableName());
  1000.  
  1001.        // Display The Player Health
  1002.        if (tm.PHealth[playercount] < 15)
  1003.           Canvas.SetDrawColor(255,0,0);
  1004.        else if (tm.PHealth[playercount] < 60)
  1005.           Canvas.SetDrawColor(255,128,128);
  1006.        else if (tm.PHealth[playercount] > 110)
  1007.           Canvas.SetDrawColor(0,255,0);
  1008.        else
  1009.           Canvas.SetDrawColor(255,255,255);
  1010.        if(bContrastMode)
  1011.           Canvas.SetDrawColor(255-clamp(2.5*tm.PHealth[playercount],0,255),0,0);
  1012.        x1 = (XLocation + NameW + Spacer);
  1013.        x2 = x1 + StatSpacer;
  1014.        y2 = y1 + YStatStep;
  1015.        Canvas.DrawTextJustified(tm.PHealth[playercount], 2, x1,y1,x2,y2);
  1016.  
  1017.        // Display The Player Armor
  1018.        if(bContrastMode)
  1019.           Canvas.SetDrawColor(0,0,0);
  1020.        else
  1021.           Canvas.SetDrawColor(255,255,255);
  1022.        Canvas.SetPos((XPos * ScreenScale) + NameW + Spacer + StatSpacer + Spacer, (YPos* ScreenScale)-((Playercounter+1) * (YStatStep + DLines * YLocStep)));
  1023.  
  1024.        x1 = XLocation + NameW + Spacer + StatSpacer + Spacer;
  1025.        x2 = x1 + StatSpacer;
  1026.  
  1027.       if(tm.PArmor[playercount]!=0)
  1028.         Canvas.DrawTextJustified(tm.PArmor[playercount], 0, x1,y1,x2,y2);
  1029.       else
  1030.         Canvas.DrawTextJustified("-", 1, x1,y1,x2,y2);
  1031.  
  1032.       // Display The Player Location
  1033.       if(bDispLocation)
  1034.       {
  1035.          TemplocationStr = "  "$LocationFilter(TeamMemberPRI.GetLocationName());
  1036.          Canvas.Font = LocationFont;
  1037.          Canvas.StrLen(TempLocationStr, XL, YL);
  1038.          // reduce the string size so that it fits in the display area
  1039.          while(XL > (NameW + 2 * Spacer + 2 * StatSpacer))
  1040.          {
  1041.             TempLocationStr = left(TempLocationStr, len(TempLocationStr)-1);
  1042.             Canvas.StrLen(TempLocationStr, XL, YL);
  1043.          }
  1044.  
  1045.        if(bContrastMode)
  1046.           Canvas.SetDrawColor(ALocationR,ALocationG,ALocationB);
  1047.        else
  1048.          Canvas.SetDrawColor(PLocationR,PLocationG,PLocationB);
  1049.        Canvas.SetPos(XLocation, (YPos* ScreenScale)-(Playercounter * (YStatStep + DLines * YLocStep))-YLocStep);
  1050.        Canvas.DrawTextClipped(TempLocationStr);
  1051.       }
  1052.       playercounter++;
  1053.     }
  1054.    }
  1055.    if(bShowIcons)
  1056.    {
  1057.       Canvas.SetDrawColor(255,255,255);
  1058.  
  1059.       // Health Icon
  1060.       Canvas.SetPos(XLocation + NameW + Spacer + StatSpacer/2 - (64 * Iconscale)/2, (YPos* ScreenScale)-((Playercounter) * (YStatStep + DLines * YLocStep)) - YStatStep );
  1061.       Canvas.DrawTile(material'HudContent.Generic.Hud',64*iconScale,64*iconScale,75,167,48,48);
  1062.  
  1063.       // Armor Icon
  1064.       Canvas.SetPos(XLocation + NameW + Spacer + StatSpacer + Spacer + StatSpacer/2 - (64 * Iconscale)/2, (YPos* ScreenScale)-((Playercounter) * (YStatStep + DLines * YLocStep)) - YStatStep );
  1065.       Canvas.DrawTile(material'HudContent.Generic.Hud',64*iconScale,64*iconScale,1,248,66,66);
  1066.    }
  1067.  
  1068.    Canvas.DrawColor = tempColor;
  1069.    Canvas.Style = tempstyle;
  1070. }
  1071.  
  1072. // Some strings - particularly with onslaught are rather long - this tries to reduce that size somewhat
  1073. // Not localised, so this is probably only helpful for English language players
  1074. function string LocationFilter(coerce string Location)
  1075. {
  1076.     local string newlocationstring;
  1077.     local int charpos;
  1078.  
  1079.     newlocationstring = Location;
  1080.     if(ViewportOwner.Actor.GameReplicationInfo.GameName=="Onslaught")
  1081.     {
  1082.       if(left(newlocationstring,5) ~= "Near "){
  1083.           newlocationstring = right(newlocationstring, len(newlocationstring)-5);  // 5 character reduction
  1084.       }
  1085.       newlocationstring = Repl(newlocationstring, "Red Constructing", "(C) Red"); // big character reduction
  1086.       newlocationstring = Repl(newlocationstring, "Blue Constructing", "(C) Blue"); // big character reduction
  1087.       newlocationstring = Repl(newlocationstring, "PowerNode", "Node"); // 5 character reduction
  1088.  
  1089.       charpos = InStr(newlocationstring, " in a "); // lets get rid of " in a manta " etc since we're showing the vehicle on the overlay
  1090.       if(charpos != -1)
  1091.         newlocationstring=left(newlocationstring, charpos);
  1092.     }
  1093.     return newlocationstring;
  1094. }
  1095.  
  1096. // Find the longest Playernamesize
  1097. function int GetlongestPlayerName(canvas Canvas)
  1098. {
  1099.    local int playercount;
  1100.    local float NameW, XL, YL;
  1101.    NameW = 0;
  1102.    for (playercount=0;playercount<(GRI.PRIArray.Length);playercount++)
  1103.    {
  1104.      if(GRI.PRIArray[playercount].Team == ViewportOwner.Actor.Pawn.PlayerReplicationInfo.Team  && GRI.PRIArray[playercount] != ViewportOwner.Actor.Pawn.PlayerReplicationInfo)
  1105.      {
  1106.         Canvas.StrLen(GRI.PRIArray[playercount].GetHumanReadableName(), XL, YL);
  1107.        if(XL>NameW)
  1108.          NameW = XL;
  1109.      }
  1110.    }
  1111.    return NameW;
  1112. }
  1113.  
  1114. // Returns the appropriate access to the inventory item that contains the team details
  1115. Function TeamDetails GetTeamDetails()
  1116. {
  1117.     local Inventory Inv, Teamstuff;
  1118.     local TeamDetails tm;
  1119.  
  1120.     Teamstuff = None;
  1121.  
  1122.     if(ViewportOwner.Actor.Pawn != None)
  1123.     {
  1124.       if(ViewportOwner.Actor.Pawn.IsA('Vehicle') && (Vehicle(ViewportOwner.Actor.Pawn).Driver.Inventory != None))
  1125.       {
  1126.         For (Inv=Vehicle(ViewportOwner.Actor.Pawn).Driver.Inventory; Inv!=None; Inv=Inv.Inventory)
  1127.         {
  1128.           if ( TeamDetails(Inv) != None )
  1129.             Teamstuff=Inv;
  1130.         }
  1131.       }
  1132.       else if(ViewportOwner.Actor.Pawn.Inventory != None)
  1133.       {
  1134.         For ( Inv=ViewportOwner.Actor.Pawn.Inventory; Inv!=None; Inv=Inv.Inventory)
  1135.         {
  1136.           if ( TeamDetails(Inv) != None )
  1137.             Teamstuff=Inv;
  1138.         }
  1139.       }
  1140.     }
  1141.  
  1142.     if(Teamstuff != None)
  1143.         tm = TeamDetails(Teamstuff);
  1144.     else
  1145.         tm = None;  // Not found in the inventory
  1146.     return tm;
  1147. }
  1148.  
  1149. // Picks an appropriate font based on ScrWidth
  1150. simulated function string AutoPickFont(int ScrWidth, int SizeModifier)
  1151. {
  1152.      local string FontArrayNames[9];
  1153.      local int FontScreenWidthMedium[9], counter, recommendedfont;
  1154.  
  1155.      // ScreenWidths to look at
  1156.      FontScreenWidthMedium[0]=2048;
  1157.      FontScreenWidthMedium[1]=1600;
  1158.      FontScreenWidthMedium[2]=1280;
  1159.      FontScreenWidthMedium[3]=1024;
  1160.      FontScreenWidthMedium[4]=800;
  1161.      FontScreenWidthMedium[5]=640;
  1162.      FontScreenWidthMedium[6]=512;
  1163.      FontScreenWidthMedium[7]=400;
  1164.      FontScreenWidthMedium[8]=320;
  1165.  
  1166.      FontArrayNames[0]="2K4Fonts.Verdana34";
  1167.      FontArrayNames[1]="2K4Fonts.Verdana28";
  1168.      FontArrayNames[2]="2K4Fonts.Verdana24";
  1169.      FontArrayNames[3]="2K4Fonts.Verdana20";
  1170.      FontArrayNames[4]="2K4Fonts.Verdana16";
  1171.      FontArrayNames[5]="2K4Fonts.Verdana14";
  1172.      FontArrayNames[6]="2K4Fonts.Verdana12";
  1173.      FontArrayNames[7]="2K4Fonts.Verdana8";
  1174.      FontArrayNames[8]="2K4Fonts.FontSmallText";
  1175.  
  1176.      for(counter=0;counter<=8;counter++)
  1177.      {
  1178.          if(FontScreenWidthMedium[counter] >= ScrWidth)
  1179.          {
  1180.              recommendedfont = clamp((counter - SizeModifier), 0,8);
  1181.          }
  1182.      }
  1183.  
  1184.      if(recommendedfont == 9)
  1185.         log ("Font selection error");
  1186.      return FontArrayNames[recommendedfont];
  1187. }
  1188.  
  1189.  
  1190. // User Bindable - Toggles the Alternate Colour Pallete
  1191. exec function TO_ContrastMode()
  1192. {
  1193.      bContrastMode = !bContrastMode;
  1194.      if(bContrastMode)
  1195.        ViewportOwner.Actor.ClientMessage("TeamOverlay - Using Alternate Colourscheme");
  1196.      else
  1197.        ViewportOwner.Actor.ClientMessage("TeamOverlay - Using Primary Colourscheme");
  1198. }
  1199.  
  1200. // User Bindable - Toggles on/off the Overlay
  1201. exec function TO_ShowOverlay()
  1202. {
  1203.      bShowTeamOverlay = !bShowTeamOverlay;
  1204. }
  1205.  
  1206. // User Bindable - Brings up the configuration menu
  1207. exec function TO_Config()
  1208. {
  1209.      ViewportOwner.Actor.ClientOpenMenu("TeamOverlay.TOConfig");
  1210. }
  1211. // Copied from XInterface.DrawOpBase
  1212. simulated function Font GetFont(string FontClassName, float ResX)
  1213. {
  1214.     local Font fnt;
  1215.  
  1216.     fnt = GetGUIFont(FontClassName, ResX);
  1217.     if ( fnt == None )
  1218.         fnt = Font(DynamicLoadObject(FontClassName, class'Font'));
  1219.  
  1220.     if ( fnt == None )
  1221.         log(Name$" - FONT NOT FOUND '"$FontClassName$"'",'Error');
  1222.  
  1223.     return fnt;
  1224. }
  1225.  
  1226. // Copied from XInterface.DrawOpBase
  1227. simulated function Font GetGUIFont( string FontClassName, float ResX )
  1228. {
  1229. local class<GUIFont>    FntCls;
  1230. local GUIFont Fnt;
  1231.  
  1232.     FntCls = class<GUIFont>(DynamicLoadObject(FontClassName, class'Class',True));
  1233.     if (FntCls != None)
  1234.         Fnt = new(None) FntCls;
  1235.  
  1236.     if ( Fnt == None )
  1237.         return None;
  1238.  
  1239.     return Fnt.GetFont(ResX);
  1240. }
  1241.  
  1242.  
  1243. ╝x~        Ç          6[z╤╢[ ╝j⌡√Wäe*┼çl┴ò╟äe*┼£ë~═Wäe*┼£ë~═Wçl┴ò╟Üâ@qΘÜâ@qΘäe*┼çl┴ò╟äe*┼ê╩,kαäe*┼ê╩,kαçl┴ò╟Üâ@qΘÜâ@qΘäe*┼çl┴ò╟Üâ@qΘÜâ@qΘ│UD≡äe*┼äe*┼äe*┼çl┴ò╟ì°±ùäe*┼çl┴ò╟ì°±ù₧╔J╕Æäe*┼çl┴ò╟ì°±ù₧╔J╕Æäe*┼çl┴ò╟äe*┼çl┴ò╟ì°±ù₧╔J╕Æäe*┼çl┴ò╟ì°±ù₧╔J╕Æäe*┼çl┴ò╟äe*┼çl┴ò╟ì°±ù═├^═├^äe*┼£ë~═Wçl┴ò╟═├^äe*┼£ë~═Wçl┴ò╟═├^äe*┼£ë~═Wäe*┼äe*┼äe*┼çl┴ò╟äe*┼çl┴ò╟äe*┼çl┴ò╟äe*┼çl┴ò╟ì°±ù═├^═├^äe*┼ê╩,kαçl┴ò╟═├^äe*┼ê╩,kαçl┴ò╟═├^äe*┼ê╩,kαäe*┼çl┴ò╟äe*┼çl┴ò╟äe*┼çl┴ò╟ì°±ùäe*┼Ñ╣Ç▄Θ┴aΘQ═├^äe*┼Ñ╣Ç▄Θ┴aΘQ═├^äe*┼Ñ╣Ç▄Θ┴aΘQ═├^äe*┼Ñ╣Ç▄Θ┴aΘQ═├^═├^═├^äe*┼ê╩,kαçl┴ò╟═├^äe*┼ê╩,kαçl┴ò╟═├^äe*┼ê╩,kαäe*┼çl┴ò╟äe*┼ê╩,kαäe*┼ê╩,kαäe*┼çl┴ò╟ì°±ùäe*┼ê╩,kα═├^äe*┼ê╩,kα═├^äe*┼ê╩,kα═├^äe*┼ê╩,kα═├^äe*┼ê╩,kα═├^äe*┼ê╩,kα═├^äe*┼ê╩,kα═├^äe*┼ê╩,kα═├^äe*┼ê╩,kα═├^═├^═├^äe*┼ê╩,kαçl┴ò╟═├^äe*┼ê╩,kαçl┴ò╟═├^äe*┼ê╩,kαäe*┼çl┴ò╟ì°±ù═├^═├^äe*┼çl┴ò╟═├^äe*┼çl┴ò╟═├^äe*┼▒D7│UD≡═├^═├^═├^äe*┼═├^═├^═├^═├^═├^═├^═├^═├^═├^═├^═├^═├^│UD≡äe*┼äe*┼äe*┼ì°±ùäe*┼äe*┼│UD≡Åétτì°±ùÅétτì°±ùÅétτÄuφ*F╨£kÅétτçl┴ò╟╥╨▓í%½'a^]`\_~╙B],+Activate Team Overlay (Uncheck to Disable)E╙U]    Mutatorm] TeamOverlayJ].-Show the details of team members on your HUDg╙;╙H▄|V                   {eπ╞▄·╥±=½'Yñ! ]Team Overlay Controls╙!]
  1244. TO_Config MOverlay ConfigS!MTO_ShowOverlay ]Overlay DisplayS!]TO_ContrastMode ]Alternate Colour SchemeSl// TOKeys - TeamOverlay Keys
  1245. //-----------------------------------------------------------
  1246. // This is used for the Keybinding of the TeamOverlay Exec functions in TOInteraction
  1247. //-----------------------------------------------------------
  1248. // Part of TeamOverlay by Adam 'Heywood' Booth - heywood@malevolence.com.au
  1249. class TOKeys extends GUIUserKeyBinding;
  1250.  
  1251. @                                      !!! ### $$$ &&& ''' ))) *** ,,, --- /// 000 222 333 555 666 888 999 ;;; <<< >>> ??? AAA BBB DDD EEE GGG HHH JJJ KKK MMM NNN PPP QQQ SSS TTT VVV WWW YYY ZZZ \\\ ]]] ___ ``` bbb ccc eee fff hhh iii kkk lll nnn ooo qqq rrr ttt uuu www xxx zzz {{{ }}} ~~~ ÇÇÇ üüü âââ äää ååå ççç ëëë èèè îîî ììì ÅÅÅ ÉÉÉ ÆÆÆ ôôô òòò ûûû ÿÿÿ ÖÖÖ ¢¢¢ £££ ₧₧₧ ƒƒƒ ííí óóó ñññ ÑÑÑ ººº ¿¿¿ ¬¬¬ ½½½ ¡¡¡ ««« ░░░ ▒▒▒ │││ ┤┤┤ ╢╢╢ ╖╖╖ ╣╣╣ ╝╝╝ ╜╜╜ ┐┐┐ └└└ ┬┬┬ ├├├ ┼┼┼ ╞╞╞ ╚╚╚ ╔╔╔ ╦╦╦ ╠╠╠ ╬╬╬ ╧╧╧ ╤╤╤ ╥╥╥ ╘╘╘ ╒╒╒ ╫╫╫ ┌┌┌ ███ ▌▌▌ ααα ΣΣΣ µµµ τττ ΩΩΩ ∞∞∞ φφφ ∩∩∩ ≡≡≡ ≥≥≥ ≤≤≤ ⌡⌡⌡ ÷÷÷ °°° ∙∙∙ √√√ ⁿⁿⁿ                                                                                                  %+h≤ *╠%ëa/!5#.£%ë║
  1252. .£%ë║¿«w
  1253. *ùw.
  1254. * 
  1255. 
  1256. 
  1257. ¿q╔w *. æé%ëa/!&.ê%ë-╒
  1258. .ê%ëó¿sw
  1259. *\w.
  1260. * 
  1261. 
  1262. 
  1263. ¿6Äw *. 
  1264. %ë¿δw
  1265. *╘w.
  1266. * 
  1267. 
  1268. 
  1269. ¿«w *. H%≡w*─α░w*Öéééééwë*$wëÖº*UÜ%ëÖº┤ëÖº┤wëÖ*.¢%ëÖº┤, .ûëÖº┤,mëa/!5ëÖ╢    $    9=.£ë║╖$9C.£ë║╛"$#.£ë║4.▒#&&äa/!9a/!e&wëÖ*±äëa/!3ëa/!{ëÖ╢    $9=.êëó╖$9C.êëó╛"$#.êëó4.▒#&réëa/!yüëa/!3ëÖ╢óz.Ñë┼íGoliath    $«≥z.Ñë┼íHellBender    $«Az.Ñë┼íLeviathan    $ «òzΩ.Ñë┼í,
  1270. NodeRunner    $«    9=, 9=.êëó╖$9C.êëó╛"$#.êëó4.▒#&] ééëa/!&.êë-╒ w.êëó*ëÖ╢=    z.êëíManta    $Ö ü    z.êëíGoliath    $Ö ╞    z.êëíScorpion    $Ö     
  1271. z.êëíRaptor    $Ö P
  1272. z.êëíHellBender    $Ö û
  1273. z.êëíLeviathan    $
  1274. Ö ß
  1275. zΩ.êëí,
  1276. NodeRunner    $ Ö 0 z.êëíHuman Spacefighter    $Ö Ç z.êëíSkaarj Spacefighter    $Ö     9=, 9=.êëó╖$9C.êëó╛"$#.êëó4.▒#&ëÖ╢    $9=ë╖$9Cë╛"$4.▒ëe▒»4ⁿ─Σ9?%19=ÆÆÜ9:119=, ÑH╓,%≡û,>ÿ9:"%$$$    $"$╨╨ÿ9:"ô,&$$$    $╨Ü9:119=, î"Ñ╖ GA'4Só ì'─αèw'*séé'a/!9ü'╟-╚w'ë*+'''╓ G0ÇΓB@[A├╥ -G 0─j╧éw0*Näé0╟-╚-Y&é-Zü0╟-╚0└φ/ATeamOverlay.TOInteraction0└-G' GßCl6╘$!é-pÜ9:█9:$ G▐D~h-    ?<-p▐~~zTeamOverlay.TeamDetails G∩FZ'░-pa?' GÇ@╬GAEΩ2A
  1277.  bOverlayActiveC
  1278.   ╬A G(╧YBf?╧BB(b└≥bOverlayActiveC$$Check G I 5 8qÇ»MR2ªJ]q┬┘R î'6wq*r* qCrr**r9DS G;Ç»Ns⌠Iü;sN<r;*;.»┘s »xr;*τppp9Wτ - FONT NOT FOUND 's'!P; GO|φ9H1ûòCTeamOverlay.TOConfig GPkτ╡G-mü-m GVi▌eFñ-&ü-&_-&ûò2@TeamOverlay - Using Alternate Colourschemeíûò0@TeamOverlay - Using Primary Colourscheme GR*222 ╙"@"@"@"@    -@@/4ALL354210// %##! &#(EEIHEDGHHHHJGFB6&EGF;D6##9DCBEDCGIJFDGLID(AXSJD;1C37;5>A>CLGDDIA>C[#YL:?6)-NF9 >=86,6:<;7/7047B>B_FCAIN>RB6!$MK3@LJB900+&4>4;BYQ.8HNj\D6*UBJF?DFGCCBCEJ8<2
  1279. ,ZG2<jjjW938SGQa<=IIMKJHRK7=L&@_N=<a]UI:#!] @*KW@U>??;AL5QCJ333 ]PAD?9VF?5)##]$*ACC_V^=88-"$/0:F.,-LI9C61HD54:<;+M=@;:*D!?N^?i:.&'%"%*3:+)L\E7;8553ILJNL3L58"<@LdW0+0868:;3,'iUB6532.<MVUTOJ>WJ/ G"DJE<1683'2`E;=,+%)?OW[XVQJB!GB$<jG. GC>-*8/VjB@[+$9QY]cgYXTLB0BE27 FCC8%873'BH/+((GX]TRQ\TNPC8A<]JSjHGBF4%/,%!9XiWWPLI@?=744HH5K@e$%%,"( 7E:4)38/*%$",N[_[a\,7DM734;,-@73+7H208//)-8A;9<L;:!4W]VSe_U&Fj_IG;5)8CNK2/- !(/?FC>1/7/-(8MMF>HYE,#+>\L@8/,&-IKGN#'//@GGRPK:$%J>7/-;.*26:94@I0A@>5:RV2-]ZRPQYSH@,.4-'*6/,)-)-.Y[P`Q]ORNF2"WjjhbU:.'"!#"! +0ELQK4KW;-#C[`RFNPf^`SXUWQLD>A%--=@>NCNSA
  1280. 8AB:5ELHS_NMMIH<(W9     DI5<<7C9,$! 2H>EDOMDP9FIHJ8e.+U6EROE=:A9BL@=.8DE9    F>F(DZ^UQMGD6.(++,*19HMUQLGC=D;6F=hdRGFBMDJCCDDABDAMEHGJOPbjURJI;5DIA.N`dKIID>9604100.+,8@<196DIDCTWKLMJLadd]SU(jL59=4$&*)'$+ <3'!-26<=IQVY`eefaejj.Uj;' (.5=;2589"(2AUZXRH@HJMXUM= jj:)!#%(,8F7=>*=C\j_PJF===@D:2& <jj`K=! *8;)0=5/(!.Waf]NBA?73,)  
  1281.  6ELNQXcYN0")0/&.)$-Q`d^]LA4.*)!(C6=?>FOLQ[chQA71$ )?BYhi_XLD7+%    PNOLNPUSQ[fjcgje\XTF>55<CDLWae[XNRP:,(
  1282. *IFLPVLKMOSUZ_^`_bPMSVYY\WTPOT[SB>B0-/4465:<<CDOXJBAFXKAID8>:;>CW>-8'
  1283. !"+--,..,+)***+),-/20101
  1284. 0/-..39;;2"$'@@@    
  1285.  
  1286.  
  1287.            """ $$$ &&& ))) +++ ... 000 333 555 777 ::: <<< ??? AAA CCC FFF HHH KKK MMM OOO RRR TTT WWW YYY [[[ ^^^ ``` ccc eee ggg jjj lll ooo qqq sss vvv xxx {{{ }}} ÇÇÇ ééé äää ççç ëëë îîî ÄÄÄ ÉÉÉ ôôô òòò ÿÿÿ ÜÜÜ £££ ƒƒƒ ííí ñññ ªªª ¿¿¿ ½½½ ¡¡¡ ░░░ ▓▓▓ ┤┤┤ ╖╖╖ ╣╣╣ ╝╝╝ ╛╛╛ └└└ ├├├ ┼┼┼ ╚╚╚ ╩╩╩ ╠╠╠ ╧╧╧ ╤╤╤ ╘╘╘ ╓╓╓ ┘┘┘ ███ ▌▌▌ ααα ΓΓΓ σσσ τττ ΘΘΘ ∞∞∞ εεε ±±± ≤≤≤ ⌡⌡⌡ °°° ··· ²²²                                                                                                                                                          Ç@Y // TeamDetails - TeamOverlay Inventory item
  1288. //-----------------------------------------------------------
  1289. // This inventory item is used to hold the players team details
  1290. //-----------------------------------------------------------
  1291. // Part of TeamOverlay by Adam 'Heywood' Booth - heywood@malevolence.com.au
  1292. class TeamDetails extends Inventory;
  1293. const MAXTEAMSIZE = 8; // Maximum amount of team mates we'll report on - keep it realistic, it helps reduce the arraysizes
  1294. var byte PHealth[MAXTEAMSIZE], PArmor[MAXTEAMSIZE], PVehicle[MAXTEAMSIZE], PDDmg, Updated[MAXTEAMSIZE];
  1295.  
  1296. replication
  1297. {
  1298.   reliable if (Role == Role_Authority)
  1299.          PHealth, PArmor, PDDmg, PVehicle;
  1300.   // Updated isn't required client side
  1301. }
  1302.  
  1303. ┌HaO╔╘┌amH.å,öL.å,öM.å,öN.å,öi.å,    öP.å,
  1304. öQ.å, öR.å,öS.å,öT.å,ög.ñ,öh.ñ,öV.å,"öU.å,öX.å,öY.å,öZ.å,ö\.å,ö].å,ö`.å,öb.å,öc.å,öe.å, ö$) GZ_"╕═A■%!&!@,!,!,! ,!Ç,!,!É,!@%2K4Fonts.Verdana34&2K4Fonts.Verdana28,2K4Fonts.Verdana24,2K4Fonts.Verdana20,2K4Fonts.Verdana16,2K4Fonts.Verdana14,2K4Fonts.Verdana12,2K4Fonts.Verdana8,2K4Fonts.FontSmallText8%╦ÿ8,┴Ö8!_x√ô8\%,Ñ8ë∩Üx,    τFont selection errorx GÇU$=╢°H9L9S =L9L9S 5M9L9S 6N9L9S fi9L9S dP9L9S _Q9L9S ^R9L9S [S9L9S WX9L9S >Y9L9S ?Z9L9S @\9L9S O]9L9S K`9L9S Gb9L9S Dc9L9S Ee9L9S FT9L9S ,gT -JhT -BV9L9S CU9L9S  GX|)dt¼-k(/┼ Åw¿ºw.≡w└*òü-k|w└⌠or*òïïa/!>-k'Ñ|0ºü-k*10 G\W6öÖ=½A*}wûòë*⌠éûòëa/!&2w.êûòëó¿*.êûòëó¿±w*┌w.*A¿┤}}wûòë¿*ûòë¿}w*fw.*A¿@¢wA*y.Aóy*y G/ÇhK7ü;j/%    û/7⌐ ér/⌐ºûòëÖº7w/⌐ûòëÖK+a╨/⌐<zX ▒zjjzÑ/9Dj GY^
  1305. Ç╝X.=9DH.59DL.69DM.f9DN.d9Di._9DP.^9DQ.[9DR.W9DS.>9DX.?9DY.@9DZ.O9D\.K9D].G9D`.D9Db.E9Dc.F9De.,9DT.-J9Kg.-B9Kh.C9DV.9DU Gê├]`/úë#╫?(' Gaê├Ç_M(¬
  1306. &$
  1307. M╫?(' G@  
  1308.  
  1309.  
  1310.           !!! &&& ))) &&& +++ +++ ... 666 +++ 000 666 +++ 000 000 666 666 ;;; === === === @@@ @@@ @@@ BBB BBB JJJ EEE JJJ JJJ JJJ MMM TTT \\\ ;;; BBB === EEE EEE GGG MMM JJJ MMM EEE JJJ OOO OOO TTT JJJ MMM TTT YYY YYY JJJ MMM OOO OOO YYY YYY \\\ aaa iii ^^^ ccc fff kkk TTT YYY aaa TTT aaa aaa ccc iii ccc iii kkk ppp kkk nnn nnn sss TTT YYY TTT YYY aaa YYY \\\ aaa aaa ^^^ ccc iii ppp sss sss sss ^^^ ^^^ ccc iii iii kkk ppp nnn uuu uuu sss xxx }}} sss xxx }}} kkk nnn sss ppp ppp uuu }}} ÇÇÇ zzz ÇÇÇ ààà ééé ççç ççç îîî ÅÅÅ èèè îîî æææ îîî îîî ûûû £££ ööö ûûû ₧₧₧ £££ £££ ₧₧₧ úúú úúú nnn xxx xxx }}} ÇÇÇ }}} ééé ççç ééé îîî ççç èèè ÅÅÅ îîî îîî ÅÅÅ ÅÅÅ ÅÅÅ £££ æææ ûûû £££ ÅÅÅ ÖÖÖ £££ ííí ªªª ½½½ ½½½ ░░░ ööö ûûû ííí ½½½ │││ £££ ííí │││ ░░░ ╡╡╡ ║║║ ¡¡¡ ║║║ ┐┐┐ ┐┐┐ ┐┐┐ ╟╟╟ ╤╤╤ ¿¿¿ ªªª ½½½ ╡╡╡ ╜╜╜ ┐┐┐ ¿¿¿ ╡╡╡ ║║║ ┐┐┐ ╠╠╠ ╠╠╠ ╔╔╔ ╘╘╘ ╧╧╧ ┘┘┘ ▐▐▐ πππ ╧╧╧ ╤╤╤ ███ ╓╓╓ µµµ ┐┐┐ ╜╜╜ ╓╓╓ ┐┐┐ ╟╟╟ ╘╘╘ ααα ┘┘┘ ≡≡≡ ≈≈≈ ≈≈≈ ▐▐▐ ███ φφφ ⌡⌡⌡                                 ⌡⌡⌡                     ÇbQ,│▄#⌡-Q GÇ@e#╗I⌠ =9DH 59DL 69DM f9DN d9Di _9DP ^9DQ [9DR W9DS >9DX ?9DY @9DZ O9D\ K9D] G9D` D9Db E9Dc F9De ,9DT -J9Kg -B9Kh C9DV 9DU δ GsU8k&7Uzûò▀╤Onslaughth|Ç,Near Ωô},╔Red Constructing(C) Red╔Blue Constructing(C) Blue╔PowerNodeNodet~ in a ¢t    Çt Gj**** ╙"@"@"@"@WV@@&2;;;1(.;54/2!'%!*9IABDHNLRJ@?A.!"#=JaaVZMa(    +-)-"%*-?BC87/(#!$%0OF096.3FFLG<)1:855.9Y\T9/+0---/"';CGHGBHI;IUUXW/$3>>OSaP</)&EROa\S_E201/4:5 %2D587C=E>9A==@C@PPDJ^a>NO."?5IXSLBHMUVRSWOOZa=!5:688952-6(()-6FXaYUMaLNK6N07U#GSPILECJLNMTV]a`_WLD;NSWR8(% # %KUXVQGABAMUVL?Da3<6K]]WM>7AKPSC<OPVaH"C\a9,'+1O8&NX_aa_ULIOPXPMTN<K^*6QaZFBC@=>BQ%HVa22Pa=-2<@DY< "aZV\`PG=:>543.DIGC@HDLOaO>23KaaVQ1<OG L_P05;;77Q$>?==:5)-(X
  1311.  ?L:6<QaCN`FFOUMOIKRPD( +Ba[9>9==:CQ7;B8,&1'$O
  1312. 1A,:7YF[^;-BVRT92754,$7MY0/?=8:6CSH+UI8,?50$).)@%"( $?24DS7)MTJB<:D7*-LS+,9=>9?G3<?7A)+36/,784.+(#'129;$$'EVO<>==?A%$6[1-9<CE>C.&&+4<6 ","%'<J=35642&!!.+25;<GICBE>48;?2?;.8FUKA-/8+# +%%(0+#&(%&$$.0;6+BE5@2# (*44/4:JG>B+:2&.8DCID7 '.&"'#"!$-4!!"&%'"$!#%$+9=CF:<& #&%57659+-1.042-+.@IAAA@3,# $'&%#%!$&)#(',?IA3&'**<Q>F/%/16) +'&2BJ3%$)*8&('2L?,89I<()4J<*#2($(&:=7:>KH+(5%!*-V*;;C??@.&,8?.#!*'C*=BEA/N3$,4 ()@F&B>5BD4C()(9!7"((8-<A6;E>4L&)(*%GB-JD7=I<L.)+B">+*%B!IG61KF0[0*/*+NK!CH2DH1?&*".
  1313. 7+)*T#DF:EH<+T&),(1R1'CBBB-F(+#-))F:,G;=G*MG((+$AU4*/14J3+$)=,&/N..141;V.*!+).KWORTY9'(!,7)(CYHHKYW0(&    ,($%5G;,')#%*(*&*7KJ;('+-#$"%&$'#'$"#$$&&%    %%! "#')(%@@@                 """ %%% ''' *** --- /// 222 555 777 ::: <<< ??? BBB DDD GGG JJJ LLL OOO QQQ TTT WWW YYY \\\ ___ aaa ddd ggg iii lll nnn qqq ttt vvv yyy ||| ~~~ üüü âââ ååå ëëë ïïï ÄÄÄ æææ ôôô ûûû ÿÿÿ ¢¢¢ ₧₧₧ ááá úúú ªªª ¿¿¿ ½½½ ««« ░░░ │││ ╡╡╡ ╕╕╕ ╗╗╗ ╜╜╜ └└└ ├├├ ┼┼┼ ╚╚╚ ╩╩╩ ═══ ╨╨╨ ╥╥╥ ╒╒╒ ╪╪╪ ┌┌┌ ▌▌▌ ▀▀▀ ΓΓΓ σσσ τττ ΩΩΩ φφφ ∩∩∩ ≥≥≥ ⌠⌠⌠ ≈≈≈ ··· ⁿⁿⁿ                                                                                                                                                                   ]Primary Colours*┤▄ $>$Ç>$?╙╙] Player Name*┤▄ $v3C>$Ç>$?╙╙n* ╙"@"@"@"@ⁿj@@
  1314. 2TJ  P:A):@583 9;75;3B=592/@<939$!?<<:685;::375446<78:&69356575F9>671372:E;?@7263%%B<?D=63?0>9:660:8:6:E>>=67343- " '=B::===456.:(%0,1.-!$,:7>8<<A:7>;68*0N95439<A@@><?D51FC<?8/
  1315. 7:5>9<><45?E?.;%)P8<=8=@OF@;ED?@<>:A?C:7?DAII,*"@?9=79:93/6?>66.19?;<;A@LIE:>?@C;CBB>A99;8LOQ0,
  1316. <CD<=79<:88)5:;:$:@B?>?D?FKI;?59D@D<=9/('<?C<>65:584-+&-B, 4-=;@>F>E@IC=15901
  1317. 3?>C>B85;50-<61(K@ 7Q[6.=8C?F>IBE<9,)+2<:<@??9:>7=,875$SMKMIE?7.<:B8HDK?D5#MH?><9CA=>BG9=,,%#,LKB=7@C7/2/3.8386. adbC@;<DEB??C8:/9=8)999@OKB6$+0_dddAA?AED>=;C652585",FKXF:7!+Q8 YdddQ?CFBDF?=;@:50'--)8WND>1!1=!`ddddH?DHADA=?;@8-65:6.=\J9*L3    ^ddddR;<CF>BA??=@33=:?6)2VB;Q=";dddd]JBABKBABAD<B49@@>0(8NTYGdddXCJCBEH@<B??::<=?;A10:4<A'YcC2)<@FINA<;:>9;6<989.
  1318.  9?5*$B=BIOB@=7>6I27/)0/&&H?CMUPC=6LGD@1!    ';Q3=HUU>?IGD<4<SZHJHIPGCB?@82$<EB@EMMDGMQ808    AFA6/0#<29(%!-ON59:2III2(%ENB7/61&%NA0:2A-0!4!!@@@     
  1319.  
  1320.  
  1321.                """ $$$ &&& *** ,,, ... 222 444 666 888 ::: <<< >>> @@@ BBB DDD FFF HHH JJJ LLL NNN PPP RRR TTT VVV XXX ZZZ \\\ ^^^ ``` bbb ddd fff hhh jjj lll nnn ppp rrr ttt vvv xxx zzz ||| ~~~ üüü âââ ààà ççç ëëë ïïï ììì ÅÅÅ æææ ôôô òòò ùùù ÖÖÖ ¢¢¢ ¥¥¥ ƒƒƒ ííí úúú ÑÑÑ ººº ⌐⌐⌐ ½½½ ¡¡¡ ▒▒▒ │││ ╡╡╡ ╖╖╖ ╣╣╣ ╗╗╗ ╜╜╜ ┐┐┐ ├├├ ╔╔╔ ╦╦╦ ═══ ╙╙╙ φφφ ±±± ⌡⌡⌡                                                                                                                                                                @                           
  1322.   
  1323.  
  1324.          
  1325.       
  1326.  
  1327.  
  1328.  
  1329.  
  1330.  
  1331.  
  1332.  
  1333.  
  1334.                               ! !  " !"! "$! &&& (*' (*) +-* ... /1. 0./ 02/ 121 241 463 555 686 8:7 999 :<: <>; =>= >@> A?@ @A? AAA BDA CED DEC EEE GGI GIF GIH HIG III KMJ KML LMJ MMM NPM OQP PRO QQQ RRT RTR SUT UUU VXU WYX XZW YYY Z\Y \^[ ]]] ^`] _a` aaa bda dfc efe fhf hjg iji jlj kml lnk mmm npn pqn qqq rtr sut tvs uuu wyv xxv yyy z|z |z{ |~{ }}} ~Ç} üÇ Çü~ üüü éäü âàä äéâ äåâ ààà åêà çëê êåç ëçê ëëë èîë îÄï ììÄ ÅÅæ ÄÉì ÉÆÅ ÆÆæ ôôò ÆöÆ ôòö òòò ûÿû ùÖÿ Öùÿ ÿÿû ÖÖÖ ÜÜ£ Ü£Ü £Ü¢ £¥Ü ¥¥¥ ₧რƒíá íƒá áí₧ ííí úÑñ ñóú Ñúñ ñÑÑ ª¿ª º⌐¿ ¿ªº ¿⌐⌐ ¬¼¬ ½¡¼ ¡¡¡ »▒« ▒▒▒ ▓┤│ ┤▓│ ┤┤▓ ╡╡┤ ╖╣╕ ╣╣╣ ╗╜║ ╗╜╝ ╝╝║ ╜╜╜ ┐┴└ └┴└ ┬─├ ├┼─ ─╞├ ┼┼┼ ╞╚╞ ╟╔╚ ╔╩╔ ╦╦═ ╩╠╦ ═╬╬ ╬╨╧ ╧╤╨ ╤╤╤ ╒╓╓ ╓╪╫ ╫┘╪ ┘┘╫ ╪┘┘ ██▌ █▌┌ █▌▄ ▌▌█ ▄▌▄ ▐α▐ ▀ßα ßΓß ππσ ΓΣΓ πσΣ µµµ µΦσ τΘΦ ΦΘΘ δδφ δφΩ δφ∞ φφδ φφφ εε≡ ε≡∩ ≡≥∩ ±±± ≤⌡⌠ ⌠÷≤ ⌡⌡⌡ ÷°÷ ≈∙° °·≈ ∙·∙ √²ⁿ ■■■      ]
  1335.     Location*┤▄ $XU∩>$Ç>$?╙╙r* ╙"@"@"@"@mâ@@?ZK ' lZO1nd;,HWD9 =K]B6@:'BF203))@.#&15)*EQO&'QA&,$.%/4. A 4
  1336.  
  1337. &G .J7fXN9:$C= %)-?h6+5)3_keP/_-+/L/"8QZnnnD6.
  1338. 94"6     'K/(<Vhbn`,#B5;D',ECZgnU'Hdin4"1)/!AI<DSn4    *)G# =SknR@), `]:04ET -+^M7).03?FCE29-"MBThR((3Ha8 &1#%*=C1N<7130117I=/;8/+952/5ML?S[10)%;;=.+:(' ! ('!BXNnU90+-1,*3InL668>63#%
  1339. 
  1340. $)\<?/,-'11.'/B.2(!S.     OB>59'75,," !%1%     D+)!+ (-&4?*#")#
  1341.  
  1342.      >B;6( 8     /F4 If!"+6(0
  1343. -A0/)        %
  1344. FmN8,()     
  1345. (!%*C,'P<#    !6 "2$#O=1 6."$1 !%N?. &# 2 M/%97." >#%'*:A& 0`W0%#(2    .(.6&2=?,%#!#:' >G$$05 !8 ( /        %>" ./% "6-"+*'6.!,'6%&G )$
  1346. !/%*3.  JZ6"2$(%cf7n[C,"-+  ?cn0CA20(" !-' '>Ginn5@B51),'/8Onn\$    .T_OG<* 6E^nnM'^mfW]`mnj=#Y`YaniA@@@                            """ $$$ &&& ((( +++ --- /// 111 333 666 888 ::: <<< ??? AAA CCC EEE HHH JJJ LLL NNN QQQ SSS UUU WWW YYY \\\ ^^^ ``` bbb eee ggg iii kkk nnn ppp rrr ttt www yyy {{{ }}} ÇÇÇ ééé äää ååå êêê ïïï ììì ÅÅÅ æææ ööö ûûû ÿÿÿ ÜÜÜ ¥¥¥ ƒƒƒ ííí úúú ªªª ¿¿¿ ¬¬¬ ¼¼¼ ««« ▒▒▒ │││ ╡╡╡ ╖╖╖ ║║║ ╝╝╝ ╛╛╛ └└└ ├├├ ┼┼┼ ╟╟╟ ╔╔╔ ╠╠╠ ╬╬╬ ╨╨╨ ╥╥╥ ╒╒╒ ┘┘┘ ███ ▌▌▌ ααα ΓΓΓ ΣΣΣ µµµ ΘΘΘ ∩∩∩ ≥≥≥ ⌠⌠⌠ ÷÷÷ °°° √√√                                                                                                                                                      v:|ó    D¼@▌D¼¼:{ùll9D«9?9D½9?C½9?,½ 9?,@╞≥-J'&-v'╒%-v(FÆÆÉ,É,7ÉIÆÉ1-B7Æ7gü-&ù9=^9=[9=W9=, Åù9=D9=E9=F9=, ╡$$¡9?»½9?9?7± π9?F9?7%%Dû,)*-%┌û-7⌐╨éÜ-⌐╢[Ü-⌐º┤ûòëÖº┤)-⌐Ñ-:éw)*(w)ûòëÖ*%    
  1347. =$ *X
  1348. P$  QX
  1349. c$  eX
  1350. v$  iX
  1351. ë$  mX
  1352. £$  OX
  1353. »$  qX
  1354. ┬$  eX
  1355. ╒$  OX
  1356. Φ$      uX
  1357. √$
  1358.   `X
  1359. $   `X
  1360. !$   IX
  1361. 4$  @X
  1362. G$  CX
  1363.     HXY¢9:    %U¡»9?½9?Æ*&½9?,@ »½9?9?ÉÆ&ÆÉ╡$ü-&ù9==9=59=69ù9=>9=?9=@═  Ñ*AÜ9:1U¡»9?½9?Æ*&½9?,@ »½9?9?ÉÆ&ÆÉ╡$ù9=, 9=, 9=, 4a╥ ╔½ÇB ½ÇB $C£B£BÑ*δw)≤*U¡»9?½9?Æ*&½9?,@ »½9?9?ÉÆ&ÆÉ-zûò▀╤Bombing Run╡$ù9=, 9=, 9=, ═ E Σ╡$ÉÜûòëÖº┤&ù9=, $$ºù$$9=, 4a╥ °½ÇB ½ÇB ┤BÇBÑ*╡$¼:@-&ù9=>9=?9=@dù9==9=59=6.ô9D½9?ÉÆ&ÆÉ¡9?9?.a╤)<    û9:,ù9=, $$æ    ?    û9:,<ù9=, $Ç$Çæ    v    ù9:,nù$9=, $æ    ù9=, 9=, 9=, ╫    -&4ù9=ô, √9D½ @9<%, $$(ÆÆ9Æ(aÆ.:╠9R$9?(9?.9?99?ax
  1364. -& ù$$$ô
  1365. ù9=, 9=, 9=, g¡««««½9?C9?9?9?9?»½9?9?ÉÆ&ÆÉ(ÆÆÆÆ9Æ(₧ ¢9:$%:╠9R$$9?(9?.9?99?a╬ '╠-$9?(9?.9?99?a3-v+p  )n¼ua╨+nâ ▒n9?ÆÆÉ,É,+Ç+ô}+&a╨+n' │ -&ù9=O9=K9=G╫ ù9=f9=d9=_B¡9?»»½9?9?ÉÆÉ9?a╒+ÑѲ▐-Bù9=, 9=, 9=, n¡»9?ÆÆÆæ,¼½9?,@ 9?,»»½9?9?ÉÆÉ9?4a╥ ╔½ÇB ½ÇB ûB'C@B@B|¡»9?ÆÆÆÆÆæ,¼½9?,@ 9?,»»½9?9?ÉÆÉ9?4a╥ ╔½ÇB ½ÇB Ç?xCäBäB▌@╡b G= Background*┤▄ ${ê>?$Ç>$═╠L>╙╙|*FFF *∙∙∙ ╙"@"@"@"@ó@@                      ■ⁿ≈Φ╩₧mG=88=AmÆ└Φ°ⁿ■                                         ■·±╘£l[cxàëèëëêézm_kö╩δ÷ⁿ                                    √⌠█Ö``{ååÇp^TOKHLU`päà}g\ì╤±√                                √≡╔}]väÇkRAIeèí╜┴┴╜½ìmL<Mf~âybz├ε√                             ⌠╙èbzésVHr╖Σ≈■        ■∙∩├}NQnü}eü╦≥■                         √Φ«lsünTd▒∩■                ■±└mMiÇykíß∙                       ÷╥çf~rVn╞⌡ⁿ                     °╠xVni╞≤                     ±╗vn|dd▒⌠                          ∙└k^yvt│∩■                 ■≡▒nvsZç┘ßΓ°                        °▐█ΓæYoygªφ■                ε¼qxnbñΘ╥Æö▀■                      ■┌êé├δ┤fggñφ■              ±«i}hf╖µ┤â~x╢÷                      ⌠│{éü¬α├pehª∩             ÷║p|ii┐Γó|åèÇÆ▄■                    ■╒îäëçyû┌╬tfÇg»≥           √╥tvng╛ߣzçëëëz╡≤                    ±»xëëëêyô╪╬rhxn┬°         ■Φèlvb╡Γ£zëëëëëâï╪■                  √╨åàëëëëëzö▄┼envy▌ⁿ        ≥ºa~_ªΘºyêëëëëëêx░±                  ∞¿{ëëëëëêë{ùß┤[ygò∩       √╨dygçΘ╣éçëëëëëëëàâ╙√                √╧üçëëëëëëëêx¬φù_üa└·      ∩àoqd╫╥çàëëëëëëëëë{⌐δ■              ■σ£|ëëëëëëëëëçÇ╞σpoyqδ     √╚ZÇ[▓ßò|ëëëëëëëëëëç~╨√              ·╚yëëëëëëëëëëëéïß╟[Ç_┤·    ≡yxtq∩╛têëëëëëëëëëëë}Öτ■            ■σùÇëëëëëëëëëëëèw│≡ék~gε   ⁿ╙Sâ]├αïâëëëëëëëëëëëëêw╚∙            °├wêëëëëëëëëëëëêåé▐╪Tü\└ⁿ  ⌡Éotl≡┐uëëëëëëëëëëëëëëéƵ■          ■πïéëëëëëëëëëëëëëëz╢≤|p|s⌠  φWâ_╖Σïüëëëëëëëëëëëëëëëw┬°          ≈╜tëëëëëëëëëëëëëëëçéΓ╧TàOσ■■╬XâWε╥uêëëëëëëëëëëëëëëëäàµ■         Σäëëëëëëëëëëëëëëëët╬≥Y~e¡ⁿ√örtz≥░|ëëëëëëëëëëëëëëëëëz╖÷        ⌡╡yëëëëëëëëëëëëëëëëëü⌐±Üih÷÷aâa╛ΦéåëëëëëëëëëëëëëëëëëêtΣ■      ■ßpêëëëëëëëëëëëëëëëëëçσ█UçJ±µQàQφßpëëëëëëëëëëëëëëëëëëàrΓ■ ·≤φ· ■Ωîzëëëëëëëëëëëëëëëëëëm▐⌡NåN┘├VàP÷╘tëëëëëëëëëëëëëëëëëçy╬∙∙╜ì}àé╖ε√┘Éüëëëëëëëëëëëëëëëëës╦∙iü`½æcés⌡╣}ëëëëëëëëëëëëëëëëës╔∙°çüçâäååπ·╬sëëëëëëëëëëëëëëëëë|½⌡ætxü_xsÉ≤ºëëëëëëëëëëëëëëëëüùΩⁿòâçëëëëçéé°εºÇëëëëëëëëëëëëëëëëäó≤╣céc4éi¼±£åëëëëëëëëëëëëëëëïx╟∙╓}åëëëëëëêå╣√╬pïëëëëëëëëëëëëëëëåéφ╥YêL%åc╛Ωxéé}}}|||wqqqqqqin\╤■¡çêëëëëëëëåê√╨_pkhghekkkqqqqqqz|uδΓSë?$åc╞≤░ú¿¡¡▓╛┴┼┼╠╘╪██ατσδ÷∙ïåëëëëëëëëâé÷≈⌠⌡≤≥∩∩εΦπππ┘╘╘╘╚┼└╔°ΓRè;åc╞ ■■■■■■              ·îåëëëëëëëëâ∙                     ΓRè>%åc╛                      ╣êêëëëëëëëàÉ·                     █Xë<+üi¡                      Φzåëëëëëëà}╤                      ╥_ëKTntû                       ╗}åçêêêàéû√                      ║j~Vëcé{■                      √┴|âçäçy¿ⁿ                       ÿtnx╗Uå[∙                       ■φ┐¬ö╣τ■                       ■wâ_áσHåW≡                       δ▐≡°°⌠δ▐ⁿ                      ÷VåG╤≤Täf╟                      ·ó{¡─┼╖Öxτ                      α\ç?δ≈Çqwïⁿ                    ⁿ╨vëvvwààƒ°                    ⁿ«q}\⌡ⁿ┴Mäc≥                    ∞àâêëëëëëà{╦■                   °qé\₧√ δBéj┬                   ⁿ░âêëëëëëëêäçΩ                   ▌^àC┘■ ≤üj|z·                  ▐åëëëëëëëëå¼ⁿ                 ⁿòtw[≤  ⁿ╦Hâg╥                 ÷¥åêëëëëëëëëëåä╪■                σjäO»√   εgtxà≈               ■└àëëëëëëëëëëêàܱ               ²¥w{N∞    ·╣Mül─ⁿ              πèäëëëëëëëëëëëëàà╜ⁿ              ╫iéO₧°     δmi}ÇΘ             √⌐åçëëëëëëëëëëëëëéîα             ÷êtuWΓ■     ·┴N{tí√           ⁿ╤èàëëëëëëëëëëëëëëçäº≈           ⁿ░oüO░°       φìTüq╛■          δ¢äêëëëëëëëëëëëëëëëàå┼ⁿ         ⁿ╩tÇ^|δ        ⁿ▄ie}~╠ⁿ        ⁿ│âåëëëëëëëëëëëëëëëëêéÿΘ         ┌äzn\╧√         °╗Zq{ç╥ⁿ       ▄Äüëëëëëëëëëëëëëëëëëëçå│√       πÉwzP¡⌠           ±ÑTvyî╫ⁿ     ÷ÑâêëëëëëëëëëëëëëëëëëëëüÄ╪      µöt~Mûφ             ∞ÿPzxë╬ⁿ   ⁿ┐ääëëëëëëëëëëëëëëëëëëëëêÇÑ≤   ⁿ█Æu}Nçτ■             ■ΩöPu{â┬√  φÉwêëëëëëëëëëëëëëëëëëëëëëâ╛ⁿ ⁿ╠êw~Nâßⁿ               ■ΘûRpÇy⌐φ ÷╬¢w~èëëëëëëëëëëëëëëëëêéuâ╡µ■⌠▓z{uJçßⁿ                 ■δúVfâwç╧√·τ╦º}t|àêëëëëëëëëëêàzrè╛▐≤√╫ævÇnRùτⁿ                   ■≡╣fT{~uÿ▐√·≡▐╟¬ulstt~tttow₧║╒π≈ⁿσów|[]¡φ■                      ≈╪åIiâ|pÆ╒÷ⁿ∙≥πΓ╥╦─╖║╕╠╙▄ßε⌡√⌡┘¢qyàqJ|╨⌡                         ⁿδ╣`Erâür|º▐≈ⁿ■√·∙÷÷÷·√²ⁿ≈Γ▓|o|àvLW¡Ω√                            ∙τ¡S?jüç{nk|ñ┐╥▄ΩΩΓ╙┐¿ïkk}çàqEK¥α≈                               ■∙Ω╗h:MqäêëàwmnggnmwÇçêärS;[½Γ≈■                                  ■√≥ߺa18Nbn~äåååüwaN?5WÖ╪±·■                                       ■ⁿ÷≡╤ÑyN?1$$0<Itá╤δ⌡√■                     @@∞wGD φ╔ää¢,}¢╕E    r:*:"╕,Ç?u"╕ô,&Ç?},E╕{¼¼:a╨ 329D39D2a╨199329D3 ¼29?,@¼u!a╨  XXXXXXXXXXXXXXXX329D2l9D3¼{¼9?╕ DΩüûòΘ-÷oΩwo*I%<%─û<7⌐║ér<⌐ºûòëÖº7w<⌐ûòëÖÑIÑ<ΩéùI&-m:o GµxM9ß
  1366. ΩH GσjF2<
  1367. 5/ûòa9 æ10w*110 G]Display ModesK*┤▄ $╛L£?$Ç>$?╙╙Ij 8@                            ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ■■■ ²²² ²²² ⁿⁿⁿ ⁿⁿⁿ ⁿⁿⁿ ⁿⁿⁿ √√√ √√√ ··· ··· ··· ··· ∙∙∙ ∙∙∙ °°° ≈≈≈ ≈≈≈ ≈≈≈ ÷÷÷ ÷÷÷ ⌡⌡⌡ ⌡⌡⌡ ⌡⌡⌡ ⌠⌠⌠ ≤≤≤ ≤≤≤ ≤≤≤ ≥≥≥ ±±± ±±± ≡≡≡ ≡≡≡ ∩∩∩ εεε εεε φφφ ∞∞∞ ∞∞∞ δδδ ΩΩΩ ΩΩΩ ΘΘΘ ΘΘΘ ΦΦΦ τττ τττ µµµ σσσ ΣΣΣ ΣΣΣ ΓΓΓ ΓΓΓ ßßß ααα ▀▀▀ ▀▀▀ ▐▐▐ ▌▌▌ ▌▌▌ ▄▄▄ ┌┌┌ ┌┌┌ ┘┘┘ ╪╪╪ ╫╫╫ ╓╓╓ ╒╒╒ ╘╘╘ ╘╘╘ ╙╙╙ ╤╤╤ ╤╤╤ ╨╨╨ ╬╬╬ ╬╬╬ ═══ ╠╠╠ ╦╦╦ ╩╩╩ ╔╔╔ ╚╚╚ ╟╟╟ ┼┼┼ ┼┼┼ ─── ┬┬┬ ┬┬┬ └└└ ┐┐┐ ╛╛╛ ╜╜╜ ╝╝╝ ╗╗╗ ║║║ ╕╕╕ ╖╖╖ ╢╢╢ ╡╡╡ │││ │││ ▒▒▒ ░░░ ««« ««« ¼¼¼ ¬¬¬ ¬¬¬ ¿¿¿ ººº ÑÑÑ ñññ úúú ííí ááá ƒƒƒ ¥¥¥ ¢¢¢ ÜÜÜ ÖÖÖ ùùù ûûû ööö ôôô ÆÆÆ ÉÉÉ ÅÅÅ ììì îîî ïïï èèè êêê ççç ààà äää ééé üüü   }}} ||| {{{ yyy xxx vvv uuu ttt rrr qqq ooo nnn mmm kkk jjj iii hhh fff eee ddd aaa ``` ___ ^^^ ]]] [[[ ZZZ YYY XXX VVV TTT SSS RRR QQQ PPP NNN MMM LLL KKK JJJ GGG FFF EEE CCC BBB AAA ??? >>> === ;;; ;;; ::: 999 777 666 555 333 222 000 000 /// --- ,,, *** *** ((( ''' %%% %%% ### """ """                                                                          ]Alternate Colours*┤▄ $>$?$?╙╙] Player Name*┤▄ $v3C>$?$?╙╙@       ###      +++ ((( 222 ((( 000 +++ 555 ::: 555 222 === EEE 222 === EEE HHH RRR ]]] 888 ::: HHH MMM RRR EEE HHH RRR RRR ZZZ PPP UUU ``` UUU ]]] eee hhh mmm ]]] hhh eee rrr RRR ``` XXX jjj hhh xxx }}} hhh zzz hhh zzz ììì ààà ààà ÅÅÅ ÅÅÅ ùùù ààà ÆÆÆ ÜÜÜ ƒƒƒ ╜╜╜ ╒╒╒ bbb mmm zzz uuu ÇÇÇ ``` ppp ``` uuu ççç ììì uuu ééé ÆÆÆ óóó ÅÅÅ ¥¥¥ ééé jjj ééé zzz èèè ÅÅÅ ÆÆÆ ÜÜÜ ççç ÆÆÆ ÆÆÆ ¥¥¥ xxx ççç ééé ¥¥¥ ÆÆÆ ¥¥¥ ÑÑÑ ººº »»» ƒƒƒ ººº ººº »»» ╜╜╜ ººº »»» ººº ¬¬¬ ╡╡╡ ƒƒƒ ¬¬¬ ╡╡╡ ┐┐┐ ▓▓▓ ╜╜╜ ╟╟╟ »»» ╜╜╜ ╖╖╖ ╟╟╟ ┬┬┬ ╧╧╧ ┼┼┼ ╧╧╧ ╫╫╫ ╥╥╥ ▄▄▄ ▓▓▓ ╜╜╜ ║║║ ╟╟╟ ▓▓▓ ║║║ ╜╜╜ ╟╟╟ ╟╟╟ ╧╧╧ ╥╥╥ ┼┼┼ ╥╥╥ ▄▄▄ ╟╟╟ ╥╥╥ ╥╥╥ ╫╫╫ ┌┌┌ ΣΣΣ τττ ∩∩∩ ▄▄▄ τττ τττ ∩∩∩ ààà ÆÆÆ ÜÜÜ ÜÜÜ ùùù »»» ╜╜╜ ¬¬¬ ┬┬┬ ║║║ ╥╥╥ ╟╟╟ ╧╧╧ ╥╥╥ ┌┌┌ ╟╟╟ ╥╥╥ ╥╥╥ ┌┌┌ ▀▀▀ ΩΩΩ ∩∩∩ ∩∩∩ ═══         ≥≥≥ ∞∞∞ ···     τττ ⁿⁿⁿ                     τττ     ⁿⁿⁿ                                                                             ¡¡¡ ╟╟╟                                                                                                                    A* *ó╕¡ ╙"@"@"@"@ò╜@@'C»QNk├╤R├╩0Nò║╤ÅXgc*δ*╩kÖ¥â╢╢╩▀▌├(kΘG»4QÇ╜├Öª╤╜ª╢Å╠≤φ╤»ûÇX:(0├δo╩Å<]├╔╔├╔██├╤∙├╡»ªª»╤φ╩φε╬╢RC¥Å╤Θj╔├╜L┤══╔├├┤├₧äé▒»ª╜├äjû¥ò╚φÖwÇ├▌▀╤ΣΣ7»╩╤═╬═╬╬╔├╜òwÅäqÇ¥ò≥⌠╤│╔▒û¢ÅéÇwêΣΣΘΣG''@]┤╤├╩╤═╬╬╬╬═╔├╜»ªª₧ª¥»╤≈≤╩φ≈∩╔ªòòÅò├▄Σ█òÖ╩▀╤»▄▄▄▄╤╤╤╤═╬╤╤╬╬╬╩├ªûû¢ÅÇ»╬δδ├╠├Çâª├╢»»╢»Σ╤»ª╤⌠∙j├▄▄▄▄╤╤╤ß╤╤╤╤╤╤╬╤╚ûêêÅûªÖÅû╜╢╢ûÇjj¥╢»»╜òΣΣ╜┤╜▀⌠δ▄▄▄╤█╤ΣΘ█╤╤╤╤╤╤╤╤╩êêêêû»»Åk¢╢├╠├ªâÅ╜╩╜òÅ█Σ├▒»ª╜╜█Σ▄█╤╤ΣΣ╤╤╤╤╤╤╤╤╤╤êêêê¥│╜ªmª╜╤▀▀╤├╢▌▀▌╜¢╔Σ╢òÖäòªC*█▄▄▄▄╤▌▌╤╤╤╤╤╤╤╤╤╤ûÅò¥»║├»åÅ├▌φ⌠≥▀╩ΘΘ▀╤ê»▌╩âÅŪªûG█▄ßΣ▄╤█▌╤╤╤╤████╤╤»»»╡╜├├ªÇÇŪ»╚├╚Σ╤▀ΘΣ╩ª╤█ªòòªÖòj█▄ßßΣ█▌╤╤╤╤╤╤████╤├├├├╩╔╜Å»»ÅÅÅjmª╢╩├╤Σ╩»╤█├»òwJ0n╬█ß▌▌│█╤████████╤╩╤╩═╜ÇkÖ▒¢ªªòcXcjNNQNû▌╩Ç]├â<╬╬╬╬├Öâòwkm»»:(╡ª»»ª»ªªª₧wªLk╔├╜╜▒ª¢ªª╜eSÖÖ█═»ªª»╬7JoJ├ªå╢»»├'GüE├»Å├╜¢├0GÿE├├ª╜╩»├C4ÿ=├├╜├╤╢╜Q1Å=╔══├╤│åe0ª=├├├»»¢Åé(ª=»╜»ò¥»│┤»=ª│»Å»├├╩├=Ö╢╜ªª├ª█╤=w»├├╢╜k█╜=n╜╜╤╩ªd╢,U╜=h╜╤÷Σ┤Xª₧Q│╢>X╬╢≤·φS»├Å¥╚╜WW█û»≈δo├╬╠╠╩╤█ÿΣûÅφ▀═╤╬╩:╩█╤╤═█Åm├╤╬├╤█]╜╤═├▄█»qÇò├╜╬├éÅÖ├»╤╤╤òÅ»╔ª╬»âò»├├╤╤╤╤║║╤├╬┤òªä»╤w╤├δ║ª╜╤╬òÅ*òw¢╤Nò├ΣmkwÅ═Åw6Çw¥@Lòåjgk├ÅÇ:fkâ85»òÇm]»Åc7ZcÇ4╤│ªÅMwòfNUäÅB██╜ª0]»J5@CÇß├╢@│(G█├]w@@@                
  1368.      
  1369.  
  1370.  
  1371.  
  1372.  
  1373.                        " "$  $&" &(" %($ ')$ '*$ (*% *,' *.' +.) -/) -0* /2, 14. 47/ 371 480 592 691 7;4 7<5 8<4 8<6 :>6 :?8 =A7 =C: ?D< CF; BF< CH> DI? @@@ DDC EKA EKC FJA FLB HMC IND JKH JPF LQG KQH KSK LRI OQM NTJ PTG QVJ QWL SXM UZM X]O T[Q WZT U\P W_U X[U X^Q Y]V W`T Z`S [bR Y`T [aT ZbW ZdT [dW \bU ^dW \aY ^eY ^hZ `fW bg_ biZ bl] dj] em^ iq_ ela hoa hne gp` iqa iqd jpe jrd jte msc lsd lrg mtc ltd luf mve nue nvd nvf lsi mvh oxg nxh o{o pwf sxc qxf tyd pxh pxj qzi qzj ryh rzh rzj qyo r|l t{i u|i u}m x~k x~m szp s~q u~p wÇo yÇn |éo vÇp xÇp xür xép yér züq zép zér xét zär zäu |âq }äq |àt |àw }åt |åv ~åt ~åv |çx êu êv ~êx Ççt Çêt Çêv éëw éèw äîw Çëx Çèx Çèz éèx éèz éîz éî| äïy àìy äÄ| äÄ~ åÅ| åÅ~ êÅz åÉ~ êÉz ëæ} îö~ åæÇ êÆÇ ëöü ëöâ èöü èöé ïûé èòä ìûü îûä ìÿà îÿå Äÿä Äÿå ÅÜç ìÖê Éÿé ÉÖà ô£å ö¥å É¢ë æ£ë É£è Æ£ê Æ¥î ö₧ë öƒî ûáè ûáî Öóè ÿóì ÜñÄ £ªÄ ùúæ ÿúÉ ¥ºÉ ƒ¿É ƒ⌐ö á¬Æ ó¼ò Ñ»û ñ»Ü ª▒Ö ª▓£ ⌐┤₧ ¡╕ó      ]
  1374.     Location*┤▄ $XU∩>$?$?╙╙D* *£┤⌐ ╙"@"@"@"@
  1375. ╥@@@¥¥ÿÿ1a«ó¥ÿ]╔ a!╣╣╣óó╣11P«ó@┘┘╣╣╣Σ (@1aåÿ]««╔▀┘Σ┘┘╔«ÿ@≈º1]@@]aÿÿ│╔ΣΣΣ≤Σ┘▀╣å]ÿauÿaa"1uÿH╣╣╔ΣΣ▀┘εΣ┘ÿ¥╔╔åa╣╣▀«ósqÿqq1]┘╔╔╣ΣΣΣ│1ó╣┘]ÿu@1!]å1]üa««ÿüsÿWqWua    üΣåMüu²≤]1)ΣΣΣ╣Σ┘╣]«saÿ╣au()Fε╣F(uaaó▄åFaó╔@u@sóÿH@▄¥(}╣sqW@ qüP))ΣWqΣΣ┘╣ÿ│¥ÿüàå╨})Faü▒@qqº1!ååε≤óaÿÿaauaε°εàå┘üóqWº@a"ÿ¥ü}▀ΣΣΣaε¥ÿaF]«a]ÿü}ÿóÿ!q▄óqWÑ╔Σ≤@a╣q«uuu«╣@@¥ΣÑq{⌡ⁿH""«││εΣεεaÑ▄]╨Σå]a@ÿa]1H∙óuÿ▄aΣÿº╣╣ΣΣ╣│╣≈≤╣Wåu@M]Haåå)Σε≤@}│ÿó¥@!≤╣üΣ@ÿåaa¥qqua@ÿü@@ÿuu╣╣åasÿÿF│}Σ┘}@ü¥åÿüΣ]1ÿ│ÿaÿ│¥uºaa]ΣΣa]a}}ÿÿó╔╣}ÿs1åWà(óÿ¥åàÿ«)]óÿ╔╔¥F(üFF1)]1Fa┘Σ╣óεå]ó««auÿuaΣ@╣ü┘∙▄ΣΣ╔MMP}sÿÿüa ┘@@1╣u│{╣(ÿÿ▄√)ÿaÿF@╣åÿ╨╣╨╣aW╨╣▀@uº╨╨╚å ÿÿaü@a╚╨▀╨a∙a╣«▀aóW╨▀╨a@aaM▄aa]│ÿ«]!╣ÿ1)aó╚│@uÿÿÿ@@╨╣]!MóM│¥Σÿ«ÿ]W1ÿ}a(]@u]╨│ÿ╣╣å]@▒]ÿ╔Σü╣«º«ÿaW1å╣┘╣┘ÿ««««uuå¥╣¥««⌡u@ºÿ]ÿ]««ÿΣWPÿ]M]ÿaWÿ«⌡ÿ╣╨«╔]]aÿWaóàÑó╣╔@@@ @@@ W_M YaP [eV ^eS _fT ]gX ^hZ `fU ahV bhW `iZ `j\ bk\ djY djZ el[ gn\ ho[ jp_ ip` irb jra krb jtf lsb ltc nud nvd nvf luh mvh nwh oxh nxj qva qwc rwb pve pwf sxc qxd pxf rxd tye pxh pxj qzk ryh rzh szj qzl r{m s|k r|m r|n u{h t{j v{i t|k v|j t|l t}o u~m t~n v}l v~m vn x~j x~l xn s~r t}p u~p tr vq xÇo zÇn |én }äo uÇq uÇs vÇp vÇr uüt vüt véu wâv yüp xür xér zép zâr xét {äs xäv {ät |ép |âr }äq |är ~äq ~àr ~år |àt |åu |åv ~åt ~çv yàx zàx zåx {çz |çy êv |êz êx ~ë{ }ë| }è| ~è| ï~ î~ Ççs Ççu Çêt Çêv éëu éëv âèu éèv äïv àîw Çëx Çèx Çïz éèx Çï| âîx éîz üî| Çî~ éì| éì~ âÄ} éÄ~ äîx äìz àÄ{ åÄy åÄz äÄ| äÄ åÄ| àÉ çÉ| åÉ~ êÉ{ èÆ{ êÉ| êæ~ êÆ~ èÆ} èô~ ìò~ Äû üÄÇ éÄÇ âÉü âÉé äÉÇ àæé åæÇ çÆÇ åÆé çôä çöä êÆÇ êôé ïôÇ êôä ëöü ëöé èöÇ èòé ïûâ êöä ëòå èòà èòå ïûä ïûå îòÇ ìûü îûé ÄûÇ Äùé îûä îûå ïùê Åÿâ ìÿä ìÿå Äÿä ÄÖå ÅÜç îÿê ÄÖê ÄÜè Éÿü Éÿé æÜâ ÉÖà ÉÜà ÉÜå Æ¢ä Æ¢ç ô£à ô£å ö¥å É¢ê É¢è Æ¢ê æ£ê æ£è Æ£ê Æ¥è ô₧ï ö¥ê ò₧ë ö₧è ûƒè öƒî ûáë ùáè òáì ùíî ûíÄ ùóÄ ÿáê ÿóè Öóî ÖóÄ ¢Ñì £Ñî ÖñÉ ¢ªÆ ₧⌐ô í⌐Æ ó¬Æ ª»û º░ù Ñ▒£ ¬┤¢ ⌐┤£ *╙b"@"@"@"@L@Ç  '%#-]& *43h);    
  1376.     
  1377. '2F-KäF1L'K
  1378. )V₧Bc           36a;ìy╞LûNûNöAp≡_»"G0
  1379. 
  1380.  F
  1381. @wR▒Æα~╠t╠â╒ bñô²|╘#(/d 7        ByYºÆΩq┴ c╣√Üⁿ/É≥Dñ■â╞≈G₧Φ=qY¥    -Q'     $4cñ&v╦Æ╡╓Mù╫H│ )jÉq╥ñ≡»═■»ß≤|Θc₧T₧!9
  1382.   1Vk┤ì╙«° `╜ⁿ8Æ┘/ C XûÆ═■╟∞ Åσbº f│+F ! +-Xÿ9ü╧R╣Ω╝╒∩8o¿!    GÖ╔¬┘ ╗αⁿÄπ!|═">g       ;
  1383. -U )ZX¬?ºΦ╩╬■¢┘≈     (`ƒ┼≡δφC┤≤o╠Bx    *%1M 
  1384.  
  1385.  
  1386.      $DBx={v└m║∙½╥°n╣φ
  1387. 'Kq╧φεä┼° y█Lç    +O7U  !    (
  1388.  A#Guj╝ïσ╔▀Ωà╦╪,>⌐▐∙├▌Θ+íΓ.>è _ûA    
  1389. # !#  $N&G0
  1390. 
  1391. 
  1392.  
  1393.     3`WÖ%~φ4Ö ü╓ⁿΣε     ~º╟╘≤ Æ┘⌠j╠Så*8 #% !,? 0 1    
  1394.      B%O|(S)        *I,E
  1395. "%
  1396.  $4     ?pq╞t╪k╛ á▀ ¿┴ß
  1397.     PqÆ╝α°╩Ω⌡ô■"Nâ#$     &6.!1*51O<!3N/M"@Y " "7'M7XB~z╟a¼;~3q#TÆCw9/V*(,?@c═?¼α├±≥┌▌δ;è╜     1º╪εßφ≈C▓ )a.@
  1398. '7d!R9j+\KïZ£Ay0PüJÅ#t╒? . $@*8O!5    !EQÅFö1y═}╨ùτUº∙!Ç╧z╬,ê╒ ]òAq)hó4e¥: B*¥⌠[Ö┘«▀ ë╪  @1    
  1399.       ▒φ∙ÿ╪÷e╣▄Rä"O/6$MdOwVÖ%q╣ Xá!~╔*£≈┌"|├?ñ·E┤ Zû>l]ú .Y69         @OÉ~┌
  1400. å∞<ƒπD£╩Ç┘⌠z╛Θ[ª╘Iú▄,æ▄ r─Uªc▓#OûMe9~⌐;╝⌡~╢ <ñσ&F          0Ñ▐■₧╓ Wº╛Ié#"N(@`ò5~║a»g╟7âτd╣ S▒∞Gª╪p╟∩î╓ M«≥V┤ù╫z╡! H7V$G
  1401. (9%/@ri▒+Åß+¥Ω7⌐∩C¡∞_╗÷~╔∩à╪⌠Æ╓Θ╨Θ²πε [ª╥@»τV▒÷/r╧
  1402. g╬b¿ z├²SÜ'5     @
  1403. %"!
  1404. 0X¡═ñ▌ }└²Hún┤9|│U½²6ô╪ë╪ ╧ε Σ≤ ╤δ ╢ß ⌐┌ ì┼÷z┬┌ú╙²e╠ 
  1405. k┬OñEè$ ,!    $%BgO _½l═]╓\ñ+h\!E%7l"Sü7æ║j╛≥t├ⁿƒ╥·│╪≥┴µⁿô▀⌡Vú∞G╣εê╞÷Ä╓Nå    6b
  1406. 0`#G'0R#1 #Lïp└▄⌠≥É└·p»ΘZ└Ωºπ ¼┘τ│▄≥ó╪≈h─τJ▓╒&pè>X-H7#tGÆ-w▌l▀#ëΘKz2F.     "S=|!é▄M╣,x╥6 )    G`a}g┤≥q╬√l├δÑ╨≈ÿ╥⌡H┴Φ╝·@╖εm¡NàCë/d4 :m2=->=!n╜8ì▌Σ▄π_╦ ╩≤ ó╦≥V╡▄x╢≥y├√0~⌐'P.     _æf┌2É√[ó    9 $#>    
  1407. (8ONê Zº ï≥lσeñ  ;2` ç╕╠Θφì├ )w█Ü╦╙à▄ ,ï╘z▌_«<`YÑ?s,]úk╛0Ñ≡╓±R┬÷5ä≤X┌°=░▌=¢ 3d┌É⌠Gqu⌐s╖ T      !65YCòb╣/┤■D£ /Ö╧
  1408. (/Ra▓g░εr╛ N¼⌡I»°J»⌠Fúεb╢ Y½ [½-ì±å╬@»°5½≤<»≥Z▒≤AóΣbºφ¢φ âσ#@      +]O«°t╟ >ñ≈)e"M")8
  1409. . 68^c╖x╘+Ñδe¡⌡M¼⌡        )0S
  1410. `▓o┤∙k╜ ]»÷WEù╬/ÿ∙W╟ 7⌐∩(¥°!ó≈!½▀V╡√>ñφ5»π!WÇ%ë└Q£ß1¿≈v╤8
  1411. )
  1412. hûé╕⌠à┤±o┐D{!@g $ "-0>Qô`▓/æ┘¿µ i«²dÅ 
  1413.  #0/O`▒A│∙(í≈OÜ▐*A"XV₧Öα√|╛τM╗%e├Pû╤Q¼≈e╖3s.G`äAöΓ!ô┌Rí!>     #u╬·Ñπ |└ $b¿+[7*      !";U#O~%y╦a╛⌡Ñ█·v╚ !;  *Ha░6¿∩6₧σe¼i╢    ^«í⌡sτlß"îΘ%îΘe╚ì∞ÅΘp└    ^ªXw7ö±Å╪YúA    (
  1414. ;YQñ╪▒▌·P░≥╥/d¥&L'?
  1415. 
  1416.         "    )Mn├?¬φ⌐█τo╛≈9oÉ;]¼O«°a│⌠j│v┌å▀v├`τ7}∙Du*lí!êⁿa╬y█æΘ'd╞VsDó ì╪ Wí@g . Rù╛â╓ ╡α⌡,ï█v╤    <t1S
  1417. "8
  1418. 3    6i2}┴s┼Ü╨█Æ╬ⁿÇ╣≈!(0<     /'IHçBª ~╞2┤≈'P─P┤Aw│:!2;-ko┐h╠(p╓ïΩ4Æ╙&ïφ+f╔*$ &- 
  1419. &äí«▐÷¥╤⌡PÑΘf¼MÉ.S-
  1420.          
  1421. !?Bn5ä5Å╓₧╘⌡Ö╚Σn║δ1 1L F>rYö]ô`¡åß[╜X─d»4f(-()> 6E %>*0S+8    -'\x╠ jΓAá7ÆπTá)e¢@v3b
  1422. > '
  1423. #1éÜë╛π¿╓ i╣≡u╟@å4c ; $ 
  1424. 
  1425. 
  1426. 1R,N||╙m╢⌠ƒ╓²æ┘√Gt --Do>vEån▒ä┬1ô▀3_╝8Ö$m╔    <3-RJ$ZQé,b3/v>U JR!<v$[╢T╡!}╬%à╤p╚VáEä/Q%#4Ç¥É╤°n╥⌡l«∩9ò▄c║ 7{0]"-A'        
  1427.  
  1428.  &:,F6d_º9ü╟Ä▄ ê╘ h╗ΦGäXº
  1429. f╣}╠c╣ S└ >½∩z╪ O¼ N87(BBmañu╔(çΦ
  1430. z╬ÄπX½>ê\*e╩'ì▀+ªΣBº  Äµs┼Dà    4e 3`î░ü╛Ωn═⌡\¼ß%è╒j┤!?v<* 
  1431.  , $@ 3g Fïèµ~╨ ô╩²g║≈ÉΣ'ƒ■f╩ %ÿΘ0êφ [▓x─K╔80S![║~╥.e  )Sÿ∞"f┼<`4# (]┐qε^ºêΦ{ΦCó #É╘
  1432. páe┴⌠u╗≡T├ 7░  h┴@t1b70;NHp    Oàu┬JÑ÷é┐ Ö╬Θ╡σ±º╩╪@óΩ#}╓    Uù Wúu└G─7*O e╞Jê&z╔p╦9` 4m╤d▀JïQázΓxΣ\ª⌠╕╥ í│Φ~═■P░∞+Å╫^₧)Im <[#5
  1433. 
  1434.     
  1435.  9$H;m!SüVë>úε`╨qΘ}╙>+XKôv╜D╜ !O6dd╔    7Gà{╔'2d%V┴lαbÄ)Y.[w└[┼L┤%æ÷
  1436. fº4i&Y     +)Z">z4r╕F£╥P▓αÄ█ⁿ┤σ ó╥Ω:í²/x┬    CmY¥ }├!L├%&L`f┬1P
  1437. _ñ}╬5c  ;*Bºqß_æ=~:Ñ çδ{░ │╩ Å╢ΩL⌐■1r╢Rò/a
  1438. ;.     %    (?Gkdúo╖ìαg─ⁿS╛≈Y¡ε<ï╬S¡ε&ÄßBª Aÿ┌b⌐r╖B╣:)LRªVÿ= 8{╩k└7a9^║f╙ Sîj┐)~δ7ò∙J«Θ<░┘7┤αG¿≥Gƒ▀1å╩#YÜ%Cf6T"2       /)K%?g}╚$ü▄T╛²@» Pºα <^    9mTæ y╔G╡ B½εQ░·v╗M▒%/%0jA}m╨à≡|╘ïαÅ≤X½@à#3]
  1439. ">*X┴J½πc╝ a╝π1¢ε)à╓UÖ@k>b3º√T¿Ω|╞≡|╬!JÅ=l)#
  1440.  =,\GÄ"}║Sú▐A¡⌠;Ü▀$n₧+GGwFb░.ûπ@ªε1öµJù    I╡8$-A)K1fa╝v╫ê▄╫Y▒UÉ=f &;,+C ]╛i¼ ╨QºΘ%é╤ r┐Jë(Q!DSêG╛ⁿa╢⌠o┤∙r┼a¬?s"E)  "'1K5u l╞+¢φÜ╧ k╞≤S⌐δ+G&2/R<nKâ    IÇm╝.w═G¼,r╨ @u3K=p 5j=o<7R*3A,+5    'Uï6v╦O▒6ïß
  1441. ~╥NñGü@u5]9 *Rv1£α}╟ D╖·ò∩_╦KÇ;f+A 
  1442.     
  1443.     +,E    KÇy┬*Ü⌠Æ╫δe┐ 4₧÷                 
  1444.   4;oé╙aƒ-ë≡`╞h╞G{
  1445. 92%- </3<ri╔"s≥xτ6y╨f└ Dü0M%B+$B¥┌ª╬ ì╔  ôπi╬Z╕=`.
  1446.      +,F9_WÜ%ê▐5Ü▐ü╚ΩG«∞eñ         #-.`'ô≥:¥╧\½ⁿ îσ{╫o╠5|%Q,>Y¥}╙a╠6å≈3ú≈S£╪|▌Az'!     'Zàå╛φ½┘±y╜Γj╟GÄ 2\)E)= B0fd¼e┤τ╕┘∞?╕  
  1447.  )A~K╣⌡$ûπQ¬/å╓èδÄßaΓuε
  1448. g▓âΘ~√ }σÉ·è∩H{    MzëΣ*ü╫Kú=
  1449.     lêo╢ ╒⌡ΣQ¼Θ#ÿ╒Xá
  1450. 5h#F
  1451. #JXò1╞d╗■Æ╞√^╝■Sà 
  1452.  
  1453. %7Qæ*ƒ 
  1454. |ße½CeJyb▓b╣∙Q⌐∩l╧a╠n╜ /}┐"r╣9}4DhRsô≥ äΓIñ2K
  1455.     
  1456. 7\É▀ ╡╤≡W┐·/ä╘Ræ:j#:% ##? Mä5ç╒/ï▄7ò╓ä├ 'ƒ°.    ),?Aé&£ ï≤&o│<9hh╢«⌡ b╡ΓÄ≈(v█^⌐ßi║≤/Ç╜-eB gå ö≤ êσX▓$
  1457.  N│°▐Ωⁿx┴√.î▀"c¿Kà)I# 
  1458. !8BWe╚$ÄφG║²ÄΩ
  1459. r┐
  1460.     -RöH⌐Θ-ûσ2ûΣd▒Γe║°å╡δè╧·Y¿█"~╤ä╧G₧╫9¿±,ÜΓh╜⌡,x║,ÿ╚Eá√"╩`»+Y     Uù»Γ ╝╙ *òΩk╣U¢;i+G,      "91Q
  1461. =]R½m╦7₧φs⌡Bg             )'>dª▓τ `¬∞<ûΩ«▐ │█≈ü╩αöτ    h┐(\
  1462. MîGê(ä▌2æαà╤ [░°A┤²Jî▀k╡δ8{└-s)5 "DúΘ╢Σⁿ6ª°t─Wó0e:2
  1463.  &. "8'Qj«m┬0è∙    W╧B|     
  1464.         TÖ-é╠¬Φ ì╥∙╨ñτ r╙⌠Y┤±¥µ,n╟C~$) Eü2`_ñl╗Xºµè╫≥░╥÷    u═╕δφƒ╥≥1ÿß/P;
  1465. #          J!â╫Z╣ ,â┘
  1466. KÉD|%Ad9 
  1467.  -    :Y!H^£X¼c╝Is)     0%NYÆd»▌ç╥∙æ═≈╚╒δ╠αδ╢µΦQ«σ|╞ ¼╓ v▀Å°Là1o?&N#-H1\Cè+Åß╔π√Y╡÷y╘ p╜÷╝δΦú╧εñ▌≈ë═≡9r░Cë2
  1468. '%m¡£²2» =ï╪'cG&@
  1469. 
  1470.  
  1471. 2F8~%Æ qφç∞<░∩O╣εq╔ ó╤±û╠√á╬²╫ΓµΩΦ▐╖Θ²é┬ ZÑ ;¬·$í²ç┬≤º╚∩N¿Tî 'F (        "(Re»±ú┌ ╡≥ Bì6ÄΓ:û▀ü╧·Ñ╪°┴┌Σ¬┌▐á▌ßô╦Φü╧⌠}╠≈W╗δ>í⌡@Ü∩M¡ â▐j▓>q$H#>(     !>_«sτ2º≥3»²n╔÷~┼τ¢╤·ºΣ°╣φ·╕Γ⌡í╪ Ü╒ Gæ┘/£α#ë╥f╕&¢ⁿà├≤ò╩⌡H~ -D  6
  1472.  
  1473. $@û═·ë┼∩ô╙±3}HîW╗3èα<¢Σo╚⌠¥╙∞╞∩ ╥δ⌡╗σⁿ╜π ½█ ½Γ²¡▄√é┬∙c»5z5W, 
  1474.  
  1475.             5X#QUîVë#l╛ {Φ<Ä▀D¢▌î┌0èΘq╨)èΓ+Ä▐v─8ê╔HvO/l;Ä▄î╨⌡@½σjÇ
  1476.  
  1477. %¬Γ ╝ααP▓°,^░%(6 1X&_î)gºi┬y├l«-ù⌠ìΓ-ôσP┤∩@»⌡?óµ?áΩTá%eª&.
  1478. 
  1479.     
  1480. %5%=.X&Wë#Z^₧cªMò?yNÉPûCIr(W 3    0\òΘ\╕ á╫∞\ñα47└Γ ╩µ≈U¼εPíBl";L
  1481. CÇXû<y ^ƒW¢ Bëp▒NÉf«PîDm₧. %        
  1482. !
  1483. " !<[ ?!Ad4ZBl0[ ;kQ~'ApF?d*
  1484. +UìΣD┤ ┐µ⌡é╩≥4Y7Q╛▌⌠═ε 2ûΦ7zEx8X)Q6`#X0ZHo
  1485. %X@oNüKâ?pC7    '!+=#%,)90!3$.dx├h┤┴π√ô╪τSú╥    ~ó║┼∞·¥╪ ~▐Dq    ,^ "8(3J,  *A1J-D       $+    ! 3[
  1486. Kr
  1487. [╢l╣±ƒ╪≈Ö╥∙º▌ ¼µⁿ=á÷q╗$U,  ##-               
  1488.      -K3P(j╔J¿Ωº▐ ¢╚Ω
  1489.  
  1490.  
  1491. 
  1492. úα å╟π(ù√VùJ+           2<\!C"áτ╚╪ ╪π 4zƒ              Az¡╗╫ΓO⌐≡p═3g#>
  1493.  
  1494.  
  1495. 2:"I[¬é╤ ─µ■e├°R}╝¼╒δ╚Θ  }╘
  1496. N¢ G/  $'
  1497. /LùS╡±»Σ t▒±Yy'|╩ ╥τⁿé╞δ[│Oæ  ?#    \Æt╚[╢∙┐µ D»≤(ï╒KHx9Æ╒}╟±ú┘≈R¼≤9oEt,      
  1498. "Fvk▓Ç╪J╛∙i╣ε<▒÷oδwµY» ò╧ 3û╨3ú≈Hm"77bXÿe╣æδM₧Θ;▒ à≈"ƒ√:ûΘq│Φå┐!É▐@`* *    6\2mR│ T¼"ë╪Mù    q¼KÅ&bÿgùXî3          -+R9I(NVx<Gv"F-Y[{ )B     .O    (1<=V
  1499. 0Q+=Pf$
  1500.     $   %  ,.8    @@= Background*┤▄ ${ê>?$?$═╠L>╙╙@    &&& /// 888 BBB MMM XXX eee sss âââ ùùù ▓▓▓                                                                                                                                                                                                                                                     G* ╙"@"@"@"@╗*@@                
  1501.  
  1502.   @@}* ╙"@"@"@"@∙:@@7<;# <SKJP&%'/*#/@ìó!" +T @:! 630:+ Fåóóóó~D<FABW)mÇé_^K%    SY&?MIAE9?D3DJ4(
  1503.     &*;8KBL$@A;;)51 îóW N@#%LDR99A01D1bÄuûö]$MZ7Q#  cùl@AHÉPKZjyÿós-<G3-GU hà¢íùçæzéÄJ5M0"6>CHPêóæóo34613QP2C;?L\asàät£Ua]/).>FOW]nx}]dûô'
  1504. BF<IPR8LE)$$%*IRmpxÿè>,Z>B7-,*,16<;APçò
  1505. %,+1+ )fQ&&&$IFHQPS}òWF3ïóóôr;.07BO\kuÄ
  1506. %d(%# 1î8$%%LPOPKJLZë~hjèóó^/.-*&$%).EG"S£óìêïêjS)HcXRMIHEäI''EKFGIFLLLYG?<:32,'"%]|`TZdo~çÅP
  1507. =ZW\_K(eyydGBDFJIFEDKIHID' ?5332016E_j)EIMRW\c_VKÇÄb]b\bL #,2$K.*,/0-0+-/23468<??CQTSZjk(àîÇpgXT%'!"$%%('%1775@ND&DìùÖó¥|
  1508. JY\æZXK:2'#! &(((2:1ZࢣÖï7jgêÆ[ûy\òYlf;K1" '+4wòƒç$bìóvâóq}ó^åÅUÆ{HWE$#&"dü65óòâóênóÿiáÅhíûeód#D%DV₧}óóxÜÜqçóè@&53dPIB!@@O%OO=P    zP    MP²   zP    YP    &vⁿ   YP■   vP■   MP■   PP    uP    VP    9P■   MP    vP    dP²   Fφ   Lv≥   cvε   aM√   uP    cv∙   uP    wOPPπ   5OUP    GP    hP■   xX°   kv°   fP■   wP²   bPσ   yP    v≤   DvΦ   w∩   RP■   XP■   lv√   QM√   {P²   LP    QOVP╨   {P■   fP    rMΓ   Qf√   gM≤   TM∙   BM√   gP²   @vΣ   SP■   `P    JP    Zw∙   dP■   Nv±   VPσ   AP²   IP²   GvΦ   Sv█   DOAvⁿ   ux≤   W%h╡   sP²   UO║   qM√   |M√   yM├   EM├   fP    RX∩   CP    XP    sP²   Jx°   nvⁿ   iv¿   zP²   HM╒   oM╟   OfΦ   QP²   sZ√   IM─   hv±   vv═   ]MΦ   lMΦ   [%h    fw═   YMε   FMε   Mt╒   ON╒   v±   ^vε   cM╒   nMε   Gv≥   RP²   KM─   ZP    KM√   X├   mv≤   S≥   TM╟   Ex¡   aP■   C%h²   }P■   OP■   \P■   Zw╧   ~Æ>QJaÜYr[|è≤MM~è╛[Z~è╛xg~ï╛[ t~èb@╣NDM▓^Q¥è╛b`¥è≤Dm¥úe z¥¬ΦHF₧ï≤s S₧ïX _₧è÷Mk₧è_y₧ï╛BGƒè┌bTƒïRbƒúa oƒ▓\{ƒïc Jáï≤| VáïZbáï≤oáè≤x|áï≤~ Ií¬╓j UíïY aíï≤{ míè╛Lyíï╓_ Fó▓iRóè╛L`ó▓]móè╛V|óá^ Iúè┐[Uúï≤e búè≤Enúï≤} {ú¬≤FGñïL Tñï≤B`ñï≤fmñï▄szñè┴]GÑ▓_TÑú÷^cÑú÷\ pÑè╛}|ÑïS IªïRUªï≤A bªï╓onªï≤h {ªè_Gºè═nUºï÷s bºïT nºïl zºïmF¿ïKS¿è┌L`¿ácn¿ïF {¿ïBG⌐ïDT⌐ïta⌐ïIn⌐èT{⌐ïVI¬áXV¬ïpc¬èSp¬èR~¬èQL½ïJZ½ègg½èOu½èNC¼èMQ¼èL_¼èRm¼èF{¼ïM I¡èlU¡èmc¡èKq¡ïN¡èJL«èpZ«ïOh«ïgu«èIB»ï≤i P»èB\»èDj»ïPx»ètE░ïQS░è``░èan░èP{░ú▄{I▒á┘e V▒ï[b▒áWo▒ú≤\|▒è÷xI▓á║EV▓·╦mc▓è╦ns▓¬═kA│ïΦI N│è`Z│á] g│è┘]s│ï╓P A┤è┌xM┤ú▄\Z┤è÷yg┤ï┘dt┤ïW A╡è├[M╡ú≤^ Z╡√≤Hf╡¬╞bt╡è╟XA╢¬║BO╢è≤y\╢ï\j╢ï≤@ w╢á║WC╖ï╛J P╖åi7\╖åj9S╕è▄ML╣╘o2Z╣èΓ|L║ú═l[║ƒ
  1509. EEAh║åk8m√áσd eⁿ¬╦kqⁿú╦l~ⁿån9K²¬ΦjD■å|8Q■åo8I ú▄^ AÇá║UMÇá║~ZÇ╘j4gÇï╓O[üεp6hüåz7^éï╓NUâƒ
  1510. K~@bâè╒g`─▓≤Co─åq7}─år9t┼ƒ
  1511. ~@m╞ås8kçåq>cêñu0aëå~7Qè≈eHïå9aïñv:Zîè╒hTìå{9bìåw?[ÄåEAZÅå@8[ÉåB7SæåC9JÆåD8Côåm7{ô╗c4~{rö┐ppÉ╗║c4f╝wÉ╗c4T«]═╝d"q√▄VGU₧╗╗c4w\óª
  1512. vCS¿É║+V'V╕É║4@l▀ú┴` lßÉΓ║[ExßÉß║l=}ΣÉ▐║hVzσÉ∩║Z3Pτ¬╞k CΦÉ╬║EKOΦÉ╧║fVZΘ┐║TpΩ┐║pxΩè╦kΩÉ2bMδè═ko∞Éz|∞É|HvεÉk-~∩Éijk≡ƒ
  1513. ~~@U≤ª
  1514. hCS┤    ¬╓k V─    ╗c4d b─    É┌OqF╨    É"Hw╘    è┌k█    É$iL▄    É)_uΣ    É6vTτ    ï▄k J∞    É7VV∞    É
  1515. E    l∩    è▌|q°    É/2°    è▀|q∙    á▀k @·    É(8L·    ª
  1516. ZCD√    áΓk Gï
  1517. É,-Sï
  1518. ¬Φk @î
  1519. É#`Lî
  1520. É8wlö
  1521. ƒ
  1522. G~@cÿ
  1523. ª
  1524. tCa┘
  1525. «q4dΘ
  1526. «r0XΩ
  1527. ƒ
  1528. F~@Hδ
  1529. ª
  1530. YCF¼ ª
  1531. XCI╝ «l-L╠ ƒ
  1532. @~@y╠ ª
  1533. WCwì É:{(z¥ «p.u╞ ƒ
  1534. BEAc╟ É∞GEhêɵM/mÉÉσFF\æ«t6bÆ▓gXô┐pgôª
  1535. VCnô«x6qú«y0gñª
  1536. wCWу
  1537. REAZ╡ª
  1538. xC_÷«}-båƒ
  1539. SEAOçª
  1540. yCTȟ
  1541. zÇW╪«A.V┘ª
  1542. uCDڟ
  1543. U~@Gك
  1544. T~@E½∙rC∞Mutator=(ClassName=TeamOverlay.TeamOverlay,GroupName=Mutator,IconMaterialName=MutatorArt.nosym,FriendlyName=TeamOverlay.TeamOverlay.FriendlyName,Description=TeamOverlay.TeamOverlay.Description,FriendlyName=TeamOverlay.TeamOverlay.FriendlyName,FallbackName="TeamOverlay",FallbackDesc="Show the details of other team members on your HUD")TeamOverlay - Teamplay HUD Mutator Version 1.0 - June 6 2004
  1545.  
  1546. Game: Unreal Tournament 2004
  1547. Mod Type: Mutator
  1548. Game Types best used with:  TDM, CTF, DD, Assault, Onslaught
  1549. Coding: Adam 'Heywood' Booth  - email teamoverlay@malevolence.com.au
  1550. Vehicle Icons: Russell 'Yeti' Whitehead (Except the Hellbender)
  1551.  
  1552. *** Brief Description:
  1553. This Mutator adds to the Players HUD a list of team mates, their health/armor status, what vehicle they're driving (if applicable) if they have the flag, or
  1554. are running wild with the double damage.  This mod was inspired from the FireTeam display in Enemy Territory, and cg_teamoverlay from Q3A.
  1555.  
  1556. When the mutator is running, go to the Configure Input Controls menu to set your keys - from there you can call up the Configuration Menu to adjust colours
  1557. Otherwise you can manually bind keys to:
  1558.  
  1559. TO_ShowOverlay  -  each time this is called, the display of the overlay will be toggled on or off
  1560. TO_Config  -  this will bring up the Team Overlay Configuration Menu
  1561. TO_ContrastMode  -  this will change between Primary and Alternate Colour Schemes
  1562.  
  1563. Alternate Colouring is made available for maps that may disagree with your regular colour choice (eg good for Indoors, bad for snow)
  1564.  
  1565. *** Installation Instructions - Umod (Server and Client):
  1566.  
  1567. Download and Run TeamOverlayV1.0.ut4mod file - provided UT2004 is properly associated with this filetype, automatic installation should occur. If this doesn't
  1568. work for you, the manual installation will be required.
  1569.  
  1570.  
  1571. *** Installation Instructions - Manual - Client:
  1572.  
  1573. Download and extract the files from TeamOverlayV1.0.zip
  1574.  
  1575. Copy TeamOverlay.u, TeamOverlay.int and TeamOverlay.ucl into your UT2004 System directory (possibly its located at C:\UT2004\System but it depends on where you installed
  1576. UT2004)
  1577.  
  1578. It's probably best to start an instant action game and go to the Input Controls section to set up the keys you want to use, and then call the configuration menu
  1579. and adjust the colours and other settings to your liking.
  1580.  
  1581. Remember unless the server is actively running this mutator you will not get a chance to use this mutator.
  1582.  
  1583. *** Installation Instructions - Manual - Server:
  1584.  
  1585. Download and extract the files from TeamOverlayV1.0.zip
  1586.  
  1587. Copy TeamOverlay.u, TeamOverlay.int and TeamOverlay.ucl into your UT2004 System directory (possibly its located at C:\UT2004\System but it depends on where you installed
  1588. UT2004)
  1589.  
  1590. Open the UT2004.ini file
  1591.  
  1592. In the section called [Engine.GameEngine]
  1593. After the last "ServerPackages=" entry
  1594. add
  1595. ServerPackages=TeamOverlay
  1596.  
  1597. When you start the server, ensure that the mutator has been selected, then the players should be able to make use of it.
  1598.  
  1599. *** Change Log:
  1600.  
  1601. June 6 2004 Version 1.0
  1602.  
  1603. Internal code reduction/optimisation
  1604. Removal of left in debug code leaving stuff in the Client log when Bombing Run is being played
  1605. Addition of capability of moving the Overlay Display Horizontally
  1606. Slight modification to the Onslaught Teamplayer location Filtering code
  1607. Included a umod version for simpler installation.
  1608.  
  1609. May 25 2004 Version (Release Candidate 1)
  1610.  
  1611. More Optimisation reduced network bandwidth slightly and included the capability to show who has the ball in Bombing Run
  1612. First public release for feedback purposes.
  1613.  
  1614. May 13 2004 Version (Internal release)
  1615.  
  1616. While working on the Onslaught power node issue (now fixed), a better way of transmitting the required information gave big bandwidth
  1617. savings compared to previous versions of the mutator.
  1618.  
  1619. May 6 2004 Version (First documented internal release)
  1620. User side Configuration Enabled
  1621. Powernode display issue (Fixed with the first UT2004 Patch) caused the code to not display player locations in Onslaught
  1622.  
  1623. *** Thanks
  1624.  
  1625. BugBunny at #unrealscript for helping me when I was first starting out
  1626. Squirrel from FragOps fame for the same
  1627. Lotus of UTComp fame who's been very helpful and has incorporated some of the TeamOverlay features into UTComp 1.3
  1628. Skar and Alkoholk for being my play testers and not getting too annoyed when I find things break as soon as you join the server :)
  1629. System\Manifest.ini°System\Manifest.int∙!System\TeamOverlayReadMeV1.0.txt System\TeamOverlay.int≡System\TeamOverlay.u-PSystem\TeamOverlay.ucl0fP!System\TeamOverlayReadMeV1.0.txtÇg ú┼πƒïw¿xL∩%c