diff --git a/code/WorkInProgress/Aryn/Lighting/Compatibility.dm b/code/WorkInProgress/Aryn/Lighting/Compatibility.dm
index e9109bc67f4..9c98f5f6c9c 100644
--- a/code/WorkInProgress/Aryn/Lighting/Compatibility.dm
+++ b/code/WorkInProgress/Aryn/Lighting/Compatibility.dm
@@ -1,6 +1,7 @@
area/var/lighting_use_dynamic
turf/space/is_outside = 1
+turf/simulated/shuttle/is_outside = 1
/datum/controller/lighting/var/processing = 1
/datum/controller/lighting/var/iteration = 0
@@ -36,6 +37,9 @@ turf_light_data/proc/copy_to(turf/T)
atom/proc/SetLuminosity(n)
n = min(n,10) //Caelcode.
- SetLight(n>>1,n)
+ if(n > 0)
+ SetLight(max(1,n>>1),n)
+ else
+ SetLight(0,0)
luminosity = n
//else lighting_controller.initial_lights.Add(src)
\ No newline at end of file
diff --git a/code/WorkInProgress/Aryn/Lighting/Controller.dm b/code/WorkInProgress/Aryn/Lighting/Controller.dm
index 7f93107dd5c..da2c32128cc 100644
--- a/code/WorkInProgress/Aryn/Lighting/Controller.dm
+++ b/code/WorkInProgress/Aryn/Lighting/Controller.dm
@@ -89,7 +89,9 @@ var/list/lit_z_levels = list(1,5)
started = 1
for(var/turf/T)
- if(!T.is_outside) T.UpdateLight()
+ if(!T.is_outside)
+ if(!T.lit_value) T.ResetValue()
+ T.UpdateLight()
world << "Lighting initialization took [(world.timeofday-start_time)/world.fps] seconds."
world << "Updated [turfs_updated] turfs."
diff --git a/code/WorkInProgress/Aryn/Lighting/Engine.dm b/code/WorkInProgress/Aryn/Lighting/Engine.dm
index 7b3458b29a3..53033235727 100644
--- a/code/WorkInProgress/Aryn/Lighting/Engine.dm
+++ b/code/WorkInProgress/Aryn/Lighting/Engine.dm
@@ -77,7 +77,7 @@ turf/var/lightpoint/lightSE
turf/var/lightpoint/lightSW
turf/var/list/lit_by
-atom/New()
+atom/movable/New()
. = ..()
if(luminosity)
if(!light)
@@ -97,17 +97,25 @@ atom/movable/Move()
if(o) SetOpacity(1)
if(light)
light.Reset()
- lighting_controller.FlushIconUpdates()
+ if(lighting_ready()) lighting_controller.FlushIconUpdates()
atom/proc/SetLight(intensity, radius)
+ if(lights_verbose) world << "SetLight([intensity],[radius])"
if(!intensity)
- if(!light) return
+ if(!light || !light.intensity)
+ if(lights_verbose) world << "Still off."
+ return
+ if(lights_verbose) world << "Shut off light with [light.lit_turfs.len] turfs lit."
light.Off()
- light = null
+ light.intensity = 0
if(lighting_ready()) lighting_controller.FlushIconUpdates()
return
- if(!light) light = new(src)
- if(light.intensity == intensity) return
+ if(!light)
+ if(lights_verbose) world << "New light."
+ light = new(src)
+ if(light.intensity == intensity)
+ if(lights_verbose) world << "Same intensity."
+ return
light.radius = min(radius,15)
light.intensity = intensity
light.Reset()
@@ -128,12 +136,14 @@ turf/proc/UpdateLight()
turf/proc/AddLight(light/light)
if(is_outside) return
- if(has_opaque) return
+
+ var/brightness = light.CalculateBrightness(src)
+ if(brightness <= 0) return
if(!lit_by) lit_by = list()
lit_by.Add(light)
- var/brightness = light.CalculateBrightness(src)
+
lit_by[light] = brightness
if(!has_opaque && lighting_ready())
@@ -145,7 +155,6 @@ turf/proc/AddLight(light/light)
lighting_controller.MarkIconUpdate(T)
turf/proc/RemoveLight(light/light)
- if(has_opaque) return
if(lit_by)
var/brightness = lit_by[light]
lit_by.Remove(light)
@@ -159,15 +168,13 @@ turf/proc/ResetValue()
lit_value = LIGHTCLAMP(lighting_controller.starlight)
return
- var/old_value = lit_value
-
CheckForOpaqueObjects()
if(has_opaque)
lit_value = 0
else
the_part_where_I_calculate_brightness()
- if(lighting_ready() && lit_value != old_value)
+ if(lighting_ready())
the_part_where_I_use_range()
turf/proc
diff --git a/code/WorkInProgress/Aryn/Lighting/Light.dm b/code/WorkInProgress/Aryn/Lighting/Light.dm
index 0fd824eca14..9e6113169a6 100644
--- a/code/WorkInProgress/Aryn/Lighting/Light.dm
+++ b/code/WorkInProgress/Aryn/Lighting/Light.dm
@@ -31,19 +31,21 @@ light/New(atom/atom)
src.atom = atom
light/proc/Reset()
+ if(atom.lights_verbose) world << "light.Reset()"
Off()
-
- lit_turfs = list()
-
if(intensity > 0)
- for(var/turf/T in view(atom,radius+1))
+ if(atom.lights_verbose) world << "Restoring light."
+ for(var/turf/T in view(get_turf(atom),radius+1))
if(!T.is_outside)
T.AddLight(src)
lit_turfs.Add(T)
+ if(atom.lights_verbose) world << "[lit_turfs.len] turfs added."
light/proc/Off()
+ if(atom.lights_verbose) world << "light.Off()"
for(var/turf/T in lit_turfs)
T.RemoveLight(src)
+ lit_turfs = list()
light/proc/CalculateBrightness(turf/T)
var/square = get_square_dist(atom.x,atom.y,atom.z,T.x,T.y,T.z)
diff --git a/code/WorkInProgress/Aryn/Lighting/Verbs.dm b/code/WorkInProgress/Aryn/Lighting/Verbs.dm
new file mode 100644
index 00000000000..bf1b40f1ba1
--- /dev/null
+++ b/code/WorkInProgress/Aryn/Lighting/Verbs.dm
@@ -0,0 +1,33 @@
+var/icon/lighting_dbg = icon('icons/Testing/Zone.dmi', "created")
+
+atom/var/lights_verbose = 0
+
+obj/machinery/light/verb/ShowInfluence()
+ set src in world
+
+ lights_verbose = 1
+ usr << "[src]"
+ if(light)
+ usr << "Intensity: [light.intensity]"
+ usr << "Radius: [light.radius]"
+
+ for(var/turf/T in light.lit_turfs)
+ T.overlays += lighting_dbg
+ spawn(50)
+ for(var/turf/T in light.lit_turfs)
+ T.overlays -= lighting_dbg
+
+turf/verb/ShowData()
+ set src in world
+
+ usr << "[src]"
+ usr << "Lit Value: [lit_value]"
+ usr << "Max Brightness: [max_brightness]"
+
+ usr << "Lit By: "
+ for(var/light/light in lit_by)
+ usr << " - [light.atom] \[[lit_by[light]]\][(lit_by[light] == max_brightness ? "(MAX)" : "")]"
+ light.atom.overlays += lighting_dbg
+ spawn(50)
+ for(var/light/light in lit_by)
+ light.atom.overlays -= lighting_dbg
\ No newline at end of file
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 08f16926384..29f94e7e2ab 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -208,6 +208,8 @@ var/turf_light_data/old_lights = new
//world << "Replacing [src.type] with [N]"
+ var/old_opacity = opacity
+
old_lights.copy_from(src)
if(connections) connections.erase_all()
@@ -231,6 +233,11 @@ var/turf_light_data/old_lights = new
//W.Assimilate_Air()
old_lights.copy_to(W)
+ W.ResetValue()
+
+ if(old_opacity)
+ W.opacity = 1
+ W.SetOpacity(0)
if (istype(W,/turf/simulated/floor))
W.RemoveLattice()
@@ -250,6 +257,7 @@ var/turf_light_data/old_lights = new
var/turf/W = new N( locate(src.x, src.y, src.z) )
old_lights.copy_to(W)
+ W.ResetValue()
if(air_master)
air_master.mark_for_update(src)
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index b116d6b342b..d1f09b6a3d1 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -604,7 +604,7 @@
/obj/machinery/light/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY
if(on && light)
- use_power(light.radius * LIGHTING_POWER_FACTOR, LIGHT)
+ use_power(luminosity * LIGHTING_POWER_FACTOR, LIGHT)
// called when area power state changes
/obj/machinery/light/power_change()