diff --git a/baystation12.dme b/baystation12.dme index 35fb099fd8..5be875477e 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -21,6 +21,7 @@ #include "code\__HELPERS\global_lists.dm" #include "code\__HELPERS\icons.dm" #include "code\__HELPERS\lists.dm" +#include "code\__HELPERS\loc.dm" #include "code\__HELPERS\logging.dm" #include "code\__HELPERS\maths.dm" #include "code\__HELPERS\mobs.dm" @@ -1283,12 +1284,12 @@ #include "code\WorkInProgress\explosion_particles.dm" #include "code\WorkInProgress\periodic_news.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\Controller.dm" #include "code\WorkInProgress\Aryn\Lighting\Engine.dm" #include "code\WorkInProgress\Aryn\Lighting\Light.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\jungle.dm" #include "code\WorkInProgress\Cael_Aislinn\Jungle\jungle_animals.dm" diff --git a/code/WorkInProgress/Aryn/Lighting/Compatibility.dm b/code/WorkInProgress/Aryn/Lighting/Compatibility.dm index 9c98f5f6c9..ad5ca37b04 100644 --- a/code/WorkInProgress/Aryn/Lighting/Compatibility.dm +++ b/code/WorkInProgress/Aryn/Lighting/Compatibility.dm @@ -36,10 +36,14 @@ turf_light_data/proc/copy_to(turf/T) //T.ResetValue() atom/proc/SetLuminosity(n) + ASSERT(n >= 0) + n = min(n,10) //Caelcode. if(n > 0) - SetLight(max(1,n>>1),n) + //world << "[name].SetLuminosity([n]) \[[max(1,n>>1)],[n]\]" + SetLight(max(1,n),n) else + //world << "[name].SetLuminosity(0)" 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 c5a0fee140..6220ebe360 100644 --- a/code/WorkInProgress/Aryn/Lighting/Controller.dm +++ b/code/WorkInProgress/Aryn/Lighting/Controller.dm @@ -41,11 +41,8 @@ var/list/lit_z_levels = list(1,5) /datum/controller/lighting - var/starlight = 4 + var/starlight = LIGHT_STATES var/list/icon_updates = list() - - var/list/light_border = list() - var/started = 0 //var/icon/border = icon('Icons/Test.dmi', "border") @@ -89,32 +86,14 @@ var/list/lit_z_levels = list(1,5) started = 1 for(var/turf/T) - if(!T.is_outside && T.light_overlay) + if(T.light_overlay) T.ResetValue() - T.UpdateLight() + T.light_overlay.set_state(MAX_VALUE(T.lightSE), MAX_VALUE(T.lightSW), MAX_VALUE(T.lightNW), MAX_VALUE(T.lightNE)) world << "Lighting initialization took [(world.timeofday-start_time)/world.fps] seconds." world << "Updated [turfs_updated] turfs." -/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) - if(!T.is_border) - light_border.Add(T) - T.is_border = 1 - //T.overlays.Add(border) - -/datum/controller/lighting/proc/RemoveBorder(turf/T) - if(T.is_border) - light_border.Remove(T) - T.is_border = 0 +/datum/controller/lighting/proc/GetLightIcon(a,b,c,d) + if(a <= 2) return LIGHT_ICON_1 + else return LIGHT_ICON_2 \ No newline at end of file diff --git a/code/WorkInProgress/Aryn/Lighting/Engine.dm b/code/WorkInProgress/Aryn/Lighting/Engine.dm index 061918b414..fc94b09c6a 100644 --- a/code/WorkInProgress/Aryn/Lighting/Engine.dm +++ b/code/WorkInProgress/Aryn/Lighting/Engine.dm @@ -50,28 +50,26 @@ Turf Procs: 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 name = "" anchored = 1 layer = 9 mouse_opacity = 0 - icon = 'icons/effects/ArynLights.dmi' - icon_state = "0000" invisibility = INVISIBILITY_LIGHTING +atom/movable/lighting_overlay/proc/set_state(a,b,c,d) + icon_state = "[a][b][c][d]" + icon = lighting_controller.GetLightIcon(a,b,c,d) + atom/var/light/light turf/var/atom/movable/lighting_overlay/light_overlay turf/var/lit_value = 0 turf/var/max_brightness = 0 -turf/var/has_opaque = 0 +turf/var/has_opaque = -1 turf/var/is_outside = 0 turf/var/is_border = 0 -turf/var/needs_light_update = 0 turf/var/lightpoint/lightNE turf/var/lightpoint/lightNW @@ -85,21 +83,31 @@ atom/movable/New() if(!light) SetLight(luminosity,luminosity) else + light.atom = src light.Reset() + else if(light) + light.atom = src + light.Reset() if(opacity) if(lighting_ready()) opacity = 0 SetOpacity(1) -atom/movable/Move() +atom/movable/Del() + if(light) light.Off() + if(opacity) SetOpacity(0) + . = ..() + +atom/movable/Move(turf/newloc) var/o = opacity if(o) SetOpacity(0) . = ..() if(.) if(o) SetOpacity(1) - if(light) - light.Reset() - if(lighting_ready()) lighting_controller.FlushIconUpdates() + +turf/Entered(atom/movable/M) + . = ..() + if(M.light) M.light.Reset() atom/proc/SetLight(intensity, radius) //if(lights_verbose) world << "SetLight([intensity],[radius])" @@ -110,7 +118,7 @@ atom/proc/SetLight(intensity, radius) //if(lights_verbose) world << "Shut off light with [light.lit_turfs.len] turfs lit." light.Off() light.intensity = 0 - if(lighting_ready()) lighting_controller.FlushIconUpdates() + //if(lighting_ready()) lighting_controller.FlushIconUpdates() return if(!light) //if(lights_verbose) world << "New light." @@ -121,25 +129,31 @@ atom/proc/SetLight(intensity, radius) light.radius = min(radius,15) light.intensity = intensity light.Reset() - if(lighting_ready()) lighting_controller.FlushIconUpdates() + //if(lighting_ready()) lighting_controller.FlushIconUpdates() atom/proc/SetOpacity(o) if(o == opacity) return opacity = o var/turf/T = loc if(isturf(T)) + T.CheckForOpaqueObjects() for(var/light/A in T.lit_by) A.Reset() - lighting_controller.FlushIconUpdates() -turf/proc/UpdateLight() - if(light_overlay) - light_overlay.icon_state = "[lightSE.max_value()][lightSW.max_value()][lightNW.max_value()][lightNE.max_value()]" + //lighting_controller.FlushIconUpdates() -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 - var/brightness = light.CalculateBrightness(src) if(brightness <= 0) return if(!lit_by) lit_by = list() @@ -148,13 +162,19 @@ turf/proc/AddLight(light/light) lit_by[light] = brightness - if(!has_opaque && lighting_ready()) + if(lighting_ready()) if(brightness > max_brightness) lit_value = LIGHTCLAMP(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)) - lighting_controller.MarkIconUpdate(T) + if(T.light_overlay) + T.light_overlay.set_state(MAX_VALUE(T.lightSE), MAX_VALUE(T.lightSW), MAX_VALUE(T.lightNW), MAX_VALUE(T.lightNE)) turf/proc/RemoveLight(light/light) if(lit_by) @@ -171,10 +191,9 @@ turf/proc/ResetAllLights() /turf/space/ResetAllLights() var/atom/movable/lighting_overlay/overlay = locate() in src - if (overlay) - overlay.loc = null - light_overlay = null - is_outside = 1 + if(overlay) overlay.loc = null + light_overlay = null + is_outside = 1 . = ..() turf/proc/ResetValue() @@ -183,17 +202,10 @@ turf/proc/ResetValue() lit_value = LIGHTCLAMP(lighting_controller.starlight) return - CheckForOpaqueObjects() + if(has_opaque < 0) CheckForOpaqueObjects() if(has_opaque) lit_value = 0 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 for(var/light/light in lit_by) var/brightness = lit_by[light]//light.CalculateBrightness(src) @@ -201,20 +213,14 @@ turf/proc max_brightness = brightness lit_value = LIGHTCLAMP(max_brightness) - the_part_where_I_use_range() - ResetCachedValues() + if(lighting_ready()) + 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)) - lighting_controller.MarkIconUpdate(T) - -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 + if(T.light_overlay) + T.light_overlay.set_state(MAX_VALUE(T.lightSE), MAX_VALUE(T.lightSW), MAX_VALUE(T.lightNW), MAX_VALUE(T.lightNE)) turf/proc/CheckForOpaqueObjects() has_opaque = opacity @@ -222,6 +228,4 @@ turf/proc/CheckForOpaqueObjects() for(var/atom/movable/M in contents) if(M.opacity) has_opaque = 1 - break - -#undef LIGHTCLAMP \ No newline at end of file + break \ No newline at end of file diff --git a/code/WorkInProgress/Aryn/Lighting/Light.dm b/code/WorkInProgress/Aryn/Lighting/Light.dm index e354154180..fd6f196645 100644 --- a/code/WorkInProgress/Aryn/Lighting/Light.dm +++ b/code/WorkInProgress/Aryn/Lighting/Light.dm @@ -24,20 +24,30 @@ Class Procs: light/var/radius = 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/New(atom/atom) - src.atom = atom +light/New(atom/atom, radius, ambience=3) + ASSERT(atom) + + if(istype(atom)) + src.atom = atom + else + src.intensity = atom + src.radius = radius + src.ambient_extension = ambience light/proc/Reset() //if(atom.lights_verbose) world << "light.Reset()" Off() if(intensity > 0) //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) - T.AddLight(src) + var/brightness = CalculateBrightness(T, loc) + T.AddLight(src, brightness) lit_turfs.Add(T) //if(atom.lights_verbose) world << "[lit_turfs.len] turfs added." @@ -45,16 +55,20 @@ light/proc/Off() //if(atom.lights_verbose) world << "light.Off()" for(var/turf/T in lit_turfs) T.RemoveLight(src) - lit_turfs = list() + lit_turfs.Cut() -light/proc/CalculateBrightness(turf/T) - if (!atom) - return 0 - var/square = get_square_dist(atom.x,atom.y,atom.z,T.x,T.y,T.z) - if(square > (radius+2)*(radius+2)) return 0 +light/proc/Flash(t) + Reset() + spawn(t) + Off() + +light/proc/CalculateBrightness(turf/T, turf/loc) + ASSERT(T) + var/square = DISTSQ3(loc.x-T.x,loc.y-T.y,loc.z-T.z) + if(square > (radius+ambient_extension)*(radius+ambient_extension)) return 0 //+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 ---------------- * lightValue - 0.48 diff --git a/code/WorkInProgress/Aryn/Lighting/Lightpoint.dm b/code/WorkInProgress/Aryn/Lighting/Lightpoint.dm index 5b9aade35e..eeeec4c706 100644 --- a/code/WorkInProgress/Aryn/Lighting/Lightpoint.dm +++ b/code/WorkInProgress/Aryn/Lighting/Lightpoint.dm @@ -50,16 +50,10 @@ lightpoint T.lightNW = src proc/max_value() - if(cached_value < 0) - var - valueA = value_of(NW) - valueB = value_of(NE) - valueC = value_of(SW) - valueD = value_of(SE) - cached_value = max(valueA,valueB,valueC,valueD) - 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 \ No newline at end of file + var + valueA = VALUE_OF(NW) + valueB = VALUE_OF(NE) + valueC = VALUE_OF(SW) + valueD = VALUE_OF(SE) + cached_value = max(valueA,valueB,valueC,valueD) + return cached_value \ No newline at end of file diff --git a/code/WorkInProgress/Aryn/Lighting/Math.dm b/code/WorkInProgress/Aryn/Lighting/Math.dm deleted file mode 100644 index cd8716373b..0000000000 --- a/code/WorkInProgress/Aryn/Lighting/Math.dm +++ /dev/null @@ -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] \ No newline at end of file diff --git a/code/WorkInProgress/Aryn/Lighting/Verbs.dm b/code/WorkInProgress/Aryn/Lighting/Verbs.dm index bf1b40f1ba..f9e4d7c688 100644 --- a/code/WorkInProgress/Aryn/Lighting/Verbs.dm +++ b/code/WorkInProgress/Aryn/Lighting/Verbs.dm @@ -21,6 +21,7 @@ turf/verb/ShowData() set src in world usr << "[src]" + usr << "[MAX_VALUE(lightSE)][MAX_VALUE(lightSW)][MAX_VALUE(lightNW)][MAX_VALUE(lightNE)]" usr << "Lit Value: [lit_value]" usr << "Max Brightness: [max_brightness]" diff --git a/code/WorkInProgress/Aryn/Lighting/_Defs.dm b/code/WorkInProgress/Aryn/Lighting/_Defs.dm new file mode 100644 index 0000000000..72069a1afa --- /dev/null +++ b/code/WorkInProgress/Aryn/Lighting/_Defs.dm @@ -0,0 +1,19 @@ +#define LIGHT_ICON_1 'icons/effects/lights/lighting5-1.dmi' +#define LIGHT_ICON_2 'icons/effects/lights/lighting5-2.dmi' +#define LIGHT_STATES 4 + +#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(LIGHT_STATES,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)) \ No newline at end of file diff --git a/code/__HELPERS/loc.dm b/code/__HELPERS/loc.dm new file mode 100644 index 0000000000..91be708854 --- /dev/null +++ b/code/__HELPERS/loc.dm @@ -0,0 +1,7 @@ +atom/movable/proc/setloc(newloc) + if(light) + var/oldloc = loc + loc = newloc + if(isturf(newloc) != isturf(oldloc)) light.Reset() + else + loc = newloc diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 1326e65e5e..2fe49744f1 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -39,7 +39,7 @@ if(destination) if(loc) loc.Exited(src) - loc = destination + setloc(destination) loc.Entered(src) return 1 return 0 diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index eadbfb06e1..6aea809d4a 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -87,10 +87,10 @@ src.go_out() for(var/obj/O in src) if((!istype(O,/obj/item/weapon/reagent_containers)) && (!istype(O,/obj/item/weapon/circuitboard/clonescanner)) && (!istype(O,/obj/item/weapon/stock_parts)) && (!istype(O,/obj/item/weapon/cable_coil))) - O.loc = get_turf(src)//Ejects items that manage to get in there (exluding the components) + O.setloc(get_turf(src))//Ejects items that manage to get in there (exluding the components) if(!occupant) for(var/mob/M in src)//Failsafe so you can get mobs out - M.loc = get_turf(src) + M.setloc(get_turf(src)) /obj/machinery/dna_scannernew/verb/move_inside() set src in oview(1) @@ -111,7 +111,7 @@ usr.stop_pulling() usr.client.perspective = EYE_PERSPECTIVE usr.client.eye = src - usr.loc = src + usr.setloc(src) src.occupant = usr src.icon_state = "scanner_1" src.add_fingerprint(usr) @@ -125,7 +125,7 @@ beaker = item user.drop_item() - item.loc = src + item.setloc(src) user.visible_message("[user] adds \a [item] to \the [src]!", "You add \a [item] to \the [src]!") return else if (!istype(item, /obj/item/weapon/grab)) @@ -148,7 +148,7 @@ if(M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src - M.loc = src + M.setloc(src) src.occupant = M src.icon_state = "scanner_1" @@ -171,7 +171,7 @@ if (src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE - src.occupant.loc = src.loc + src.occupant.setloc(src.loc) src.occupant = null src.icon_state = "scanner_0" return @@ -180,7 +180,7 @@ switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) //Foreach goto(35) //SN src = null @@ -189,7 +189,7 @@ if(2.0) if (prob(50)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) //Foreach goto(108) //SN src = null @@ -198,7 +198,7 @@ if(3.0) if (prob(25)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) //Foreach goto(181) //SN src = null @@ -211,7 +211,7 @@ /obj/machinery/dna_scannernew/blob_act() if(prob(75)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) del(src) /obj/machinery/computer/scan_consolenew @@ -454,15 +454,15 @@ if (connected.beaker.reagents && connected.beaker.reagents.reagent_list.len) for(var/datum/reagent/R in connected.beaker.reagents.reagent_list) data["beakerVolume"] += R.volume - + // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "dna_modifier.tmpl", "DNA Modifier Console", 660, 700) // when the ui is first opened this is the data it will use - ui.set_initial_data(data) + ui.set_initial_data(data) // open the new ui window ui.open() // auto update every Master Controller tick diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 7eb8fa096e..5df229c39c 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -190,7 +190,7 @@ blob_act() if(prob(75)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) A.blob_act() del(src) return @@ -200,7 +200,7 @@ if(!beaker) beaker = G user.drop_item() - G.loc = src + G.setloc(src) user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") src.updateUsrDialog() return @@ -232,7 +232,7 @@ if(M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src - M.loc = src + M.setloc(src) src.occupant = M src.icon_state = "sleeper_1" if(orient == "RIGHT") @@ -252,21 +252,21 @@ switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) del(src) return if(2.0) if(prob(50)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) del(src) return if(3.0) if(prob(25)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) del(src) return @@ -312,7 +312,7 @@ if(src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE - src.occupant.loc = src.loc + src.occupant.setloc(src.loc) src.occupant = null if(orient == "RIGHT") icon_state = "sleeper_0-r" @@ -408,7 +408,7 @@ usr.stop_pulling() usr.client.perspective = EYE_PERSPECTIVE usr.client.eye = src - usr.loc = src + usr.setloc(src) src.occupant = usr src.icon_state = "sleeper_1" if(orient == "RIGHT") diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index b7d6ad8ef7..1a69c36c6d 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -46,7 +46,7 @@ usr.pulling = null usr.client.perspective = EYE_PERSPECTIVE usr.client.eye = src - usr.loc = src + usr.setloc(src) src.occupant = usr src.icon_state = "body_scanner_1" for(var/obj/O in src) @@ -60,12 +60,12 @@ if ((!( src.occupant ) || src.locked)) return for(var/obj/O in src) - O.loc = src.loc + O.setloc(src.loc) //Foreach goto(30) if (src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE - src.occupant.loc = src.loc + src.occupant.setloc(src.loc) src.occupant = null src.icon_state = "body_scanner_0" return @@ -83,11 +83,11 @@ if (M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src - M.loc = src + M.setloc(src) src.occupant = M src.icon_state = "body_scanner_1" for(var/obj/O in src) - O.loc = src.loc + O.setloc(src.loc) //Foreach goto(154) src.add_fingerprint(user) //G = null @@ -98,7 +98,7 @@ switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) //Foreach goto(35) //SN src = null @@ -107,7 +107,7 @@ if(2.0) if (prob(50)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) //Foreach goto(108) //SN src = null @@ -116,7 +116,7 @@ if(3.0) if (prob(25)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) //Foreach goto(181) //SN src = null @@ -128,7 +128,7 @@ /obj/machinery/bodyscanner/blob_act() if(prob(50)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) del(src) /obj/machinery/body_scanconsole/ex_act(severity) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index b909404a1c..d98ccc9da0 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -121,13 +121,13 @@ data["beakerVolume"] += R.volume // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "cryo.tmpl", "Cryo Cell Control System", 520, 410) // when the ui is first opened this is the data it will use - ui.set_initial_data(data) + ui.set_initial_data(data) // open the new ui window ui.open() // auto update every Master Controller tick @@ -251,7 +251,7 @@ if (occupant.client) occupant.client.eye = occupant.client.mob occupant.client.perspective = MOB_PERSPECTIVE - occupant.loc = get_step(loc, SOUTH) //this doesn't account for walls or anything, but i don't forsee that being a problem. + occupant.setloc(get_step(loc, SOUTH)) //this doesn't account for walls or anything, but i don't forsee that being a problem. if (occupant.bodytemperature < 261 && occupant.bodytemperature >= 70) //Patch by Aranclanos to stop people from taking burn damage after being ejected occupant.bodytemperature = 261 // Changed to 70 from 140 by Zuhayr due to reoccurance of bug. // occupant.metabslow = 0 @@ -275,7 +275,7 @@ M.client.perspective = EYE_PERSPECTIVE M.client.eye = src M.stop_pulling() - M.loc = src + M.setloc(src) if(M.health > -100 && (M.health < 0 || M.sleeping)) M << "\blue You feel a cold liquid surround you. Your skin starts to freeze up." occupant = M diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 5246d97e32..5d537787b7 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -80,7 +80,7 @@ obj/machinery/computer/cryopod/Topic(href, href_list) visible_message("\blue The console beeps happily as it disgorges \the [I].", 3) - I.loc = get_turf(src) + I.setloc(get_turf(src)) frozen_items -= I else if(href_list["allitems"]) @@ -92,7 +92,7 @@ obj/machinery/computer/cryopod/Topic(href, href_list) visible_message("\blue The console beeps happily as it disgorges the desired objects.", 3) for(var/obj/item/I in frozen_items) - I.loc = get_turf(src) + I.setloc(get_turf(src)) frozen_items -= I else if(href_list["crew"]) @@ -186,11 +186,11 @@ obj/machinery/computer/cryopod/Topic(href, href_list) //Drop all items into the pod. for(var/obj/item/W in occupant) occupant.drop_from_inventory(W) - W.loc = src + W.setloc(src) if(W.contents.len) //Make sure we catch anything not handled by del() on the items. for(var/obj/item/O in W.contents) - O.loc = src + O.setloc(src) //Delete all items not on the preservation list. var/list/items = src.contents @@ -240,7 +240,7 @@ obj/machinery/computer/cryopod/Topic(href, href_list) current_mode.possible_traitors.Remove(occupant) // Delete them from datacore. - + if(PDA_Manifest.len) PDA_Manifest.Cut() for(var/datum/data/record/R in data_core.medical) @@ -305,7 +305,7 @@ obj/machinery/computer/cryopod/Topic(href, href_list) if(do_after(user, 20)) if(!M || !G || !G:affecting) return - M.loc = src + M.setloc(src) if(M.client) M.client.perspective = EYE_PERSPECTIVE @@ -375,7 +375,7 @@ obj/machinery/computer/cryopod/Topic(href, href_list) usr.stop_pulling() usr.client.perspective = EYE_PERSPECTIVE usr.client.eye = src - usr.loc = src + usr.setloc(src) src.occupant = usr if(orient_right) @@ -401,7 +401,7 @@ obj/machinery/computer/cryopod/Topic(href, href_list) occupant.client.eye = src.occupant.client.mob occupant.client.perspective = MOB_PERSPECTIVE - occupant.loc = get_turf(src) + occupant.setloc(get_turf(src)) occupant = null if(orient_right) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 8d5e888a97..210aae7062 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -76,7 +76,7 @@ if (src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE - src.occupant.loc = src.loc + src.occupant.setloc(src.loc) src.occupant = null build_icon() src.use_power = 1 @@ -113,7 +113,7 @@ if(usr && usr.client) usr.client.perspective = EYE_PERSPECTIVE usr.client.eye = src - usr.loc = src + usr.setloc(src) src.occupant = usr /*for(var/obj/O in src) O.loc = src.loc*/ diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 1d8fd6a36b..3cca5c6960 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -410,7 +410,7 @@ src.OCCUPANT.client.eye = src.OCCUPANT.client.mob src.OCCUPANT.client.perspective = MOB_PERSPECTIVE - src.OCCUPANT.loc = src.loc + src.OCCUPANT.setloc(src.loc) src.OCCUPANT = null if(!src.isopen) src.isopen = 1 @@ -453,7 +453,7 @@ usr.stop_pulling() usr.client.perspective = EYE_PERSPECTIVE usr.client.eye = src - usr.loc = src + usr.setloc(src) // usr.metabslow = 1 src.OCCUPANT = usr src.isopen = 0 //Close the thing after the guy gets inside @@ -499,7 +499,7 @@ if (M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src - M.loc = src + M.setloc(src) src.OCCUPANT = M src.isopen = 0 //close ittt @@ -520,7 +520,7 @@ return user << "You load the [S.name] into the storage compartment." user.drop_item() - S.loc = src + S.setloc(src) src.SUIT = S src.update_icon() src.updateUsrDialog() @@ -534,7 +534,7 @@ return user << "You load the [H.name] into the storage compartment." user.drop_item() - H.loc = src + H.setloc(src) src.HELMET = H src.update_icon() src.updateUsrDialog() @@ -548,7 +548,7 @@ return user << "You load the [M.name] into the storage compartment." user.drop_item() - M.loc = src + M.setloc(src) src.MASK = M src.update_icon() src.updateUsrDialog() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 77807c2ca1..ec209281a7 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -529,7 +529,7 @@ var/obj/mecha/working/ripley/R = src if(R.cargo) for(var/obj/O in R.cargo) //Dump contents of stored cargo - O.loc = T + O.setloc(T) R.cargo -= O T.Entered(O) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index a89a4573ea..33c4dc76b0 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -89,13 +89,13 @@ /obj/item/device/flashlight/pickup(mob/user) - if(on) + if(on && luminosity) user.SetLuminosity(user.luminosity + brightness_on) SetLuminosity(0) /obj/item/device/flashlight/dropped(mob/user) - if(on) + if(on && !luminosity) user.SetLuminosity(user.luminosity - brightness_on) SetLuminosity(brightness_on) diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index 535a4264c0..71e5c63598 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -97,7 +97,7 @@ if (src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE - src.occupant.loc = src.loc + src.occupant.setloc(src.loc) if(injecting) implant(src.occupant) injecting = 0 @@ -117,7 +117,7 @@ M.client.perspective = EYE_PERSPECTIVE M.client.eye = src M.stop_pulling() - M.loc = src + M.setloc(src) src.occupant = M src.add_fingerprint(usr) icon_state = "implantchair_on" diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 9ad77255dc..0d47b045d8 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -250,7 +250,7 @@ if(usr) usr.u_equip(W) usr.update_icons() //update our overlays - W.loc = src + W.setloc(src) W.on_enter_storage(src) if(usr) if (usr.client && usr.s_active != src) @@ -293,9 +293,9 @@ W.layer = 20 else W.layer = initial(W.layer) - W.loc = new_location + W.setloc(new_location) else - W.loc = get_turf(src) + W.setloc(get_turf(src)) if(usr) src.orient2hud(usr) @@ -325,7 +325,7 @@ user << "\red The tray won't fit in [src]." return 1 else - W.loc = user.loc + W.setloc(user.loc) if ((user.client && user.s_active != src)) user.client.screen -= W W.dropped(user) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 0e2a4e3b04..f41b3354e8 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -21,7 +21,7 @@ if(!opened) // if closed, any item at the crate's loc is put in the contents for(var/obj/item/I in src.loc) if(I.density || I.anchored || I == src) continue - I.loc = src + I.setloc(src) /obj/structure/closet/alter_health() return get_turf(src) @@ -44,13 +44,13 @@ /obj/structure/closet/proc/dump_contents() //Cham Projector Exception for(var/obj/effect/dummy/chameleon/AD in src) - AD.loc = src.loc + AD.setloc(src.loc) for(var/obj/I in src) - I.loc = src.loc + I.setloc(src.loc) for(var/mob/M in src) - M.loc = src.loc + M.setloc(src.loc) if(M.client) M.client.eye = M.client.mob M.client.perspective = MOB_PERSPECTIVE @@ -85,14 +85,14 @@ for(var/obj/effect/dummy/chameleon/AD in src.loc) if(itemcount >= storage_capacity) break - AD.loc = src + AD.setloc(src) itemcount++ for(var/obj/item/I in src.loc) if(itemcount >= storage_capacity) break if(!I.anchored) - I.loc = src + I.setloc(src) itemcount++ for(var/mob/M in src.loc) @@ -107,7 +107,7 @@ M.client.perspective = EYE_PERSPECTIVE M.client.eye = src - M.loc = src + M.setloc(src) itemcount++ src.icon_state = src.icon_closed @@ -130,19 +130,19 @@ switch(severity) if(1) for(var/atom/movable/A as mob|obj in src)//pulls everything out of the locker and hits it with an explosion - A.loc = src.loc + A.setloc(src.loc) A.ex_act(severity++) del(src) if(2) if(prob(50)) for (var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) A.ex_act(severity++) del(src) if(3) if(prob(5)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) A.ex_act(severity++) del(src) @@ -151,7 +151,7 @@ ..() if(health <= 0) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) del(src) return @@ -160,14 +160,14 @@ if(user.wall_smash) visible_message("\red [user] destroys the [src]. ") for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) del(src) // this should probably use dump_contents() /obj/structure/closet/blob_act() if(prob(75)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) del(src) /obj/structure/closet/meteorhit(obj/O as obj) @@ -197,7 +197,7 @@ return usr.drop_item() if(W) - W.loc = src.loc + W.setloc(src.loc) else if(istype(W, /obj/item/weapon/packageWrap)) return else if(istype(W, /obj/item/weapon/weldingtool)) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 4c4df81ae0..a2362c023a 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -33,7 +33,7 @@ playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3) for(var/obj/O in src) - O.loc = get_turf(src) + O.setloc(get_turf(src)) icon_state = icon_opened src.opened = 1 return 1 @@ -55,7 +55,7 @@ var/obj/structure/stool/bed/B = O if(B.buckled_mob) continue - O.loc = src + O.setloc(src) itemcount++ icon_state = icon_closed @@ -68,7 +68,7 @@ return user.drop_item() if(W) - W.loc = src.loc + W.setloc(src.loc) else if(istype(W, /obj/item/weapon/packageWrap)) return else if(istype(W, /obj/item/weapon/cable_coil)) @@ -84,7 +84,7 @@ if(rigged) user << "You attach [W] to [src]." user.drop_item() - W.loc = src + W.setloc(src) return else if(istype(W, /obj/item/weapon/wirecutters)) if(rigged) @@ -424,12 +424,12 @@ continue if(!S.anchored) found = 1 - S.loc = src + S.setloc(src) break if(!found) for(var/obj/machinery/M in src.loc) if(!M.anchored) - M.loc = src + M.setloc(src) break return @@ -452,12 +452,12 @@ continue if(!S.anchored) found = 1 - S.loc = src + S.setloc(src) break if(!found) for(var/obj/machinery/M in src.loc) if(!M.anchored) - M.loc = src + M.setloc(src) break return diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index c13aafb592..888b52739f 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -15,7 +15,7 @@ new /obj/item/stack/sheet/wood(src) var/turf/T = get_turf(src) for(var/obj/O in contents) - O.loc = T + O.setloc(T) user.visible_message("[user] pries \the [src] open.", \ "You pry open \the [src].", \ "You hear splitting wood.") diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index eea0358763..aeefb9f151 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -34,21 +34,21 @@ switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) del(src) return if(2.0) if (prob(50)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) del(src) return if(3.0) if (prob(5)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) del(src) return @@ -64,7 +64,7 @@ if (src.connected) for(var/atom/movable/A as mob|obj in src.connected.loc) if (!( A.anchored )) - A.loc = src + A.setloc(src) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) //src.connected = null del(src.connected) @@ -78,7 +78,7 @@ src.connected.connected = src src.icon_state = "morgue0" for(var/atom/movable/A as mob|obj in src) - A.loc = src.connected.loc + A.setloc(src.connected.loc) src.connected.icon_state = "morguet" src.connected.dir = src.dir else @@ -114,7 +114,7 @@ src.connected.connected = src src.icon_state = "morgue0" for(var/atom/movable/A as mob|obj in src) - A.loc = src.connected.loc + A.setloc(src.connected.loc) //Foreach goto(106) src.connected.icon_state = "morguet" else @@ -144,7 +144,7 @@ if (src.connected) for(var/atom/movable/A as mob|obj in src.loc) if (!( A.anchored )) - A.loc = src.connected + A.setloc(src.connected) //Foreach goto(26) src.connected.connected = null src.connected.update() @@ -161,7 +161,7 @@ return if (!ismob(user) || user.stat || user.lying || user.stunned) return - O.loc = src.loc + O.setloc(src.loc) if (user != O) for(var/mob/B in viewers(user, 3)) if ((B.client && !( B.blinded ))) @@ -199,21 +199,21 @@ switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) del(src) return if(2.0) if (prob(50)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) del(src) return if(3.0) if (prob(5)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.setloc(src.loc) ex_act(severity) del(src) return @@ -238,7 +238,7 @@ if ((src.connected) && (src.locked == 0)) for(var/atom/movable/A as mob|obj in src.connected.loc) if (!( A.anchored )) - A.loc = src + A.setloc(src) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) //src.connected = null del(src.connected) @@ -252,7 +252,7 @@ src.connected.connected = src src.icon_state = "crema0" for(var/atom/movable/A as mob|obj in src) - A.loc = src.connected.loc + A.setloc(src.connected.loc) src.connected.icon_state = "cremat" else //src.connected = null @@ -286,7 +286,7 @@ src.connected.connected = src src.icon_state = "crema0" for(var/atom/movable/A as mob|obj in src) - A.loc = src.connected.loc + A.setloc(src.connected.loc) //Foreach goto(106) src.connected.icon_state = "cremat" else @@ -360,7 +360,7 @@ if (src.connected) for(var/atom/movable/A as mob|obj in src.loc) if (!( A.anchored )) - A.loc = src.connected + A.setloc(src.connected) //Foreach goto(26) src.connected.connected = null src.connected.update() @@ -377,7 +377,7 @@ return if (!ismob(user) || user.stat || user.lying || user.stunned) return - O.loc = src.loc + O.setloc(src.loc) if (user != O) for(var/mob/B in viewers(user, 3)) if ((B.client && !( B.blinded ))) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 00946b8678..cdab10c884 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -36,7 +36,7 @@ FLOOR SAFES return if(I.w_class + space <= maxspace) space += I.w_class - I.loc = src + I.setloc(src) /obj/structure/safe/proc/check_unlocked(mob/user as mob, canhear) @@ -147,7 +147,7 @@ FLOOR SAFES if(I.w_class + space <= maxspace) space += I.w_class user.drop_item() - I.loc = src + I.setloc(src) user << "You put [I] in [src]." updateUsrDialog() return diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm index 8126296a15..f96bf87eee 100644 --- a/code/game/objects/structures/transit_tubes.dm +++ b/code/game/objects/structures/transit_tubes.dm @@ -49,7 +49,7 @@ /obj/structure/transit_tube_pod/Del() for(var/atom/movable/AM in contents) - AM.loc = loc + AM.setloc(loc) ..() @@ -60,7 +60,7 @@ obj/structure/ex_act(severity) switch(severity) if(1.0) for(var/atom/movable/AM in contents) - AM.loc = loc + AM.setloc(loc) AM.ex_act(severity++) del(src) @@ -68,7 +68,7 @@ obj/structure/ex_act(severity) if(2.0) if(prob(50)) for(var/atom/movable/AM in contents) - AM.loc = loc + AM.setloc(loc) AM.ex_act(severity++) del(src) @@ -105,7 +105,7 @@ obj/structure/ex_act(severity) AM << "The tube's support pylons block your way." return ..() else - AM.loc = src.loc + AM.setloc(src.loc) AM << "You slip under the tube." @@ -118,7 +118,7 @@ obj/structure/ex_act(severity) if(!pod_moving && icon_state == "open" && istype(AM, /mob)) for(var/obj/structure/transit_tube_pod/pod in loc) if(!pod.moving && pod.dir in directions()) - AM.loc = pod + AM.setloc(pod) return @@ -412,7 +412,7 @@ obj/structure/ex_act(severity) if(istype(mob, /mob) && mob.client) // If the pod is not in a tube at all, you can get out at any time. if(!(locate(/obj/structure/transit_tube) in loc)) - mob.loc = loc + mob.setloc(loc) mob.client.Move(get_step(loc, direction), direction) //if(moving && istype(loc, /turf/space)) @@ -425,7 +425,7 @@ obj/structure/ex_act(severity) if(!station.pod_moving) if(direction == station.dir) if(station.icon_state == "open") - mob.loc = loc + mob.setloc(loc) mob.client.Move(get_step(loc, direction), direction) else diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 237ee6c92f..933a9a6263 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -31,7 +31,7 @@ if(ishuman(user)) user.put_in_hands(I) else - I.loc = get_turf(src) + I.setloc(get_turf(src)) user << "You find \an [I] in the cistern." w_items -= I.w_class return @@ -84,7 +84,7 @@ user << "The cistern is full." return user.drop_item() - I.loc = src + I.setloc(src) w_items += I.w_class user << "You carefully place \the [I] into the cistern." return diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index 725351c777..72c82c4ac7 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -142,7 +142,7 @@ obj/machinery/computer/forensic_scanning temp = null if("eject") if(scanning) - scanning.loc = loc + scanning.setloc(loc) scanning = null else temp = "Eject Failed: No Object" @@ -152,13 +152,13 @@ obj/machinery/computer/forensic_scanning if(I && istype(I)) if(istype(I, /obj/item/weapon/evidencebag)) scanning = I.contents[1] - scanning.loc = src + scanning.setloc(src) I.overlays -= scanning I.icon_state = "evidenceobj" else scanning = I M.drop_item() - I.loc = src + I.setloc(src) else usr << "Invalid Object Rejected." if("card") //Processing a fingerprint card. @@ -173,11 +173,11 @@ obj/machinery/computer/forensic_scanning if(card.amount > 1 || !card.fingerprints.len) usr << "\red ERROR: No prints/too many cards." if(card.loc == src) - card.loc = src.loc + card.setloc(src.loc) card = null return M.drop_item() - I.loc = src + I.setloc(src) process_card() else usr << "\red Invalid Object Rejected." @@ -607,7 +607,7 @@ obj/machinery/computer/forensic_scanning else usr << "\red ERROR: No prints/too many cards." if(card.loc == src) - card.loc = src.loc + card.setloc(src.loc) card = null return return diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 64d1ff64ef..29ce794dbe 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -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.mob_can_equip(target, slot_to_process, 0)) source.u_equip(item) - target.equip_to_slot_if_possible(item, slot_to_process, 0, 1, 1) item.dropped(source) + + target.equip_to_slot_if_possible(item, slot_to_process, 0, 1, 1) + item.pickup(target) + source.update_icons() target.update_icons() diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 1e7d4f770b..7c557bf02d 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -9,44 +9,48 @@ /mob/living/silicon/robot/proc/uneq_active() if(isnull(module_active)) return + + //In checking borglights, I simplified this a bit. + var/obj/item/module = module_active + + module.dropped(src) + + if(istype(module,/obj/item/borg/sight)) + var/obj/item/borg/sight/sight_module = module + sight_mode &= ~sight_module.sight_mode + + if (client) + client.screen -= module + + contents -= module + if(module_state_1 == module_active) - if(istype(module_state_1,/obj/item/borg/sight)) - sight_mode &= ~module_state_1:sight_mode - if (client) - client.screen -= module_state_1 - contents -= module_state_1 - module_active = null module_state_1 = null inv1.icon_state = "inv1" else if(module_state_2 == module_active) - if(istype(module_state_2,/obj/item/borg/sight)) - sight_mode &= ~module_state_2:sight_mode - if (client) - client.screen -= module_state_2 - contents -= module_state_2 - module_active = null module_state_2 = null inv2.icon_state = "inv2" else if(module_state_3 == module_active) - if(istype(module_state_3,/obj/item/borg/sight)) - sight_mode &= ~module_state_3:sight_mode - if (client) - client.screen -= module_state_3 - contents -= module_state_3 - module_active = null module_state_3 = null inv3.icon_state = "inv3" + + module_active = null + + //src << "[module.name] deactivated." + updateicon() /mob/living/silicon/robot/proc/uneq_all() module_active = null - + var/obj/item/module if(module_state_1) if(istype(module_state_1,/obj/item/borg/sight)) sight_mode &= ~module_state_1:sight_mode if (client) client.screen -= module_state_1 contents -= module_state_1 + module = module_state_1 + module.dropped(src) module_state_1 = null inv1.icon_state = "inv1" if(module_state_2) @@ -55,6 +59,8 @@ if (client) client.screen -= module_state_2 contents -= module_state_2 + module = module_state_2 + module.dropped(src) module_state_2 = null inv2.icon_state = "inv2" if(module_state_3) @@ -63,8 +69,11 @@ if (client) client.screen -= module_state_3 contents -= module_state_3 + module = module_state_3 + module.dropped(src) module_state_3 = null inv3.icon_state = "inv3" + updateicon() /mob/living/silicon/robot/proc/activated(obj/item/O) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 12ae12babe..64fefa2a03 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -126,7 +126,7 @@ var/datum/robot_component/cell_component = components["power cell"] cell_component.wrapped = cell cell_component.installed = 1 - + hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100") hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank") @@ -135,9 +135,9 @@ hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - - + + playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) @@ -1093,44 +1093,48 @@ if(activated(O)) src << "Already activated" return + if(!module_state_1) module_state_1 = O - O.layer = 20 - contents += O - if(istype(module_state_1,/obj/item/borg/sight)) - sight_mode |= module_state_1:sight_mode else if(!module_state_2) module_state_2 = O - O.layer = 20 - contents += O - if(istype(module_state_2,/obj/item/borg/sight)) - sight_mode |= module_state_2:sight_mode else if(!module_state_3) module_state_3 = O - O.layer = 20 - contents += O - if(istype(module_state_3,/obj/item/borg/sight)) - sight_mode |= module_state_3:sight_mode else src << "You need to disable a module first!" + return + + O.pickup(src) + O.layer = 20 + contents += O + if(istype(O,/obj/item/borg/sight)) + var/obj/item/borg/sight/sight = O + sight_mode |= sight.sight_mode + installed_modules() if (href_list["deact"]) var/obj/item/O = locate(href_list["deact"]) + if(activated(O)) if(module_state_1 == O) module_state_1 = null - contents -= O else if(module_state_2 == O) module_state_2 = null - contents -= O else if(module_state_3 == O) module_state_3 = null - contents -= O else src << "Module isn't activated." + return else src << "Module isn't activated" + return + + O.dropped(src) + contents -= O + + src << "[O.name] deactivated." + installed_modules() if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 83abddb76b..6ab061b350 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -2,7 +2,8 @@ var/global/list/uneatable = list( /turf/space, - /obj/effect/overlay + /obj/effect/overlay, + /atom/movable/lighting_overlay //Because apparently this needs to be outright stated and even /atom/movable gives energy regardless. ) /obj/machinery/singularity/ diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index bf8e233813..c971e4f838 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -204,7 +204,7 @@ user << "This machine only accepts beakers" src.beaker = B user.drop_item() - B.loc = src + B.setloc(src) user << "You set [B] on the machine." nanomanager.update_uis(src) // update all UIs attached to src return @@ -331,7 +331,7 @@ return src.beaker = B user.drop_item() - B.loc = src + B.setloc(src) user << "You add the beaker to the machine!" src.updateUsrDialog() icon_state = "mixer1" @@ -344,7 +344,7 @@ src.loaded_pill_bottle = B user.drop_item() - B.loc = src + B.setloc(src) user << "You add the pill bottle into the dispenser slot!" src.updateUsrDialog() return @@ -360,7 +360,7 @@ if (href_list["ejectp"]) if(loaded_pill_bottle) - loaded_pill_bottle.loc = src.loc + loaded_pill_bottle.setloc(src.loc) loaded_pill_bottle = null else if(href_list["close"]) usr << browse(null, "window=chemmaster") @@ -462,7 +462,7 @@ reagents.trans_to(P,amount_per_pill) if(src.loaded_pill_bottle) if(loaded_pill_bottle.contents.len < loaded_pill_bottle.storage_slots) - P.loc = loaded_pill_bottle + P.setloc(loaded_pill_bottle) src.updateUsrDialog() else if (href_list["createbottle"]) @@ -958,7 +958,7 @@ else src.beaker = O user.drop_item() - O.loc = src + O.setloc(src) update_icon() src.updateUsrDialog() return 0 @@ -972,7 +972,7 @@ for (var/obj/item/weapon/reagent_containers/food/snacks/grown/G in O.contents) O.contents -= G - G.loc = src + G.setloc(src) holdingitems += G if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill user << "You fill the All-In-One grinder to the brim." @@ -989,7 +989,7 @@ return 1 user.before_take_item(O) - O.loc = src + O.setloc(src) holdingitems += O src.updateUsrDialog() return 0 @@ -1072,7 +1072,7 @@ return if (!beaker) return - beaker.loc = src.loc + beaker.setloc(src.loc) beaker = null update_icon() @@ -1084,7 +1084,7 @@ return for(var/obj/item/O in holdingitems) - O.loc = src.loc + O.setloc(src.loc) holdingitems -= O holdingitems = list() diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 876860491d..2cae4fd6b7 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -112,7 +112,7 @@ if (GM.client) GM.client.perspective = EYE_PERSPECTIVE GM.client.eye = src - GM.loc = src + GM.setloc(src) for (var/mob/C in viewers(src)) C.show_message("\red [GM.name] has been placed in the [src] by [user].", 3) del(G) @@ -125,7 +125,7 @@ user.drop_item() if(I) - I.loc = src + I.setloc(src) user << "You place \the [I] into the [src]." for(var/mob/M in viewers(src)) @@ -170,7 +170,7 @@ if (target.client) target.client.perspective = EYE_PERSPECTIVE target.client.eye = src - target.loc = src + target.setloc(src) for (var/mob/C in viewers(src)) if(C == user) @@ -197,7 +197,7 @@ if (user.client) user.client.eye = user.client.mob user.client.perspective = MOB_PERSPECTIVE - user.loc = src.loc + user.setloc(src.loc) update() return @@ -308,7 +308,7 @@ // eject the contents of the disposal unit proc/eject() for(var/atom/movable/AM in src) - AM.loc = src.loc + AM.setloc(src.loc) AM.pipe_eject(0) update() @@ -367,7 +367,7 @@ return use_power = 1 - + if(mode != 1) // if off or ready, no need to charge return @@ -447,7 +447,7 @@ for(var/atom/movable/AM in H) target = get_offset_target_turf(src.loc, rand(5)-rand(5), rand(5)-rand(5)) - AM.loc = src.loc + AM.setloc(src.loc) AM.pipe_eject(0) spawn(1) if(AM) @@ -462,7 +462,7 @@ if(istype(I, /obj/item/projectile)) return if(prob(75)) - I.loc = src + I.setloc(src) for(var/mob/M in viewers(src)) M.show_message("\the [I] lands in \the [src].", 3) else @@ -510,7 +510,7 @@ // now everything inside the disposal gets put into the holder // note AM since can contain mobs or objs for(var/atom/movable/AM in D) - AM.loc = src + AM.setloc(src) if(istype(AM, /mob/living/carbon/human)) var/mob/living/carbon/human/H = AM if(FAT in H.mutations) // is a human and fat? @@ -587,7 +587,7 @@ // used when a a holder meets a stuck holder proc/merge(var/obj/structure/disposalholder/other) for(var/atom/movable/AM in other) - AM.loc = src // move everything in other holder to this one + AM.setloc(src) // move everything in other holder to this one if(ismob(AM)) var/mob/M = AM if(M.client) // if a client mob, update eye to follow this holder @@ -649,7 +649,7 @@ // this is unlikely, but just dump out everything into the turf in case for(var/atom/movable/AM in H) - AM.loc = T + AM.setloc(T) AM.pipe_eject(0) del(H) ..() @@ -680,9 +680,9 @@ if(H2 && !H2.active) H.merge(H2) - H.loc = P + H.setloc(P) else // if wasn't a pipe, then set loc to turf - H.loc = T + H.setloc(T) return null return P @@ -721,7 +721,7 @@ if(T.density) // dense ouput turf, so stop holder H.active = 0 - H.loc = src + H.setloc(src) return if(T.intact && istype(T,/turf/simulated/floor)) //intact floor, pop the tile var/turf/simulated/floor/F = T @@ -741,7 +741,7 @@ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) if(H) for(var/atom/movable/AM in H) - AM.loc = T + AM.setloc(T) AM.pipe_eject(direction) spawn(1) if(AM) @@ -756,7 +756,7 @@ for(var/atom/movable/AM in H) target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5)) - AM.loc = T + AM.setloc(T) AM.pipe_eject(0) spawn(1) if(AM) @@ -789,7 +789,7 @@ // this is unlikely, but just dump out everything into the turf in case for(var/atom/movable/AM in H) - AM.loc = T + AM.setloc(T) AM.pipe_eject(0) del(H) return @@ -940,7 +940,7 @@ if(controller.up) T = locate(src.x, src.y, controller.up_target) if(!T) - H.loc = src.loc + H.setloc(src.loc) return else for(var/obj/structure/disposalpipe/down/F in T) @@ -956,9 +956,9 @@ if(H2 && !H2.active) H.merge(H2) - H.loc = P + H.setloc(P) else // if wasn't a pipe, then set loc to turf - H.loc = T + H.setloc(T) return null return P @@ -993,7 +993,7 @@ if(controller.down) T = locate(src.x, src.y, controller.down_target) if(!T) - H.loc = src.loc + H.setloc(src.loc) return else for(var/obj/structure/disposalpipe/up/F in T) @@ -1009,9 +1009,9 @@ if(H2 && !H2.active) H.merge(H2) - H.loc = P + H.setloc(P) else // if wasn't a pipe, then set loc to turf - H.loc = T + H.setloc(T) return null return P @@ -1139,9 +1139,9 @@ if(H2 && !H2.active) H.merge(H2) - H.loc = P + H.setloc(P) else // if wasn't a pipe, then set loc to turf - H.loc = T + H.setloc(T) return null return P @@ -1201,9 +1201,9 @@ if(H2 && !H2.active) H.merge(H2) - H.loc = P + H.setloc(P) else // if wasn't a pipe, then set loc to turf - H.loc = T + H.setloc(T) return null return P @@ -1370,7 +1370,7 @@ if(H) for(var/atom/movable/AM in H) - AM.loc = src.loc + AM.setloc(src.loc) AM.pipe_eject(dir) spawn(5) AM.throw_at(target, 3, 1) diff --git a/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm b/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm index eaf92181b2..1008054978 100644 --- a/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm +++ b/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm @@ -92,7 +92,7 @@ update_coolant() return user.drop_item() - I.loc = src + I.setloc(src) scanned_item = I /obj/machinery/radiocarbon_spectrometer/proc/update_coolant() @@ -144,15 +144,15 @@ data["radiation"] = round(radiation) data["t_left_radspike"] = round(t_left_radspike) data["rad_shield_on"] = rad_shield - + // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "geoscanner.tmpl", "High Res Radiocarbon Spectrometer", 900, 825) // when the ui is first opened this is the data it will use - ui.set_initial_data(data) + ui.set_initial_data(data) // open the new ui window ui.open() // auto update every Master Controller tick @@ -319,7 +319,7 @@ last_scan_data = P.info P.loc = src.loc - scanned_item.loc = src.loc + scanned_item.setloc(src.loc) scanned_item = null /obj/machinery/radiocarbon_spectrometer/Topic(href, href_list) @@ -355,7 +355,7 @@ if(href_list["ejectItem"]) if(scanned_item) - scanned_item.loc = src.loc + scanned_item.setloc(src.loc) scanned_item = null add_fingerprint(usr) diff --git a/icons/effects/ArynLights.dmi b/icons/effects/ArynLights.dmi deleted file mode 100644 index f3d21402a3..0000000000 Binary files a/icons/effects/ArynLights.dmi and /dev/null differ diff --git a/icons/effects/lights/lighting1.dmi b/icons/effects/lights/lighting1.dmi new file mode 100644 index 0000000000..66787a1285 Binary files /dev/null and b/icons/effects/lights/lighting1.dmi differ diff --git a/icons/effects/lights/lighting2.dmi b/icons/effects/lights/lighting2.dmi new file mode 100644 index 0000000000..a80e436c18 Binary files /dev/null and b/icons/effects/lights/lighting2.dmi differ diff --git a/icons/effects/lights/lighting3.dmi b/icons/effects/lights/lighting3.dmi new file mode 100644 index 0000000000..023d425289 Binary files /dev/null and b/icons/effects/lights/lighting3.dmi differ diff --git a/icons/effects/lights/lighting5-1.dmi b/icons/effects/lights/lighting5-1.dmi new file mode 100644 index 0000000000..3e8057a3d9 Binary files /dev/null and b/icons/effects/lights/lighting5-1.dmi differ diff --git a/icons/effects/lights/lighting5-2.dmi b/icons/effects/lights/lighting5-2.dmi new file mode 100644 index 0000000000..0f843d0d02 Binary files /dev/null and b/icons/effects/lights/lighting5-2.dmi differ