Is it possible to create a client-side only "spotlight"?

I would like to know if it’s possible to create a client-side only spotlight because I want to modify Teta_Bonita’s nightvision script for it creates a client-side spotlight to see better in total darkness. The spotlight would be as big as the player’s screen, and would be positioned where the player aims.

If this is possible, and you feel like helping me, please insert an exemple in Teta_Bonita’s code below please:



-- Clientside Night-Vision
-- Version 1.2
-- by Teta_Bonita

-- console commands:
-- toggle_nightvision			-toggles nightvision on/off


if not CLIENT then return end -- Clientside only

-- ADJUSTABLE SETTINGS

local AdjustCoefficient = 0.02 -- The bigger this number, the more quickly the nightvision starts up

-- Colormod Settings
local Color_Brightness		= 0.8
local Color_Contrast 		= 1.1
local Color_AddGreen		= -0.35
local Color_MultiplyGreen 	= 0.028


-- Alpha Add Settings (for the CSS nightvision shader)
local AlphaAdd_Alpha 			= 1
local AlphaAdd_Passes			= 1 -- The bigger this integer, the more brightness is added
									-- alpha add = AlphaAdd_Alpha*AlphaAdd_Passes
									
-- Bloom Settings
local Bloom_Multiply		= 3.6
local Bloom_Darken 			= 0
local Bloom_Blur			= 0.1
local Bloom_ColorMul 		= 0.5
local Bloom_Passes			= 1 -- Should be an integer

-- END ADJUSTABLE SETTINGS

local matNightVision = Material("effects/nightvision") -- CSS nightvision
matNightVision:SetMaterialFloat( "$alpha", AlphaAdd_Alpha )

local Color_Tab = 
{
	[ "$pp_colour_addr" ] 		= -1,
	[ "$pp_colour_addg" ] 		= Color_AddGreen,
	[ "$pp_colour_addb" ] 		= -1,
	[ "$pp_colour_brightness" ] = Color_Brightness,
	[ "$pp_colour_contrast" ]	= Color_Contrast,
	[ "$pp_colour_colour" ] 	= 0,
	[ "$pp_colour_mulr" ] 		= 0 ,
	[ "$pp_colour_mulg" ] 		= Color_MultiplyGreen,
	[ "$pp_colour_mulb" ] 		= 0
}

local sndOn = Sound( "items/nvg_on.wav" )
local sndOff = Sound( "items/nvg_off.wav" )

if render.GetDXLevel() < 80 then -- the nightvision shader reverts to  a white overlay for dx7 cards, so any more alpha add than 1 gives a white screen
	AlphaAdd_Passes			= 1
	AlphaAdd_Alpha 			= 0.6 -- Make it less to reduce the whiteness
end

local DoNightVision = false
local CurScale = 0.5

-- A most likely futile attempt to make things faster
local render = render


-- Main effect call
local function NightVisionFX() 

	if CurScale < 0.995 then 
		CurScale = CurScale + AdjustCoefficient * (1 - CurScale)
	end
	
	-- Alpha add			
	for i=1,AlphaAdd_Passes do
	
		render.UpdateScreenEffectTexture()
	 	render.SetMaterial( matNightVision )
	 	render.DrawScreenQuad()
		
	end
	
	-- Colormod
	Color_Tab[ "$pp_colour_brightness" ] = CurScale * Color_Brightness
	Color_Tab[ "$pp_colour_contrast" ] = CurScale * Color_Contrast
	
	DrawColorModify( Color_Tab )
	
	-- Bloom
	DrawBloom(	Bloom_Darken,  					-- Darken
 				CurScale * Bloom_Multiply,		-- Multiply
 				Bloom_Blur, 					-- Horizontal Blur
 				Bloom_Blur, 					-- Vertical Blur
 				Bloom_Passes, 					-- Passes
 				CurScale * Bloom_ColorMul, 		-- Color Multiplier
 				0, 								-- Red
 				1, 								-- Green
 				0 ) 							-- Blue
end


local function ToggleNightVision()
 
    if DoNightVision then
	
		DoNightVision = false
		surface.PlaySound( sndOff )
	
		hook.Remove( "RenderScreenspaceEffects", "NV_Render" )
		
	else
	
		DoNightVision = true
		CurScale = 0.5 -- This makes the nightvision start off dark when it's turned back on (for effect)
		surface.PlaySound( sndOn )
	
		hook.Add( "RenderScreenspaceEffects", "NV_Render", NightVisionFX )
		
	end
	
end
concommand.Add( "toggle_worshipper_nightvision", ToggleNightVision )


This is an example of a flashlight I found on the internet (garrysmod.org). I would like the same thing, but only clientside.

Without the spotlight:

http://s3.garrysmod.org/img/dl/16247_1.jpg

With the spotlight:

http://s3.garrysmod.org/img/dl/16247_2.jpg

Looking at the script you posted, I see nothing about lighting, just about modifying the brightness/contrast clientside.

I posted a brightness/contrast clientside script, because I want to add a clientside flashlight/lamp/spotlight into it.

I tried to add a simple DynamicLight into this code, but it’s lagging like shit because it takes a lot of informations and I tried to add a Lamp and it didn’t work so I need help and it’s why I posted a thread.

(My english is not perfect, sorry.)

Create a dynamic light only on the client you want to be able to see it from.

It’s too much lagging and this is not what I want, I want a client-side only flashlight.
Read my freaking post before posting anything…

