mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
Fixed an annoying bug with giving another player a flashlight,
opened up at least 100 individual bugs where people kept setting loc and expecting light updates to catch it.
This commit is contained in:
@@ -1283,12 +1283,12 @@
|
|||||||
#include "code\WorkInProgress\explosion_particles.dm"
|
#include "code\WorkInProgress\explosion_particles.dm"
|
||||||
#include "code\WorkInProgress\periodic_news.dm"
|
#include "code\WorkInProgress\periodic_news.dm"
|
||||||
#include "code\WorkInProgress\Apples\artifacts.dm"
|
#include "code\WorkInProgress\Apples\artifacts.dm"
|
||||||
|
#include "code\WorkInProgress\Aryn\Lighting\_Defs.dm"
|
||||||
#include "code\WorkInProgress\Aryn\Lighting\Compatibility.dm"
|
#include "code\WorkInProgress\Aryn\Lighting\Compatibility.dm"
|
||||||
#include "code\WorkInProgress\Aryn\Lighting\Controller.dm"
|
#include "code\WorkInProgress\Aryn\Lighting\Controller.dm"
|
||||||
#include "code\WorkInProgress\Aryn\Lighting\Engine.dm"
|
#include "code\WorkInProgress\Aryn\Lighting\Engine.dm"
|
||||||
#include "code\WorkInProgress\Aryn\Lighting\Light.dm"
|
#include "code\WorkInProgress\Aryn\Lighting\Light.dm"
|
||||||
#include "code\WorkInProgress\Aryn\Lighting\Lightpoint.dm"
|
#include "code\WorkInProgress\Aryn\Lighting\Lightpoint.dm"
|
||||||
#include "code\WorkInProgress\Aryn\Lighting\Math.dm"
|
|
||||||
#include "code\WorkInProgress\Cael_Aislinn\Jungle\falsewall.dm"
|
#include "code\WorkInProgress\Cael_Aislinn\Jungle\falsewall.dm"
|
||||||
#include "code\WorkInProgress\Cael_Aislinn\Jungle\jungle.dm"
|
#include "code\WorkInProgress\Cael_Aislinn\Jungle\jungle.dm"
|
||||||
#include "code\WorkInProgress\Cael_Aislinn\Jungle\jungle_animals.dm"
|
#include "code\WorkInProgress\Cael_Aislinn\Jungle\jungle_animals.dm"
|
||||||
|
|||||||
@@ -36,10 +36,14 @@ turf_light_data/proc/copy_to(turf/T)
|
|||||||
//T.ResetValue()
|
//T.ResetValue()
|
||||||
|
|
||||||
atom/proc/SetLuminosity(n)
|
atom/proc/SetLuminosity(n)
|
||||||
|
ASSERT(n >= 0)
|
||||||
|
|
||||||
n = min(n,10) //Caelcode.
|
n = min(n,10) //Caelcode.
|
||||||
if(n > 0)
|
if(n > 0)
|
||||||
|
//world << "[name].SetLuminosity([n]) \[[max(1,n>>1)],[n]\]"
|
||||||
SetLight(max(1,n>>1),n)
|
SetLight(max(1,n>>1),n)
|
||||||
else
|
else
|
||||||
|
//world << "[name].SetLuminosity(0)"
|
||||||
SetLight(0,0)
|
SetLight(0,0)
|
||||||
luminosity = n
|
luminosity = n
|
||||||
//else lighting_controller.initial_lights.Add(src)
|
//else lighting_controller.initial_lights.Add(src)
|
||||||
@@ -89,25 +89,14 @@ var/list/lit_z_levels = list(1,5)
|
|||||||
started = 1
|
started = 1
|
||||||
|
|
||||||
for(var/turf/T)
|
for(var/turf/T)
|
||||||
if(!T.is_outside && T.light_overlay)
|
if(T.light_overlay)
|
||||||
|
|
||||||
T.ResetValue()
|
T.ResetValue()
|
||||||
T.UpdateLight()
|
T.light_overlay.icon_state = "[MAX_VALUE(T.lightSE)][MAX_VALUE(T.lightSW)][MAX_VALUE(T.lightNW)][MAX_VALUE(T.lightNE)]"
|
||||||
|
|
||||||
world << "<b><font color=red>Lighting initialization took [(world.timeofday-start_time)/world.fps] seconds.</font></b>"
|
world << "<b><font color=red>Lighting initialization took [(world.timeofday-start_time)/world.fps] seconds.</font></b>"
|
||||||
world << "<font color=red>Updated [turfs_updated] turfs.</font>"
|
world << "<font color=red>Updated [turfs_updated] turfs.</font>"
|
||||||
|
|
||||||
/datum/controller/lighting/proc/MarkIconUpdate(turf/T)
|
|
||||||
if(!T.needs_light_update)
|
|
||||||
icon_updates.Add(T)
|
|
||||||
T.needs_light_update = 1
|
|
||||||
|
|
||||||
/datum/controller/lighting/proc/FlushIconUpdates()
|
|
||||||
for(var/turf/T in icon_updates)
|
|
||||||
T.UpdateLight()
|
|
||||||
T.needs_light_update = 0
|
|
||||||
icon_updates = list()
|
|
||||||
|
|
||||||
/datum/controller/lighting/proc/AddBorder(turf/T)
|
/datum/controller/lighting/proc/AddBorder(turf/T)
|
||||||
if(!T.is_border)
|
if(!T.is_border)
|
||||||
light_border.Add(T)
|
light_border.Add(T)
|
||||||
|
|||||||
@@ -50,9 +50,6 @@ Turf Procs:
|
|||||||
Resets the opacity cache and looks for opaque objects. Also responsible for adding and removing borders to space.
|
Resets the opacity cache and looks for opaque objects. Also responsible for adding and removing borders to space.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define LIGHTCLAMP(x) ( max(0,min(3,round(x,1))) )
|
|
||||||
|
|
||||||
atom/movable/lighting_overlay
|
atom/movable/lighting_overlay
|
||||||
name = ""
|
name = ""
|
||||||
anchored = 1
|
anchored = 1
|
||||||
@@ -68,10 +65,9 @@ turf/var/atom/movable/lighting_overlay/light_overlay
|
|||||||
|
|
||||||
turf/var/lit_value = 0
|
turf/var/lit_value = 0
|
||||||
turf/var/max_brightness = 0
|
turf/var/max_brightness = 0
|
||||||
turf/var/has_opaque = 0
|
turf/var/has_opaque = -1
|
||||||
turf/var/is_outside = 0
|
turf/var/is_outside = 0
|
||||||
turf/var/is_border = 0
|
turf/var/is_border = 0
|
||||||
turf/var/needs_light_update = 0
|
|
||||||
|
|
||||||
turf/var/lightpoint/lightNE
|
turf/var/lightpoint/lightNE
|
||||||
turf/var/lightpoint/lightNW
|
turf/var/lightpoint/lightNW
|
||||||
@@ -85,7 +81,11 @@ atom/movable/New()
|
|||||||
if(!light)
|
if(!light)
|
||||||
SetLight(luminosity,luminosity)
|
SetLight(luminosity,luminosity)
|
||||||
else
|
else
|
||||||
|
light.atom = src
|
||||||
light.Reset()
|
light.Reset()
|
||||||
|
else if(light)
|
||||||
|
light.atom = src
|
||||||
|
light.Reset()
|
||||||
if(opacity)
|
if(opacity)
|
||||||
if(lighting_ready())
|
if(lighting_ready())
|
||||||
opacity = 0
|
opacity = 0
|
||||||
@@ -96,15 +96,16 @@ atom/movable/Del()
|
|||||||
if(opacity) SetOpacity(0)
|
if(opacity) SetOpacity(0)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
atom/movable/Move()
|
atom/movable/Move(turf/newloc)
|
||||||
var/o = opacity
|
var/o = opacity
|
||||||
if(o) SetOpacity(0)
|
if(o) SetOpacity(0)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.)
|
if(.)
|
||||||
if(o) SetOpacity(1)
|
if(o) SetOpacity(1)
|
||||||
if(light)
|
|
||||||
light.Reset()
|
turf/Entered(atom/movable/M)
|
||||||
if(lighting_ready()) lighting_controller.FlushIconUpdates()
|
. = ..()
|
||||||
|
if(M.light) M.light.Reset()
|
||||||
|
|
||||||
atom/proc/SetLight(intensity, radius)
|
atom/proc/SetLight(intensity, radius)
|
||||||
//if(lights_verbose) world << "SetLight([intensity],[radius])"
|
//if(lights_verbose) world << "SetLight([intensity],[radius])"
|
||||||
@@ -115,7 +116,7 @@ atom/proc/SetLight(intensity, radius)
|
|||||||
//if(lights_verbose) world << "Shut off light with [light.lit_turfs.len] turfs lit."
|
//if(lights_verbose) world << "Shut off light with [light.lit_turfs.len] turfs lit."
|
||||||
light.Off()
|
light.Off()
|
||||||
light.intensity = 0
|
light.intensity = 0
|
||||||
if(lighting_ready()) lighting_controller.FlushIconUpdates()
|
//if(lighting_ready()) lighting_controller.FlushIconUpdates()
|
||||||
return
|
return
|
||||||
if(!light)
|
if(!light)
|
||||||
//if(lights_verbose) world << "New light."
|
//if(lights_verbose) world << "New light."
|
||||||
@@ -126,25 +127,31 @@ atom/proc/SetLight(intensity, radius)
|
|||||||
light.radius = min(radius,15)
|
light.radius = min(radius,15)
|
||||||
light.intensity = intensity
|
light.intensity = intensity
|
||||||
light.Reset()
|
light.Reset()
|
||||||
if(lighting_ready()) lighting_controller.FlushIconUpdates()
|
//if(lighting_ready()) lighting_controller.FlushIconUpdates()
|
||||||
|
|
||||||
atom/proc/SetOpacity(o)
|
atom/proc/SetOpacity(o)
|
||||||
if(o == opacity) return
|
if(o == opacity) return
|
||||||
opacity = o
|
opacity = o
|
||||||
var/turf/T = loc
|
var/turf/T = loc
|
||||||
if(isturf(T))
|
if(isturf(T))
|
||||||
|
T.CheckForOpaqueObjects()
|
||||||
for(var/light/A in T.lit_by)
|
for(var/light/A in T.lit_by)
|
||||||
A.Reset()
|
A.Reset()
|
||||||
lighting_controller.FlushIconUpdates()
|
|
||||||
|
|
||||||
turf/proc/UpdateLight()
|
//lighting_controller.FlushIconUpdates()
|
||||||
if(light_overlay)
|
|
||||||
light_overlay.icon_state = "[lightSE.max_value()][lightSW.max_value()][lightNW.max_value()][lightNE.max_value()]"
|
|
||||||
|
|
||||||
turf/proc/AddLight(light/light)
|
atom/proc/UpdateLights()
|
||||||
|
if(light) light.Reset()
|
||||||
|
for(var/atom/movable/A in src)
|
||||||
|
if(A.light) A.light.Reset()
|
||||||
|
|
||||||
|
//turf/proc/UpdateLight()
|
||||||
|
// if(light_overlay)
|
||||||
|
// light_overlay.icon_state = "[lightSE.max_value()][lightSW.max_value()][lightNW.max_value()][lightNE.max_value()]"
|
||||||
|
|
||||||
|
turf/proc/AddLight(light/light, brightness)
|
||||||
if(is_outside) return
|
if(is_outside) return
|
||||||
|
|
||||||
var/brightness = light.CalculateBrightness(src)
|
|
||||||
if(brightness <= 0) return
|
if(brightness <= 0) return
|
||||||
|
|
||||||
if(!lit_by) lit_by = list()
|
if(!lit_by) lit_by = list()
|
||||||
@@ -153,13 +160,19 @@ turf/proc/AddLight(light/light)
|
|||||||
|
|
||||||
lit_by[light] = brightness
|
lit_by[light] = brightness
|
||||||
|
|
||||||
if(!has_opaque && lighting_ready())
|
if(lighting_ready())
|
||||||
if(brightness > max_brightness)
|
if(brightness > max_brightness)
|
||||||
lit_value = LIGHTCLAMP(brightness)
|
lit_value = LIGHTCLAMP(brightness)
|
||||||
max_brightness = brightness
|
max_brightness = brightness
|
||||||
ResetCachedValues()
|
|
||||||
|
if(lightNE) lightNE.cached_value = -1
|
||||||
|
if(lightNW) lightNW.cached_value = -1
|
||||||
|
if(lightSE) lightSE.cached_value = -1
|
||||||
|
if(lightSW) lightSW.cached_value = -1
|
||||||
|
|
||||||
for(var/turf/T in range(1,src))
|
for(var/turf/T in range(1,src))
|
||||||
lighting_controller.MarkIconUpdate(T)
|
if(T.light_overlay)
|
||||||
|
T.light_overlay.icon_state = "[MAX_VALUE(T.lightSE)][MAX_VALUE(T.lightSW)][MAX_VALUE(T.lightNW)][MAX_VALUE(T.lightNE)]"
|
||||||
|
|
||||||
turf/proc/RemoveLight(light/light)
|
turf/proc/RemoveLight(light/light)
|
||||||
if(lit_by)
|
if(lit_by)
|
||||||
@@ -187,17 +200,10 @@ turf/proc/ResetValue()
|
|||||||
lit_value = LIGHTCLAMP(lighting_controller.starlight)
|
lit_value = LIGHTCLAMP(lighting_controller.starlight)
|
||||||
return
|
return
|
||||||
|
|
||||||
CheckForOpaqueObjects()
|
if(has_opaque < 0) CheckForOpaqueObjects()
|
||||||
if(has_opaque)
|
if(has_opaque)
|
||||||
lit_value = 0
|
lit_value = 0
|
||||||
else
|
else
|
||||||
the_part_where_I_calculate_brightness()
|
|
||||||
|
|
||||||
if(lighting_ready())
|
|
||||||
the_part_where_I_use_range()
|
|
||||||
|
|
||||||
turf/proc
|
|
||||||
the_part_where_I_calculate_brightness()
|
|
||||||
max_brightness = 0
|
max_brightness = 0
|
||||||
for(var/light/light in lit_by)
|
for(var/light/light in lit_by)
|
||||||
var/brightness = lit_by[light]//light.CalculateBrightness(src)
|
var/brightness = lit_by[light]//light.CalculateBrightness(src)
|
||||||
@@ -205,20 +211,14 @@ turf/proc
|
|||||||
max_brightness = brightness
|
max_brightness = brightness
|
||||||
lit_value = LIGHTCLAMP(max_brightness)
|
lit_value = LIGHTCLAMP(max_brightness)
|
||||||
|
|
||||||
the_part_where_I_use_range()
|
if(lighting_ready())
|
||||||
ResetCachedValues()
|
if(lightNE) lightNE.cached_value = -1
|
||||||
|
if(lightNW) lightNW.cached_value = -1
|
||||||
|
if(lightSE) lightSE.cached_value = -1
|
||||||
|
if(lightSW) lightSW.cached_value = -1
|
||||||
for(var/turf/T in range(1,src))
|
for(var/turf/T in range(1,src))
|
||||||
lighting_controller.MarkIconUpdate(T)
|
if(T.light_overlay)
|
||||||
|
T.light_overlay.icon_state = "[MAX_VALUE(T.lightSE)][MAX_VALUE(T.lightSW)][MAX_VALUE(T.lightNW)][MAX_VALUE(T.lightNE)]"
|
||||||
turf/proc/ResetCachedValues()
|
|
||||||
if(lightNE)
|
|
||||||
lightNE.cached_value = -1
|
|
||||||
if(lightNW)
|
|
||||||
lightNW.cached_value = -1
|
|
||||||
if(lightSE)
|
|
||||||
lightSE.cached_value = -1
|
|
||||||
if(lightSW)
|
|
||||||
lightSW.cached_value = -1
|
|
||||||
|
|
||||||
turf/proc/CheckForOpaqueObjects()
|
turf/proc/CheckForOpaqueObjects()
|
||||||
has_opaque = opacity
|
has_opaque = opacity
|
||||||
@@ -226,6 +226,4 @@ turf/proc/CheckForOpaqueObjects()
|
|||||||
for(var/atom/movable/M in contents)
|
for(var/atom/movable/M in contents)
|
||||||
if(M.opacity)
|
if(M.opacity)
|
||||||
has_opaque = 1
|
has_opaque = 1
|
||||||
break
|
break
|
||||||
|
|
||||||
#undef LIGHTCLAMP
|
|
||||||
@@ -24,21 +24,30 @@ Class Procs:
|
|||||||
|
|
||||||
light/var/radius = 0
|
light/var/radius = 0
|
||||||
light/var/intensity = 0
|
light/var/intensity = 0
|
||||||
light/var/list/lit_turfs
|
light/var/ambient_extension = 3
|
||||||
|
light/var/list/lit_turfs = list()
|
||||||
light/var/atom/atom
|
light/var/atom/atom
|
||||||
|
|
||||||
light/New(atom/atom)
|
light/New(atom/atom, radius, ambience=3)
|
||||||
ASSERT(atom)
|
ASSERT(atom)
|
||||||
src.atom = atom
|
|
||||||
|
if(istype(atom))
|
||||||
|
src.atom = atom
|
||||||
|
else
|
||||||
|
src.intensity = atom
|
||||||
|
src.radius = radius
|
||||||
|
src.ambient_extension = ambience
|
||||||
|
|
||||||
light/proc/Reset()
|
light/proc/Reset()
|
||||||
//if(atom.lights_verbose) world << "light.Reset()"
|
//if(atom.lights_verbose) world << "light.Reset()"
|
||||||
Off()
|
Off()
|
||||||
if(intensity > 0)
|
if(intensity > 0)
|
||||||
//if(atom.lights_verbose) world << "Restoring light."
|
//if(atom.lights_verbose) world << "Restoring light."
|
||||||
for(var/turf/T in view(get_turf(atom),radius+1))
|
var/turf/loc = atom
|
||||||
|
for(var/turf/T in view(loc,radius+ambient_extension))
|
||||||
if(!T.is_outside)
|
if(!T.is_outside)
|
||||||
T.AddLight(src)
|
var/brightness = CalculateBrightness(T, loc)
|
||||||
|
T.AddLight(src, brightness)
|
||||||
lit_turfs.Add(T)
|
lit_turfs.Add(T)
|
||||||
//if(atom.lights_verbose) world << "[lit_turfs.len] turfs added."
|
//if(atom.lights_verbose) world << "[lit_turfs.len] turfs added."
|
||||||
|
|
||||||
@@ -46,15 +55,20 @@ light/proc/Off()
|
|||||||
//if(atom.lights_verbose) world << "light.Off()"
|
//if(atom.lights_verbose) world << "light.Off()"
|
||||||
for(var/turf/T in lit_turfs)
|
for(var/turf/T in lit_turfs)
|
||||||
T.RemoveLight(src)
|
T.RemoveLight(src)
|
||||||
lit_turfs = list()
|
lit_turfs.Cut()
|
||||||
|
|
||||||
light/proc/CalculateBrightness(turf/T)
|
light/proc/Flash(t)
|
||||||
|
Reset()
|
||||||
|
spawn(t)
|
||||||
|
Off()
|
||||||
|
|
||||||
|
light/proc/CalculateBrightness(turf/T, turf/loc)
|
||||||
ASSERT(T)
|
ASSERT(T)
|
||||||
var/square = get_square_dist(atom.x,atom.y,atom.z,T.x,T.y,T.z)
|
var/square = DISTSQ3(loc.x-T.x,loc.y-T.y,loc.z-T.z)
|
||||||
if(square > (radius+2)*(radius+2)) return 0
|
if(square > (radius+ambient_extension)*(radius+ambient_extension)) return 0
|
||||||
//+2 offset gives an ambient light effect.
|
//+2 offset gives an ambient light effect.
|
||||||
|
|
||||||
var/value = ((radius)/(2*fsqrt(square) + 1)) * intensity - 0.48
|
var/value = ((radius)/(2*FSQRT(square) + 1)) * intensity - 0.48
|
||||||
/*
|
/*
|
||||||
lightRadius
|
lightRadius
|
||||||
---------------- * lightValue - 0.48
|
---------------- * lightValue - 0.48
|
||||||
|
|||||||
@@ -50,16 +50,10 @@ lightpoint
|
|||||||
T.lightNW = src
|
T.lightNW = src
|
||||||
|
|
||||||
proc/max_value()
|
proc/max_value()
|
||||||
if(cached_value < 0)
|
var
|
||||||
var
|
valueA = VALUE_OF(NW)
|
||||||
valueA = value_of(NW)
|
valueB = VALUE_OF(NE)
|
||||||
valueB = value_of(NE)
|
valueC = VALUE_OF(SW)
|
||||||
valueC = value_of(SW)
|
valueD = VALUE_OF(SE)
|
||||||
valueD = value_of(SE)
|
cached_value = max(valueA,valueB,valueC,valueD)
|
||||||
cached_value = max(valueA,valueB,valueC,valueD)
|
return cached_value
|
||||||
return cached_value
|
|
||||||
|
|
||||||
proc/value_of(turf/T)
|
|
||||||
if(!T) return 0
|
|
||||||
if(T.is_outside) return min(lighting_controller.starlight,3)
|
|
||||||
return T.lit_value
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
/*
|
|
||||||
|
|
||||||
Some math procs used by lighting, including ul's fastroot.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
var/list/fastroot = list(0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5,
|
|
||||||
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)
|
|
||||||
|
|
||||||
proc/get_square_dist(Ax,Ay,Az,Bx,By,Bz)
|
|
||||||
var/X = (Ax - Bx)
|
|
||||||
var/Y = (Ay - By)
|
|
||||||
var/Z = (Az - Bz)
|
|
||||||
return (X * X + Y * Y + Z * Z)
|
|
||||||
|
|
||||||
proc/fsqrt(n)
|
|
||||||
if (n > fastroot.len)
|
|
||||||
//world << "Adding [n-fastroot.len] entries to root table."
|
|
||||||
for(var/i = fastroot.len, i <= n, i++)
|
|
||||||
fastroot += round(sqrt(i))
|
|
||||||
return fastroot[n + 1]
|
|
||||||
15
code/WorkInProgress/Aryn/Lighting/_Defs.dm
Normal file
15
code/WorkInProgress/Aryn/Lighting/_Defs.dm
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#define SQ(X) ((X)*(X))
|
||||||
|
#define DISTSQ3(A,B,C) (SQ(A)+SQ(B)+SQ(C))
|
||||||
|
#define FSQRT(X) (X >= fastroot.len ? new_fsqrt(X) : fastroot[(X)+1])
|
||||||
|
#define MAX_VALUE(X) (X.cached_value < 0 ? X.max_value() : X.cached_value)
|
||||||
|
#define VALUE_OF(X) ( !X ? 0 : ( X.is_outside ? LIGHTCLAMP(lighting_controller.starlight) : X.lit_value ) )
|
||||||
|
#define LIGHTCLAMP(x) ( max(0,min(3,round(x,1))) )
|
||||||
|
|
||||||
|
var/list/fastroot = list(0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5,
|
||||||
|
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)
|
||||||
|
|
||||||
|
proc/new_fsqrt(n)
|
||||||
|
//world << "Adding [n-fastroot.len] entries to root table."
|
||||||
|
for(var/i = fastroot.len, i <= n, i++)
|
||||||
|
fastroot += round(sqrt(i))
|
||||||
@@ -89,13 +89,13 @@
|
|||||||
|
|
||||||
|
|
||||||
/obj/item/device/flashlight/pickup(mob/user)
|
/obj/item/device/flashlight/pickup(mob/user)
|
||||||
if(on)
|
if(on && luminosity)
|
||||||
user.SetLuminosity(user.luminosity + brightness_on)
|
user.SetLuminosity(user.luminosity + brightness_on)
|
||||||
SetLuminosity(0)
|
SetLuminosity(0)
|
||||||
|
|
||||||
|
|
||||||
/obj/item/device/flashlight/dropped(mob/user)
|
/obj/item/device/flashlight/dropped(mob/user)
|
||||||
if(on)
|
if(on && !luminosity)
|
||||||
user.SetLuminosity(user.luminosity - brightness_on)
|
user.SetLuminosity(user.luminosity - brightness_on)
|
||||||
SetLuminosity(brightness_on)
|
SetLuminosity(brightness_on)
|
||||||
|
|
||||||
|
|||||||
@@ -717,8 +717,11 @@ It can still be worn/put on as normal.
|
|||||||
if(item && target.has_organ_for_slot(slot_to_process)) //Placing an item on the mob
|
if(item && target.has_organ_for_slot(slot_to_process)) //Placing an item on the mob
|
||||||
if(item.mob_can_equip(target, slot_to_process, 0))
|
if(item.mob_can_equip(target, slot_to_process, 0))
|
||||||
source.u_equip(item)
|
source.u_equip(item)
|
||||||
target.equip_to_slot_if_possible(item, slot_to_process, 0, 1, 1)
|
|
||||||
item.dropped(source)
|
item.dropped(source)
|
||||||
|
|
||||||
|
target.equip_to_slot_if_possible(item, slot_to_process, 0, 1, 1)
|
||||||
|
item.pickup(target)
|
||||||
|
|
||||||
source.update_icons()
|
source.update_icons()
|
||||||
target.update_icons()
|
target.update_icons()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user