Second part of UltraLight. Some fixed up fire stuff.

This commit is contained in:
SkyMarshal
2012-06-18 17:52:40 -07:00
parent aeb850fef0
commit 692fdc724e
11 changed files with 132 additions and 114 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -957,6 +957,7 @@ proc/process_ghost_teleport_locs()
//Solars
/area/solar
LightLevels = list("Red" = 2, "Green" = 2, "Blue" = 3)
requires_power = 0
auxport

View File

@@ -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)

View File

@@ -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)]"

View File

@@ -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

View File

@@ -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."

View File

@@ -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)