Parent a light entity to the players gun? Then turn it off and on…

Easy to say, but hard to code, huh?

will post code when i’m on computer~

Thanks man. At last someone who understands the meaning of my thread.

Everyone understands the meaning of your thread… You just dont understand our points.

All I need is an example, but you’re giving me how to do it.



local flashlight = 	CreateClientConVar("flashlight",1,true,false)
local flash_bright = 	CreateClientConVar("flashlight_brightness",5,true,false)
local flash_size = 	CreateClientConVar("flashlight_size",512,true,false)

local function FlashLight()
	if (flashlight:GetBool() ~= true) then return end
	local brightness = flash_bright:GetFloat()
	local size = flash_size:GetFloat()
	local tr = LocalPlayer():GetEyeTraceNoCursor()
	if (LocalPlayer():Alive()) then
		local light = DynamicLight(LocalPlayer():EntIndex())
		if (light) then
			light.Pos = tr.HitPos + tr.HitNormal * 50
			light.r = 255
			light.g = 255
			light.b = 255
			light.Brightness = brightness
			light.Dcay = size * 5
			light.Size = size
			light.DieTime = CurTime() + 1
		end
	end
end
hook.Add("Think","FlashLight",FlashLight)


May I add you to steam vokxim? :slight_smile:

No, you’re saying

“How do I do blahblahblehblehcornwafflers”

and they’re saying

“You just mix waffle iron with pastry toast”

and you’re saying

“No, no I want you to GIVE me a blahblahblehblehcornwafflers”

All you’re saying is, “Hey there I want you to give me the code to do something” which belongs in the requests section.

Did you understand MY point?

yum waffles

I made something like this long ago, so I don’t really know if this still works… (or if it ever worked :P)

[lua]

if not CLIENT then return end

– Adjustable settings
local MAX_DIST = 600
local FOV = 50
local BRIGHTNESS = 1

– Sounds
local sndFlashlightOn = Sound( “Player.FlashlightOn” )
local sndFlashlightOff = Sound( “Player.FlashlightOff” )

– State
local cvShouldDrawFlashligh = CreateClientConVar( “r_flashlight_cheap”, “0”, false, false )
local DoFlashlight = false

– Dynamic Light
local DynaLight = DynamicLight( LocalPlayer():EntIndex() )
DynaLight.Decay = 0
DynaLight.r = 255
DynaLight.g = 255
DynaLight.b = 255
DynaLight.Size = MAX_DIST
DynaLight.Brightness = BRIGHTNESS
DynaLight.MinLight = 0.08 * BRIGHTNESS
DynaLight.InnerAngle = 0.9 * FOV
DynaLight.OuterAngle = 1.1 * FOV
DynaLight.DieTime = CurTime() + 5 * 365.25 * 24 * 60 * 60 – The flashlight only comes with a five-year warranty

– Calculations
local SizeMul = math.tan( math.Deg2Rad( FOV ) )
local ScaleMul = 255 / MAX_DIST

local function DrawFlashlight()

DynaLight.Pos = LocalPlayer():EyePos()
DynaLight.Dir = LocalPlayer():EyeAngles():Forward()

--[[local tr = LocalPlayer():GetEyeTrace()

local pos = tr.HitPos - tr.Normal * 10
local dist = tr.StartPos:Distance( pos )

local scale = ( MAX_DIST - dist ) * ScaleMul
if scale &lt; 0 then
	DynaLight.Size = 0
	return
end

DynaLight.r = scale
DynaLight.g = scale
DynaLight.b = scale

DynaLight.Pos = pos
DynaLight.Dir = tr.Normal
DynaLight.Size = SizeMul * dist]]

--DynaLight.Style = 0
--DynaLight.Key = 1

end

local function CC_ToggleFlashlight( plr, cmd, args )

if DoFlashlight then

	hook.Remove( "RenderScene", "DrawFlashlight" )
	plr:EmitSound( sndFlashlightOff )
	DynaLight.Size = 0
	DoFlashlight = false

else

	hook.Add( "RenderScene", "DrawFlashlight", DrawFlashlight )
	plr:EmitSound( sndFlashlightOn )
	DynaLight.Size = MAX_DIST
	DoFlashlight = true
	
end

end
concommand.Add( “ToggleFlashlight”, CC_ToggleFlashlight )

local function OverrideFlashlight( plr, bind, bpressed )

if not cvShouldDrawFlashligh:GetBool() then return end

if string.find( bind, "impulse 100" ) then

	RunConsoleCommand( "ToggleFlashlight" )
	return true
	
end

end
hook.Add( “PlayerBindPressed”, “OverrideFlashlight”, OverrideFlashlight )
[/lua]

This is exactly the same as The-Stone’s, except different.

Why not? My steam is worshiper (with 1 P), vokxim is my friend.

Thanks man, your code is really appreciated, but I want a clientside flashlight like that:
http://img259.imageshack.us/img259/1153/flashlight.th.jpg
Is it possible? If no, I’ll use a normal light, but it’s more lagging than a flashlight…

Sorry but I don’t think that’s possbile since that flashlight you want is an entity and as far as I know you can’t spawn entities client sided.

You can

The common source flash light uses a projected texture. The class name for this is “env_projectedtexture”. Not sure if you can make it purely clientside, but check out the lamp entity in sandbox for how to set it up.

Well, that’s new, I thought it gives an error.