1. Post #1
    Nak
    Gold Member
    Nak's Avatar
    October 2010
    1,221 Posts

    StormFox is a free environment mod that will freshen your GMod experience with weather, light, effects and textures!

    It is made to support as many people as possible. This means SF runs mostly on the client, will adjust its quality to each individual machine and even try to adjust itself to most maps for the best outcome.




    Features posted:
    - Day/ Night cycle (With a chance of seeing shooting stars)
    - Rain, fog, thunder, wind and many other effects.
    - Dynamic weather generation.
    - Environment sounds. E.g. calm rain hiting the window.
    - Snow texture replacement. Grass, dirt and roads will be covered in snow.
    - Dynamic shadow and light (This option is off by default)
    - Lamps that can be placed by admins and light up doing the night or in dark storms.
    - Map lights will be turned on doing the night.
    - CAMI support for most adminmods.
    - Wiremod support
    - Wind physics (off by default on servers)
    .. and many more features to come
    Workshop

    Known Isues:
    - Dynamic lights aren't casting shadows!
    The Gmod engine only support 8 lights with shadows at all times. Careful not to place too many lightentities near each other.

    - I'm lagging!
    Be sure the weather quality is at 0, if the problem still persists, try set it manually at 1. Dynamic shadows can also be expensive on big maps.

    - There are snow at the wrong places!
    Some maps use outdoor textures indoors, you can fix this by setting sf_replacment_dirtgrassonly to 1.

    - Some of the effects are missing.
    Check if the map got all entities supported. You can find missing entities displayed on the weather controller.


    This is a beta, there might be unknown bugs or missing features.

    Post any errors or bugs and I'll see what I can do.

    GitHub: https://github.com/Nak2/StormFox
    API-support: http://steamcommunity.com/workshop/f...6297700498884/

    Last update:
    Changelog:
    - Made weather-data shared (Optimization and better clientside support).
    - Rewrote a lot of files with help from Coderall.
    - Added lightningbolts (They got a higer change of striking higer grounds, and they do hurt).
    - Made the wind push/unfreeze props. (Off by default on servers)
    - Added radioactive-rain (For testing the new weather compatibility).
    - Added sf_disablelightningbolts [0/1] and sf_disableweatherdebuffs [0/1]. (sf_disableweatherdebuffs are on by default on servers)
    - Fixed a tiny error on launch
    - Fixed "gray skybox"
    - Weather now supports more adv functions .. like changing names and icons.
    - Pressing E on the weekly_weather screen, will now show freedom units.
    Reply With Quote Edit / Delete Reply Windows 10 Chrome Denmark Show Events Winner Winner x 34Lua King Lua King x 6 (list)

  2. Post #2

    June 2016
    31 Posts
    Looks awesome - having trouble connecting to my server but once it's fixed I will be trying this out!
    Reply With Quote Edit / Delete Reply Windows 10 Chrome United Kingdom Show Events Friendly Friendly x 1 (list)

  3. Post #3
    Gold Member
    solid_jake's Avatar
    November 2007
    13,952 Posts
    this is literally sex

    and the best kind of sex too
    Reply With Quote Edit / Delete Reply Windows 7 Firefox Show Events Disagree Disagree x 3Informative Informative x 1Funny Funny x 1 (list)

  4. Post #4
    SellMG's Avatar
    August 2015
    19 Posts
    Yes, finally it's here! Thank you for this Nak. Awesome work! ^^

  5. Post #5
    Jelman's Avatar
    October 2014
    3,121 Posts
    holy fuck this is cool

  6. Post #6
    C++, Lua, Java - choose your poison

    January 2012
    1,637 Posts
    So I'm getting these green cubes in game.

    Edited:

    And red cubes too.

    Edited:

    Also maybe round the temperatures to 1 or 2 decimal places?

    Edited:

    Also maybe make the 3d2d for the weekly display ignoreZ or move it forward a tiny bit so theres no z fighting.
    Reply With Quote Edit / Delete Reply Windows 10 Chrome Australia Show Events Agree Agree x 1 (list)

  7. Post #7
    Nak
    Gold Member
    Nak's Avatar
    October 2010
    1,221 Posts
    Ups, the green/red cubes is a debug script that gets activated when developer convar is 1.
    Pushed a new update out:
    - Fixed errors when maplights got deleted.
    - Removed leftover debugoverlays.
    - Fixed the weather-generator ignoring weather changes and rounded the variables.
    - Moved the screen a bit forward for weekly_weather entity.
    Reply With Quote Edit / Delete Reply Windows 10 Chrome Denmark Show Events Lua King Lua King x 1Winner Winner x 1 (list)

  8. Post #8
    Gold Member
    VIoxtar's Avatar
    February 2007
    1,875 Posts
    Checked it out yesterday. Really neat. I really like what you did with the sounds as well. It took me a while to realize I had to press the title 'Set Weather' on the weather controller entity to change it. The rain looks good. Two things I found a little bit off-putting though was the glowing snow particles (perhaps use the existing things you know about the weather - like day/night cycle, time/fog etc to adjust their color accordingly) and the slightly weird fog artifacts (I could quite clearly tell where it ended or that it was used to cover up where it wasn't raining etc).

    Looking forward to see how this evolves!
    Reply With Quote Edit / Delete Reply Windows 10 Chrome Israel Show Events Useful Useful x 1 (list)

  9. Post #9

    May 2014
    128 Posts
    10x Better than Atmos

    Edited:

    btw can I have permission to see how you did the changing ground texture of the map?

  10. Post #10
    C++, Lua, Java - choose your poison

    January 2012
    1,637 Posts
    Ups, the green/red cubes is a debug script that gets activated when developer convar is 1.
    What's Ups? There's blue ones too I guess they are part of it too.

  11. Post #11
    Nak
    Gold Member
    Nak's Avatar
    October 2010
    1,221 Posts
    btw can I have permission to see how you did the changing ground texture of the map?
    No need for permission to look at my stuff, however its easier if I just show you an example:
    Code:
    local oldTextures = {}
    function ReplaceMaterial(iMat,texture)
    	if not oldTextures[iMat] then
    		-- Save the old texture
    		oldTextures[iMat] = iMat:GetTexture("$basetexture")
    	end
    	iMat:SetTexture("$basetexture",texture)
    end
    function UndoMaterial(iMat)
    	if not oldTextures[iMat] then return end
    	iMat:SetTexture("$basetexture",oldTextures[iMat])
    end
    What's Ups? There's blue ones too I guess they are part of it too.
    Ups as in it was a mistake.
    They changed colors depending on what they hit. Should be removed now.
    Reply With Quote Edit / Delete Reply Windows 10 Chrome Denmark Show Events Friendly Friendly x 1 (list)

  12. Post #12
    Shit
    On
    Shit
    code_gs's Avatar
    March 2013
    18,655 Posts
    Could you put the code on a repo somewhere so we can submit PRs?

  13. Post #13
    Nak
    Gold Member
    Nak's Avatar
    October 2010
    1,221 Posts
    Could you put the code on a repo somewhere so we can submit PRs?
    Going to git it at some point. Maybe later today.
    Reply With Quote Edit / Delete Reply Windows 10 Chrome Denmark Show Events Friendly Friendly x 1 (list)

  14. Post #14
    Yashirmare's Avatar
    April 2011
    480 Posts
    Would it be possible to add out of the box support for different gamemodes, such as TTT. Take for example on round start a random time and weather is activated (Going to do this myself but for others they might like it)
    Edit: Also, what is the client cvar for "Ultra High Quality"
    Reply With Quote Edit / Delete Reply Windows 7 Chrome United Kingdom Show Events Disagree Disagree x 1 (list)

  15. Post #15
    Nak
    Gold Member
    Nak's Avatar
    October 2010
    1,221 Posts
    Would it be possible to add out of the box support for different gamemodes, such as TTT. Take for example on round start a random time and weather is activated (Going to do this myself but for others they might like it)
    Should be doable. I've been thinking about making an addon for extreme weather and a gamemode that uses SF.
    I'll repost the functions here;
    This is what I've written so far. There are more functions but its mostly internal stuff.

    Code:
    --Shared
    	-- Time
    		StormFox.GetTime(pure) -- Returns 0-1440. Pure will make it ignore the 6 decimals synchronization attempt.
    		StormFox.GetDaylightAmount() -- Easy function that returns 1 doing the day and 0 doing the night. Between 0-1 at sunset/sunrise
    		StormFox.GetRealTime(Use_12clock) -- Returns the time in a 24clock or 12clock format
    	
    	-- Data
    		StormFox.SetData(str,var[, timestamp]) -- Sets and syncs the data with clients(if server). Setting a timestamp (0-1339) will make the variable leap smoothly towards the given time (Without sending more data)
    		StormFox.GetData(str,default) -- Returns the data
    	
    	-- Basic
    		StormFox.GetBeaufort(ms) -- Retuns the windspeed in a beaufort scale and description.
    		StormFox.CelsiusToFahrenheit(cel) -- Returns degrees in freedom unit.
    		StormFox.GetWeatherName() -- Tries to descripe the current weather.
    
    	-- Skybox (This is for cloud stuff later)
    		StormFox.Is3DSkyBox()
    		StormFox.SkyboxScale()
    		StormFox.MapOBBCenter()
    		StormFox.SkyboxOBBMaxs()
    		StormFox.SkyboxOBBMins()
    		StormFox.WorldToSkybox(Vector)
    		StormFox.SkyboxToWorld(Vector)
    
    --Server
    	-- Time
    		StormFox.SetTime(24clock-str or 0-1440) -- StormFox might get confused for a few seconds tho.
    	-- Data
    		StormFox.SetGhostData(str,var[,timestamp]) -- Sets the data without sharing
    	-- Weather
    		StormFox.GetWeathers() -- Returns a list of valid 'weathers'.
    		StormFox.AddWeather(name,weatherdata) -- Weatherdata is a table of data that descripe it.
    		StormFox.SetWeather(name,procent) -- Procent goes from 0-1. Allows you to set the 'amount'.
    	-- Weather-logic
    		StormFox.AddWeatherCondition(name,{min-clock,max-clock},[min-procent,max-procent},{min-length,max-length},func canPick) -- Allows the weather-generator to pick the weather.
    		StormFox.GenerateNewDay(dont_update_clients) -- Creates a new day. Useful for skipping a day if rain.
    
    --Client
    	--Env
    		StormFox.GetExspensive() -- Returns the weather-quality (0-7 or 0-20 for ultra).
    		StormFox.Env.IsOutside() -- Returns true if standing under open sky.
    		StormFox.Env.IsInRain() -- Returns true if standing in the rain/wind direction.
    		StormFox.Env.NearOutside() -- Returns true if standing near the outside.
    		StormFox.Env.FadeDistanceToWindow() -- Returns a number between 0-1. Where 1 is when you stand next to a window.
    		StormFox.Env.FadeDistanceToRoof() -- Returns a number between 0-1. Where 1 is when you stand against the roof.
    
    	--Basic
    		StormFox.GetWeatherSymbol() -- Returns the material for the current weather
    P.S. Don't use StormFox.SetTime regularly, SF can get confused and turn the sky into a disco-floor if you do it at a bad point.

    Edit: Also, what is the client cvar for "Ultra High Quality"
    The cbox for "Ultra High Quality" is not a cvar, but rather stored as a cookie. Its only there to allow users (And the automatic system) to get sf_exspensive (The quality convar) up to 20.
    The cookie is stored as: cookie.GetNumber("StormFox_ultraqt",0)
    Reply With Quote Edit / Delete Reply Windows 10 Chrome Denmark Show Events Useful Useful x 2 (list)

  16. Post #16
    Yashirmare's Avatar
    April 2011
    480 Posts
    P.S. Don't use StormFox.SetTime regularly, SF can get confused and turn the sky into a disco-floor if you do it at a bad point.
    Ah so using that to set the time randomly on round start probably wouldn't be the best of ideas. Can it just happen at random or does it only bug out if you do it while SF is already transitioning to another time (So say the time is 9am, I then set it to 3PM but before it lerps to 3PM I change it again to 11PM, I assume that would disco-ize the sky?)

    The cbox for "Ultra High Quality" is not a cvar, but rather stored as a cookie. Its only there to allow users (And the automatic system) to get sf_exspensive (The quality convar) up to 20.
    The cookie is stored as: cookie.GetNumber("StormFox_ultraqt",0)
    Ahhhh, well in that case I'm just going to set my slider max to 7, most players aren't going to have a machine good enough for much higher than that; Im already getting reports of some bad performance but Im looking into that. I've also made it so that you can change all the options in its own tab in the F1 menu so the players don't have to use console commands.

  17. Post #17
    Nak
    Gold Member
    Nak's Avatar
    October 2010
    1,221 Posts
    Ah so using that to set the time randomly on round start probably wouldn't be the best of ideas. Can it just happen at random or does it only bug out if you do it while SF is already transitioning to another time (So say the time is 9am, I then set it to 3PM but before it lerps to 3PM I change it again to 11PM, I assume that would disco-ize the sky?)
    Yep, it uses the time to lerp between the values, so setting it at the wrong time will mess it up.

    Ahhhh, well in that case I'm just going to set my slider max to 7, most players aren't going to have a machine good enough for much higher than that; Im already getting reports of some bad performance but Im looking into that. I've also made it so that you can change all the options in its own tab in the F1 menu so the players don't have to use console commands.
    If you set the slider at 0, it will auto adjust to your FPS.

  18. Post #18
    Yashirmare's Avatar
    April 2011
    480 Posts
    If you set the slider at 0, it will auto adjust to your FPS.
    Yeah I know, still getting reports of bad FPS even when they're on that setting, I've advised them to put it to 1 and see if that helps

  19. Post #19
    Gold Member
    Altair_PT's Avatar
    November 2008
    303 Posts
    Does the wind react with finned props or other props?

  20. Post #20

    January 2012
    6 Posts
    Does the wind react with finned props or other props?
    You means things like grenades ? or small items ?
    I want to know as well !

  21. Post #21
    TheVingard's Avatar
    November 2014
    76 Posts
    Could you add a feature to turn off the skybox and time systems, so it can just be used as a weather system?

    Additionally, it seems to crash on this map:
    https://steamcommunity.com/sharedfil.../?id=505686775

  22. Post #22
    BanterChicken's Avatar
    June 2017
    55 Posts
    The rain fades in to game-play really nicely. Great work!

  23. Post #23
    Nak
    Gold Member
    Nak's Avatar
    October 2010
    1,221 Posts
    Does the wind react with finned props or other props?
    You means things like grenades ? or small items ?
    I want to know as well !
    I have given it a thought, however it might cause the server to lag. I'm a bit worried with the sandbox servers.

    Could you add a feature to turn off the skybox and time systems, so it can just be used as a weather system?
    SF uses the time to make variables lerp smoothly, disabling time would make most effects freeze atm.
    I might make an update and option later, that fixes and allows you to do this.

    Additionally, it seems to crash on this map:
    https://steamcommunity.com/sharedfil.../?id=505686775
    Looks like gmod crashes when SF tries to save the map-materials. I'm a bit unsure why or how, but after messing around a bit it seems fine now. I'll upload the changes in next patch.

    [EDIT]
    New update:
    - Balanced the fog
    - Added an option to disable fog (from this mod)
    - Fixed dynamiclight
    - Added some effects and some for maps without light_env
    - Added an option to disable the weekly weather
    - Should support sf_timespeed 0
    Reply With Quote Edit / Delete Reply Windows 10 Chrome Denmark Show Events Winner Winner x 1 (list)

  24. Post #24
    Yashirmare's Avatar
    April 2011
    480 Posts
    Show me what you got. (I replaced the moon texture...)
    Reply With Quote Edit / Delete Reply Windows 10 Chrome United Kingdom Show Events Dumb x 5Funny x 4Winner x 3Lua King x 1Friendly x 1Informative x 1Zing x 1 (list)

  25. Post #25

    June 2016
    31 Posts
    Show me what you got. (I replaced the moon texture...)
    Omg
    Reply With Quote Edit / Delete Reply Windows 10 Chrome United Kingdom Show Events Dumb Dumb x 3 (list)

  26. Post #26
    B1ts's Avatar
    January 2016
    15 Posts
    How is the performance of this script? i've seen alot of people complaining of the old weather and atmos scripts for causing alot of lag... i would love to use this on my server but is it optimized?

    Thanks in advance :}

  27. Post #27
    Shit
    On
    Shit
    code_gs's Avatar
    March 2013
    18,655 Posts
    How is the performance of this script? i've seen alot of people complaining of the old weather and atmos scripts for causing alot of lag... i would love to use this on my server but is it optimized?

    Thanks in advance :}
    "Optimized" isn't really the correct word to use here. Scripts can be fully optimised but still have large performance impact due to necessary but expensive operations being done. You should try to benchmark the frame-delta difference between the same sequence/scene with and without the addon active.

    Edited:

    Any update on getting the addon available through git?

  28. Post #28
    Nak
    Gold Member
    Nak's Avatar
    October 2010
    1,221 Posts
    New update out.
    - Added a weather HUD
    - Fixed purple shadows
    - Added an option to disable atuoweather creating snow
    - Added an option to disable skybox-creation along with other entities
    - Added cold breath (Thirdperson and indoor fix coming soon)
    Reply With Quote Edit / Delete Reply Windows 10 Chrome Denmark Show Events Winner Winner x 3 (list)

  29. Post #29
    YoutoYokodera's Avatar
    June 2016
    726 Posts
    When you say SF i though ScriptFodder
    Reply With Quote Edit / Delete Reply Windows 10 New Opera Show Events Dumb Dumb x 7Agree Agree x 1Disagree Disagree x 1 (list)

  30. Post #30
    Nak
    Gold Member
    Nak's Avatar
    October 2010
    1,221 Posts
    New update out with some effects

    Also now on GitHub: https://github.com/Nak2/StormFox

  31. Post #31

    July 2017
    112 Posts
    I have narrowed it down to StormFox breaking my health and armor bar.

    I use this: https://facepunch.com/showthread.php?t=1558060
    Due to my insecurity, I will only show you less than half of my screen.
    What it looks like normally: https://imgur.com/a/1YMo6
    What it looks like when I open the chat box: https://imgur.com/a/5hp9c
    Reply With Quote Edit / Delete Reply Windows 10 Chrome United Kingdom Show Events Dumb Dumb x 1 (list)

  32. Post #32
    Nak
    Gold Member
    Nak's Avatar
    October 2010
    1,221 Posts
    I have narrowed it down to StormFox breaking my health and armor bar.

    I use this: https://facepunch.com/showthread.php?t=1558060
    Due to my insecurity, I will only show you less than half of my screen.
    What it looks like normally: https://imgur.com/a/1YMo6
    What it looks like when I open the chat box: https://imgur.com/a/5hp9c
    What addon is it? Sadly need more information to find the error.

  33. Post #33

    July 2017
    112 Posts
    What addon is it? Sadly need more information to find the error.
    Custom. I used my own code. So it looks like this:
    Code:
    HealthandArmorHud = {};
    
    -- Draws an arc on your screen.
    -- startang and endang are in degrees,
    -- radius is the total radius of the outside edge to the center.
    -- cx, cy are the x,y coordinates of the center of the arc.
    -- roughness determines how many triangles are drawn. Number between 1-360; 2 or 3 is a good number.
    local cos, sin, abs, max, rad1, log, pow = math.cos, math.sin, math.abs, math.max, math.rad, math.log, math.pow
    local surface = surface
    function draw.Arc(cx,cy,radius,thickness,startang,endang,roughness,color)
    	surface.SetDrawColor(color)
    	surface.DrawArc(surface.PrecacheArc(cx,cy,radius,thickness,startang,endang,roughness))
    end
    
    function surface.DrawArc(arc) -- Draw a premade arc.
    	for k,v in ipairs(arc) do
    		surface.DrawPoly(v)
    	end
    end
    
    function surface.PrecacheArc(cx,cy,radius,thickness,startang,endang,roughness)
    	local quadarc = {}
    	
    	-- Correct start/end ang
    	local startang,endang = startang or 0, endang or 0
    	
    	-- Define step
    	-- roughness = roughness or 1
    	local diff = abs(startang-endang)
    	local smoothness = log(diff,2)/2
    	local step = diff / (pow(2,smoothness))
    	if startang > endang then
    		step = abs(step) * -1
    	end
    	
    	-- Create the inner circle's points.
    	local inner = {}
    	local outer = {}
    	local ct = 1
    	local r = radius - thickness
    	
    	for deg=startang, endang, step do
    		local rad = rad1(deg)
    		-- local rad = deg2rad * deg
    		local cosrad, sinrad = cos(rad), sin(rad) --calculate sin,cos
    		
    		local ox, oy = cx+(cosrad*r), cy+(-sinrad*r) --apply to inner distance
    		inner[ct] = {
    			x=ox,
    			y=oy,
    			u=(ox-cx)/radius + .5,
    			v=(oy-cy)/radius + .5,
    		}
    		
    		local ox2, oy2 = cx+(cosrad*radius), cy+(-sinrad*radius) --apply to outer distance
    		outer[ct] = {
    			x=ox2,
    			y=oy2,
    			u=(ox2-cx)/radius + .5,
    			v=(oy2-cy)/radius + .5,
    		}
    		
    		ct = ct + 1
    	end
    	
    	-- QUAD the points.
    	for tri=1,ct do
    		local p1,p2,p3,p4
    		local t = tri+1
    		p1=outer[tri]
    		p2=outer[t]
    		p3=inner[t]
    		p4=inner[tri]
    		
    		quadarc[tri] = {p1,p2,p3,p4}
    	end
    	
    	-- Return a table of triangles to draw.
    	return quadarc
    	
    end
    
    hook.Add("HUDPaint", "HealthandArmorHudPaint", function()
    
    	local maxHealth = LocalPlayer():GetMaxHealth()
    	local health = math.Clamp(LocalPlayer():Health(), 0, maxHealth)
    	local armor = math.Clamp(LocalPlayer():Armor(), 0, 100)
    
    	local healthAng = (health / maxHealth) * 191.7
    	local armorAng = (armor / 100) * 191.7
    	
    	draw.Arc( 160, 160, 150, 10, 90, 90 + 191.7, 1, Color( 0, 0, 0, 75 ) )
    	draw.Arc( 160, 160, 150, 10, 90, 90 - 191.7, 1, Color( 0, 0, 0, 75 ) )
    
    	if health <= maxHealth then
    		local i = maxHealth - health
    		draw.Arc( 160, 160, 150, 10, 90, 90 + healthAng, 1, Color( 73 + i, 255 - i, 73, 200 ) )
    	end
    
    	draw.Arc( 160, 160, 150, 10, 90, 90 - armorAng, 1, Color( 73, 73, 255, 200 ) )
    end )

  34. Post #34
    Nak
    Gold Member
    Nak's Avatar
    October 2010
    1,221 Posts
    Custom. I used my own code. So it looks like this:
    Code:
    -- code
    You forgot to add draw.NoTexture before surface.DrawPoly.
    surface.DrawPoly draws texture :P
    Reply With Quote Edit / Delete Reply Windows 10 Chrome Denmark Show Events Agree Agree x 1 (list)

  35. Post #35

    July 2017
    112 Posts
    You forgot to add draw.NoTexture before surface.DrawPoly.
    surface.DrawPoly draws texture :P
    I've done that before (probably should've stated that) and all it does is prevent the health bar from rendering and the arc behind it.

    Edited:

    I've also done render.SetMaterial (I think that is the one I use) with no prevail.

    Edited:

    It does fix the glitch with the chatbox though!

  36. Post #36
    kpjVideo's Avatar
    March 2013
    826 Posts
    I've done that before (probably should've stated that) and all it does is prevent the health bar from rendering and the arc behind it.
    Does that still happen with and without gmod_mcore_test? I've had similar issues with Arc stuff and mcore especially.

  37. Post #37

    July 2017
    112 Posts
    Does that still happen with and without gmod_mcore_test? I've had similar issues with Arc stuff and mcore especially.
    Yes, it still happens with and without gmod_mcore_test.

  38. Post #38
    Zufeng's Avatar
    February 2015
    849 Posts
    Holy shit,this is way much better than Atmos
    Love the snow texture replacement,its pretty damn cool.

  39. Post #39
    Your local friendly Lua helper!
    bobbleheadbob's Avatar
    July 2011
    1,890 Posts
    Nak if this script uses an old version of my draw.Arc function then it might be overwriting his version in his code.

    Also FireWolf2525 you could localize my arc functions. That might fix it.

    local function surfDrawArc(arc)
      --yadda yadda
    end
    local function precacheArc(cx,cy,radius,thickness,startang,endang,roughness)
     --yadda yadda
    end
    local function drawArc(cx,cy,radius,thickness,startang,endang,roughness,color)
     --yadda yadda
    end
    

  40. Post #40

    July 2017
    112 Posts
    Nak if this script uses an old version of my draw.Arc function then it might be overwriting his version in his code.

    Also FireWolf2525 you could localize my arc functions. That might fix it.

    local function surfDrawArc(arc)
      --yadda yadda
    end
    local function precacheArc(cx,cy,radius,thickness,startang,endang,roughness)
     --yadda yadda
    end
    local function drawArc(cx,cy,radius,thickness,startang,endang,roughness,color)
     --yadda yadda
    end
    
    Localizing the functions caused this lua error:
    [ERROR] addons/FireWolf2525/lua/autorun/client/healthandarmorhud.lua:10: '(' expected near '.'
    1. unknown - addons/FireWolf2525/lua/autorun/client/healthandarmorhud.lua:0
    Reply With Quote Edit / Delete Reply Windows 10 Chrome United Kingdom Show Events Dumb Dumb x 1 (list)