Advertisement
East_Arctica

sh_highlight.gnut

Aug 11th, 2022
1,058
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. global function Highlight_Init
  2. global function GetHighlight
  3. global function GetHighlightContextForEnt
  4.  
  5. global function Highlight_SetNeutralHighlight
  6. global function Highlight_SetPrivateMatchObserverHighlight
  7. global function Highlight_SetSonarHighlight
  8.  
  9. global function SetSurvivalPropHighlight
  10. global function ClearSurvivalPropHighlight
  11.  
  12. #if SERVER
  13.                                              
  14.                                            
  15.                                            
  16.                                                
  17.                                                    
  18.                                                    
  19.                        
  20.                                                
  21.      
  22.              
  23.                                                  
  24.      
  25.  
  26.                                                
  27.                                                
  28.  
  29.                                                    
  30.              
  31.                                                      
  32.      
  33.  
  34.                                                      
  35.                                                      
  36.                                                      
  37.  
  38.                                                      
  39.                                                      
  40.                                                  
  41.                                            
  42.  
  43.                                                          
  44.  
  45.                                                
  46.                                              
  47.                                              
  48.                                                
  49.                                                            
  50.  
  51.                                            
  52.  
  53.                                      
  54.                                              
  55.                                          
  56. #endif
  57.  
  58. #if CLIENT
  59. global function ClInitHighlight
  60. global function ClientCodeCallback_HighlightServerContextChanged
  61. global function ClientCodeCallback_HighlightServerFunctionsChanged
  62. global function ManageHighlightEntity
  63. global function SpotViewModelHighlight
  64. global function SonarViewModelHighlight
  65. global function SonarViewModelClearHighlight
  66. global function SonarPlayerCloneHighlight
  67. global function DeployableModelHighlight
  68. global function DeployableModelInvalidHighlight
  69. global function PingViewModelHighlight
  70. global function PingViewModelClearHighlight
  71. global function ClHighlight_YouRespawned
  72. global function ClHighlight_YouDied
  73. global function ClHighlight_HasHighlightContext
  74. global function ReconScan_ShowHudForTarget
  75. global function ReconScan_RemoveHudForTarget
  76.  
  77. global function TargetIsHighlightedForMyTeam
  78. global function DumpEntityHighlight
  79. global function AddCallback_HighlightContextChanged
  80.                    
  81. global function Highlight_SetAllianceProximityDrawFunc
  82.                          
  83. #endif
  84.  
  85. global function HighlightContext_SetAfterPostProcess
  86. global function HighlightContext_SetFarFadeDistance
  87. global function HighlightContext_SetNearFadeDistance
  88. global function HighlightContext_SetDrawFunc
  89. global function HighlightContext_SetFill
  90.  
  91. global const HIGHLIGHT_CONTEXT_NONE = -1
  92. global const HIGHLIGHT_CONTEXT_NEUTRAL = 0
  93. global const HIGHLIGHT_CONTEXT_FRIENDLY = 1
  94. global const HIGHLIGHT_CONTEXT_ENEMY = 2
  95. global const HIGHLIGHT_CONTEXT_OWNED = 3
  96. global const HIGHLIGHT_CONTEXT_PRIVATE_MATCH_OBSERVER = 4
  97. global const HIGHLIGHT_CHARACTER_SPECIAL_HIGHLIGHT = 5
  98. global const HIGHLIGHT_CONTEXT_DEATH_RECAP = 6
  99. global const HIGHLIGHT_CONTEXT_SONAR = 7
  100. global const HIGHLIGHT_CHARACTER_SPECIAL_HIGHLIGHT_2 = 8                                        
  101. global const HIGHLIGHT_CONTEXT_FRIENDLY_REVEALED = 9                  
  102. global const HIGHLIGHT_CONTEXT_MOVEMENT_REVEALED = 10                          
  103. global const HIGHLIGHT_MAX_CONTEXTS = 11
  104.  
  105. global const PVEMULTI_SQUAD_COLOR_0 = < 57.0 / 255.0, 181.0 / 255.0, 74.0 / 255.0 >
  106. global const PVEMULTI_SQUAD_COLOR_1 = < 242.0 / 255.0, 101.0 / 255.0, 34.0 / 255.0 >
  107. global const PVEMULTI_SQUAD_COLOR_2 = < 0 / 255.0, 191.0 / 255.0, 243.0 / 255.0 >
  108. global const PVEMULTI_SQUAD_COLOR_3 = < 255.0 / 255.0, 222.0 / 255.0, 0 / 255.0 >
  109. global const vector[4] SQUAD_TEAM_COLORVECS = [ PVEMULTI_SQUAD_COLOR_0, PVEMULTI_SQUAD_COLOR_1, PVEMULTI_SQUAD_COLOR_2, PVEMULTI_SQUAD_COLOR_3 ]
  110. global const string[4] SQUAD_TEAM_HIGHLIGHTS = ["PVE_multisquad_0", "PVE_multisquad_1", "PVE_multisquad_2", "PVE_multisquad_3"]
  111.  
  112. global const HIGHLIGHT_COLOR_TEAMMATE_CLASS = <1.0, 1.0, 1.0>
  113.  
  114. global const CAUSTIC_GAS_THREAT_DIST = 1500.0
  115.  
  116. global const HIGHLIGHT_COLOR_NEUTRAL = <1, 1, 1>                            
  117. global const HIGHLIGHT_COLOR_FRIENDLY = <0.34, 0.59, 0.86>                            
  118. global const HIGHLIGHT_COLOR_ENEMY = <1, 0.36, 0.12>                            
  119. const HIGHLIGHT_COLOR_OWNED = <0.63, 0.8, 1>
  120. global const HIGHLIGHT_COLOR_INTERACT = <0.63, 0.8, 1>
  121. global const HIGHLIGHT_COLOR_OBJECTIVE = <0.9, 0.63, 0.09>
  122. const HIGHLIGHT_COLOR_FOCUSED_LOOT = <0, 1.0, 0>
  123. const HIGHLIGHT_COLOR_PINGED_LOOT = <0, 1.0, 0>
  124.  
  125. global const HIGHLIGHT_OUTLINE_NONE = 0
  126. const HIGHLIGHT_OUTLINE_CUSTOM_COLOR = 101                                
  127. const HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED = 145                                        
  128. const HIGHLIGHT_FILL_EMPTY_OCCLUDED = 146                                                                                                                      
  129.  
  130. const HIGHLIGHT_OUTLINE_CUSTOM_COLOR_WEAPON_PICKUP = 110
  131. const HIGHLIGHT_OUTLINE_CUSTOM_COLOR_PULSE = 120                                                          
  132. const HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OBEY_Z = 121                                
  133. const HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED_NOSCANLINES = 129
  134. const HIGHLIGHT_OUTLINE_CUSTOM_COLOR_NOZ_NOSCANLINES = 169                                      
  135. const HIGHLIGHT_OUTLINE_SONAR = 103                
  136. global const HIGHLIGHT_OUTLINE_INTERACT_BUTTON = 105                          
  137. global const HIGHLIGHT_FILL_INTERACT_BUTTON = 103                          
  138. global const HIGHLIGHT_OUTLINE_OBJECTIVE = 125                    
  139.  
  140. const HIGHLIGHT_OUTLINE_VM_CUSTOM_COLOR = 114
  141. const HIGHLIGHT_FILL_VM_CUSTOM_COLOR = 114
  142.  
  143. const HIGHLIGHT_FILL_NONE = 0
  144. const HIGHLIGHT_FILL_CUSTOM_COLOR = 101                      
  145. global const HIGHLIGHT_FILL_LOBBY_IN_MATCH = 109                              
  146. global const HIGHLIGHT_FILL_SONAR = 103                
  147.  
  148. const HIGHLIGHT_OUTLINE_LOOT_DEFAULT = 135                        
  149. const HIGHLIGHT_OUTLINE_LOOT_FOCUSED = 136                        
  150.  
  151. const HIGHLIGHT_FILL_LOOT_DEFAULT = 135                      
  152. const HIGHLIGHT_FILL_LOOT_FOCUSED = 136                                    
  153. const HIGHLIGHT_FILL_LOOT_SCANNED = 137  
  154. const HIGHLIGHT_OUTLINE_LOOT_SCANNED = 138  
  155.                
  156.                                                  
  157.                                                      
  158.      
  159.  
  160. const HIGHLIGHT_FILL_CRYPTO_DRONE = 139
  161. const HIGHLIGHT_OUTLINE_CRYPTO_DRONE = 140
  162.  
  163.  
  164. global const HIGHLIGHT_FILL_OBJECTIVE = 126                    
  165.  
  166. global const HIGHLIGHT_OUTLINE_MENU_MODEL_REVEAL = 75                            
  167. global const HIGHLIGHT_FILL_MENU_MODEL_REVEAL = 75                            
  168. global const HIGHLIGHT_FILL_MENU_MODEL_REVEAL_TSAA = 76                                
  169.  
  170.                                                                                        
  171. global const HIGHLIGHT_OUTLINE_MENU_MODEL_REVEAL_DEPTH_DISCARD = 77                                          
  172. global const HIGHLIGHT_FILL_MENU_MODEL_REVEAL_DEPTH_DISCARD = 77                                          
  173.  
  174. global const MAP_SCAN_FADE_DISTANCE = 16000                                          
  175.  
  176.            
  177. const HIGHLIGHT_FILL_BLOODHOUND = 12                  
  178. const HIGHLIGHT_FILL_BLOODHOUND_CLONE = 13                  
  179. global const HIGHLIGHT_COLOR_BLOODHOUND = <1, 0.25, 0>
  180.  
  181.  
  182.          
  183. const HIGHLIGHT_FILL_CAUSTIC_THREAT = 133
  184. const HIGHLIGHT_FILL_CAUSTIC_CANISTER = 134
  185. global const HIGHLIGHT_COLOR_CAUSTIC = <0.79, 1.0, 0.0>
  186. global const HIGHLIGHT_FILL_CRYPTO = 133                                                                              
  187.  
  188.                          
  189. const HIGHLIGHT_FILL_OBSERVER = 141                              
  190. global const HIGHLIGHT_FILL_COLOR_OBSERVER_ENEMY = <0.79, 0.25, 0.0>
  191.      
  192.  
  193.  
  194. global const HIGHLIGHT_FILL_NEWT = 112                        
  195. global const HIGHLIGHT_COLOR_BLACKHOLE = <0.1, 0.25, 0.9>
  196.  
  197.                                      
  198. global const HIGHLIGHT_COLOR_MOVEMENT_REVEALED = <1, 0.10, 0>
  199.      
  200.  
  201. const HIGHLIGHT_FILL_MOVEMENT_REVEALED = 12                          
  202. global const PARIAH_PURPLE = <0.5, 0.26, 0.77>
  203.  
  204.                        
  205. const float HIGHLIGHT_ENEMY_CONTROLMODE_FAR_FADEDIST = 15000.0
  206.                              
  207.  
  208. global enum eHighlightDrawFunc
  209. {
  210.     ALWAYS                            
  211.     OCCLUDED                                                    
  212.     LOS                                          
  213.     LOS_LINE                                                  
  214.     LOS_LINE_FADE
  215.     LOS_LINE_ENTSONLYCONTENTSBLOCK                                                  
  216.     ENT_APPEAR_EFFECT
  217.     BATTERY_THIEF
  218.     FW_FRIENDLY_TITAN
  219.     DON_PANEL
  220.     SPOT
  221.     PICKUP
  222.     SONAR_DETECTED
  223.     ALWAYS_LONG_FADE
  224.     CAUSTIC_THREAT
  225.                                        
  226.     ABILITY_REVEAL
  227.                                            
  228.                      
  229.     ALLIANCE_PROXIMITY
  230.                            
  231.  
  232.     FORCE_ON
  233.  
  234.     LAST_DRAW_FUNC
  235. }
  236.  
  237. struct
  238. {
  239.     bool                                        registeringHighlights = false
  240.     int                                         colorblindMode
  241.     array<void functionref( entity, int, int )> highlightChangedCallbacks
  242. } file
  243.  
  244. void function AddCallback_HighlightContextChanged( void functionref( entity, int, int ) callbackFunc )
  245. {
  246.     file.highlightChangedCallbacks.append( callbackFunc )
  247. }
  248.  
  249.  
  250. void function Highlight_Init()
  251. {
  252.     RegisterSignal( "ContextChanged" )
  253.     RegisterSignal( "ReconScan_HUDRemove" )
  254.  
  255.     int lootHighlightDrawType = eHighlightDrawFunc.ALWAYS
  256.     if ( GetBugReproNum() == 23966 )
  257.         lootHighlightDrawType = eHighlightDrawFunc.LOS_LINE
  258.  
  259.     Highlight_BeginRegisteringHighlights()
  260.  
  261.     HighlightContext highlight
  262.  
  263.      
  264.                                                            
  265.      
  266.  
  267.     highlight = RegisterHighlight( "decoy_prop" )
  268.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OBEY_Z )
  269.     HighlightContext_SetRadius( highlight, 5 )
  270.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  271.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.LOS_LINE )
  272.     HighlightContext_SetADSFade( highlight, false )
  273.     HighlightContext_SetFarFadeDistance( highlight, DECOY_FADE_DISTANCE )
  274.  
  275.      
  276.      
  277.      
  278.     highlight = RegisterHighlight( "enemy_sonar" )
  279.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_SONAR )
  280.     HighlightContext_SetRadius( highlight, 5 )
  281.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_SONAR )
  282.     HighlightContext_SetParam( highlight, 0, <1, 0, 0> )
  283.                                                                                  
  284.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  285.     HighlightContext_SetADSFade( highlight, false )
  286.  
  287.  
  288.     if ( IsLobby() )
  289.     {
  290.         Highlight_EndRegisteringHighlights()
  291.         return
  292.     }
  293.  
  294.      
  295.                                                                  
  296.      
  297.  
  298.     highlight = RegisterHighlight( "friendly_ai" )
  299.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_SONAR )
  300.     HighlightContext_SetRadius( highlight, 5 )
  301.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_SONAR )
  302.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  303.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.LOS )
  304.     HighlightContext_SetADSFade( highlight, false )
  305.  
  306.     highlight = RegisterHighlight( "sp_interact_object" )
  307.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_INTERACT_BUTTON )
  308.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_INTERACT_BUTTON )
  309.     HighlightContext_SetRadius( highlight, 2 )
  310.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_INTERACT )
  311.  
  312.                                
  313.         highlight = RegisterHighlight( "enemy_nightmap" )
  314.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED )
  315.         HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_EMPTY_OCCLUDED )
  316.         HighlightContext_SetRadius( highlight, GetCurrentPlaylistVarFloat( "enemy_nightmap_outline_radius", 1.0 ) )
  317.         HighlightContext_SetParam( highlight, 0, <1, 0, 0> )
  318.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.LOS )
  319.         HighlightContext_SetADSFade( highlight, false )
  320.         HighlightContext_SetFarFadeDistance( highlight, GetCurrentPlaylistVarFloat( "enemy_nightmap_outline_fade_dist", 3000 ) )
  321.  
  322.         highlight = RegisterHighlight( "shadow_friendly" )
  323.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  324.         HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_CUSTOM_COLOR )
  325.         HighlightContext_SetParam( highlight, 0, <0.72, 0.36, 0.08> )
  326.         HighlightContext_SetRadius( highlight, 3 )
  327.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  328.         HighlightContext_SetADSFade( highlight, false )
  329.         HighlightContext_SetAfterPostProcess( highlight, false )
  330.         HighlightContext_SetFarFadeDistance( highlight, 10000.0 )
  331.                                    
  332.  
  333.     highlight = RegisterHighlight( "sp_pet_hero" )
  334.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  335.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_CUSTOM_COLOR )
  336.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  337.     HighlightContext_SetRadius( highlight, 5 )
  338.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  339.     HighlightContext_SetADSFade( highlight, false )
  340.     HighlightContext_SetAfterPostProcess( highlight, false )
  341.     HighlightContext_SetFarFadeDistance( highlight, 10000.0 )
  342.  
  343.     highlight = RegisterHighlight( "bloodhound_sonar" )
  344.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_NOZ_NOSCANLINES )
  345.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_BLOODHOUND )
  346.     HighlightContext_SetRadius( highlight, 1 )
  347.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_BLOODHOUND )
  348.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  349.     HighlightContext_SetADSFade( highlight, false )
  350.     HighlightContext_SetAfterPostProcess( highlight, false )
  351.                                                              
  352.  
  353.                
  354.                                                      
  355.                                                                                          
  356.                                                        
  357.                                            
  358.                                                                  
  359.                                                                      
  360.                                                  
  361.                                                          
  362.        
  363.  
  364.     highlight = RegisterHighlight( "caustic_gas_threat" )
  365.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED_NOSCANLINES )
  366.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_CAUSTIC )
  367.     HighlightContext_SetRadius( highlight, 1 )
  368.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_CAUSTIC_THREAT )
  369.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.CAUSTIC_THREAT )
  370.     HighlightContext_SetADSFade( highlight, false )
  371.     HighlightContext_SetAfterPostProcess( highlight, false )
  372.     HighlightContext_SetFarFadeDistance( highlight, CAUSTIC_GAS_THREAT_DIST )
  373.  
  374.     highlight = RegisterHighlight( "nova_blackhole_threat" )
  375.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED_NOSCANLINES )
  376.     HighlightContext_SetRadius( highlight, 1 )
  377.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_BLOODHOUND )
  378.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_BLOODHOUND )
  379.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.LOS_LINE_FADE)
  380.     HighlightContext_SetADSFade( highlight, false )
  381.     HighlightContext_SetAfterPostProcess( highlight, true )
  382.     HighlightContext_SetFarFadeDistance( highlight, 5000.0 )
  383.  
  384.     highlight = RegisterHighlight( "nova_blackhole_newt" )
  385.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_NONE )
  386.     HighlightContext_SetRadius( highlight, 1 )
  387.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_BLACKHOLE )
  388.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_NEWT )
  389.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.LOS_LINE_FADE )
  390.     HighlightContext_SetADSFade( highlight, false )
  391.     HighlightContext_SetAfterPostProcess( highlight, true )
  392.     HighlightContext_SetFarFadeDistance( highlight, 5000.0 )
  393.  
  394.                                        
  395.         highlight = RegisterHighlight( "ability_reveal" )
  396.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_NOZ_NOSCANLINES )
  397.         HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_MOVEMENT_REVEALED )
  398.         HighlightContext_SetRadius( highlight, 2 )
  399.         HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_MOVEMENT_REVEALED )
  400.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ABILITY_REVEAL )
  401.         HighlightContext_SetADSFade( highlight, false )
  402.         HighlightContext_SetAfterPostProcess( highlight, false )
  403.         HighlightContext_SetFarFadeDistance( highlight, 5000.0 )
  404.                                                              
  405.                                            
  406.  
  407.     highlight = RegisterHighlight( "caustic_gas_canister" )
  408.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED_NOSCANLINES )
  409.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_CAUSTIC )
  410.     HighlightContext_SetRadius( highlight, 1 )
  411.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_CAUSTIC_CANISTER )
  412.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  413.     HighlightContext_SetADSFade( highlight, false )
  414.                                                              
  415.     HighlightContext_SetAfterPostProcess( highlight, false )
  416.  
  417.  
  418.     highlight = RegisterHighlight( "enemy_sonar_movement" )
  419.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_SONAR )
  420.     HighlightContext_SetRadius( highlight, 5 )
  421.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_SONAR )
  422.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_ENEMY )
  423.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  424.     highlight.requiresStationary = true
  425.     HighlightContext_SetADSFade( highlight, false )
  426.  
  427.     highlight = RegisterHighlight( "friendly_player_decoy" )
  428.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  429.     HighlightContext_SetRadius( highlight, 5 )
  430.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  431.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  432.     HighlightContext_SetADSFade( highlight, false )
  433.     HighlightContext_SetFarFadeDistance( highlight, DECOY_FADE_DISTANCE )
  434.  
  435.     highlight = RegisterHighlight( "enemy_player_decoy" )
  436.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  437.     HighlightContext_SetRadius( highlight, 5 )
  438.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_ENEMY )
  439.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.LOS_LINE )
  440.     HighlightContext_SetADSFade( highlight, false )
  441.     HighlightContext_SetFarFadeDistance( highlight, DECOY_FADE_DISTANCE )
  442.  
  443.     highlight = RegisterHighlight( "killer_outline" )
  444.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  445.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_ENEMY )
  446.     HighlightContext_SetRadius( highlight, 5 )
  447.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  448.     HighlightContext_SetADSFade( highlight, false )
  449.     HighlightContext_SetAfterPostProcess( highlight, true )
  450.  
  451.     highlight = RegisterHighlight( "sp_friendly_hero" )
  452.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  453.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_CUSTOM_COLOR )
  454.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  455.     HighlightContext_SetRadius( highlight, 3 )
  456.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  457.     HighlightContext_SetADSFade( highlight, false )
  458.     HighlightContext_SetAfterPostProcess( highlight, false )
  459.     HighlightContext_SetFarFadeDistance( highlight, 10000.0 )
  460.  
  461.                    
  462.         highlight = RegisterHighlight( "loot_marvin" )
  463.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  464.         HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_CUSTOM_COLOR )
  465.         HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  466.         HighlightContext_SetRadius( highlight, 3 )
  467.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  468.         HighlightContext_SetADSFade( highlight, false )
  469.         HighlightContext_SetAfterPostProcess( highlight, false )
  470.         HighlightContext_SetFarFadeDistance( highlight, 5000.0 )
  471.        
  472.  
  473.     highlight = RegisterHighlight( "sp_friendly_hero_force_on" )
  474.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  475.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_CUSTOM_COLOR )
  476.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  477.     HighlightContext_SetRadius( highlight, 3 )
  478.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.FORCE_ON )
  479.     HighlightContext_SetADSFade( highlight, false )
  480.     HighlightContext_SetAfterPostProcess( highlight, false )
  481.     HighlightContext_SetFarFadeDistance( highlight, 10000.0 )
  482.  
  483.     highlight = RegisterHighlight( "sp_friendly_pilot" )
  484.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OBEY_Z )
  485.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  486.     HighlightContext_SetRadius( highlight, 4 )
  487.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  488.     HighlightContext_SetADSFade( highlight, false )
  489.     HighlightContext_SetAfterPostProcess( highlight, false )
  490.     HighlightContext_SetFarFadeDistance( highlight, 5000.0 )
  491.  
  492.     highlight = RegisterHighlight( "sp_objective_outline" )
  493.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_OBJECTIVE )                                
  494.                                                                      
  495.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_OBJECTIVE )
  496.     HighlightContext_SetRadius( highlight, 2 )
  497.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  498.     HighlightContext_SetADSFade( highlight, false )
  499.     HighlightContext_SetAfterPostProcess( highlight, false )
  500.     HighlightContext_SetFarFadeDistance( highlight, 999999.0 )
  501.  
  502.     highlight = RegisterHighlight( "sp_objective_entity" )
  503.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_OBJECTIVE )                                
  504.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_OBJECTIVE )
  505.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_OBJECTIVE )
  506.     HighlightContext_SetRadius( highlight, 2 )
  507.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  508.     HighlightContext_SetADSFade( highlight, false )
  509.     HighlightContext_SetAfterPostProcess( highlight, false )
  510.     HighlightContext_SetFarFadeDistance( highlight, 999999.0 )
  511.  
  512.     highlight = RegisterHighlight( "survival_item_weapon" )
  513.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_WEAPON_PICKUP )
  514.     HighlightContext_SetParam( highlight, 0, <.55, .55, .5> )                                                
  515.     HighlightContext_SetRadius( highlight, 8 )
  516.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_NONE )
  517.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  518.     HighlightContext_SetADSFade( highlight, false )
  519.     HighlightContext_SetFarFadeDistance( highlight, 3000.0 )
  520.  
  521.     highlight = RegisterHighlight( "survival_item_heirloom_loba" )
  522.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_SCANNED )
  523.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_SCANNED )
  524.     HighlightContext_SetParam( highlight, 0, <0.98, 0.78, 0> )            
  525.     HighlightContext_SetParam( highlight, 1, <.55, .55, .5> )
  526.     HighlightContext_SetRadius( highlight, 2 )
  527.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_SCANNED )
  528.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_SCANNED )
  529.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  530.     HighlightContext_SetADSFade( highlight, false )
  531.     HighlightContext_SetFarFadeDistance( highlight, GetEyeForQualityRadius() )
  532.     highlight.colorID = COLORID_LOOT_TIER5
  533.  
  534.     highlight = RegisterHighlight( "survival_item_legendary_loba" )
  535.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_SCANNED )
  536.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_SCANNED )
  537.     HighlightContext_SetParam( highlight, 0, <0.98, 0.78, 0> )
  538.     HighlightContext_SetParam( highlight, 1, <.55, .55, .5> )
  539.     HighlightContext_SetRadius( highlight, 2 )
  540.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_SCANNED )
  541.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_SCANNED )
  542.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  543.     HighlightContext_SetADSFade( highlight, false )
  544.     HighlightContext_SetFarFadeDistance( highlight, GetEyeForQualityRadius() )
  545.     highlight.colorID = COLORID_LOOT_TIER4
  546.  
  547.     highlight = RegisterHighlight( "survival_item_epic_loba" )
  548.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_SCANNED )
  549.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_SCANNED )
  550.     HighlightContext_SetParam( highlight, 0, <0.34, 0, 0.7> )
  551.     HighlightContext_SetParam( highlight, 1, <.55, .55, .5> )
  552.     HighlightContext_SetRadius( highlight, 2 )
  553.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_SCANNED )
  554.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_SCANNED )
  555.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  556.     HighlightContext_SetADSFade( highlight, false )
  557.     HighlightContext_SetFarFadeDistance( highlight, GetEyeForQualityRadius() )
  558.     highlight.colorID = COLORID_LOOT_TIER3
  559.  
  560.                  
  561.                                                              
  562.                                                                          
  563.                                                                                
  564.                                                          
  565.                                                          
  566.                                            
  567.                                                                    
  568.                                                                          
  569.                                                                      
  570.                                                
  571.                                                                            
  572.                                        
  573.  
  574.                                                                
  575.                                                                          
  576.                                                                                
  577.                                                          
  578.                                                          
  579.                                            
  580.                                                                    
  581.                                                                          
  582.                                                                      
  583.                                                
  584.                                                                            
  585.                                        
  586.        
  587.  
  588.                  
  589.                                                          
  590.                                                                                  
  591.                                                                          
  592.                                                            
  593.                                            
  594.                                                                            
  595.                                                                      
  596.                                                  
  597.                                                          
  598.        
  599.  
  600.     highlight = RegisterHighlight( "survival_item_common" )
  601.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_DEFAULT )
  602.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_FOCUSED )
  603.     HighlightContext_SetParam( highlight, 0, <.55, .55, .5> )
  604.     HighlightContext_SetParam( highlight, 1, <1.0, 0, 0> )
  605.     HighlightContext_SetRadius( highlight, 1 )
  606.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_DEFAULT )
  607.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_FOCUSED )
  608.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  609.     HighlightContext_SetADSFade( highlight, false )
  610.     HighlightContext_SetFarFadeDistance( highlight, 3000.0 )
  611.     highlight.colorID = COLORID_LOOT_TIER1
  612.  
  613.     highlight = RegisterHighlight( "survival_item_rare" )
  614.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_DEFAULT )
  615.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_FOCUSED )
  616.     HighlightContext_SetParam( highlight, 0, <0.11, 0.56, 1> )
  617.     HighlightContext_SetParam( highlight, 1, <1.0, 0, 0> )
  618.     HighlightContext_SetRadius( highlight, 1 )
  619.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_DEFAULT )
  620.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_FOCUSED )
  621.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  622.     HighlightContext_SetADSFade( highlight, false )
  623.     HighlightContext_SetFarFadeDistance( highlight, 3000.0 )
  624.     highlight.colorID = COLORID_LOOT_TIER2
  625.  
  626.     highlight = RegisterHighlight( "survival_item_epic" )
  627.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_DEFAULT )
  628.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_FOCUSED )
  629.     HighlightContext_SetParam( highlight, 0, <0.34, 0, 0.7> )
  630.     HighlightContext_SetParam( highlight, 1, <1.0, 0, 0> )
  631.     HighlightContext_SetRadius( highlight, 1 )
  632.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_DEFAULT )
  633.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_FOCUSED )
  634.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  635.     HighlightContext_SetADSFade( highlight, false )
  636.     HighlightContext_SetFarFadeDistance( highlight, 3000.0 )
  637.     highlight.colorID = COLORID_LOOT_TIER3
  638.  
  639.     highlight = RegisterHighlight( "survival_item_legendary" )
  640.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_DEFAULT )
  641.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_FOCUSED )
  642.     HighlightContext_SetParam( highlight, 0, <0.98, 0.78, 0> )            
  643.     HighlightContext_SetParam( highlight, 1, <1.0, 0, 0> )
  644.     HighlightContext_SetRadius( highlight, 1 )
  645.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_DEFAULT )
  646.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_FOCUSED )
  647.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  648.     HighlightContext_SetADSFade( highlight, false )
  649.     HighlightContext_SetFarFadeDistance( highlight, 3000.0 )
  650.     highlight.colorID = COLORID_LOOT_TIER4
  651.  
  652.     highlight = RegisterHighlight( "survival_item_heirloom" )
  653.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_DEFAULT )
  654.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_FOCUSED )
  655.     HighlightContext_SetParam( highlight, 0, <1.0, 0.306, 0.114> )            
  656.     HighlightContext_SetParam( highlight, 1, <1.0, 0, 0> )
  657.     HighlightContext_SetRadius( highlight, 1 )
  658.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_DEFAULT )
  659.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_FOCUSED )
  660.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  661.     HighlightContext_SetADSFade( highlight, false )
  662.     HighlightContext_SetFarFadeDistance( highlight, 3000.0 )
  663.     highlight.colorID = COLORID_LOOT_TIER5
  664.  
  665.     highlight = RegisterHighlight( "survival_item_common_longerHighlightDist" )
  666.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_DEFAULT )
  667.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_FOCUSED )
  668.     HighlightContext_SetParam( highlight, 0, <.55, .55, .5> )
  669.     HighlightContext_SetParam( highlight, 1, <1.0, 0, 0> )
  670.     HighlightContext_SetRadius( highlight, 1 )
  671.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_DEFAULT )
  672.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_FOCUSED )
  673.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  674.     HighlightContext_SetADSFade( highlight, false )
  675.     HighlightContext_SetFarFadeDistance( highlight, 10000.0 )
  676.     highlight.colorID = COLORID_LOOT_TIER1
  677.  
  678.     highlight = RegisterHighlight( "survival_item_rare_longerHighlightDist" )
  679.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_DEFAULT )
  680.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_FOCUSED )
  681.     HighlightContext_SetParam( highlight, 0, <0.11, 0.56, 1> )
  682.     HighlightContext_SetParam( highlight, 1, <1.0, 0, 0> )
  683.     HighlightContext_SetRadius( highlight, 1 )
  684.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_DEFAULT )
  685.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_FOCUSED )
  686.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  687.     HighlightContext_SetADSFade( highlight, false )
  688.     HighlightContext_SetFarFadeDistance( highlight, 10000.0 )
  689.     highlight.colorID = COLORID_LOOT_TIER2
  690.  
  691.     highlight = RegisterHighlight( "survival_item_epic_longerHighlightDist" )
  692.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_DEFAULT )
  693.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_FOCUSED )
  694.     HighlightContext_SetParam( highlight, 0, <0.34, 0, 0.7> )
  695.     HighlightContext_SetParam( highlight, 1, <1.0, 0, 0> )
  696.     HighlightContext_SetRadius( highlight, 1 )
  697.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_DEFAULT )
  698.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_FOCUSED )
  699.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  700.     HighlightContext_SetADSFade( highlight, false )
  701.     HighlightContext_SetFarFadeDistance( highlight, 10000.0 )
  702.     highlight.colorID = COLORID_LOOT_TIER3
  703.  
  704.     highlight = RegisterHighlight( "survival_item_legendary_longerHighlightDist" )
  705.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_DEFAULT )
  706.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_FOCUSED )
  707.     HighlightContext_SetParam( highlight, 0, <0.98, 0.78, 0> )            
  708.     HighlightContext_SetParam( highlight, 1, <1.0, 0, 0> )
  709.     HighlightContext_SetRadius( highlight, 1 )
  710.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_DEFAULT )
  711.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_FOCUSED )
  712.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  713.     HighlightContext_SetADSFade( highlight, false )
  714.     HighlightContext_SetFarFadeDistance( highlight, 10000.0 )
  715.     highlight.colorID = COLORID_LOOT_TIER4
  716.  
  717.     highlight = RegisterHighlight( "survival_item_heirloom_longerHighlightDist" )
  718.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_LOOT_DEFAULT )
  719.     HighlightContext_SetOutlineFocused( highlight, HIGHLIGHT_OUTLINE_LOOT_FOCUSED )
  720.     HighlightContext_SetParam( highlight, 0, <1.0, 0.306, 0.114> )            
  721.     HighlightContext_SetParam( highlight, 1, <1.0, 0, 0> )
  722.     HighlightContext_SetRadius( highlight, 1 )
  723.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_LOOT_DEFAULT )
  724.     HighlightContext_SetFillFocused( highlight, HIGHLIGHT_FILL_LOOT_FOCUSED )
  725.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  726.     HighlightContext_SetADSFade( highlight, false )
  727.     HighlightContext_SetFarFadeDistance( highlight, 10000.0 )
  728.     highlight.colorID = COLORID_LOOT_TIER5
  729.  
  730.     highlight = RegisterHighlight( "survival_item_ammo_a" )
  731.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED_NOSCANLINES )
  732.     HighlightContext_SetParam( highlight, 0, <0.1, 0.1, 0.1> )                
  733.                                                                                  
  734.     HighlightContext_SetRadius( highlight, 1 )                          
  735.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_NONE )
  736.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  737.     HighlightContext_SetADSFade( highlight, false )
  738.     HighlightContext_SetFarFadeDistance( highlight, 3000.0 )
  739.  
  740.     highlight = RegisterHighlight( "survival_item_ammo_b" )
  741.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED_NOSCANLINES )
  742.     HighlightContext_SetParam( highlight, 0, <0.1, 0.1, 0.1> )                
  743.                                                                  
  744.     HighlightContext_SetRadius( highlight, 1 )
  745.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_NONE )
  746.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  747.     HighlightContext_SetADSFade( highlight, false )
  748.     HighlightContext_SetFarFadeDistance( highlight, 3000.0 )
  749.  
  750.     highlight = RegisterHighlight( "survival_item_ammo_shotgun" )
  751.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED_NOSCANLINES )
  752.     HighlightContext_SetParam( highlight, 0, <0.1, 0.1, 0.1> )                
  753.                                                                    
  754.     HighlightContext_SetRadius( highlight, 1 )
  755.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_NONE )
  756.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  757.     HighlightContext_SetADSFade( highlight, false )
  758.     HighlightContext_SetFarFadeDistance( highlight, 3000.0 )
  759.  
  760.     highlight = RegisterHighlight( "survival_item_ammo_energy" )
  761.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED_NOSCANLINES )
  762.     HighlightContext_SetParam( highlight, 0, <0.1, 0.1, 0.1> )                
  763.                                                                  
  764.     HighlightContext_SetRadius( highlight, 1 )
  765.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_NONE )
  766.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  767.     HighlightContext_SetADSFade( highlight, false )
  768.     HighlightContext_SetFarFadeDistance( highlight, 3000.0 )
  769.  
  770.                      
  771.                                                                  
  772.                                                                                                
  773.                                                                              
  774.                                                                    
  775.                                            
  776.                                                            
  777.                                                                  
  778.                                                  
  779.                                                          
  780.        
  781.  
  782.     highlight = RegisterHighlight( "survival_item_ammo_sniper" )
  783.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED_NOSCANLINES )
  784.     HighlightContext_SetParam( highlight, 0, <0.1, 0.1, 0.1> )                
  785.                                                                  
  786.     HighlightContext_SetRadius( highlight, 1 )
  787.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_NONE )
  788.     HighlightContext_SetDrawFunc( highlight, lootHighlightDrawType )
  789.     HighlightContext_SetADSFade( highlight, false )
  790.     HighlightContext_SetFarFadeDistance( highlight, 3000.0 )
  791.  
  792.     highlight = RegisterHighlight( "survival_friendly_skydiving" )
  793.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_OBJECTIVE )                                      
  794.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_OBJECTIVE )                      
  795.     HighlightContext_SetParam( highlight, 0, <0, 0.47, 1.96> )                                                                  
  796.     HighlightContext_SetRadius( highlight, 2 )
  797.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )                              
  798.     HighlightContext_SetADSFade( highlight, false )
  799.     HighlightContext_SetAfterPostProcess( highlight, true )
  800.     HighlightContext_SetFarFadeDistance( highlight, 999999.0 )
  801.     HighlightContext_SetNearFadeDistance( highlight, 2048.0 )
  802.  
  803.     highlight = RegisterHighlight( "survival_enemy_skydiving" )
  804.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_OBJECTIVE )
  805.                                                                      
  806.     HighlightContext_SetParam( highlight, 0, <0.7, 0.2, 0.2> )
  807.     HighlightContext_SetRadius( highlight, 1.0 )
  808.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.LOS_LINE )
  809.     HighlightContext_SetADSFade( highlight, false )
  810.     HighlightContext_SetAfterPostProcess( highlight, false )
  811.     HighlightContext_SetFarFadeDistance( highlight, 999999.0 )
  812.     HighlightContext_SetNearFadeDistance( highlight, 0.0 )
  813.  
  814.     highlight = RegisterHighlight( "staging_gun_range_target_appear" )
  815.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_MENU_MODEL_REVEAL )
  816.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_MENU_MODEL_REVEAL_TSAA )
  817.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  818.     HighlightContext_SetParam( highlight, 1, <2000.0, 0, 0> )
  819.     HighlightContext_SetRadius( highlight, 1 )
  820.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ENT_APPEAR_EFFECT )
  821.     HighlightContext_SetADSFade( highlight, false )
  822.                                                              
  823.     HighlightContext_SetFarFadeDistance( highlight, 999999.0 )
  824.     HighlightContext_SetNearFadeDistance( highlight, 0.0 )
  825.  
  826.                  
  827.         highlight = RegisterHighlight( "survival_evac_ship" )
  828.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  829.         HighlightContext_SetRadius( highlight, 5 )
  830.         HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  831.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  832.         HighlightContext_SetADSFade( highlight, false )
  833.         HighlightContext_SetFarFadeDistance( highlight, 999999.0 )
  834.         HighlightContext_SetNearFadeDistance( highlight, 256.0 )
  835.        
  836.  
  837.                      
  838.         highlight = RegisterHighlight( "hover_vehicle_highlight" )
  839.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  840.         HighlightContext_SetRadius( highlight, 5 )
  841.         HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  842.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  843.         HighlightContext_SetADSFade( highlight, false )
  844.         HighlightContext_SetFarFadeDistance( highlight, 7000.0 )
  845.         HighlightContext_SetNearFadeDistance( highlight, 256.0 )
  846.                            
  847.  
  848.     highlight = RegisterHighlight( "crypto_camera_friendly" )
  849.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CRYPTO_DRONE )                                      
  850.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_CRYPTO_DRONE )                      
  851.     HighlightContext_SetParam( highlight, 0, <0.64, 0.86, 0.69> )                                                                  
  852.     HighlightContext_SetRadius( highlight, 2 )
  853.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )                              
  854.     HighlightContext_SetADSFade( highlight, false )
  855.     HighlightContext_SetAfterPostProcess( highlight, false )
  856.     HighlightContext_SetFarFadeDistance( highlight, 999999.0 )
  857.     HighlightContext_SetNearFadeDistance( highlight, 0.0 )
  858.  
  859.     if ( IsPVEMode() )
  860.     {
  861.         for ( int idx = 0; idx < SQUAD_TEAM_HIGHLIGHTS.len(); ++idx )
  862.         {
  863.             highlight = RegisterHighlight( SQUAD_TEAM_HIGHLIGHTS[idx] )
  864.             HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  865.             HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_CUSTOM_COLOR )
  866.             HighlightContext_SetParam( highlight, 0, SQUAD_TEAM_COLORVECS[idx] )
  867.             HighlightContext_SetRadius( highlight, 3 )
  868.             HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  869.             HighlightContext_SetADSFade( highlight, false )
  870.             HighlightContext_SetAfterPostProcess( highlight, false )
  871.             HighlightContext_SetFarFadeDistance( highlight, 10000.0 )
  872.         }
  873.     }
  874.  
  875.     highlight = RegisterHighlight( "survival" )
  876.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  877.     HighlightContext_SetRadius( highlight, 1 )
  878.                                                                  
  879.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_ENEMY )
  880.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  881.     HighlightContext_SetADSFade( highlight, false )
  882.     HighlightContext_SetFarFadeDistance( highlight, 2.0 )
  883.  
  884.     highlight = RegisterHighlight( "dev_emote_hostile" )
  885.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_SONAR )
  886.     HighlightContext_SetRadius( highlight, 5 )
  887.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_SONAR )
  888.     HighlightContext_SetParam( highlight, 0, <1, 0, 0> )
  889.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.LOS )
  890.     HighlightContext_SetADSFade( highlight, false )
  891.  
  892.     highlight = RegisterHighlight( "dev_emote_friendly" )
  893.     HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_INTERACT_BUTTON )
  894.     HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_INTERACT_BUTTON )
  895.     HighlightContext_SetRadius( highlight, 2 )
  896.     HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_INTERACT )
  897.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.LOS )
  898.     HighlightContext_SetADSFade( highlight, false )
  899.  
  900.                            
  901.         highlight = RegisterHighlight( "privatematch_observer_enemy" )
  902.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_OCCLUDED_NOSCANLINES )
  903.         HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_OBSERVER )
  904.         HighlightContext_SetParam( highlight, 0, HIGHLIGHT_FILL_COLOR_OBSERVER_ENEMY )
  905.         HighlightContext_SetRadius( highlight, 2 )
  906.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.OCCLUDED )
  907.         HighlightContext_SetADSFade( highlight, false )
  908.         HighlightContext_SetAfterPostProcess( highlight, false )
  909.         HighlightContext_SetFarFadeDistance( highlight, 10000.0 )
  910.                                
  911.  
  912.                          
  913.         highlight = RegisterHighlight( "enemy_control_mode" )
  914.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  915.         HighlightContext_SetFill( highlight, HIGHLIGHT_FILL_EMPTY_OCCLUDED )
  916.         HighlightContext_SetRadius( highlight, 5)
  917.         HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_ENEMY )
  918.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.LOS )
  919.         HighlightContext_SetADSFade( highlight, false )
  920.         HighlightContext_SetFarFadeDistance( highlight, HIGHLIGHT_ENEMY_CONTROLMODE_FAR_FADEDIST )
  921.  
  922.                      
  923.         highlight = RegisterHighlight( "vehicle_friendly_control_mode" )
  924.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  925.         HighlightContext_SetRadius( highlight, 5 )
  926.         HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  927.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  928.         HighlightContext_SetADSFade( highlight, false )
  929.         HighlightContext_SetFarFadeDistance( highlight, HIGHLIGHT_ENEMY_CONTROLMODE_FAR_FADEDIST )
  930.  
  931.         highlight = RegisterHighlight( "vehicle_enemy_control_mode" )
  932.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  933.         HighlightContext_SetRadius( highlight, 5 )
  934.         HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_ENEMY )
  935.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.LOS )
  936.         HighlightContext_SetADSFade( highlight, false )
  937.         HighlightContext_SetFarFadeDistance( highlight, HIGHLIGHT_ENEMY_CONTROLMODE_FAR_FADEDIST )
  938.                                                                  
  939.                            
  940.  
  941.         highlight = RegisterHighlight( "dropship_friendly_control_mode" )
  942.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  943.         HighlightContext_SetRadius( highlight, 5 )
  944.         HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_FRIENDLY )
  945.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  946.         HighlightContext_SetADSFade( highlight, false )
  947.         HighlightContext_SetFarFadeDistance( highlight, HIGHLIGHT_ENEMY_CONTROLMODE_FAR_FADEDIST )
  948.                                                                  
  949.  
  950.         highlight = RegisterHighlight( "dropship_enemy_control_mode" )
  951.         HighlightContext_SetOutline( highlight, HIGHLIGHT_OUTLINE_CUSTOM_COLOR )
  952.         HighlightContext_SetRadius( highlight, 5 )
  953.         HighlightContext_SetParam( highlight, 0, HIGHLIGHT_COLOR_ENEMY )
  954.         HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALWAYS )
  955.         HighlightContext_SetADSFade( highlight, false )
  956.         HighlightContext_SetFarFadeDistance( highlight, HIGHLIGHT_ENEMY_CONTROLMODE_FAR_FADEDIST )
  957.                                                                  
  958.                                
  959.  
  960.                        
  961.                                                  
  962.                                                                          
  963.                                                                    
  964.                                            
  965.                                                                  
  966.                                                                    
  967.                                                  
  968.                                                                                            
  969.                              
  970.  
  971.      
  972.      
  973.      
  974.  
  975.     Highlight_EndRegisteringHighlights()
  976.  
  977.     #if CLIENT
  978.         AddCallback_OnPlayerLifeStateChanged( Callback_UpdateHighlight )
  979.         AddCallback_PlayerClassChanged( ClHighlight_ClassChanged )
  980.         AddCallback_OnSettingsUpdated( OnSettingsUpdated )
  981.         file.colorblindMode = GetConVarInt( "colorblind_mode" )
  982.     #endif
  983.  
  984.     #if SERVER
  985.                                                                        
  986.                                                                        
  987.                                                    
  988.     #endif
  989. }
  990.  
  991.  
  992. void function Highlight_BeginRegisteringHighlights()
  993. {
  994.     file.registeringHighlights = true
  995. }
  996.  
  997.  
  998. void function Highlight_EndRegisteringHighlights()
  999. {
  1000.     file.registeringHighlights = false
  1001. }
  1002.  
  1003.  
  1004. void function InitHighlightSettings( entity ent )
  1005. {
  1006. }
  1007.  
  1008. #if SERVER
  1009.                                                              
  1010.  
  1011.                                            
  1012.                                            
  1013.                                        
  1014.  
  1015.                              
  1016.  
  1017.                                            
  1018.      
  1019.                                                                                                  
  1020.                                                                                          
  1021.            
  1022.                                                                                          
  1023.      
  1024.        
  1025.      
  1026.                                                                                                  
  1027.                                                                                              
  1028.            
  1029.                                                                                              
  1030.      
  1031.  
  1032.  
  1033.                                                                              
  1034.  
  1035.                                                                              
  1036.                            
  1037.      
  1038.                                                
  1039.              
  1040.      
  1041.  
  1042.                                        
  1043.  
  1044.                                      
  1045.      
  1046.                                                    
  1047.      
  1048.  
  1049.  
  1050.                                                          
  1051.  
  1052.            
  1053.            
  1054.                              
  1055.              
  1056.  
  1057.                                            
  1058.  
  1059. #endif
  1060.  
  1061. HighlightContext function RegisterHighlight( string assetName )
  1062. {
  1063.     Assert( file.registeringHighlights )
  1064.  
  1065.                                                                                                                              
  1066.     Assert( shGlobal.highlight.len() <= HIGHLIGHT_STATE_MAX_VALUE, "Too many highlights registered (max " + HIGHLIGHT_STATE_MAX_VALUE + ")" )
  1067.  
  1068.     HighlightContext context
  1069.     context.name = assetName
  1070.     context.highlightId = shGlobal.highlight.len()
  1071.     shGlobal.highlight[assetName] <- context
  1072.  
  1073.     return shGlobal.highlight[assetName]
  1074. }
  1075.  
  1076.  
  1077. HighlightContext function RegisterCopyOfHighlight( string assetName, string assetToCopy )
  1078. {
  1079.     HighlightContext context = clone GetHighlight( assetToCopy )
  1080.     context.name = assetName
  1081.     context.highlightId = shGlobal.highlight.len()
  1082.     shGlobal.highlight[assetName] <- context
  1083.  
  1084.     return shGlobal.highlight[assetName]
  1085. }
  1086.  
  1087.  
  1088. HighlightContext function GetHighlight( string assetName )
  1089. {
  1090.     return shGlobal.highlight[assetName]
  1091. }
  1092.  
  1093.  
  1094. void function HighlightContext_SetFill( HighlightContext highlight, int insideSlot )
  1095. {
  1096.     highlight.insideSlot = insideSlot
  1097. }
  1098.  
  1099.  
  1100. void function HighlightContext_SetOutline( HighlightContext highlight, int outlineSlot )
  1101. {
  1102.     highlight.outsideSlot = outlineSlot
  1103. }
  1104.  
  1105.  
  1106. void function HighlightContext_SetFillFocused( HighlightContext highlight, int insideSlot )
  1107. {
  1108.     highlight.insideSlotFocused = insideSlot
  1109. }
  1110.  
  1111.  
  1112. void function HighlightContext_SetOutlineFocused( HighlightContext highlight, int outlineSlot )
  1113. {
  1114.     highlight.outsideSlotFocused = outlineSlot
  1115. }
  1116.  
  1117.  
  1118. void function HighlightContext_SetDrawFunc( HighlightContext highlight, int drawFuncId )
  1119. {
  1120.     Assert( drawFuncId >= 0 && drawFuncId < eHighlightDrawFunc.LAST_DRAW_FUNC )
  1121.  
  1122.     highlight.drawFuncId = drawFuncId
  1123. }
  1124.  
  1125.  
  1126. void function HighlightContext_SetRadius( HighlightContext highlight, float outlineRadius )
  1127. {
  1128.     highlight.outlineRadius = outlineRadius
  1129. }
  1130.  
  1131.  
  1132. void function HighlightContext_SetParam( HighlightContext highlight, int paramIndex, vector paramVec )
  1133. {
  1134.     highlight.paramVecs[paramIndex] = paramVec
  1135. }
  1136.  
  1137.  
  1138. void function HighlightContext_SetEntityVisible( HighlightContext highlight, bool entityVisible )
  1139. {
  1140.     highlight.entityVisible = entityVisible
  1141. }
  1142.  
  1143.  
  1144. void function HighlightContext_SetNearFadeDistance( HighlightContext highlight, float nearDist )
  1145. {
  1146.     highlight.nearDist = nearDist
  1147. }
  1148.  
  1149.  
  1150. void function HighlightContext_SetFarFadeDistance( HighlightContext highlight, float farDist )
  1151. {
  1152.     highlight.farDist = farDist
  1153. }
  1154.  
  1155.  
  1156. void function HighlightContext_SetFarFadeInDistance( HighlightContext highlight, float farFadeInDist )
  1157. {
  1158.     highlight.farFadeInDist = farFadeInDist
  1159. }
  1160.  
  1161.  
  1162. void function HighlightContext_SetRequiresNotFullHealth( HighlightContext highlight )
  1163. {
  1164.     highlight.requiresNotFullHealth = true
  1165. }
  1166.  
  1167.  
  1168. void function HighlightContext_SetRequiresPlayerCanPickupOrdnance( HighlightContext highlight )
  1169. {
  1170.     highlight.requiresCanPickupOrdnance = true
  1171. }
  1172.  
  1173.  
  1174. void function HighlightContext_SetRequiresPlayerCanPickupClip( HighlightContext highlight )
  1175. {
  1176.     highlight.requiresCanPickupClip = true
  1177. }
  1178.  
  1179.  
  1180. void function HighlightContext_SetRequiresPilot( HighlightContext highlight )
  1181. {
  1182.     highlight.requiresClass = REQUIRES_PILOT
  1183. }
  1184.  
  1185.  
  1186. void function HighlightContext_SetRequiresTitan( HighlightContext highlight )
  1187. {
  1188.     highlight.requiresClass = REQUIRES_TITAN
  1189. }
  1190.  
  1191.  
  1192. void function HighlightContext_SetRequiresOwnedByLocalPlayer( HighlightContext highlight )
  1193. {
  1194.     highlight.requiresOwnedByLocalPlayer = true
  1195. }
  1196.  
  1197.  
  1198. void function HighlightContext_SetRequiresVisibleWeakPoints( HighlightContext highlight )
  1199. {
  1200.     highlight.requiresWeakPointsVisible = true
  1201. }
  1202.  
  1203.  
  1204. void function HighlightContext_SetADSFade( HighlightContext highlight, bool value )
  1205. {
  1206.     highlight.adsFade = value
  1207. }
  1208.  
  1209.  
  1210. void function HighlightContext_SetDisableDeathFade( HighlightContext highlight, bool value )
  1211. {
  1212.     highlight.disableDeathFade = value
  1213. }
  1214.  
  1215.  
  1216. void function HighlightContext_SetAfterPostProcess( HighlightContext highlight, bool value )
  1217. {
  1218.     highlight.afterPostProcess = value
  1219. }
  1220.  
  1221. void function HighlightContext_SetTeamAgnostic( HighlightContext highlight, bool value )
  1222. {
  1223.     highlight.teamAgnostic = value
  1224. }
  1225.  
  1226.  
  1227. void function Highlight_SetFriendlyHighlight( entity ent, string assetName )
  1228. {
  1229.     HighlightContext highlight = GetHighlight( assetName )
  1230.     __SetEntityContextHighlight( ent, HIGHLIGHT_CONTEXT_FRIENDLY, highlight )
  1231. }
  1232.  
  1233.  
  1234. void function Highlight_SetEnemyHighlight( entity ent, string assetName )
  1235. {
  1236.     HighlightContext highlight = GetHighlight( assetName )
  1237.     __SetEntityContextHighlight( ent, HIGHLIGHT_CONTEXT_ENEMY, highlight )
  1238.     ent.e.enemyHighlight = assetName
  1239. }
  1240.  
  1241.  
  1242. void function Highlight_SetEnemyHighlightWithParam0( entity ent, string assetName, vector paramVec0 )
  1243. {
  1244.     Highlight_SetEnemyHighlight( ent, assetName )
  1245.     ent.Highlight_SetParam( HIGHLIGHT_CONTEXT_ENEMY, 0, paramVec0 )
  1246. }
  1247.  
  1248.  
  1249. void function Highlight_SetEnemyHighlightWithParam1( entity ent, string assetName, vector paramVec1 )
  1250. {
  1251.     Highlight_SetEnemyHighlight( ent, assetName )
  1252.     ent.Highlight_SetParam( HIGHLIGHT_CONTEXT_ENEMY, 1, paramVec1 )
  1253. }
  1254.  
  1255.  
  1256. void function Highlight_SetEnemyHighlightWithParams( entity ent, string assetName, vector paramVec0, vector paramVec1 )
  1257. {
  1258.     Highlight_SetEnemyHighlight( ent, assetName )
  1259.     ent.Highlight_SetParam( HIGHLIGHT_CONTEXT_ENEMY, 0, paramVec0 )
  1260.     ent.Highlight_SetParam( HIGHLIGHT_CONTEXT_ENEMY, 1, paramVec1 )
  1261. }
  1262.  
  1263.  
  1264. void function Highlight_SetNeutralHighlight( entity ent, string assetName )
  1265. {
  1266.     HighlightContext highlight = GetHighlight( assetName )
  1267.     __SetEntityContextHighlight( ent, HIGHLIGHT_CONTEXT_NEUTRAL, highlight )
  1268. }
  1269.  
  1270.  
  1271. void function Highlight_SetOwnedHighlight( entity ent, string assetName )
  1272. {
  1273.     HighlightContext highlight = GetHighlight( assetName )
  1274.     __SetEntityContextHighlight( ent, HIGHLIGHT_CONTEXT_OWNED, highlight )
  1275. }
  1276.  
  1277.  
  1278. void function Highlight_SetSonarHighlight( entity ent, string assetName )
  1279. {
  1280.     HighlightContext highlight = GetHighlight( assetName )
  1281.     __SetEntityContextHighlight( ent, HIGHLIGHT_CONTEXT_SONAR, highlight )
  1282. }
  1283.  
  1284.  
  1285. void function Highlight_SetSonarHighlightWithParam0( entity ent, string assetName, vector paramVec0 )
  1286. {
  1287.     Highlight_SetSonarHighlight( ent, assetName )
  1288.     ent.Highlight_SetParam( HIGHLIGHT_CONTEXT_SONAR, 0, paramVec0 )
  1289. }
  1290.  
  1291.  
  1292. void function Highlight_SetSonarHighlightWithParam1( entity ent, string assetName, vector paramVec1 )
  1293. {
  1294.     Highlight_SetSonarHighlight( ent, assetName )
  1295.     ent.Highlight_SetParam( HIGHLIGHT_CONTEXT_SONAR, 1, paramVec1 )
  1296. }
  1297.  
  1298.  
  1299. void function Highlight_SetSonarHighlightOrigin( entity ent, vector origin )
  1300. {
  1301.     ent.Highlight_SetParam( HIGHLIGHT_CONTEXT_SONAR, 1, origin )
  1302. }
  1303.  
  1304.  
  1305. void function Highlight_SetSonarExecutionHighlightOrigin( entity ent, vector origin, vector times )
  1306. {
  1307.     ent.Highlight_SetParam( HIGHLIGHT_CONTEXT_ENEMY, 1, origin )
  1308.     ent.Highlight_SetParam( HIGHLIGHT_CONTEXT_ENEMY, 0, times )
  1309. }
  1310.  
  1311.  
  1312. void function Highlight_SetDeathRecapHighlight( entity ent, string assetName )
  1313. {
  1314.     HighlightContext highlight = GetHighlight( assetName )
  1315.     __SetEntityContextHighlight( ent, HIGHLIGHT_CONTEXT_DEATH_RECAP, highlight )
  1316. }
  1317.  
  1318.  
  1319. void function Highlight_SetCausticThreatHighlight( entity ent, string assetName )
  1320. {
  1321.     HighlightContext highlight = GetHighlight( assetName )
  1322.     __SetEntityContextHighlight( ent, HIGHLIGHT_CHARACTER_SPECIAL_HIGHLIGHT, highlight )
  1323. }
  1324.  
  1325.  
  1326. void function Highlight_SetNovaBlackholeHighlight( entity ent, string assetName )
  1327. {
  1328.     HighlightContext highlight = GetHighlight( assetName )
  1329.     __SetEntityContextHighlight( ent, HIGHLIGHT_CHARACTER_SPECIAL_HIGHLIGHT_2, highlight )
  1330. }
  1331.                        
  1332. void function Highlight_SetFuseMortarHighlight( entity ent, string assetName )
  1333. {
  1334.     HighlightContext highlight = GetHighlight( assetName )
  1335.     __SetEntityContextHighlight( ent, HIGHLIGHT_CONTEXT_MOVEMENT_REVEALED, highlight )
  1336. }
  1337.      
  1338.  
  1339.              
  1340. void function Highlight_SetMaggieThreatHighlight( entity ent, string assetName )
  1341. {
  1342.     HighlightContext highlight = GetHighlight( assetName )
  1343.     __SetEntityContextHighlight( ent, HIGHLIGHT_CONTEXT_MOVEMENT_REVEALED, highlight )
  1344. }
  1345.      
  1346.  
  1347.              
  1348.                                                                                    
  1349.  
  1350.                                                        
  1351.                                                                                    
  1352.  
  1353.      
  1354.  
  1355. void function Highlight_SetPrivateMatchObserverHighlight( entity ent, string assetName )
  1356. {
  1357.     HighlightContext highlight = GetHighlight( assetName )
  1358.     if ( ent.IsPlayer() )
  1359.     {
  1360.         highlight.paramVecs[0] = GetSkydiveSmokeColorForTeam( ent.GetTeam() ) / 255.0
  1361.     }
  1362.     __SetEntityContextHighlight( ent, HIGHLIGHT_CONTEXT_PRIVATE_MATCH_OBSERVER, highlight )
  1363. }
  1364.  
  1365.  
  1366. void function Highlight_ClearPrivateMatchObserverHighlight( entity ent )
  1367. {
  1368.     ent.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_PRIVATE_MATCH_OBSERVER, 0, true, 0, 2, 0, false )
  1369. }
  1370.  
  1371.  
  1372. void function Highlight_ClearFriendlyHighlight( entity ent )
  1373. {
  1374.     ent.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_FRIENDLY, 0, true, 0, 2, 0, false )
  1375. }
  1376.  
  1377.  
  1378. void function Highlight_ClearEnemyHighlight( entity ent )
  1379. {
  1380.     ent.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_ENEMY, 0, true, 0, 2, 0, false )
  1381.     #if SERVER
  1382.                                                            
  1383.                                                                
  1384.                                              
  1385.     #endif
  1386. }
  1387.  
  1388.  
  1389. void function Highlight_SetEnemyHighlightNightmap( entity player )
  1390. {
  1391.                                
  1392.         if ( IsShadowRoyaleMode() )
  1393.         {
  1394.             if ( IsPlayerShadowZombie( player ) && GetCurrentPlaylistVarBool( "enemy_nightmap_outline_enable_for_shadows", false ) == false )
  1395.                 return
  1396.  
  1397.             Highlight_SetEnemyHighlight( player, "enemy_nightmap" )
  1398.             return
  1399.         }
  1400.        
  1401. }
  1402.  
  1403. void function SetDefaultMPEnemyHighlight( entity ent )
  1404. {
  1405.                          
  1406.                                                          
  1407.          
  1408.                                                          
  1409.  
  1410.                                
  1411.         if ( IsShadowRoyaleMode() )
  1412.         {
  1413.             Highlight_SetEnemyHighlightNightmap( ent )
  1414.             return
  1415.         }
  1416.        
  1417.                          
  1418.         if ( Control_IsModeEnabled() && IsValid( ent ) )
  1419.         {
  1420.             Highlight_SetEnemyHighlight( ent, "enemy_control_mode" )
  1421.             return
  1422.         }
  1423.        
  1424.  
  1425.  
  1426.     ent.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_ENEMY, 0, true, 0, 2, 0, false )
  1427. }
  1428.  
  1429.  
  1430. void function Highlight_ClearOwnedHighlight( entity ent )
  1431. {
  1432.     ent.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_OWNED, 0, true, 0, 2, 0, false )
  1433. }
  1434.  
  1435.  
  1436. void function Highlight_ClearNeutralHighlight( entity ent )
  1437. {
  1438.     ent.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_NEUTRAL, 0, true, 0, 2, 0, false )
  1439. }
  1440.  
  1441.  
  1442. bool function Hightlight_HasEnemyHighlight( entity ent, string assetName )
  1443. {
  1444.     int highlightId            = ent.Highlight_GetState( HIGHLIGHT_CONTEXT_ENEMY )
  1445.     HighlightContext highlight = GetHighlight( assetName )
  1446.  
  1447.     return (highlightId == highlight.highlightId)
  1448. }
  1449.  
  1450.  
  1451. HighlightContext ornull function Highlight_GetEnemyHighlight( entity ent )
  1452. {
  1453.     if ( ent.e.enemyHighlight == "" )
  1454.         return null
  1455.  
  1456.     return GetHighlight( ent.e.enemyHighlight )
  1457. }
  1458.  
  1459.  
  1460. void function __SetEntityContextHighlight( entity ent, int contextId, HighlightContext highlight )
  1461. {
  1462.     ent.Highlight_SetCurrentContext( contextId )
  1463.     ent.Highlight_SetFunctions( contextId, highlight.insideSlot, highlight.entityVisible, highlight.outsideSlot, highlight.outlineRadius, highlight.highlightId, highlight.afterPostProcess )
  1464.     ent.Highlight_SetParam( contextId, 0, highlight.paramVecs[0] )
  1465.     ent.Highlight_SetParam( contextId, 1, highlight.paramVecs[1] )
  1466. }
  1467.  
  1468.  
  1469. bool function Highlight_HasSonarHighlight( entity ent )
  1470. {
  1471.     int highlightId = ent.Highlight_GetState( HIGHLIGHT_CONTEXT_SONAR )
  1472.     HighlightContext highlight
  1473.  
  1474.     highlight = GetHighlight( "enemy_sonar" )
  1475.     if ( highlightId == highlight.highlightId )
  1476.         return true
  1477.  
  1478.     highlight = GetHighlight( "enemy_sonar_movement" )
  1479.     if ( highlightId == highlight.highlightId )
  1480.         return true
  1481.  
  1482.     return false
  1483. }
  1484.  
  1485.  
  1486. void function SetSurvivalPropHighlight( entity ent, string assetName, bool isFocused, int contextId = HIGHLIGHT_CONTEXT_NEUTRAL )
  1487. {
  1488.     HighlightContext highlight = GetHighlight( assetName )
  1489.  
  1490.     float baseRadius = highlight.outlineRadius
  1491.     #if CLIENT
  1492.         if ( GetConVarInt( "colorblind_mode" ) != 0 )
  1493.         {
  1494.             switch ( highlight.colorID )
  1495.             {
  1496.                 case COLORID_LOOT_TIER0:
  1497.                 case COLORID_LOOT_TIER1:
  1498.                 case COLORID_LOOT_TIER2:
  1499.                     break
  1500.  
  1501.                 case COLORID_LOOT_TIER3:
  1502.                     baseRadius += 1
  1503.                     break
  1504.  
  1505.                 case COLORID_LOOT_TIER4:
  1506.                     baseRadius += 2
  1507.                     break
  1508.             }
  1509.         }
  1510.     #endif
  1511.  
  1512.     float radius     = isFocused ? 4.0 : min( baseRadius, 8.0 )
  1513.     vector fillColor = isFocused ? highlight.paramVecs[0] : highlight.paramVecs[1]
  1514.     int fill         = isFocused && highlight.insideSlotFocused != HIGHLIGHT_USE_DEFAULT ? highlight.insideSlotFocused : highlight.insideSlot
  1515.     int outline      = isFocused && highlight.outsideSlotFocused != HIGHLIGHT_USE_DEFAULT ? highlight.outsideSlotFocused : highlight.outsideSlot
  1516.  
  1517.     ent.Highlight_SetCurrentContext( contextId )
  1518.     ent.Highlight_SetFunctions( contextId, fill, highlight.entityVisible, outline, radius, highlight.highlightId, highlight.afterPostProcess )
  1519.     ent.Highlight_SetParam( contextId, 0, highlight.paramVecs[0] )
  1520.     ent.Highlight_SetParam( contextId, 1, fillColor )
  1521. }
  1522.  
  1523.  
  1524. void function ClearSurvivalPropHighlight( entity ent, int contextId = HIGHLIGHT_CONTEXT_NEUTRAL )
  1525. {
  1526.     int highlightId = ent.Highlight_GetState( contextId )
  1527.     ent.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_NEUTRAL, HIGHLIGHT_FILL_NONE, true, HIGHLIGHT_OUTLINE_NONE, 1.0, highlightId, false )
  1528. }
  1529.  
  1530. #if CLIENT
  1531. void function ClInitHighlight( entity ent )
  1532. {
  1533.     ManageHighlightEntity( ent )
  1534. }
  1535.  
  1536. void function ClientCodeCallback_HighlightServerContextChanged( entity ent )
  1537. {
  1538.     ManageHighlightEntity( ent )
  1539. }
  1540.  
  1541. bool function ClHighlight_HasHighlightContext( entity ent )
  1542. {
  1543.     for ( int contextId = 0; contextId < HIGHLIGHT_MAX_CONTEXTS; contextId++ )
  1544.     {
  1545.         if ( ent.Highlight_GetInsideFunction( contextId ) > 0 )
  1546.             return true
  1547.  
  1548.         if ( ent.Highlight_GetOutlineFunction( contextId ) > 0 )
  1549.             return true
  1550.     }
  1551.  
  1552.     return false
  1553. }
  1554.  
  1555. void function ClientCodeCallback_HighlightServerFunctionsChanged( entity ent )
  1556. {
  1557.     ManageHighlightEntity( ent )
  1558. }
  1559.  
  1560. void function Callback_UpdateHighlight( entity player, int oldLifeState, int newLifeState )
  1561. {
  1562.                                            
  1563.              
  1564.  
  1565.                                                      
  1566. }
  1567.  
  1568. void function ClHighlight_YouRespawned()
  1569. {
  1570.     array<entity> players = GetPlayerArray()
  1571.     foreach ( player in players )
  1572.     {
  1573.         ManageHighlightEntity( player )
  1574.     }
  1575. }
  1576.  
  1577. void function ClHighlight_ClassChanged( entity attacker )
  1578. {
  1579.     ManageHighlightEntity( attacker )
  1580. }
  1581.  
  1582. void function ClHighlight_YouDied( entity attacker )
  1583. {
  1584.     ManageHighlightEntity( attacker )
  1585. }
  1586.  
  1587. #if CLIENT
  1588. void function OnSettingsUpdated()
  1589. {
  1590.     if ( GetConVarInt( "colorblind_mode" ) != file.colorblindMode )
  1591.     {
  1592.         array<entity> loot = GetSurvivalLootNearbyPlayer( GetLocalClientPlayer(), 65536.0, false, false, false )
  1593.         foreach ( ent in loot )
  1594.         {
  1595.             ManageHighlightEntity( ent )
  1596.             ApplyEquipmentColorAndFXOverrides( ent )
  1597.         }
  1598.  
  1599.         array<entity> deathbox = GetAllDeathBoxes()
  1600.         foreach ( ent in deathbox )
  1601.         {
  1602.             ManageHighlightEntity( ent )
  1603.         }
  1604.     }
  1605.  
  1606.     file.colorblindMode = GetConVarInt( "colorblind_mode" )
  1607. }
  1608. #endif
  1609.  
  1610. void function ManageHighlightEntity( entity ent )
  1611. {
  1612.     if ( !IsValid( ent ) )
  1613.         return
  1614.  
  1615.     if ( !ClHighlight_HasHighlightContext( ent ) )
  1616.         return
  1617.  
  1618.                      
  1619.     if ( !GetLocalViewPlayer() && !IsPrivateMatch() )
  1620.         return
  1621.  
  1622.     int contextId
  1623.     if ( IsPrivateMatch() && IsValid( GetLocalClientPlayer() ) && GetLocalClientPlayer().GetTeam() == TEAM_SPECTATOR )
  1624.     {
  1625.         contextId = GetHighlightContextForEnt( GetLocalClientPlayer(), ent )
  1626.     }
  1627.     else
  1628.     {
  1629.         contextId = GetHighlightContextForEnt( GetLocalViewPlayer(), ent )
  1630.     }
  1631.  
  1632.     if ( contextId != ent.Highlight_GetCurrentContext() )
  1633.     {
  1634.         foreach ( callbackFunc in file.highlightChangedCallbacks )
  1635.             callbackFunc( ent, ent.Highlight_GetCurrentContext(), contextId )
  1636.         ent.Signal( "ContextChanged" )
  1637.     }
  1638.  
  1639.     ClHighlight_UpdateHighlightFlags( ent, contextId )
  1640. }
  1641.  
  1642. void function ClHighlight_UpdateHighlightFlags( entity ent, int contextId )
  1643. {
  1644.     ent.Highlight_SetCurrentContext( contextId )
  1645.     ent.Highlight_ResetFlags()
  1646.  
  1647.     HighlightContext ornull highlight = GetHighlightForId( ent.Highlight_GetState( contextId ) )
  1648.  
  1649.     if ( highlight == null )
  1650.         return
  1651.  
  1652.     expect HighlightContext( highlight )
  1653.  
  1654.     if ( highlight.requiresWeakPointsVisible )
  1655.     {
  1656.         thread ClHighlight_DrawWhenLOS_LineThink( ent, highlight )                                                
  1657.         return
  1658.     }
  1659.  
  1660.     if ( highlight.nearDist != ent.Highlight_GetNearFadeDist() )
  1661.         ent.Highlight_SetNearFadeDist( highlight.nearDist )
  1662.  
  1663.     ent.Highlight_SetFarFadeDist( highlight.farDist )
  1664.     ent.Highlight_SetFlag( HIGHLIGHT_FLAG_ADS_FADE, highlight.adsFade )
  1665.     ent.Highlight_SetFlag( HIGHLIGHT_FLAG_REQUIRE_NOT_FULL_HEALTH, highlight.requiresNotFullHealth )
  1666.     ent.Highlight_SetFlag( HIGHLIGHT_FLAG_REQUIRE_CAN_PICK_UP_CLIP, highlight.requiresCanPickupClip )
  1667.     ent.Highlight_SetFlag( HIGHLIGHT_FLAG_REQUIRE_CAN_PICK_UP_OFFHAND, highlight.requiresCanPickupOrdnance )
  1668.     ent.Highlight_SetFlag( HIGHLIGHT_FLAG_REQUIRE_PILOT, highlight.requiresClass == REQUIRES_PILOT )
  1669.     ent.Highlight_SetFlag( HIGHLIGHT_FLAG_REQUIRE_TITAN, highlight.requiresClass == REQUIRES_TITAN )
  1670.     ent.Highlight_SetFlag( HIGHLIGHT_FLAG_REQUIRE_LOCAL_PLAYER_IS_OWNER, highlight.requiresOwnedByLocalPlayer )
  1671.     ent.Highlight_SetFlag( HIGHLIGHT_FLAG_REQUIRE_HIGH_MOVEMENT, highlight.requiresStationary )
  1672.     ent.Highlight_SetFlag( HIGHLIGHT_FLAG_DISABLE_DEATH_FADE, highlight.disableDeathFade )
  1673.  
  1674.     bool agnosticHighlight = (contextId == HIGHLIGHT_CONTEXT_SONAR) || highlight.teamAgnostic
  1675.     ent.Highlight_SetFlag( HIGHLIGHT_FLAG_TEAM_AGNOSTIC, agnosticHighlight )
  1676.  
  1677.     #if CLIENT
  1678.         if ( ent.GetNetworkedClassName() == "prop_survival" )
  1679.         {
  1680.             if ( highlight.colorID >= 0 )
  1681.             {
  1682.                 ent.Highlight_SetParam( contextId, 0, GetKeyColor( highlight.colorID ) / 255.0 )
  1683.             }
  1684.  
  1685.             ent.Highlight_SetParam( contextId, 1, <GetHighlightFillAlphaForLoot( ent ), 0, 0> )
  1686.         }
  1687.         else if (ent.GetNetworkedClassName() == "prop_death_box" )
  1688.         {
  1689.             if ( highlight.colorID >= 0 )
  1690.             {
  1691.                 ent.Highlight_SetParam( contextId, 0, GetKeyColor( highlight.colorID ) / 255.0 )
  1692.             }
  1693.             ent.Highlight_SetParam( contextId, 1, <GetHighlightFillAlphaForDeathBox( ent ), 0, 0> )
  1694.         }
  1695.     #endif
  1696.  
  1697.     if ( Freelance_IsHubLevel() )
  1698.     {
  1699.         if ( contextId == HIGHLIGHT_CONTEXT_FRIENDLY )
  1700.             ent.Highlight_SetFlag( HIGHLIGHT_FLAG_REQUIRE_SAME_TEAM, true )
  1701.         else if ( contextId == HIGHLIGHT_CONTEXT_ENEMY )
  1702.             ent.Highlight_SetFlag( HIGHLIGHT_FLAG_REQUIRE_ENEMY_TEAM, true )
  1703.     }
  1704.     else
  1705.     {
  1706.         if ( contextId == HIGHLIGHT_CONTEXT_FRIENDLY )
  1707.         {
  1708.             ent.Highlight_SetFlag( HIGHLIGHT_FLAG_REQUIRE_FRIENDLY_TEAM, true )
  1709.         }
  1710.         else if ( contextId == HIGHLIGHT_CONTEXT_ENEMY )
  1711.         {
  1712.             ent.Highlight_SetFlag( HIGHLIGHT_FLAG_REQUIRE_ENEMY_TEAM, true )
  1713.         }
  1714.     }
  1715.  
  1716.     int drawFuncId = highlight.drawFuncId
  1717.  
  1718.     switch ( drawFuncId )
  1719.     {
  1720.         case eHighlightDrawFunc.ALWAYS:
  1721.         {
  1722.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  1723.             ent.Highlight_SetFadeInTime( 0.15 )
  1724.             ent.Highlight_SetFadeOutTime( 0.15 )
  1725.         }
  1726.             break
  1727.  
  1728.         case eHighlightDrawFunc.OCCLUDED:
  1729.         {
  1730.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_OCCLUDED )
  1731.             ent.Highlight_SetFadeInTime( 0.15 )
  1732.             ent.Highlight_SetFadeOutTime( 0.15 )
  1733.         }
  1734.             break
  1735.  
  1736.         case eHighlightDrawFunc.LOS:
  1737.         {
  1738.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_FULL_VIEW )
  1739.             ent.Highlight_SetFadeInTime( 0.15 )
  1740.             ent.Highlight_SetFadeOutTime( 0.15 )
  1741.         }
  1742.             break
  1743.  
  1744.         case eHighlightDrawFunc.LOS_LINE:
  1745.         {
  1746.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_LOS )
  1747.             ent.Highlight_SetFadeInTime( 0.0 )
  1748.             ent.Highlight_SetFadeOutTime( 0.0 )
  1749.         }
  1750.             break
  1751.  
  1752.         case eHighlightDrawFunc.LOS_LINE_FADE:
  1753.         {
  1754.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_LOS )
  1755.             ent.Highlight_SetFadeInTime( 0.15 )
  1756.             ent.Highlight_SetFadeOutTime( 0.15 )
  1757.         }
  1758.             break
  1759.  
  1760.         case eHighlightDrawFunc.ENT_APPEAR_EFFECT:
  1761.         {
  1762.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_LOS )
  1763.             ent.Highlight_SetFadeInTime( 0.1 )
  1764.             ent.Highlight_SetFadeOutTime( 0.5 )
  1765.             ent.Highlight_StartOn()
  1766.             ent.Highlight_SetLifeTime( 0.75 )
  1767.         }
  1768.             break
  1769.  
  1770.         case eHighlightDrawFunc.LOS_LINE_ENTSONLYCONTENTSBLOCK:
  1771.         {
  1772.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_LOS_ENTSONLYCONTENTSBLOCK )
  1773.             ent.Highlight_SetFadeInTime( 0.15 )
  1774.             ent.Highlight_SetFadeOutTime( 0.15 )
  1775.         }
  1776.             break
  1777.  
  1778.         case eHighlightDrawFunc.BATTERY_THIEF:
  1779.             thread ClHighlight_DrawBatteryThiefThink( ent, highlight )
  1780.             break
  1781.  
  1782.         case eHighlightDrawFunc.FW_FRIENDLY_TITAN:
  1783.             thread ClHighlight_FWFriendlyTitans( ent, highlight )
  1784.             break
  1785.  
  1786.         case eHighlightDrawFunc.DON_PANEL:
  1787.             thread CLHighlight_DONPanel( ent, highlight )
  1788.             break
  1789.  
  1790.         case eHighlightDrawFunc.CAUSTIC_THREAT:
  1791.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  1792.             ent.Highlight_SetFadeInTime( 1.0 )
  1793.             ent.Highlight_SetFadeOutTime( 0.5 )
  1794.             break
  1795.  
  1796.         case eHighlightDrawFunc.SONAR_DETECTED:
  1797.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  1798.             ent.Highlight_SetFadeInTime( 0.0 )
  1799.             ent.Highlight_SetFadeOutTime( 1.2 )
  1800.             ent.Highlight_SetLifeTime( 0.1 )
  1801.             break
  1802.  
  1803.         case eHighlightDrawFunc.SPOT:
  1804.         {
  1805.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  1806.             ent.Highlight_SetFadeInTime( SPOT_HIGHLIGHT_FADE_IN_TIME )
  1807.             ent.Highlight_SetFadeOutTime( SPOT_HIGHLIGHT_FADE_OUT_TIME )
  1808.             ent.Highlight_SetLifeTime( SPOT_HIGHLIGHT_TIME - SPOT_HIGHLIGHT_FADE_OUT_TIME )
  1809.         }
  1810.             break
  1811.  
  1812.         case eHighlightDrawFunc.ALWAYS_LONG_FADE:
  1813.         {
  1814.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  1815.             ent.Highlight_SetFadeInTime( 0.07 )
  1816.             ent.Highlight_SetFadeOutTime( 0.5 )
  1817.             ent.Highlight_SetLifeTime( 0.57 )
  1818.         }
  1819.             break
  1820.  
  1821.         case eHighlightDrawFunc.PICKUP:
  1822.         {
  1823.                                                                                                                                                            
  1824.             if ( !PlayerCanUseWeapon( GetLocalViewPlayer(), ent.GetWeaponClass() ) )
  1825.                 ent.Highlight_SetCurrentContext( HIGHLIGHT_CONTEXT_ENEMY )
  1826.             else if ( IsCurrentlyFocusedUseEnt( ent ) )
  1827.                 ent.Highlight_SetCurrentContext( HIGHLIGHT_CONTEXT_OWNED )
  1828.             else
  1829.                 ent.Highlight_SetCurrentContext( HIGHLIGHT_CONTEXT_NEUTRAL )
  1830.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  1831.             ent.Highlight_SetFadeInTime( 0.15 )
  1832.             ent.Highlight_SetFadeOutTime( 0.15 )
  1833.         }
  1834.             break
  1835.  
  1836.         case eHighlightDrawFunc.FORCE_ON:
  1837.         {
  1838.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_FORCE_ON )
  1839.             ent.Highlight_SetFadeInTime( 0.15 )
  1840.             ent.Highlight_SetFadeOutTime( 0.15 )
  1841.             break
  1842.         }
  1843.  
  1844.                                        
  1845.         case eHighlightDrawFunc.ABILITY_REVEAL:
  1846.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  1847.             ent.Highlight_SetFadeInTime( 0.15 )
  1848.             ent.Highlight_SetFadeOutTime( 0.5 )
  1849.             break
  1850.  
  1851.        
  1852.  
  1853.                      
  1854.         case eHighlightDrawFunc.ALLIANCE_PROXIMITY:
  1855.         {
  1856.             ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  1857.             ent.Highlight_SetFadeInTime( 0.15 )
  1858.             ent.Highlight_SetFadeOutTime( 0.15 )
  1859.             if ( IsUsingProximityAllianceMembers() )
  1860.                 ent.Highlight_SetFarFadeDist( GetMaxDistForAllianceMemberProximity() )
  1861.         }
  1862.             break
  1863.                            
  1864.     }
  1865. }
  1866.  
  1867. bool function IsForceVisible( entity ent, entity viewPlayer, HighlightContext highlight )
  1868. {
  1869.     if ( highlight.farFadeInDist == 0 )
  1870.         return false
  1871.  
  1872.     float dist = Distance( ent.GetOrigin(), viewPlayer.EyePosition() )
  1873.     return dist > highlight.farFadeInDist
  1874. }
  1875.  
  1876. bool function CanBeVisible( entity ent, entity viewPlayer, HighlightContext highlight )
  1877. {
  1878.     float dist = Distance( ent.GetOrigin(), viewPlayer.EyePosition() )
  1879.  
  1880.     if ( dist > highlight.farDist )
  1881.         return false
  1882.  
  1883.     if ( highlight.requiresWeakPointsVisible )
  1884.     {
  1885.         if ( !ShouldShowWeakpoints( ent.GetParent() ) )
  1886.             return false
  1887.     }
  1888.  
  1889.     return true
  1890. }
  1891.  
  1892. bool function PlayerCanPickupOrdnanace( entity player )
  1893. {
  1894.     entity weapon = player.GetOffhandWeapon( OFFHAND_ORDNANCE )
  1895.     if ( !IsValid( weapon ) )
  1896.         return false
  1897.  
  1898.     return weapon.GetWeaponPrimaryClipCount() < weapon.GetWeaponPrimaryClipCountMax()
  1899. }
  1900.  
  1901. bool function PlayerCanPickupClip( entity player )
  1902. {
  1903.     foreach ( weapon in player.GetMainWeapons() )
  1904.     {
  1905.         if ( weapon.GetWeaponPrimaryAmmoCount( AMMOSOURCE_STOCKPILE ) < weapon.GetWeaponSettingInt( eWeaponVar.ammo_stockpile_max ) )
  1906.             return true
  1907.     }
  1908.  
  1909.     return false
  1910. }
  1911.  
  1912. void function ClHighlight_DrawBatteryThiefThink( entity ent, HighlightContext highlight )
  1913. {
  1914.     if ( ent == GetLocalViewPlayer() )
  1915.         return
  1916.  
  1917.     ent.EndSignal( "OnDestroy" )
  1918.     ent.EndSignal( "ContextChanged" )
  1919.  
  1920.     entity viewPlayer = GetLocalViewPlayer()
  1921.  
  1922.     bool thisIsMyBattery = false
  1923.     if ( ent.IsPlayer() )
  1924.     {
  1925.         array<entity> batteries = GetClientEntArrayBySignifier( "item_titan_battery" )
  1926.         foreach ( entity battery in batteries )
  1927.         {
  1928.             entity batteryParent = battery.GetParent()
  1929.             if ( batteryParent == ent && battery.GetBossPlayer() == viewPlayer )
  1930.             {
  1931.                 thisIsMyBattery = true
  1932.                 break
  1933.             }
  1934.         }
  1935.     }
  1936.  
  1937.     if ( !thisIsMyBattery )
  1938.         return
  1939.  
  1940.     int contextId = ent.Highlight_GetCurrentContext()
  1941.     ShowEntityHighlight( ent, 0.15 )
  1942.  
  1943.     wait 10.0
  1944.  
  1945.     HideEntityHighlight( ent, 5.0 )
  1946. }
  1947.  
  1948. void function ClHighlight_FWFriendlyTitans( entity ent, HighlightContext highlight )
  1949. {
  1950.     if ( ent == GetLocalViewPlayer() )
  1951.         return
  1952.  
  1953.     HideEntityHighlight( ent, 0.1 )
  1954.  
  1955.     ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_OCCLUDED )
  1956.  
  1957.     entity viewPlayer = GetLocalViewPlayer()
  1958.     ent.EndSignal( "OnDestroy" )
  1959.     ent.EndSignal( "ContextChanged" )
  1960.     viewPlayer.EndSignal( "OnDestroy" )
  1961.     viewPlayer.EndSignal( "OnDeath" )
  1962.  
  1963.     while ( true )
  1964.     {
  1965.         WaitFrame()
  1966.  
  1967.         if ( !viewPlayer.IsTitan() )
  1968.         {
  1969.             HideEntityHighlight( ent, 0.1 )
  1970.             continue
  1971.         }
  1972.  
  1973.         if ( !ent.IsTitan() )
  1974.         {
  1975.             HideEntityHighlight( ent, 0.1 )
  1976.             continue
  1977.         }
  1978.  
  1979.         if ( !ent.IsPlayer() )
  1980.         {
  1981.             if ( !IsValid( ent.GetBossPlayer() ) )
  1982.             {
  1983.                 HideEntityHighlight( ent, 0.1 )
  1984.                 continue
  1985.             }
  1986.         }
  1987.  
  1988.         if ( viewPlayer.GetTeam() != ent.GetTeam() )
  1989.         {
  1990.             HideEntityHighlight( ent, 0.1 )
  1991.             continue
  1992.         }
  1993.  
  1994.         int contextId = ent.Highlight_GetCurrentContext()
  1995.         ShowEntityHighlight( ent, 0.15 )
  1996.     }
  1997. }
  1998.  
  1999. void function CLHighlight_DONPanel( entity ent, HighlightContext highlight )
  2000. {
  2001.     if ( ent == GetLocalViewPlayer() )
  2002.         return
  2003.  
  2004.     HideEntityHighlight( ent, 0.1 )
  2005.  
  2006.     ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  2007.  
  2008.     entity viewPlayer = GetLocalViewPlayer()
  2009.     ent.EndSignal( "OnDestroy" )
  2010.     ent.EndSignal( "ContextChanged" )
  2011.     viewPlayer.EndSignal( "OnDestroy" )
  2012.  
  2013.     while ( true )
  2014.     {
  2015.         WaitFrame()
  2016.  
  2017.         if ( !IsAlive( viewPlayer ) )
  2018.         {
  2019.             HideEntityHighlight( ent, 0.1 )
  2020.             continue
  2021.         }
  2022.  
  2023.         if ( !GameTeams_TeamHasDeadPlayers( viewPlayer.GetTeam() ) )
  2024.         {
  2025.             HideEntityHighlight( ent, 0.1 )
  2026.             continue
  2027.         }
  2028.  
  2029.         int contextId = ent.Highlight_GetCurrentContext()
  2030.         ShowEntityHighlight( ent, 0.15 )
  2031.     }
  2032. }
  2033.  
  2034. float function GetHullTraceSizeForEnt( entity ent )
  2035. {
  2036.     float midHeight = GetMidpointHeight( ent ) - 3.0          
  2037.     return min( midHeight, 10 )
  2038. }
  2039.  
  2040. float function GetMidpointHeight( entity ent )
  2041. {
  2042.     return (ent.GetBoundingMaxs().z - ent.GetBoundingMins().z) * 0.5
  2043. }
  2044.  
  2045. void function ClHighlight_DrawWhenLOS_LineThink( entity ent, HighlightContext highlight )
  2046. {
  2047.     entity viewPlayer = GetLocalViewPlayer()
  2048.     if ( ent == viewPlayer )
  2049.         return
  2050.  
  2051.     ent.EndSignal( "OnDestroy" )
  2052.     ent.EndSignal( "ContextChanged" )
  2053.     viewPlayer.EndSignal( "OnDestroy" )
  2054.  
  2055.     bool wasVisible = false
  2056.     var deferredTrace
  2057.  
  2058.     while ( true )
  2059.     {
  2060.         vector viewPosition = viewPlayer.EyePosition()
  2061.         vector entPos       = ent.GetWorldSpaceCenter()
  2062.  
  2063.         if ( IsDeferredTraceFinished( deferredTrace ) && CanBeVisible( ent, viewPlayer, highlight ) )
  2064.         {
  2065.             TraceResults hullResult = GetDeferredTraceResult( deferredTrace )
  2066.             bool isVisible          = CanBeVisible( ent, viewPlayer, highlight ) && (hullResult.fraction == 1.0 || IsForceVisible( ent, viewPlayer, highlight ))
  2067.  
  2068.             if ( isVisible && !wasVisible )
  2069.                 ShowEntityHighlight( ent, 0.15 )
  2070.             else if ( !isVisible && wasVisible )
  2071.                 HideEntityHighlight( ent, 0.15 )
  2072.  
  2073.             wasVisible = isVisible
  2074.         }
  2075.         else
  2076.         {
  2077.             HideEntityHighlight( ent, 0.15 )
  2078.             wasVisible = false
  2079.         }
  2080.  
  2081.         deferredTrace = DeferredTraceLine( viewPosition, entPos, ent, TRACE_MASK_BLOCKLOS, TRACE_COLLISION_GROUP_NONE )
  2082.  
  2083.          
  2084.                                                                                          
  2085.                  
  2086.                                                                                
  2087.                                                    
  2088.                  
  2089.          
  2090.         WaitFrame()
  2091.     }
  2092. }
  2093.  
  2094. void function SpotViewModelHighlight( entity viewModelEntity, vector highlightColor = HIGHLIGHT_COLOR_ENEMY )
  2095. {
  2096.     viewModelEntity.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  2097.     viewModelEntity.Highlight_SetCurrentContext( HIGHLIGHT_CONTEXT_NEUTRAL )
  2098.     int highlightId = viewModelEntity.Highlight_GetState( HIGHLIGHT_CONTEXT_NEUTRAL )
  2099.     viewModelEntity.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_NEUTRAL, HIGHLIGHT_FILL_NONE, true, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_PULSE, 6.0, highlightId, false )
  2100.     viewModelEntity.Highlight_SetParam( HIGHLIGHT_CONTEXT_NEUTRAL, 0, HIGHLIGHT_COLOR_ENEMY )
  2101.     viewModelEntity.Highlight_SetParam( HIGHLIGHT_CONTEXT_NEUTRAL, 1, <8, 8, 8> )
  2102.     viewModelEntity.Highlight_SetFadeInTime( SPOT_HIGHLIGHT_FADE_IN_TIME )
  2103.     viewModelEntity.Highlight_SetFadeOutTime( SPOT_HIGHLIGHT_FADE_OUT_TIME )
  2104.     viewModelEntity.Highlight_SetLifeTime( SPOT_HIGHLIGHT_TIME - SPOT_HIGHLIGHT_FADE_OUT_TIME )
  2105.     viewModelEntity.Highlight_StartOn()
  2106. }
  2107.  
  2108. void function SonarViewModelHighlight( entity viewModelEntity, vector highlightColor = HIGHLIGHT_COLOR_ENEMY )
  2109. {
  2110.     viewModelEntity.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  2111.     viewModelEntity.Highlight_SetCurrentContext( HIGHLIGHT_CONTEXT_NEUTRAL )
  2112.     int highlightId = viewModelEntity.Highlight_GetState( HIGHLIGHT_CONTEXT_NEUTRAL )
  2113.     viewModelEntity.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_NEUTRAL, HIGHLIGHT_FILL_VM_CUSTOM_COLOR, true, HIGHLIGHT_OUTLINE_VM_CUSTOM_COLOR, 8.0, highlightId, false )
  2114.     viewModelEntity.Highlight_SetParam( HIGHLIGHT_CONTEXT_NEUTRAL, 0, highlightColor )
  2115.                                                                                  
  2116.     viewModelEntity.Highlight_SetFadeInTime( 0.25 )
  2117.     viewModelEntity.Highlight_SetFadeOutTime( 0.25 )
  2118.     viewModelEntity.Highlight_SetFlag( HIGHLIGHT_FLAG_CHECK_OFTEN, true )
  2119.     viewModelEntity.Highlight_StartOn()
  2120. }
  2121.  
  2122. void function SonarViewModelClearHighlight( entity viewModelEntity )
  2123. {
  2124.     int highlightId = viewModelEntity.Highlight_GetState( HIGHLIGHT_CONTEXT_NEUTRAL )
  2125.     viewModelEntity.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_NEUTRAL, HIGHLIGHT_FILL_NONE, true, HIGHLIGHT_OUTLINE_NONE, 1.0, highlightId, false )
  2126.     viewModelEntity.Highlight_SetLifeTime( 0.0 )
  2127. }
  2128.  
  2129. void function SonarPlayerCloneHighlight( entity ent, vector highlightColor = HIGHLIGHT_COLOR_BLOODHOUND )
  2130. {
  2131.     int highlightId = ent.Highlight_GetState( HIGHLIGHT_CONTEXT_NEUTRAL )
  2132.     ent.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  2133.     ent.Highlight_SetCurrentContext( HIGHLIGHT_CONTEXT_NEUTRAL )
  2134.     int bloodhoundFill = HIGHLIGHT_FILL_BLOODHOUND
  2135.     ent.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_NEUTRAL, bloodhoundFill, false, HIGHLIGHT_OUTLINE_CUSTOM_COLOR_NOZ_NOSCANLINES, 1.0, highlightId, true )
  2136.     ent.Highlight_SetParam( HIGHLIGHT_CONTEXT_NEUTRAL, 0, highlightColor )
  2137.     ent.Highlight_SetFadeInTime( 0.15 )
  2138.     ent.Highlight_SetFadeOutTime( 0.15 )
  2139.     ent.Highlight_SetFlag( HIGHLIGHT_FLAG_CHECK_OFTEN, true )
  2140.     ent.Highlight_StartOn()
  2141. }
  2142.  
  2143. void function DeployableModelHighlight( entity viewModelEntity )
  2144. {
  2145.     viewModelEntity.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  2146.     viewModelEntity.Highlight_SetCurrentContext( HIGHLIGHT_CONTEXT_NEUTRAL )
  2147.     int highlightId = viewModelEntity.Highlight_GetState( HIGHLIGHT_CONTEXT_NEUTRAL )
  2148.     viewModelEntity.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_NEUTRAL, HIGHLIGHT_FILL_VM_CUSTOM_COLOR, true, HIGHLIGHT_OUTLINE_VM_CUSTOM_COLOR, 8.0, highlightId, false )
  2149.     viewModelEntity.Highlight_SetParam( HIGHLIGHT_CONTEXT_NEUTRAL, 0, HIGHLIGHT_COLOR_INTERACT )
  2150.                                                      
  2151.                                                      
  2152.     viewModelEntity.Highlight_StartOn()
  2153. }
  2154.  
  2155. void function DeployableModelInvalidHighlight( entity viewModelEntity )
  2156. {
  2157.     viewModelEntity.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  2158.     viewModelEntity.Highlight_SetCurrentContext( HIGHLIGHT_CONTEXT_NEUTRAL )
  2159.     int highlightId = viewModelEntity.Highlight_GetState( HIGHLIGHT_CONTEXT_NEUTRAL )
  2160.     viewModelEntity.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_NEUTRAL, HIGHLIGHT_FILL_VM_CUSTOM_COLOR, true, HIGHLIGHT_OUTLINE_VM_CUSTOM_COLOR, 8.0, highlightId, false )
  2161.     viewModelEntity.Highlight_SetParam( HIGHLIGHT_CONTEXT_NEUTRAL, 0, <1, 0, 0> )
  2162.                                                      
  2163.                                                      
  2164.     viewModelEntity.Highlight_StartOn()
  2165. }
  2166.  
  2167. void function PingViewModelHighlight( entity viewModelEntity, vector highlightColor = HIGHLIGHT_COLOR_FRIENDLY )
  2168. {
  2169.     viewModelEntity.Highlight_SetVisibilityType( HIGHLIGHT_VIS_ALWAYS )
  2170.     viewModelEntity.Highlight_SetCurrentContext( HIGHLIGHT_CONTEXT_NEUTRAL )
  2171.     int highlightId = viewModelEntity.Highlight_GetState( HIGHLIGHT_CONTEXT_NEUTRAL )
  2172.     viewModelEntity.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_NEUTRAL, HIGHLIGHT_FILL_VM_CUSTOM_COLOR, true, HIGHLIGHT_OUTLINE_VM_CUSTOM_COLOR, 8.0, highlightId, false )
  2173.     viewModelEntity.Highlight_SetParam( HIGHLIGHT_CONTEXT_NEUTRAL, 0, highlightColor )
  2174.                                                                                  
  2175.     viewModelEntity.Highlight_SetFadeInTime( 0.25 )
  2176.     viewModelEntity.Highlight_SetFadeOutTime( 0.25 )
  2177.     viewModelEntity.Highlight_StartOn()
  2178. }
  2179.  
  2180. void function PingViewModelClearHighlight( entity viewModelEntity )
  2181. {
  2182.     int highlightId = viewModelEntity.Highlight_GetState( HIGHLIGHT_CONTEXT_NEUTRAL )
  2183.     viewModelEntity.Highlight_SetFunctions( HIGHLIGHT_CONTEXT_NEUTRAL, HIGHLIGHT_FILL_NONE, true, HIGHLIGHT_OUTLINE_NONE, 1.0, highlightId, false )
  2184.     viewModelEntity.Highlight_SetLifeTime( 0.0 )
  2185. }
  2186.  
  2187. void function ShowEntityHighlight( entity ent, float duration )
  2188. {
  2189.     int contextId = ent.Highlight_GetCurrentContext()
  2190.     if ( contextId < 0 )
  2191.         return
  2192.  
  2193.     if ( ent.Highlight_GetInsideFunction( contextId ) > 0 )
  2194.         ent.Highlight_ShowInside( duration )
  2195.  
  2196.     if ( ent.Highlight_GetOutlineFunction( contextId ) > 0 )
  2197.         ent.Highlight_ShowOutline( duration )
  2198. }
  2199.  
  2200. void function HideEntityHighlight( entity ent, float duration )
  2201. {
  2202.     int contextId = ent.Highlight_GetCurrentContext()
  2203.     if ( contextId < 0 )
  2204.         return
  2205.  
  2206.     if ( ent.Highlight_GetInsideFunction( contextId ) > 0 )
  2207.         ent.Highlight_HideInside( duration )
  2208.  
  2209.     if ( ent.Highlight_GetOutlineFunction( contextId ) > 0 )
  2210.         ent.Highlight_HideOutline( duration )
  2211. }
  2212.  
  2213. void function DumpEntityHighlight( entity ent )
  2214. {
  2215.     printt( "Highlight_GetCurrentContext:", ent.Highlight_GetCurrentContext() )
  2216.     printt( "Highlight_GetCurrentInsideOpacity:", ent.Highlight_GetCurrentInsideOpacity() )
  2217.     printt( "Highlight_GetCurrentOutlineOpacity:", ent.Highlight_GetCurrentOutlineOpacity() )
  2218.     printt( "Highlight_GetInheritHighlight:", ent.Highlight_GetInheritHighlight() )
  2219.     for ( int contextId = 0; contextId < HIGHLIGHT_MAX_CONTEXTS; contextId++ )
  2220.     {
  2221.         printt( "    Highlight_GetInsideFunction:", ent.Highlight_GetInsideFunction( contextId ) )
  2222.         printt( "    Highlight_GetOutlineFunction:", ent.Highlight_GetOutlineFunction( contextId ) )
  2223.         printt( "    Highlight_GetOutlineRadius:", ent.Highlight_GetOutlineRadius( contextId ) )
  2224.         printt( "    Highlight_GetParam 0:", contextId, ent.Highlight_GetParam( contextId, 0 ) )
  2225.         printt( "    Highlight_GetParam 1:", contextId, ent.Highlight_GetParam( contextId, 1 ) )
  2226.         printt( "    Highlight_GetState:", ent.Highlight_GetState( contextId ) )
  2227.         printt( "    Highlight_IsEntityVisible:", ent.Highlight_IsEntityVisible( contextId ) )
  2228.         printt( "    Highlight_IsAfterPostProcess:", ent.Highlight_IsAfterPostProcess( contextId ) )
  2229.         printt( "" )
  2230.     }
  2231. }
  2232.  
  2233.                    
  2234.                                                                                                                                            
  2235.                                                                                                                                                                                      
  2236. void function Highlight_SetAllianceProximityDrawFunc( entity ent, int contextId )
  2237. {
  2238.     HighlightContext ornull highlight = GetHighlightForId( ent.Highlight_GetState( contextId ) )
  2239.  
  2240.     if ( highlight == null )
  2241.         return
  2242.  
  2243.     expect HighlightContext( highlight )
  2244.  
  2245.     ent.Highlight_SetFarFadeDist( GetMaxDistForAllianceMemberProximity() )
  2246.     HighlightContext_SetDrawFunc( highlight, eHighlightDrawFunc.ALLIANCE_PROXIMITY )
  2247. }
  2248.                          
  2249.  
  2250. #endif
  2251.  
  2252. bool function UseDefaultOwnedHighlightBehavior( entity ent )
  2253. {
  2254.     if ( GetCurrentPlaylistVarBool( "squad_pets_enabled", false ) && IsValid( ent ) && ent.IsNPC() )
  2255.         return false
  2256.  
  2257.     return true
  2258. }
  2259.  
  2260. int function GetHighlightContextForEnt( entity viewPlayer, entity ent )
  2261. {
  2262.     int viewTeam = -1
  2263.     if ( IsValid( viewPlayer ) && viewPlayer.IsPlayer() )
  2264.         viewTeam = viewPlayer.GetTeam()
  2265.  
  2266.     int entTeam = ent.GetTeam()
  2267.  
  2268.     bool viewPlayerEmoting = viewPlayer == ent && viewPlayer.ContextAction_IsEmoting()
  2269.     bool wantsFriendlyHighlight = (!viewPlayerEmoting) || viewPlayer.IsDrivingVehicle()
  2270.  
  2271.     if ( ent.GetBossPlayer() == viewPlayer && UseDefaultOwnedHighlightBehavior( ent ) )
  2272.     {
  2273.         return HIGHLIGHT_CONTEXT_OWNED
  2274.     }
  2275.     else if ( IsFriendlyTeam( entTeam, viewTeam ) && wantsFriendlyHighlight )
  2276.     {
  2277.                
  2278.                                                                                                                            
  2279.                      
  2280.                                                                              
  2281.                                                                          
  2282.                                                                                                                                              
  2283.    
  2284.                                                                                                
  2285.                                              
  2286.                                                                                                                                                                          
  2287.    
  2288.        
  2289.         if ( ent.IsPlayer() && Bleedout_IsBleedingOut( ent ) && Bleedout_GetRevivingPlayer( ent ) == viewPlayer )
  2290.         {
  2291.             return HIGHLIGHT_CONTEXT_NEUTRAL
  2292.         }
  2293.         else if ( viewTeam == TEAM_SPECTATOR )
  2294.         {
  2295.             entity observerTarget = viewPlayer.GetObserverTarget()
  2296.             if ( IsValid(observerTarget) && ShouldCausticGasHighlight( observerTarget, ent ) )
  2297.                 return HIGHLIGHT_CHARACTER_SPECIAL_HIGHLIGHT
  2298.             if ( ShouldPrivateMatchObserverHighlight( viewPlayer, ent ) )
  2299.                 return HIGHLIGHT_CONTEXT_PRIVATE_MATCH_OBSERVER
  2300.         }
  2301.         else
  2302.         {
  2303.             return HIGHLIGHT_CONTEXT_FRIENDLY
  2304.         }
  2305.     }
  2306.     else if ( entTeam != TEAM_SPECTATOR )
  2307.     {
  2308.         #if CLIENT
  2309.             if ( ent == clGlobal.lastKiller )
  2310.                 return HIGHLIGHT_CONTEXT_DEATH_RECAP
  2311.         #endif
  2312.  
  2313.         if ( IsValid( viewPlayer ) )
  2314.         {
  2315.             entity viewTarget = viewPlayer
  2316.             if ( viewTeam == TEAM_SPECTATOR && IsValid( viewPlayer.GetObserverTarget() ) )
  2317.                 viewTarget = viewPlayer.GetObserverTarget()
  2318.  
  2319.             if ( !ent.IsPlayer() && IsFriendlyTeam( viewTarget.GetTeam(), entTeam) )                                                          
  2320.                 return HIGHLIGHT_CONTEXT_FRIENDLY
  2321.  
  2322.             if ( StatusEffect_GetSeverity( ent, eStatusEffect.sonar_detected ) && (viewPlayerEmoting || ent.IsHighlightEnabledForTeam( HIGHLIGHT_CONTEXT_SONAR, viewTarget.GetTeam() )) )
  2323.             {
  2324.                 return HIGHLIGHT_CONTEXT_SONAR
  2325.             }
  2326.                        
  2327.             else if ( StatusEffect_GetSeverity( ent, eStatusEffect.mortar_ring_reveal ) && ent.IsHighlightEnabledForTeam( HIGHLIGHT_CONTEXT_MOVEMENT_REVEALED, viewTarget.GetTeam() ) )
  2328.             {
  2329.                 return HIGHLIGHT_CONTEXT_MOVEMENT_REVEALED
  2330.             }
  2331.      
  2332.             else if ( ShouldShowNovaBlackholeHighlight( viewTarget, ent ) && ent.IsHighlightEnabledForTeam( HIGHLIGHT_CHARACTER_SPECIAL_HIGHLIGHT_2, viewTarget.GetTeam() ) )
  2333.             {
  2334.                 return HIGHLIGHT_CHARACTER_SPECIAL_HIGHLIGHT_2
  2335.             }
  2336.             else if ( ShouldCausticGasHighlight( viewTarget, ent ) )
  2337.             {
  2338.                 return HIGHLIGHT_CHARACTER_SPECIAL_HIGHLIGHT
  2339.             }
  2340.              
  2341.             else if ( ShouldMaggieHighlight( viewTarget, ent ) )
  2342.             {
  2343.                 return HIGHLIGHT_CONTEXT_MOVEMENT_REVEALED
  2344.             }
  2345.      
  2346.                
  2347.                                                        
  2348.    
  2349.                                                
  2350.    
  2351.      
  2352.              
  2353.                                                                                                                                                                  
  2354.    
  2355.                                  
  2356.    
  2357.      
  2358.             if ( ShouldPrivateMatchObserverHighlight( viewPlayer, ent ) )
  2359.             {
  2360.                 return HIGHLIGHT_CONTEXT_PRIVATE_MATCH_OBSERVER
  2361.             }
  2362.             else if ( entTeam != TEAM_UNASSIGNED )
  2363.             {
  2364.                 return HIGHLIGHT_CONTEXT_ENEMY
  2365.             }
  2366.         }
  2367.     }
  2368.  
  2369.     return HIGHLIGHT_CONTEXT_NEUTRAL
  2370. }
  2371.  
  2372. #if CLIENT
  2373. var function ReconScan_ShowHudForTarget( entity player, entity enemy, bool pinToEdge = true, asset ruiFile = $"ui/recon_scan_target.rpak", void functionref( var, entity, entity ) populateInfoCallback = null )
  2374. {
  2375.     if ( !(enemy in player.p.reconScannedByThisPlayerRefCount) )
  2376.         player.p.reconScannedByThisPlayerRefCount[enemy] <- 0
  2377.  
  2378.     player.p.reconScannedByThisPlayerRefCount[enemy]++
  2379.     if ( player.p.reconScannedByThisPlayerRefCount[enemy] > 1 )
  2380.         return
  2381.     int distance = int(Distance( player.GetOrigin(), enemy.GetOrigin() ))
  2382.  
  2383.  
  2384.     var rui = RuiCreate( ruiFile, clGlobal.topoFullScreen, RUI_DRAW_HUD, RuiCalculateDistanceSortKey( player.EyePosition(), enemy.GetOrigin() ) )
  2385.     InitHUDRui( rui, true )
  2386.  
  2387.     RuiSetBool( rui, "isVisible", true )
  2388.     RuiSetBool( rui, "pinToEdge", pinToEdge )
  2389.     RuiSetBool( rui, "showClampArrow", true )
  2390.     RuiSetString( rui, "hint", "" )
  2391.  
  2392.     RuiKeepSortKeyUpdated( rui, true, "pos" )
  2393.  
  2394.     if(populateInfoCallback != null)                                                          
  2395.         populateInfoCallback( rui, player, enemy )
  2396.  
  2397.     entity refEntity = enemy
  2398.     if (refEntity != null && refEntity.IsPlayerDecoy())
  2399.         refEntity = enemy.GetOwner()
  2400.  
  2401.                                                                                          
  2402.     if ( !IsValid( refEntity ) )
  2403.     {
  2404.         return null
  2405.     }
  2406.  
  2407.     int armorTier = EquipmentSlot_GetEquipmentTier( refEntity, "armor" )
  2408.     RuiSetInt( rui, "armorTier", armorTier )
  2409.  
  2410.     LootData data = EquipmentSlot_GetEquippedLootDataForSlot( refEntity, "armor" )
  2411.     bool isEvolving = data.lootType == eLootType.ARMOR && EvolvingArmor_IsEquipmentEvolvingArmor( data.ref )
  2412.     RuiSetBool( rui, "isEvolvingShield", isEvolving )
  2413.  
  2414.     float shieldFrac = GetShieldHealthFrac( refEntity )
  2415.     float healthFrac = GetHealthFrac( refEntity )
  2416.     RuiSetFloat( rui, "shieldFrac", shieldFrac )
  2417.     RuiSetFloat( rui, "healthFrac", healthFrac )
  2418.  
  2419.     RuiSetBool( rui, "useShadowFormFrame", refEntity.IsShadowForm() )
  2420.  
  2421.     RuiTrackFloat( rui, "shieldFrac", refEntity, RUI_TRACK_SHIELD_FRACTION )
  2422.     RuiTrackFloat( rui, "healthFrac", refEntity, RUI_TRACK_HEALTH )
  2423.     RuiTrackFloat3( rui, "pos", enemy, RUI_TRACK_OVERHEAD_FOLLOW )
  2424.  
  2425.     bool isChampion = GradeFlagsHas( enemy, eTargetGrade.CHAMPION )
  2426.     bool isKillLeader = GradeFlagsHas( enemy, eTargetGrade.CHAMP_KILLLEADER )
  2427.     RuiSetBool( rui, "isChampion", isChampion )
  2428.     RuiSetBool( rui, "isKillLeader", isKillLeader )
  2429.  
  2430.                          
  2431.         if ( Control_IsModeEnabled() )
  2432.         {
  2433.             bool isEXPLeader = GradeFlagsHas( enemy, eTargetGrade.EXP_LEADER )
  2434.             RuiSetBool( rui, "isEXPLeader", isEXPLeader )
  2435.         }
  2436.                                
  2437.  
  2438.     player.p.reconScanRUIs[enemy] <- rui
  2439.    
  2440.                                                                                                              
  2441.     thread ReconScan_TrackTargetData( refEntity, enemy, player )
  2442.    
  2443.     return rui
  2444. }
  2445. #endif
  2446.  
  2447. #if CLIENT
  2448. void function ReconScan_TrackTargetData( entity refEntity, entity enemy, entity player )
  2449. {
  2450.     refEntity.EndSignal("ReconScan_HUDRemove")
  2451.  
  2452.                                                                                          
  2453.     if ( refEntity != enemy )
  2454.         enemy.EndSignal( "ReconScan_HUDRemove" )
  2455.  
  2456.     refEntity.EndSignal("OnDeath")
  2457.     refEntity.EndSignal("OnDestroy")
  2458.  
  2459.     int curArmorTier = EquipmentSlot_GetEquipmentTier( refEntity, "armor" )
  2460.     int newArmorTier = 0
  2461.  
  2462.     LootData data = EquipmentSlot_GetEquippedLootDataForSlot( refEntity, "armor" )
  2463.     bool curIsEvolving =  data.lootType == eLootType.ARMOR && EvolvingArmor_IsEquipmentEvolvingArmor( data.ref )
  2464.     bool newIsEvolving = false
  2465.  
  2466.     bool curIsShadowForm =   refEntity.IsShadowForm()
  2467.     bool newIsShadowForm = false
  2468.  
  2469.     while( true )
  2470.     {
  2471.         var rui = null
  2472.  
  2473.         if ( enemy in player.p.reconScanRUIs )
  2474.         {
  2475.             rui = player.p.reconScanRUIs[enemy]
  2476.         }
  2477.  
  2478.                    
  2479.         if( rui != null )
  2480.         {
  2481.             newArmorTier = EquipmentSlot_GetEquipmentTier( refEntity, "armor" )
  2482.  
  2483.             if ( newArmorTier != curArmorTier )
  2484.             {
  2485.                 curArmorTier = newArmorTier
  2486.                 RuiSetInt( rui, "armorTier", curArmorTier )
  2487.             }
  2488.  
  2489.                              
  2490.             data          = EquipmentSlot_GetEquippedLootDataForSlot( refEntity, "armor" )
  2491.             newIsEvolving = data.lootType == eLootType.ARMOR && EvolvingArmor_IsEquipmentEvolvingArmor( data.ref )
  2492.             if ( newIsEvolving != curIsEvolving )
  2493.             {
  2494.                 curIsEvolving = newIsEvolving
  2495.                 RuiSetBool( rui, "isEvolvingShield", curIsEvolving )
  2496.             }
  2497.  
  2498.                          
  2499.             newIsShadowForm = refEntity.IsShadowForm()
  2500.             if ( newIsShadowForm != curIsShadowForm)
  2501.             {
  2502.                 curIsShadowForm = newIsShadowForm
  2503.                 RuiSetBool( rui, "useShadowFormFrame", curIsShadowForm )
  2504.             }
  2505.  
  2506.         }
  2507.         wait 0.1
  2508.     }
  2509. }
  2510.  
  2511. #endif
  2512.  
  2513. #if CLIENT
  2514. void function ReconScan_RemoveHudForTarget( entity player, entity enemy )
  2515. {
  2516.     if (!(enemy in player.p.reconScannedByThisPlayerRefCount))
  2517.     {
  2518.         player.p.reconScannedByThisPlayerRefCount[enemy] <- 0
  2519.         return
  2520.     }
  2521.  
  2522.     player.p.reconScannedByThisPlayerRefCount[enemy]--
  2523.     if ( player.p.reconScannedByThisPlayerRefCount[enemy] > 0 )
  2524.         return
  2525.  
  2526.     enemy.Signal("ReconScan_HUDRemove")
  2527.     if ( enemy in player.p.reconScanRUIs )
  2528.     {
  2529.         if ( player.p.reconScanRUIs[enemy] != null )
  2530.         {
  2531.             RuiDestroyIfAlive( player.p.reconScanRUIs[enemy] )
  2532.             player.p.reconScanRUIs[enemy] = null
  2533.         }
  2534.  
  2535.         delete player.p.reconScanRUIs[enemy]
  2536.     }
  2537. }
  2538. #endif
  2539.  
  2540. #if CLIENT
  2541. bool function TargetIsHighlightedForMyTeam( entity ent )
  2542. {
  2543.     entity viewPlayer = GetLocalViewPlayer()
  2544.     if ( StatusEffect_GetSeverity( ent, eStatusEffect.sonar_detected ) && ent.IsHighlightEnabledForTeam( HIGHLIGHT_CONTEXT_SONAR, viewPlayer.GetTeam() ) )
  2545.         return true
  2546.  
  2547.     return false
  2548. }
  2549. #endif
  2550.  
  2551.  
  2552. HighlightContext ornull function GetHighlightForId( int id )
  2553. {
  2554.     foreach ( HighlightContext highlight in shGlobal.highlight )
  2555.     {
  2556.         if ( highlight.highlightId == id )
  2557.             return highlight
  2558.     }
  2559.  
  2560.     return null
  2561. }
  2562.  
  2563.  
  2564. bool function ShouldCausticGasHighlight( entity viewPlayer, entity ent )
  2565. {
  2566.     if ( !viewPlayer.HasPassive( ePassives.PAS_GAS_GEAR ) && !viewPlayer.HasPassive( ePassives.PAS_GAS_PROTECTION ) )
  2567.         return false
  2568.  
  2569.     if ( ent.IsPlayer() && ent.HasPassive( ePassives.PAS_GAS_GEAR ) )
  2570.         return false
  2571.  
  2572.     if ( !StatusEffect_GetSeverity( ent, eStatusEffect.gas_cloud ) )
  2573.         return false
  2574.  
  2575.     return true
  2576. }
  2577.  
  2578.  
  2579.                          
  2580. bool function ShouldPrivateMatchObserverHighlight( entity viewPlayer, entity ent )
  2581. {
  2582.     int viewTeam = viewPlayer.GetTeam()
  2583.     int entTeam  = ent.GetTeam()
  2584.  
  2585.     if ( !IsPrivateMatch() )
  2586.         return false
  2587.  
  2588.     if ( viewTeam != TEAM_SPECTATOR )
  2589.         return false
  2590.  
  2591.     if ( !ent.IsPlayer() )
  2592.         return false
  2593.  
  2594.     if ( PrivateMatch_IsObserverHighlightEnabled( viewPlayer ) == false )
  2595.         return false
  2596.  
  2597.     return true
  2598. }
  2599.                                
  2600.  
  2601. #if SERVER
  2602.                                                                                    
  2603.  
  2604.                                              
  2605.                                            
  2606.  
  2607.                                      
  2608.                                                  
  2609.  
  2610.  
  2611.                                                                                    
  2612.  
  2613.                                              
  2614.                                            
  2615.        
  2616.                                          
  2617.  
  2618.                                                                                  
  2619.  
  2620.                                                
  2621.                                                      
  2622.  
  2623. #endif
  2624.  
  2625.              
  2626. bool function ShouldMaggieHighlight( entity viewPlayer, entity ent )
  2627. {
  2628.     if ( !PlayerHasPassive( viewPlayer, ePassives.PAS_WARLORDS_IRE ) )
  2629.         return false
  2630.  
  2631.     return PassiveWarlordsIre_EntityShouldBeHighlighted( ent )
  2632. }
  2633.      
  2634.  
  2635.  
  2636.                
  2637.                                                                      
  2638.  
  2639.                                                                            
  2640.              
  2641.  
  2642.            
  2643.  
  2644.      
  2645.  
  2646. bool function ShouldShowNovaBlackholeHighlight( entity viewPlayer, entity ent )
  2647. {
  2648.     if ( !StatusEffect_GetSeverity( ent, eStatusEffect.in_black_hole_field ) )
  2649.         return false
  2650.  
  2651.     return true
  2652. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement