Įƒ*žy˜@øZpO·m.MʐPļׇĘZ_Ļø˜NoneGfxGetLocalPlayerControllerUSARUTRenderOverlaysSystemCoreEngineAddInteractionSetZoomBlendColorTickbRequiresTick FriendlyNamebSkipActorPropertyReplicationbOnlyDirtyReplicationbAlwaysRelevant bVisibleNVInteraction PreBeginPlayPostBeginPlayNoiseInteraction Movement RemoteRoleHUDInteraction Description LightColorForce Collision LightingKarmaRemoveInteraction PostRenderTimer NightVisionNoiseHUD ViewportMutatorPlayerController ControllerCanvas GameInfo LevelInfo xEmitterLevel FinalBlendPawn ReturnValue Rotation LocationRGYiX InteractionBA ScriptTextPlayerActorStyleYawPitchClassbUnlitPackage TextBufferObject AmbientGlow DrawColorLightBrightness LightRadius FunctionColorRotatorVectorCDrawBoxDrawHorizontal FontScaleX FontScaleYSetPos SetDrawColor LightEffect DrawVertical LightTypenextControllerfogChargeControllerListGameNetMode NextMutatorPCM BaseMutatorP DeltaTimeViewportOwnerStructMasterSizeXSizeYbDynamicLight LightHueVal XGameShadersZoomFX ModuNoiseStructPropertyObjectPropertyborderXborderYfocusXfocusY innerArrowsX innerArrowsY ArrowColor FocusColor ChargeColorRechargeOrigin RechargeSizeNoTargetColor TargetColortestYtestXLastFOVzoomedclr tileScaleX tileScaleYbXbYfXfYbarOrgXbarOrgY barSizeX barSizeYchargeEmittertXtYFloatProperty BoolPropertyInteractionMaster IntProperty ByteProperty bFindPlayerNVMute bFoundMuteYaw2€ƒ „„„€ƒ €ƒ#Ž ]ŒŒŒŽ%Ž+„=U(„!,„N‰|‰‰‰‰‰g—&—ˆ*—u—ˆˆ.0-1/}€ƒ€ƒƒƒ89:;<t>El?@hŒA2TCF€ƒƒ€ƒ€ƒ^€ƒLpO’’’’’’’’’’’’’’’’’’OlCsAŽ{+‰ –ĻWˆęł‹b¾ė• 1b‰ –ĻWˆęł‹b¾ė• 1b‰ –ĻWˆęł‹b¾ė• 1bŽ+Šś{Ž+Šś{Ž+Šś{Ž+Šś{Ÿ%1Wƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|‡Ó ÓNPŽqz!’’’’’’’’€’’’’’’’’’’2!RÜ×מŽ+Šś{‹b¾ė„&ß»„&ß»„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»ˆęł‰ –ĻWŸ%1W‹b¾ėˆęł‹b¾ėˆęł‰ –ĻWŸ%1W‡ ] Night Vision]ywVision through specialized night googles, casting a bluish hue on the world. ||Net Support: Full |Bot Support: FullÓ SSŽtF#’’’’’’’’€’’’’’’’’’’2!S¾®ÕŽ+Šś{‹b¾ė„&ß»„&ß»„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»ˆęł‰ –ĻWŸ%1W‹b¾ėˆęł‹b¾ėˆęł‰ –ĻWŸ%1W‡ ] Night Vision]ywVision through specialized night googles, casting a bluish hue on the world. ||Net Support: Full |Bot Support: FullÓ SSDVWXYZ[Q_L¹ĀIY€? ¬9?– D¬9?ššCU«9 V«:W«; X«< Z«7 [«8 Q«6«' P«6©'N«6«& L«6©& ­9=,’“<aŅ Ć9?–9?šDDØB6ŖØ9=,’  Œ cM 1N6¹ $6ŗ 9=,’6¾ $6Ŗ 9=,’MØ  °\a s4 -( w™˜”ž*ēpNVInteraction:9V™˜”ž™˜”žļw*Ų¢a/!!-' -Į  b€¬xK$BK  I±GOdf 'ŒBŒiŒjŒmnoŒpŒqŒrŒ)Œksv w6±7R¬e4$J4  ²A EF”»Dw*-‚w*›9:£,`£9=,’-®(Ā$“$µC·$¶pA-ø'½ y3 1N6¹$6ŗ$6¾9=,’6Ŗ9=,’3Ø €Œ{LĮå6D€?¬9?– D¬9?ššC=«C>«AE«@T«?2«G/«F-«6«).«6©)0«6«*1«6©* ­9=,’“Ē$@$@$@$@“<aŅ Ć9?–9?šDDĒ9=,’9=,’9=,’9=,’  ³C~ 6ķkg-"r* œ„!USARUT.NVInteraction-"(  €ˆDB%–xš9:”§9:$*/a0 „on‚w.ˆ*w.Ą.ˆœ*,.ˆo10, ¤E w›9:”§9:$/r*-"'  œ „!USARUT.NVInteraction ¤ æ" ° a€?' ²H DīF”»Dw*-‚w*›9:£,`£9=,’-®(Ā$“$µC·$¶pA-ø'½ $€³JG 5×lh-r* $œ$„"USARUT.HUDInteraction$-(  €ˆKI%xš9:”§9:$*/a0 „on‚w.ˆ*w.Ą.ˆœ*(.ˆo10( ¤Lž€x›9:”§9:$/r*-' œ„"USARUT.HUDInteraction¤ æ Ø a€?' ²S EF”»Dw*-‚w*›9:£,`£9=,’-®(Ā$“$µC·$¶pA-ø'½ °@P t: -#( w™˜”ž*ēpNVInteraction:9V™˜”ž ™˜”žļw *Ų ¢a/!"-#'ļ  ¢„ -#Į  Q€ €³iR 6źnj-r* œ„$USARUT.NoiseInteraction-(  USVWXYZ[\]^Œ_Œ`ŒaŒbŒc—d—e f5±€ˆ¬TH$;H  kg%“xš9:”§9:$*/a0 „on‚w.ˆ*w.Ą.ˆœ*+.ˆo10+ hJ /ŃR6¹9=,’6ŗ9=,’6¾9=,’6Ŗ9=,’JØ ¤l‚z›9:”§9:$/r*-' œ„$USARUT.NoiseInteraction¤ æ Ŗ a€?' j@É5 ­9=,’ 6Ģ™˜ Æ 6Ķ™˜ ÆĻĄ?ÉĄ?aÖ000!)“Æ9?š«Ą?]aŃpppPosition: 9X™˜ Ī Rotation: 9Y™˜ Æ-“Æ9?‘–,®ČB!)Ė®HC«!9?,® B“9?‘š,“xģ’’N–ˆ9D­9?’ 9?A–%” ¾%<“Æ®¬9?’ˆ9?,29?‘–,ąB BaŃ000“ 8@<“Æ®¬9?’ˆ9?,29?‘–,ąB BaŃ090“ ²€<“Æ®¬9?’ˆ9?,29?‘–,ąB BaŃ180“ ,Ą<“Æ®¬9?’ˆ9?,29?‘–,ąB BaŃ270“ ¦ <“Æ®¬9?’ˆ9?,29?‘–,ąB BaŃ045“ `<“Æ®¬9?’ˆ9?,29?‘–,ąB BaŃ135“ š <“Æ®¬9?’ˆ9?,29?‘–,ąB BaŃ225“ ą<“Æ®¬9?’ˆ9?,29?‘–,ąB BaŃ315“ ’’|“­9?’ 9?@9?%:¼®Æ9?‘–,ČB9?‘’ˆ,2šACį“­9?’ 9?9?%:¼®Æ9?‘–,ČB9?‘’ˆ,2 ACC“­9?’ 9?9?%:¼®Æ9?‘–,ČB9?‘’ˆ,2 A”&üi— }¢ I“®9?‘š,««¬9? 9?9?š9?,TŹ®9?‘š,««¬9? 9?9?š9?,9?–  INclass HUDInteraction extends Interaction; //places a sniper style HUD with blue forced completely on. //Thanks goes PfPhoenix and the Mod Exemplar Project for making Radar2003, //without I wouldn't have looked at interactions to do this with. var HUD NVMute; var(Gfx) float testX; var(Gfx) float testY; var(Gfx) float borderX; var(Gfx) float borderY; var(Gfx) float focusX; var(Gfx) float focusY; var(Gfx) float innerArrowsX; var(Gfx) float innerArrowsY; var(Gfx) color ArrowColor; var(Gfx) Color TargetColor; var(Gfx) Color NoTargetColor; var(Gfx) Color FocusColor; var(Gfx) Color ChargeColor; var(Gfx) vector RechargeOrigin; var(Gfx) vector RechargeSize; var transient float LastFOV; var() bool zoomed; var() xEmitter chargeEmitter; var Canvas C; function PostRender(Canvas C) { RenderOverlays(C); return; } // compensate for bright fog simulated function SetZoomBlendColor(Canvas c) { local color clr; clr.R = 255; clr.G = 255; clr.B = 255; clr.A = 255; c.DrawColor = clr; } simulated event RenderOverlays( Canvas Canvas ) { local int i; local int Yaw; local int Pitch; local int Yaw2; local float fx, fy; C = Canvas; SetZoomBlendColor(Canvas); Canvas.Style = 255; Yaw = ViewportOwner.Actor.Rotation.Yaw; Pitch = ViewportOwner.Actor.Rotation.Pitch; Canvas.FontScaleY = 1.5; Canvas.FontScaleX = 1.5; Canvas.TextSize("000", fx, fy); // Print the bot's location and rotation to the viewport Canvas.SetPos(0.0, Canvas.SizeY - (fy * 1.5)); Canvas.DrawText("Position: " $ ViewportOwner.Actor.Pawn.Location $ " Rotation: " $ ViewportOwner.Actor.Rotation); // Draw a compass at the top center of the viewport // Draw a bounding box Canvas.SetPos(Canvas.SizeX/2 - (100.0 + fx), 0.0); Canvas.DrawBox(Canvas, 200.0 + fx * 2, 40.0 + fy); Canvas.SetPos(0.0, Canvas.SizeY/2); // Draw the compass ticks Canvas.SetPos(0.0, 0.0); for(i = -5000; i < 5000; i += 1) { Yaw2 = (Yaw + i) % 65536; if(Yaw2 < 0) Yaw2 += 65536; switch(Yaw2) { case 0: Canvas.SetPos((i + 5000)/50 + Canvas.SizeX/2 - 112.0, 35.0); Canvas.DrawText("000"); Canvas.SetPos(0,0); break; case 16384: Canvas.SetPos((i + 5000)/50 + Canvas.SizeX/2 - 112.0, 35.0); Canvas.DrawText("090"); Canvas.SetPos(0,0); break; case 32768: Canvas.SetPos((i + 5000)/50 + Canvas.SizeX/2 - 112.0, 35.0); Canvas.DrawText("180"); Canvas.SetPos(0,0); break; case 49152: Canvas.SetPos((i + 5000)/50 + Canvas.SizeX/2 - 112.0, 35.0); Canvas.DrawText("270"); Canvas.SetPos(0,0); break; case 8192: Canvas.SetPos((i + 5000)/50 + Canvas.SizeX/2 - 112.0, 35.0); Canvas.DrawText("045"); Canvas.SetPos(0,0); break; case 24576: Canvas.SetPos((i + 5000)/50 + Canvas.SizeX/2 - 112.0, 35.0); Canvas.DrawText("135"); Canvas.SetPos(0,0); break; case 40960: Canvas.SetPos((i + 5000)/50 + Canvas.SizeX/2 - 112.0, 35.0); Canvas.DrawText("225"); Canvas.SetPos(0,0); break; case 57344: Canvas.SetPos((i + 5000)/50 + Canvas.SizeX/2 - 112.0, 35.0); Canvas.DrawText("315"); Canvas.SetPos(0,0); break; } if((Yaw + i) % 16384 == 0) { Canvas.DrawVertical((Canvas.SizeX/2 - 100.0) + (i + 5000)/50, 30.0); } else if((Yaw + i) % 4096 == 0) { Canvas.DrawVertical((Canvas.SizeX/2 - 100.0) + (i + 5000)/50, 20.0); } else if((Yaw + i) % 256 == 0) { Canvas.DrawVertical((Canvas.SizeX/2 - 100.0) + (i + 5000)/50, 10.0); } } // Draw an artificial horizon //Canvas.SetPos(0.0, Canvas.SizeY); // for line if(Pitch > 32000) { // lower half Pitch -= 65536; } Canvas.SetPos(0.0, Canvas.SizeY/2 + (Float(Pitch) / 65536) * Canvas.SizeY * 2); //Canvas.SetDrawColor(128,128,128,128); Canvas.DrawHorizontal(Canvas.SizeY/2 + (Float(Pitch) / 65536) * Canvas.SizeY * 2, Canvas.SizeX); //Canvas.DrawRect(texture'red', Canvas.SizeX, Canvas.SizeY); // Canvas.SizeY/2 + (Float(Pitch) / 65536) * Canvas.SizeY * 2); //Canvas.SetDrawColor(128,128,128,128); //Canvas.SetDrawColor(255,255,255,255); // Canvas.SetPos(0.0, Canvas.SizeY/2); //Canvas.DrawText("Pitch: " $ Pitch $ ", Calc: " $ (Float(Pitch) / 65536) * Canvas.SizeY * 2); // Line center is at X == Canvas.SizeY/2 + (Float(Pitch) / 65536) * Canvas.SizeY * 2, Y == Canvas.SizeX } function Tick(float DeltaTime) { local Mutator M; local bool bFoundMute; bFoundMute = false; if(ViewPortOwner.Actor.Level.Game.BaseMutator != none) { Log("HUDInteraction:"$ViewPortOwner.Actor.Level.Game.BaseMutator); for ( M=ViewPortOwner.Actor.Level.Game.BaseMutator; M!=None; M=M.NextMutator ) { if ( M.NextMutator.isA('HUD') ) { bFoundMute=true; break; } } if (!bFoundMute ) { Master.RemoveInteraction(Self); return; } } } nu’’’’’’’’’’’’’’’’’’Wo`ę$Ž{+‰ –ĻWˆęł‹b¾ė• 1b‰ –ĻWˆęł‹b¾ė• 1b‰ –ĻWˆęł‹b¾ė• 1bŽ+Šś{Ž+Šś{Ž+Šś{Ž+Šś{Ÿ%1Wƒ ¾|‰ –ĻWˆęł‰ –ĻWˆęłƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|‰ –ĻWˆęłĶ &‰ –ĻWˆęłƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|‡Ó ÓU+class NoiseInteraction extends Interaction; //places a sniper style HUD with blue forced completely on. //Thanks goes PfPhoenix and the Mod Exemplar Project for making Radar2003, //without I wouldn't have looked at interactions to do this with. var NoiseInteraction NVMute; var(Gfx) float testX; var(Gfx) float testY; var(Gfx) float borderX; var(Gfx) float borderY; var(Gfx) float focusX; var(Gfx) float focusY; var(Gfx) float innerArrowsX; var(Gfx) float innerArrowsY; var(Gfx) color ArrowColor; var(Gfx) Color TargetColor; var(Gfx) Color NoTargetColor; var(Gfx) Color FocusColor; var(Gfx) Color ChargeColor; var(Gfx) vector RechargeOrigin; var(Gfx) vector RechargeSize; var transient float LastFOV; var() bool zoomed; var() xEmitter chargeEmitter; var Canvas C; function PostRender(Canvas C) { RenderOverlays(C); return; } // compensate for bright fog simulated function SetZoomBlendColor(Canvas c) { local Byte val; local color clr; local color fog; clr.R = 0; clr.G = 0; clr.B = 255; clr.A = 255; c.DrawColor = clr; } simulated event RenderOverlays( Canvas Canvas ) { local float tileScaleX; local float tileScaleY; local float bX; local float bY; local float fX; local float fY; local float charge; local float tX; local float tY; local float barOrgX; local float barOrgY; local float barSizeX; local float barSizeY; C = Canvas; charge = 1.0; tileScaleX = Canvas.SizeX / 640.0f; tileScaleY = Canvas.SizeY / 480.0f; bX = borderX * tileScaleX; bY = borderY * tileScaleY; fX = focusX * tileScaleX; fY = focusY * tileScaleX; tX = testX * tileScaleX; tY = testY * tileScaleX; barOrgX = RechargeOrigin.X * tileScaleX; barOrgY = RechargeOrigin.Y * tileScaleY; barSizeX = RechargeSize.X * tileScaleX; barSizeY = RechargeSize.Y * tileScaleY; SetZoomBlendColor(Canvas); Canvas.Style = 255; Canvas.SetPos(0,0); // Draw screen noise Canvas.SetDrawColor(64,64,64,64); Canvas.SetPos(0.0, 0.0); Canvas.DrawTile( Material'XGameShaders.ModuNoise', Canvas.SizeX, Canvas.SizeY, 0.0, 0.0, 512, 512 ); Canvas.SetDrawColor(255,255,255,255); } function Tick(float DeltaTime) { local int i; local Mutator M; local bool bFoundMute; bFoundMute = false; if(ViewPortOwner.Actor.Level.Game.BaseMutator != none) { Log("NVInteraction:"$ViewPortOwner.Actor.Level.Game.BaseMutator); for ( M=ViewPortOwner.Actor.Level.Game.BaseMutator; M!=None; M=M.NextMutator ) { if ( M.NextMutator.isA('Noise') ) { bFoundMute=true; break; } } if (!bFoundMute ) { Master.RemoveInteraction(Self); return; } } } Pclass NightVision extends Mutator; //more thanks to MEP as I ended up using that code to //get this net friendly var bool bFindPlayer; event PreBeginPlay() { SetTimer(1.0,true); } simulated function PostBeginPlay() { local Player P; if (Level.NetMode != NM_DedicatedServer) { if (GetLocalPlayerController() == None) { bFindPlayer = True; return; } P = GetLocalPlayerController().Player; P.InteractionMaster.AddInteraction("USARUT.NVInteraction", P); } Super.PostBeginPlay(); } simulated function PlayerController GetLocalPlayerController() { local Controller C; local PlayerController PC; if (Level.NetMode == NM_DedicatedServer) return None; foreach AllActors(class'Controller', C) { if ((PlayerController(C) != None) && (Viewport(PlayerController(C).Player) != None)) { PC = PlayerController(C); break; } } return PC; } simulated function Tick(float DeltaTime) { local Player P; local int i; if (bFindPlayer) { if (GetLocalPlayerController() == None) return; P = GetLocalPlayerController().Player; P.InteractionMaster.AddInteraction("USARUT.NVInteraction", P); bFindPlayer = False; } return; } function Timer() { local Controller C; for (C = Level.ControllerList; C != None; C = C.NextController) { if (C.Pawn != none && C.Pawn.AmbientGlow != 96) { C.Pawn.AmbientGlow=255; C.Pawn.bUnlit=False; C.Pawn.LightType=LT_Strobe; C.Pawn.LightEffect=LE_QuadraticNonIncidence; C.Pawn.LightBrightness=255; C.Pawn.LightHue=28; C.Pawn.LightRadius=15; C.Pawn.bDynamicLight=true; } } } U+class NVInteraction extends Interaction; //places a sniper style HUD with blue forced completely on. //Thanks goes PfPhoenix and the Mod Exemplar Project for making Radar2003, //without I wouldn't have looked at interactions to do this with. var NightVision NVMute; var(Gfx) float testX; var(Gfx) float testY; var(Gfx) float borderX; var(Gfx) float borderY; var(Gfx) float focusX; var(Gfx) float focusY; var(Gfx) float innerArrowsX; var(Gfx) float innerArrowsY; var(Gfx) color ArrowColor; var(Gfx) Color TargetColor; var(Gfx) Color NoTargetColor; var(Gfx) Color FocusColor; var(Gfx) Color ChargeColor; var(Gfx) vector RechargeOrigin; var(Gfx) vector RechargeSize; var transient float LastFOV; var() bool zoomed; var() xEmitter chargeEmitter; var Canvas C; function PostRender(Canvas C) { RenderOverlays(C); return; } // compensate for bright fog simulated function SetZoomBlendColor(Canvas c) { local Byte val; local color clr; local color fog; clr.R = 0; clr.G = 255; clr.B = 0; clr.A = 255; c.DrawColor = clr; } simulated event RenderOverlays( Canvas Canvas ) { local float tileScaleX; local float tileScaleY; local float bX; local float bY; local float fX; local float fY; local float charge; local float tX; local float tY; local float barOrgX; local float barOrgY; local float barSizeX; local float barSizeY; C = Canvas; charge = 1.0; tileScaleX = Canvas.SizeX / 640.0f; tileScaleY = Canvas.SizeY / 480.0f; bX = borderX * tileScaleX; bY = borderY * tileScaleY; fX = focusX * tileScaleX; fY = focusY * tileScaleX; tX = testX * tileScaleX; tY = testY * tileScaleX; barOrgX = RechargeOrigin.X * tileScaleX; barOrgY = RechargeOrigin.Y * tileScaleY; barSizeX = RechargeSize.X * tileScaleX; barSizeY = RechargeSize.Y * tileScaleY; SetZoomBlendColor(Canvas); Canvas.Style = 255; Canvas.SetPos(0,0); Canvas.DrawTile( Material'XGameShaders.ModuNoise', Canvas.SizeX, Canvas.SizeY, 0.0, 0.0, 512, 512 ); // !! hardcoded size Canvas.DrawColor = FocusColor; Canvas.DrawColor.A = 255; // 255 was the original -asp. WTF??!?!?! } function Tick(float DeltaTime) { local int i; local Mutator M; local bool bFoundMute; bFoundMute = false; if(ViewPortOwner.Actor.Level.Game.BaseMutator != none) { Log("NVInteraction:"$ViewPortOwner.Actor.Level.Game.BaseMutator); for ( M=ViewPortOwner.Actor.Level.Game.BaseMutator; M!=None; M=M.NextMutator ) { if ( M.NextMutator.isA('NightVision') ) { bFoundMute=true; break; } } if (!bFoundMute ) { Master.RemoveInteraction(Self); return; } } } r`’’’’’’’’’’’’’’’’’’s—hcoŽ{+‰ –ĻWˆęł‹b¾ė• 1b‰ –ĻWˆęł‹b¾ė• 1b‰ –ĻWˆęł‹b¾ė• 1bŽ+Šś{Ž+Šś{Ž+Šś{Ž+Šś{Ÿ%1Wƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|ƒ ¾|‡Ó Ó{class HUD extends Mutator; //more thanks to MEP as I ended up using that code to //get this net friendly var bool bFindPlayer; event PreBeginPlay() { SetTimer(1.0,true); } simulated function PostBeginPlay() { local Player P; if (Level.NetMode != NM_DedicatedServer) { if (GetLocalPlayerController() == None) { bFindPlayer = True; return; } P = GetLocalPlayerController().Player; P.InteractionMaster.AddInteraction("USARUT.HUDInteraction", P); } Super.PostBeginPlay(); } simulated function PlayerController GetLocalPlayerController() { local Controller C; local PlayerController PC; if (Level.NetMode == NM_DedicatedServer) return None; foreach AllActors(class'Controller', C) { if ((PlayerController(C) != None) && (Viewport(PlayerController(C).Player) != None)) { PC = PlayerController(C); break; } } return PC; } simulated function Tick(float DeltaTime) { local Player P; if (bFindPlayer) { if (GetLocalPlayerController() == None) return; P = GetLocalPlayerController().Player; P.InteractionMaster.AddInteraction("USARUT.HUDInteraction", P); bFindPlayer = False; } return; } function Timer() { local Controller C; for (C = Level.ControllerList; C != None; C = C.NextController) { if (C.Pawn != none && C.Pawn.AmbientGlow != 96) { C.Pawn.AmbientGlow=255; C.Pawn.bUnlit=False; C.Pawn.LightType=LT_Strobe; C.Pawn.LightEffect=LE_QuadraticNonIncidence; C.Pawn.LightBrightness=255; C.Pawn.LightHue=28; C.Pawn.LightRadius=15; C.Pawn.bDynamicLight=true; } } } °mv «ļ-%( w™˜”ž*ēpHUDInteraction:9V™˜”ž™˜”žšw*Ł¢a/!#-%'𢦠-%Į  €Pclass Noise extends Mutator; //more thanks to MEP as I ended up using that code to //get this net friendly var bool bFindPlayer; event PreBeginPlay() { SetTimer(1.0,true); } simulated function PostBeginPlay() { local Player P; if (Level.NetMode != NM_DedicatedServer) { if (GetLocalPlayerController() == None) { bFindPlayer = True; return; } P = GetLocalPlayerController().Player; P.InteractionMaster.AddInteraction("USARUT.NoiseInteraction", P); } Super.PostBeginPlay(); } simulated function PlayerController GetLocalPlayerController() { local Controller C; local PlayerController PC; if (Level.NetMode == NM_DedicatedServer) return None; foreach AllActors(class'Controller', C) { if ((PlayerController(C) != None) && (Viewport(PlayerController(C).Player) != None)) { PC = PlayerController(C); break; } } return PC; } simulated function Tick(float DeltaTime) { local Player P; local int i; if (bFindPlayer) { if (GetLocalPlayerController() == None) return; P = GetLocalPlayerController().Player; P.InteractionMaster.AddInteraction("USARUT.NoiseInteraction", P); bFindPlayer = False; } return; } function Timer() { local Controller C; for (C = Level.ControllerList; C != None; C = C.NextController) { if (C.Pawn != none && C.Pawn.AmbientGlow != 96) { C.Pawn.AmbientGlow=255; C.Pawn.bUnlit=False; C.Pawn.LightType=LT_Strobe; C.Pawn.LightEffect=LE_QuadraticNonIncidence; C.Pawn.LightBrightness=255; C.Pawn.LightHue=28; C.Pawn.LightRadius=15; C.Pawn.bDynamicLight=true; } } } ŽwM"’’’’’’’’€’’’’’’’’’’2!x|&RwŽ+Šś{‹b¾ė„&ß»„&ß»„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»Ķ &„&ß»ˆęł‰ –ĻWŸ%1W‹b¾ėˆęł‹b¾ėˆęł‰ –ĻWŸ%1W‡ ] Night Vision]ywVision through specialized night googles, casting a bluish hue on the world. ||Net Support: Full |Bot Support: FullÓ SSBB@’’’’(@’’’’'@ž’’’O@’’’’<@ž’’’D@’’’’&@’’’’;@ž’’’o@’’’’*dł’’’Joü’’’.@’’’’%@’’’’.@’’’’7@ž’’’I@ž’’’nIż’’’Roś’’’,@’’’’)Rż’’’fdł’’’Lo÷’’’<oš’’’cRż’’’g@ž’’’Poų’’’;oõ’’’[oė’’’`@’’’’Q@ž’’’R@ž’’’@oņ’’’]Sś’’’EIś’’’o÷’’’Q@ž’’’CSõ’’’\nż’’’FOé’’’4Sō’’’9Oé’’’6Iš’’’Sż’’’=Pś’’’Anś’’’0Iš’’’ @’’’’+Iś’’’ Iś’’’ Sś’’’TOś’’’GOś’’’HSś’’’iPś’’’hSō’’’2Sō’’’3oõ’’’ZIż’’’Uoü’’’WSō’’’8Iņ’’’@’’’’$oš’’’eSś’’’V-»’’’mBkB¼’’’ldł’’’KIż’’’S@ž’’’SOż’’’PIż’’’OIż’’’NRŗ’’’>Rŗ’’’?nś’’’1Oż’’’QŠ­( N# ­5 [#ІM g#ŠM t#ŠzM A$Š€( N$Š\( [$…€B h$…\B t$Š_ @% ­> M%’_AY% ­? g%’ŖA s%’{A@&Š`_ N&е_ [&Š©M h&…€C u&…\C A'ŠŠM N' ­W ['ŠƒM g'Š“at'ЁaB(›`V P(›ST \(Š«a h(›øT u(Š‹a A)…­G N)Š„a Z)…­F g)›RT s)›V )Šˆa K*›µV X*’³zd*’³y r*ŠŠ^ *’Oy L+’OzY+Š©^ g+Šƒ^ t+…€H A,…€I M,…€N Y,…€J e,…€K q,…€M },Š{MI-ŠyM W-ŠÆM d-ŠOM q-…³~ ~-…³} J.…³p V.…³q b.…³r n.…³s z.…€D G/…€E S/…Os `/…Or m/…Oq y/’³wF0…Op T0…€Y a0…€F m0…O} z0…O~ G1ŠØM T1гM a1ŠŖM n1ŠcM {1…\K H2Š_MT2…\J b2_o2…\I N8…\H [8Ž!Sh8Ž#S{@…€G NI…\D [I…\E hI…\F uI…\G BJ…\Y OJ…\M \J…\N iJ‘³wvJ’_X mOČ_j zO‘³ MGP‘°³ ZTQ…`b nT `5 {T‘¬³)GUгLpUŠOU~U›³@ MV…³ ZV’³x gV’³{tV’³|BW’³vPW…Ot ^W…Ou kW’OvxW’O|FX’O{TX’OwbX’Ox pX…³u }X…³t JY…O WY›O@ dYŠOL qYгU~Y‘¬O'LZ‘²R ysZ‘O Kl^ 5 w_Č{j C`…b P`’{X \`‘OWi`‘³R l@fŠƒ/ lg‘Rnyg‘¤Rygi‘æR(`k‘²S yHl…ˆb Ap‘³S mMpŠŠ/ zq‘SnGr‘¤Szus‘æS(ou‘²ø yWv “5 Pz‘°O Z\z…b v} 5 C~…“b O~‘³ø o[~ŠÆUJ€…Æ~ Y€…Æ} f€…Æp s€…Æq @…Ær M…Æs Z…Æt g…Æu t’ÆvA‚’Æ|O‚’Æ{]‚’Æwk‚’Æxy‚’ÆyGƒ’ÆzUƒ…Æ cƒ›Æ@ pƒŠÆL }ƒŠ©/ J„‘¬Æ)W„‘øn@…‘Æ Qn†‘¤ø|‡‘æø({‰‘ÆScЦÆ:4TNv£a Jņ¦O:4`+k’¦R:4[K«¦³:4`+fŐVFń¦S:4F\ö‘°Æ [b…µb }“¦ø:4[I”Ž"Sd®