mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-01-06 15:32:52 +00:00
Second part of UltraLight. Some fixed up fire stuff.
This commit is contained in:
@@ -130,7 +130,7 @@
|
||||
//account for darkness
|
||||
var/turf/T = get_turf(src)
|
||||
var/in_darkness = 0
|
||||
if(T.sd_lumcount == 0 && !istype(T, /turf/simulated))
|
||||
if(max(T.ul_GetRed(), T.ul_GetGreen(), T.ul_GetBlue()) == 0 && !istype(T, /turf/simulated))
|
||||
in_darkness = 1
|
||||
|
||||
//see if we're able to do stuff
|
||||
|
||||
@@ -7,9 +7,11 @@
|
||||
#define UL_I_LIT 0
|
||||
#define UL_I_EXTINGUISHED 1
|
||||
#define UL_I_ONZERO 2
|
||||
|
||||
var
|
||||
ul_LightingEnabled = 1
|
||||
ul_LightingResolution = 1
|
||||
ul_LightingResolutionSqrt = sqrt(ul_LightingResolution)
|
||||
ul_Steps = 7
|
||||
ul_FalloffStyle = UL_I_FALLOFF_ROUND // Sets the lighting falloff to be either squared or circular.
|
||||
ul_TopLuminosity = 0
|
||||
@@ -20,26 +22,15 @@ var
|
||||
5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7)
|
||||
|
||||
var/list/light_to_instantiate = list()
|
||||
var/UL_setup = 0
|
||||
|
||||
proc/setup_UL()
|
||||
UL_setup = 1
|
||||
world << "\red <b>Setting up UltraLight...</b>"
|
||||
for(var/atom/A in light_to_instantiate)
|
||||
if(A.ul_IsLuminous())
|
||||
A.ul_Illuminate()
|
||||
|
||||
proc/ul_Clamp(var/Value)
|
||||
return min(max(Value, 0), ul_Steps)
|
||||
|
||||
atom
|
||||
var
|
||||
LuminosityRed = 0
|
||||
LuminosityGreen = 0
|
||||
LuminosityBlue = 0
|
||||
atom/var/LuminosityRed = 0
|
||||
atom/var/LuminosityGreen = 0
|
||||
atom/var/LuminosityBlue = 0
|
||||
|
||||
ul_Extinguished = UL_I_ONZERO
|
||||
atom/var/ul_Extinguished = UL_I_ONZERO
|
||||
|
||||
atom/proc/ul_SetLuminosity(var/Red, var/Green = Red, var/Blue = Red)
|
||||
|
||||
@@ -76,22 +67,38 @@ atom/proc/ul_Illuminate()
|
||||
ul_UpdateTopLuminosity()
|
||||
luminosity = ul_Luminosity()
|
||||
|
||||
for(var/turf/Affected in view(ul_Luminosity(), src))
|
||||
for(var/turf/Affected in view(luminosity, src))
|
||||
var/Falloff = src.ul_FalloffAmount(Affected)
|
||||
|
||||
var/DeltaRed = LuminosityRed - Falloff
|
||||
var/DeltaGreen = LuminosityGreen - Falloff
|
||||
var/DeltaBlue = LuminosityBlue - Falloff
|
||||
|
||||
if(ul_IsLuminous(DeltaRed, DeltaGreen, DeltaBlue))
|
||||
if(DeltaRed > 0 || DeltaGreen > 0 || DeltaBlue > 0)
|
||||
|
||||
Affected.LightLevelRed += max(DeltaRed, 0)
|
||||
Affected.LightLevelGreen += max(DeltaGreen, 0)
|
||||
Affected.LightLevelBlue += max(DeltaBlue, 0)
|
||||
if(DeltaRed > 0)
|
||||
if(!Affected.MaxRed)
|
||||
Affected.MaxRed = list()
|
||||
if("[DeltaRed]" in Affected.MaxRed)
|
||||
Affected.MaxRed["[DeltaRed]"]++
|
||||
else
|
||||
Affected.MaxRed["[DeltaRed]"] = 1
|
||||
|
||||
Affected.MaxRed += LuminosityRed
|
||||
Affected.MaxGreen += LuminosityGreen
|
||||
Affected.MaxBlue += LuminosityBlue
|
||||
if(DeltaGreen > 0)
|
||||
if(!Affected.MaxGreen)
|
||||
Affected.MaxGreen = list()
|
||||
if("[DeltaGreen]" in Affected.MaxGreen)
|
||||
Affected.MaxGreen["[DeltaGreen]"]++
|
||||
else
|
||||
Affected.MaxGreen["[DeltaGreen]"] = 1
|
||||
|
||||
if(DeltaBlue > 0)
|
||||
if(!Affected.MaxBlue)
|
||||
Affected.MaxBlue = list()
|
||||
if("[DeltaBlue]" in Affected.MaxBlue)
|
||||
Affected.MaxBlue["[DeltaBlue]"]++
|
||||
else
|
||||
Affected.MaxBlue["[DeltaBlue]"] = 1
|
||||
|
||||
Affected.ul_UpdateLight()
|
||||
|
||||
@@ -117,15 +124,34 @@ atom/proc/ul_Extinguish()
|
||||
var/DeltaGreen = LuminosityGreen - Falloff
|
||||
var/DeltaBlue = LuminosityBlue - Falloff
|
||||
|
||||
if(ul_IsLuminous(DeltaRed, DeltaGreen, DeltaBlue))
|
||||
if(DeltaRed > 0 || DeltaGreen > 0 || DeltaBlue > 0)
|
||||
|
||||
Affected.LightLevelRed -= max(DeltaRed, 0)
|
||||
Affected.LightLevelGreen -= max(DeltaGreen, 0)
|
||||
Affected.LightLevelBlue -= max(DeltaBlue, 0)
|
||||
if(DeltaRed > 0)
|
||||
if(Affected.MaxRed)
|
||||
if(Affected.MaxRed["[DeltaRed]"] > 1)
|
||||
Affected.MaxRed["[DeltaRed]"]--
|
||||
else
|
||||
Affected.MaxRed.Remove("[DeltaRed]")
|
||||
if(!Affected.MaxRed.len)
|
||||
del Affected.MaxRed
|
||||
|
||||
Affected.MaxRed -= LuminosityRed
|
||||
Affected.MaxGreen -= LuminosityGreen
|
||||
Affected.MaxBlue -= LuminosityBlue
|
||||
if(DeltaGreen > 0)
|
||||
if(Affected.MaxGreen)
|
||||
if(Affected.MaxGreen["[DeltaGreen]"] > 1)
|
||||
Affected.MaxGreen["[DeltaGreen]"]--
|
||||
else
|
||||
Affected.MaxGreen.Remove("[DeltaGreen]")
|
||||
if(!Affected.MaxGreen.len)
|
||||
del Affected.MaxGreen
|
||||
|
||||
if(DeltaBlue > 0)
|
||||
if(Affected.MaxBlue)
|
||||
if(Affected.MaxBlue["[DeltaBlue]"] > 1)
|
||||
Affected.MaxBlue["[DeltaBlue]"]--
|
||||
else
|
||||
Affected.MaxBlue.Remove("[DeltaBlue]")
|
||||
if(!Affected.MaxBlue.len)
|
||||
del Affected.MaxBlue
|
||||
|
||||
Affected.ul_UpdateLight()
|
||||
|
||||
@@ -151,10 +177,17 @@ atom/proc/ul_FalloffAmount(var/atom/ref)
|
||||
if (ul_FalloffStyle == UL_I_FALLOFF_ROUND)
|
||||
var/x = (ref.x - src.x)
|
||||
var/y = (ref.y - src.y)
|
||||
if ((x*x + y*y) > ul_FastRoot.len)
|
||||
for(var/i = ul_FastRoot.len, i <= x*x+y*y, i++)
|
||||
ul_FastRoot += round(sqrt(x*x+y*y))
|
||||
return round(ul_LightingResolution * ul_FastRoot[x*x + y*y + 1], 1)
|
||||
if(ul_LightingResolution != 1)
|
||||
if (round((x*x + y*y)*ul_LightingResolutionSqrt,1) > ul_FastRoot.len)
|
||||
for(var/i = ul_FastRoot.len, i <= round(x*x+y*y*ul_LightingResolutionSqrt,1), i++)
|
||||
ul_FastRoot += round(sqrt(i))
|
||||
return ul_FastRoot[round((x*x + y*y)*ul_LightingResolutionSqrt, 1) + 1]/ul_LightingResolution
|
||||
|
||||
else
|
||||
if ((x*x + y*y) > ul_FastRoot.len)
|
||||
for(var/i = ul_FastRoot.len, i <= x*x+y*y, i++)
|
||||
ul_FastRoot += round(sqrt(i))
|
||||
return ul_FastRoot[x*x + y*y + 1]/ul_LightingResolution
|
||||
|
||||
else if (ul_FalloffStyle == UL_I_FALLOFF_SQUARE)
|
||||
return get_dist(src, ref)
|
||||
@@ -165,17 +198,9 @@ atom/proc/ul_SetOpacity(var/NewOpacity)
|
||||
if(opacity != NewOpacity)
|
||||
|
||||
var/list/Blanked = ul_BlankLocal()
|
||||
var/atom/T = src
|
||||
while(T && !isturf(T))
|
||||
T = T.loc
|
||||
|
||||
opacity = NewOpacity
|
||||
|
||||
if(T)
|
||||
T:LightLevelRed = 0
|
||||
T:LightLevelGreen = 0
|
||||
T:LightLevelBlue = 0
|
||||
|
||||
ul_UnblankLocal(Blanked)
|
||||
|
||||
return
|
||||
@@ -222,49 +247,43 @@ atom/proc/ul_LightLevelChanged()
|
||||
|
||||
atom/New()
|
||||
..()
|
||||
if(UL_setup)
|
||||
if(ul_IsLuminous())
|
||||
if(ul_IsLuminous())
|
||||
spawn(1)
|
||||
ul_Illuminate()
|
||||
else
|
||||
light_to_instantiate |= src
|
||||
return
|
||||
|
||||
atom/Del()
|
||||
if(ul_IsLuminous())
|
||||
ul_Extinguish()
|
||||
|
||||
..()
|
||||
|
||||
return
|
||||
|
||||
// formerly atom/proc/movable/Move(), this now overwrites other shit causing random inexplicable problems.
|
||||
// need to find a way to plug it in to the root without overriding, might just do the snowflake treatment
|
||||
/*atom/proc/Move()
|
||||
ul_Extinguish()
|
||||
..()
|
||||
ul_Illuminate()
|
||||
return*/
|
||||
|
||||
turf
|
||||
var
|
||||
LightLevelRed = 0
|
||||
LightLevelGreen = 0
|
||||
LightLevelBlue = 0
|
||||
|
||||
list/MaxRed = list( )
|
||||
list/MaxGreen = list( )
|
||||
list/MaxBlue = list( )
|
||||
atom/movable/Move()
|
||||
if(ul_IsLuminous())
|
||||
ul_Extinguish()
|
||||
..()
|
||||
ul_Illuminate()
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
turf/var/list/MaxRed
|
||||
turf/var/list/MaxGreen
|
||||
turf/var/list/MaxBlue
|
||||
|
||||
turf/proc/ul_GetRed()
|
||||
return ul_Clamp(min(LightLevelRed, max(MaxRed)))
|
||||
if(MaxRed)
|
||||
return ul_Clamp(text2num(max(MaxRed)))
|
||||
return 0
|
||||
turf/proc/ul_GetGreen()
|
||||
return ul_Clamp(min(LightLevelGreen, max(MaxGreen)))
|
||||
if(MaxGreen)
|
||||
return ul_Clamp(text2num(max(MaxGreen)))
|
||||
return 0
|
||||
turf/proc/ul_GetBlue()
|
||||
return ul_Clamp(min(LightLevelBlue, max(MaxBlue)))
|
||||
if(MaxBlue)
|
||||
return ul_Clamp(text2num(max(MaxBlue)))
|
||||
return 0
|
||||
|
||||
turf/proc/ul_UpdateLight()
|
||||
|
||||
var/area/CurrentArea = loc
|
||||
|
||||
if(!isarea(CurrentArea) || !CurrentArea.ul_Lighting)
|
||||
@@ -298,25 +317,19 @@ turf/proc/ul_Recalculate()
|
||||
|
||||
var/list/Lights = ul_BlankLocal()
|
||||
|
||||
LightLevelRed = 0
|
||||
LightLevelGreen = 0
|
||||
LightLevelBlue = 0
|
||||
|
||||
ul_UnblankLocal(Lights)
|
||||
|
||||
ul_SuppressLightLevelChanges--
|
||||
|
||||
return
|
||||
|
||||
area
|
||||
var
|
||||
ul_Overlay = null
|
||||
ul_Lighting = 1
|
||||
|
||||
LightLevelRed = 0
|
||||
LightLevelGreen = 0
|
||||
LightLevelBlue = 0
|
||||
area/var/ul_Overlay = null
|
||||
area/var/ul_Lighting = 1
|
||||
|
||||
area/var/LightLevelRed = 0
|
||||
area/var/LightLevelGreen = 0
|
||||
area/var/LightLevelBlue = 0
|
||||
area/var/list/LightLevels
|
||||
|
||||
area/proc/ul_Light(var/Red = LightLevelRed, var/Green = LightLevelGreen, var/Blue = LightLevelBlue)
|
||||
|
||||
@@ -324,6 +337,13 @@ area/proc/ul_Light(var/Red = LightLevelRed, var/Green = LightLevelGreen, var/Blu
|
||||
return
|
||||
|
||||
overlays -= ul_Overlay
|
||||
if(LightLevels)
|
||||
if(Red < LightLevels["Red"])
|
||||
Red = LightLevels["Red"]
|
||||
if(Green < LightLevels["Green"])
|
||||
Green = LightLevels["Green"]
|
||||
if(Blue < LightLevels["Blue"])
|
||||
Blue = LightLevels["Blue"]
|
||||
|
||||
LightLevelRed = Red
|
||||
LightLevelGreen = Green
|
||||
|
||||
@@ -124,11 +124,18 @@ obj
|
||||
if(flow.oxygen > 0.3 && (flow.toxins || fuel || liquid))
|
||||
|
||||
//Change icon depending on the fuel, and thus temperature.
|
||||
icon_state = "1"
|
||||
if(firelevel > 2.5)
|
||||
icon_state = "2"
|
||||
if(firelevel > 6)
|
||||
icon_state = "3"
|
||||
if(LuminosityRed != 7)
|
||||
ul_SetLuminosity(7,5,0)
|
||||
else if(firelevel > 2.5)
|
||||
icon_state = "2"
|
||||
if(LuminosityRed != 5)
|
||||
ul_SetLuminosity(5,4,0)
|
||||
else
|
||||
icon_state = "1"
|
||||
if(LuminosityRed != 3)
|
||||
ul_SetLuminosity(3,2,0)
|
||||
|
||||
//Ensure flow temperature is higher than minimum fire temperatures.
|
||||
flow.temperature = max(PLASMA_MINIMUM_BURN_TEMPERATURE+0.1,flow.temperature)
|
||||
@@ -157,7 +164,7 @@ obj
|
||||
New(newLoc,fl)
|
||||
..()
|
||||
dir = pick(cardinal)
|
||||
ul_SetLuminosity(3)
|
||||
ul_SetLuminosity(3,2,0)
|
||||
firelevel = fl
|
||||
for(var/mob/living/carbon/human/M in loc)
|
||||
M.FireBurn(min(max(0.1,firelevel / 20),10)) //Burn the humans!
|
||||
@@ -187,7 +194,6 @@ obj/liquid_fuel
|
||||
other.amount += src.amount
|
||||
spawn other.Spread()
|
||||
del src
|
||||
return
|
||||
|
||||
Spread()
|
||||
. = ..()
|
||||
@@ -201,8 +207,9 @@ obj/liquid_fuel
|
||||
if(S.air_check_directions & d)
|
||||
if(rand(25))
|
||||
var/turf/simulated/O = get_step(src,d)
|
||||
new/obj/liquid_fuel(O,amount*0.25)
|
||||
amount *= 0.75
|
||||
if(!locate(/obj/liquid_fuel) in O)
|
||||
new/obj/liquid_fuel(O,amount*0.25)
|
||||
amount *= 0.75
|
||||
|
||||
flamethrower_fuel
|
||||
icon_state = "mustard"
|
||||
|
||||
@@ -957,6 +957,7 @@ proc/process_ghost_teleport_locs()
|
||||
//Solars
|
||||
|
||||
/area/solar
|
||||
LightLevels = list("Red" = 2, "Green" = 2, "Blue" = 3)
|
||||
requires_power = 0
|
||||
|
||||
auxport
|
||||
|
||||
@@ -47,14 +47,6 @@
|
||||
return flags & INSERT_CONTAINER
|
||||
*/
|
||||
|
||||
Del()
|
||||
var/F = file("del_log.txt")
|
||||
var/coords = ""
|
||||
if(src)
|
||||
coords = "[src.x],[src.y],[src.z]"
|
||||
F << "[time2text(world.timeofday, "hh:mm.ss")]: [src] - [src.loc] [coords] - [usr]"
|
||||
..()
|
||||
|
||||
obj
|
||||
assume_air(datum/gas_mixture/giver)
|
||||
if(loc)
|
||||
|
||||
@@ -45,8 +45,6 @@
|
||||
thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
|
||||
heat_capacity = 700000
|
||||
|
||||
LightLevelBlue = 5
|
||||
|
||||
transit
|
||||
|
||||
var/pushdirection // push things that get caught in the transit tile this direction
|
||||
@@ -127,7 +125,6 @@
|
||||
|
||||
|
||||
/turf/space/New()
|
||||
// icon = 'space.dmi'
|
||||
if(!istype(src, /turf/space/transit))
|
||||
..()
|
||||
icon_state = "[rand(1,25)]"
|
||||
|
||||
@@ -27,21 +27,23 @@
|
||||
if(name == "Space") // override defaults for space
|
||||
requires_power = 1
|
||||
always_unpowered = 1
|
||||
ul_SetLuminosity(1)
|
||||
LightLevels = list("Red" = 2, "Green" = 2, "Blue" = 3)
|
||||
power_light = 0
|
||||
power_equip = 0
|
||||
power_environ = 0
|
||||
//has_gravity = 0 // Space has gravity. Because.. because.
|
||||
|
||||
if(!requires_power)
|
||||
else if(!requires_power)
|
||||
power_light = 0//rastaf0
|
||||
power_equip = 0//rastaf0
|
||||
power_environ = 0//rastaf0
|
||||
luminosity = 1
|
||||
ul_Lighting = 0 // *DAL*
|
||||
if(!ul_Lighting)
|
||||
luminosity = 1
|
||||
else
|
||||
luminosity = 0
|
||||
area_lights_luminosity = rand(6,9)
|
||||
area_lights_luminosity = rand(5,7)
|
||||
if(LightLevels)
|
||||
ul_Light()
|
||||
//ul_SetLuminosity(0) // *DAL*
|
||||
|
||||
|
||||
@@ -401,7 +403,7 @@
|
||||
other_related -= other_master
|
||||
var/list/total_contents = list()
|
||||
for(var/area/RA in other_related)
|
||||
RA.sd_lighting = 0
|
||||
// RA.ul_lighting = 0
|
||||
total_contents |= RA.contents
|
||||
del RA.contents
|
||||
del RA.related
|
||||
|
||||
@@ -55,12 +55,10 @@ datum/controller/game_controller
|
||||
// Now that the game is world is fully initialized, pause server until a user connects.
|
||||
world.sleep_offline = 1
|
||||
|
||||
setupgenetics()
|
||||
|
||||
setupdooralarms()
|
||||
|
||||
setup_objects()
|
||||
|
||||
setupgenetics()
|
||||
|
||||
// for(var/i = 0, i < max_secret_rooms, i++)
|
||||
// make_mining_asteroid_secret()
|
||||
// Because energy cutlasses, facehuggers, and empty rooms are silly. FOR NOW. - Erthilo
|
||||
@@ -104,7 +102,7 @@ datum/controller/game_controller
|
||||
new /obj/structure/closet/emcloset(loc)
|
||||
emclosetcount--
|
||||
|
||||
setup_UL()
|
||||
setupdooralarms()
|
||||
|
||||
world << "\red \b Initializations complete."
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
var/area/A = src.loc.loc
|
||||
brightness = A.area_lights_luminosity
|
||||
else
|
||||
brightness = rand(6,9)
|
||||
brightness = rand(5,7)
|
||||
if(prob(10))
|
||||
broken(1)
|
||||
if("bulb")
|
||||
@@ -123,7 +123,7 @@
|
||||
var/oldlum = luminosity
|
||||
|
||||
//luminosity = on * brightness
|
||||
ul_SetLuminosity(on * brightness, on * brightness, ( fitting == "tube" ? on * brightness : 0 ) ) // *DAL*
|
||||
ul_SetLuminosity(on * brightness, on * brightness, ( fitting != "bulb" ? on * brightness : on ) ) // *DAL*
|
||||
|
||||
// if the state changed, inc the switching counter
|
||||
if(oldlum != luminosity)
|
||||
|
||||
Reference in New Issue
Block a user