From 211468b24feb7facc65a30a4ed2c9ed5b6348dba Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sun, 21 Apr 2019 01:45:30 +0200 Subject: [PATCH 01/41] Add fake ambient occlusion --- SQL/paradise_schema.sql | 1 + SQL/paradise_schema_prefixed.sql | 1 + SQL/updates/5-6.sql | 4 ++ code/ATMOSPHERICS/atmospherics.dm | 11 ++++- .../components/binary_devices/circulator.dm | 2 + .../components/binary_devices/dp_vent_pump.dm | 2 + .../components/binary_devices/passive_gate.dm | 1 + .../components/binary_devices/pump.dm | 2 + .../components/binary_devices/valve.dm | 2 + .../components/binary_devices/volume_pump.dm | 2 + .../components/omni_devices/omni_base.dm | 4 +- .../components/trinary_devices/filter.dm | 2 + .../components/trinary_devices/mixer.dm | 2 + .../components/trinary_devices/tvalve.dm | 1 + .../components/unary_devices/cold_sink.dm | 4 +- .../unary_devices/generator_input.dm | 4 +- .../unary_devices/heat_exchanger.dm | 4 +- .../components/unary_devices/heat_source.dm | 4 +- .../unary_devices/outlet_injector.dm | 2 + .../unary_devices/oxygen_generator.dm | 4 +- .../unary_devices/portables_connector.dm | 1 + .../components/unary_devices/thermal_plate.dm | 6 ++- .../components/unary_devices/vent_pump.dm | 4 ++ .../components/unary_devices/vent_scrubber.dm | 4 ++ code/ATMOSPHERICS/pipes/cap.dm | 2 + code/ATMOSPHERICS/pipes/manifold.dm | 2 + code/ATMOSPHERICS/pipes/manifold4w.dm | 2 + code/ATMOSPHERICS/pipes/simple/pipe_simple.dm | 2 + .../pipes/simple/pipe_simple_hidden.dm | 2 + .../pipes/simple/pipe_simple_visible.dm | 2 + code/__DEFINES/layers.dm | 4 +- code/__DEFINES/misc.dm | 5 ++- code/__HELPERS/icon_smoothing.dm | 2 +- code/__HELPERS/unsorted.dm | 14 +++++++ code/_onclick/click.dm | 22 +++++++++- code/_onclick/hud/devil.dm | 2 - code/_onclick/hud/fullscreen.dm | 1 + code/_onclick/hud/hud.dm | 29 +++++++++++-- code/_onclick/hud/plane_master.dm | 34 +++++++++++++++ code/_onclick/hud/robot.dm | 4 +- code/_onclick/hud/screen_objects.dm | 16 +++++--- code/_onclick/telekinesis.dm | 4 +- code/game/area/areas.dm | 1 + code/game/atoms.dm | 3 +- code/game/gamemodes/sandbox/h_sandbox.dm | 16 ++++---- .../special_shadowling_abilities.dm | 2 + code/game/machinery/ai_slipper.dm | 1 + code/game/machinery/hologram.dm | 1 + code/game/machinery/igniter.dm | 1 + code/game/machinery/overview.dm | 4 +- code/game/objects/effects/effects.dm | 1 + .../objects/effects/temporary_visuals/cult.dm | 3 +- .../objects/items/weapons/storage/storage.dm | 41 ++++++++++--------- code/game/objects/structures/aliens.dm | 1 + code/game/objects/structures/lattice.dm | 1 + code/game/turfs/simulated/floor.dm | 2 +- code/modules/client/client procs.dm | 18 ++++++-- code/modules/client/preference/preferences.dm | 29 ++++++------- .../client/preference/preferences_mysql.dm | 8 +++- code/modules/events/anomaly_bluespace.dm | 3 +- code/modules/events/vent_clog.dm | 2 +- code/modules/mob/inventory.dm | 8 ++-- .../mob/living/carbon/human/inventory.dm | 12 +++--- .../mob/living/silicon/robot/inventory.dm | 12 +++--- .../modules/mob/living/silicon/robot/robot.dm | 4 +- .../mob/living/simple_animal/simple_animal.dm | 4 +- code/modules/paperwork/paper.dm | 8 ++-- .../reagents/chemistry/reagents/drugs.dm | 26 ++++++++++++ code/modules/recycling/disposal.dm | 2 +- config/example/dbconfig.txt | 2 +- paradise.dme | 1 + 71 files changed, 320 insertions(+), 120 deletions(-) create mode 100644 SQL/updates/5-6.sql create mode 100644 code/_onclick/hud/plane_master.dm diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 0379517190f..e2c2230a74c 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -266,6 +266,7 @@ CREATE TABLE `player` ( `exp` mediumtext, `clientfps` smallint(4) DEFAULT '0', `atklog` smallint(4) DEFAULT '0', + `ambientocclusion` smallint(4) DEFAULT '1', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index e9a622cf037..7ad83febaf4 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -265,6 +265,7 @@ CREATE TABLE `SS13_player` ( `exp` mediumtext, `clientfps` smallint(4) DEFAULT '0', `atklog` smallint(4) DEFAULT '0', + `ambientocclusion` smallint(4) DEFAULT '1', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; diff --git a/SQL/updates/5-6.sql b/SQL/updates/5-6.sql new file mode 100644 index 00000000000..d2b7ed0d16e --- /dev/null +++ b/SQL/updates/5-6.sql @@ -0,0 +1,4 @@ +#Updating the SQL from version 5 to version 6. -Mark +#Adding new column to contain the atklog value. +ALTER TABLE `player` + ADD `ambientocclusion` smallint(4) DEFAULT '1' AFTER `atklog`; \ No newline at end of file diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index ede0351993b..64ae485a75d 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -11,7 +11,8 @@ Pipelines + Other Objects -> Pipe network GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new()) /obj/machinery/atmospherics anchored = 1 - layer = 2.4 //under wires with their 2.44 + layer = GAS_PIPE_HIDDEN_LAYER //under wires + plane = FLOOR_PLANE idle_power_usage = 0 active_power_usage = 0 power_channel = ENVIRON @@ -61,10 +62,16 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new()) // Icons/overlays/underlays /obj/machinery/atmospherics/update_icon() + var/turf/T = loc + if(level == 2 || !T.intact) + plane = GAME_PLANE + else + plane = FLOOR_PLANE + return null /obj/machinery/atmospherics/proc/update_pipe_image() - pipe_image = image(src, loc, layer = 20, dir = dir) //the 20 puts it above Byond's darkness (not its opacity view) + pipe_image = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) //the 20 puts it above Byond's darkness (not its opacity view) pipe_image.plane = HUD_PLANE /obj/machinery/atmospherics/proc/check_icon_cache(var/safety = 0) diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index 3e18cfb41fa..c1019236425 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -112,6 +112,8 @@ ..() /obj/machinery/atmospherics/binary/circulator/update_icon() + ..() + if(stat & (BROKEN|NOPOWER)) icon_state = "circ[side]-p" else if(last_pressure_delta > 0) diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 785d58520a0..b82babd7532 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -71,6 +71,8 @@ add_underlay(T, node2, dir) /obj/machinery/atmospherics/binary/dp_vent_pump/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 9e845c15a98..84a05e464f5 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -28,6 +28,7 @@ return ..() /obj/machinery/atmospherics/binary/passive_gate/update_icon() + ..() icon_state = "[on ? "on" : "off"]" /obj/machinery/atmospherics/binary/passive_gate/update_underlays() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 9d21fece152..9d7d22b535f 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -39,6 +39,8 @@ Thus, the two variables affect pump operation are set in New(): on = 1 /obj/machinery/atmospherics/binary/pump/update_icon() + ..() + if(!powered()) icon_state = "off" else diff --git a/code/ATMOSPHERICS/components/binary_devices/valve.dm b/code/ATMOSPHERICS/components/binary_devices/valve.dm index f8f282a55af..a0669f5e41d 100644 --- a/code/ATMOSPHERICS/components/binary_devices/valve.dm +++ b/code/ATMOSPHERICS/components/binary_devices/valve.dm @@ -16,6 +16,8 @@ icon_state = "map_valve1" /obj/machinery/atmospherics/binary/valve/update_icon(animation) + ..() + if(animation) flick("valve[src.open][!src.open]",src) else diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index a64c94e7fc5..2b0dcbf30a5 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -43,6 +43,8 @@ Thus, the two variables affect pump operation are set in New(): set_frequency(frequency) /obj/machinery/atmospherics/binary/volume_pump/update_icon() + ..() + if(!powered()) icon_state = "off" else diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index a3903f278fb..cde1c9e80b0 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -72,6 +72,8 @@ update_ports() /obj/machinery/atmospherics/omni/update_icon() + ..() + if(stat & NOPOWER) overlays = overlays_off on = 0 @@ -83,8 +85,6 @@ underlays = underlays_current - return - /obj/machinery/atmospherics/omni/proc/error_check() return diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 903f917e0c6..f64aba4f495 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -40,6 +40,8 @@ Filter types: radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/trinary/filter/update_icon() + ..() + if(flipped) icon_state = "m" else diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index 0c64804b6da..43de7828891 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -17,6 +17,8 @@ flipped = 1 /obj/machinery/atmospherics/trinary/mixer/update_icon(safety = 0) + ..() + if(flipped) icon_state = "m" else diff --git a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm index 9dddf8b06f4..f31fa84f350 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm @@ -135,6 +135,7 @@ /obj/machinery/atmospherics/trinary/tvalve/digital/update_icon() ..() + if(!powered()) icon_state = "tvalvenopower" diff --git a/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm b/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm index 51415223de2..7cae2968a22 100644 --- a/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm @@ -13,6 +13,8 @@ var/current_heat_capacity = 50000 //totally random /obj/machinery/atmospherics/unary/cold_sink/update_icon() + ..() + if(node) icon_state = "intact_[on?("on"):("off")]" else @@ -20,8 +22,6 @@ on = 0 - return - /obj/machinery/atmospherics/unary/cold_sink/process_atmos() ..() if(!on) diff --git a/code/ATMOSPHERICS/components/unary_devices/generator_input.dm b/code/ATMOSPHERICS/components/unary_devices/generator_input.dm index 42c3676836c..cb095b1e551 100644 --- a/code/ATMOSPHERICS/components/unary_devices/generator_input.dm +++ b/code/ATMOSPHERICS/components/unary_devices/generator_input.dm @@ -9,12 +9,12 @@ var/update_cycle /obj/machinery/atmospherics/unary/generator_input/update_icon() + ..() + if(node) icon_state = "intact" else icon_state = "exposed" - return - /obj/machinery/atmospherics/unary/generator_input/proc/return_exchange_air() return air_contents diff --git a/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm index 58b374578df..e4afcadc7fa 100644 --- a/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm @@ -13,13 +13,13 @@ burn_state = LAVA_PROOF /obj/machinery/atmospherics/unary/heat_exchanger/update_icon() + ..() + if(node) icon_state = "intact" else icon_state = "exposed" - return - /obj/machinery/atmospherics/unary/heat_exchanger/atmos_init() if(!partner) var/partner_connect = turn(dir,180) diff --git a/code/ATMOSPHERICS/components/unary_devices/heat_source.dm b/code/ATMOSPHERICS/components/unary_devices/heat_source.dm index 31eb7305ded..b3b1d0c4fdc 100644 --- a/code/ATMOSPHERICS/components/unary_devices/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary_devices/heat_source.dm @@ -13,6 +13,8 @@ var/current_heat_capacity = 50000 //totally random /obj/machinery/atmospherics/unary/heat_reservoir/update_icon() + ..() + if(node) icon_state = "intact_[on?("on"):("off")]" else @@ -20,8 +22,6 @@ on = 0 - return - /obj/machinery/atmospherics/unary/heat_reservoir/process_atmos() ..() if(!on) diff --git a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm index d597d0eb4c4..de0886d84b5 100644 --- a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm @@ -38,6 +38,8 @@ return ..() /obj/machinery/atmospherics/unary/outlet_injector/update_icon() + ..() + if(!powered()) icon_state = "off" else diff --git a/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm b/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm index 0f575fb9c3a..a9c3b98ad74 100644 --- a/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm +++ b/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm @@ -14,6 +14,8 @@ var/oxygen_content = 10 /obj/machinery/atmospherics/unary/oxygen_generator/update_icon() + ..() + if(node) icon_state = "intact_[on?("on"):("off")]" else @@ -21,8 +23,6 @@ on = 0 - return - /obj/machinery/atmospherics/unary/oxygen_generator/New() ..() diff --git a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm index 711a1df3861..a9e4e2a282b 100644 --- a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm @@ -18,6 +18,7 @@ return ..() /obj/machinery/atmospherics/unary/portables_connector/update_icon() + ..() icon_state = "connector" /obj/machinery/atmospherics/unary/portables_connector/update_underlays() diff --git a/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm b/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm index c245bfc120e..5a6e76a182b 100644 --- a/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm +++ b/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm @@ -11,10 +11,12 @@ desc = "Transfers heat to and from an area" /obj/machinery/atmospherics/unary/thermal_plate/update_icon() - var/prefix="" + ..() + + var/prefix = "" //var/suffix="_idle" // Also available: _heat, _cool if(level == 1 && istype(loc, /turf/simulated)) - prefix="h" + prefix = "h" icon_state = "[prefix]off" /obj/machinery/atmospherics/unary/thermal_plate/process_atmos() diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 613d0f0794e..3b575176db4 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -77,6 +77,10 @@ air_contents.volume = 1000 /obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0) + ..() + + plane = FLOOR_PLANE + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 8416a784019..27aed7967d5 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -91,6 +91,10 @@ return 1 /obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0) + ..() + + plane = FLOOR_PLANE + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/cap.dm b/code/ATMOSPHERICS/pipes/cap.dm index 2552f6e0794..71630aef1c2 100644 --- a/code/ATMOSPHERICS/pipes/cap.dm +++ b/code/ATMOSPHERICS/pipes/cap.dm @@ -55,6 +55,8 @@ node.update_underlays() /obj/machinery/atmospherics/pipe/cap/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm index 199942e7a40..bddc0281472 100644 --- a/code/ATMOSPHERICS/pipes/manifold.dm +++ b/code/ATMOSPHERICS/pipes/manifold.dm @@ -116,6 +116,8 @@ node3.update_underlays() /obj/machinery/atmospherics/pipe/manifold/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm index 502795e1da9..a948b22fd19 100644 --- a/code/ATMOSPHERICS/pipes/manifold4w.dm +++ b/code/ATMOSPHERICS/pipes/manifold4w.dm @@ -90,6 +90,8 @@ node4.update_underlays() /obj/machinery/atmospherics/pipe/manifold4w/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm index b2c2750a452..b966690733b 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm @@ -137,6 +137,8 @@ node2.update_underlays() /obj/machinery/atmospherics/pipe/simple/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm index 3efd22ed446..db982639c2f 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm @@ -28,6 +28,8 @@ icon_state = "map_universal" /obj/machinery/atmospherics/pipe/simple/hidden/universal/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm index 9bf085b534a..1ca4da646ac 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm @@ -39,6 +39,8 @@ icon_state = "map_universal" /obj/machinery/atmospherics/pipe/simple/visible/universal/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 9da2c725a43..26894d3e6ea 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -6,7 +6,9 @@ #define PLANE_SPACE -95 #define PLANE_SPACE_PARALLAX -90 -#define GAME_PLANE 0 +#define FLOOR_PLANE -2 +#define GAME_PLANE -1 +#define BLACKNESS_PLANE 0 //To keep from conflicts with SEE_BLACKNESS internals #define SPACE_LAYER 1.8 //#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dff9426c641..462191e49c3 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -401,4 +401,7 @@ #define GHOST_ORBIT_TRIANGLE "triangle" #define GHOST_ORBIT_HEXAGON "hexagon" #define GHOST_ORBIT_SQUARE "square" -#define GHOST_ORBIT_PENTAGON "pentagon" \ No newline at end of file +#define GHOST_ORBIT_PENTAGON "pentagon" + +// Filters +#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") \ No newline at end of file diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 2db8621195d..472f7be75f4 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -114,7 +114,7 @@ return if(QDELETED(A)) return - if((A.smooth & SMOOTH_TRUE) || (A.smooth & SMOOTH_MORE)) + if(A.smooth & (SMOOTH_TRUE | SMOOTH_MORE)) var/adjacencies = calculate_adjacencies(A) if(A.smooth & SMOOTH_DIAGONAL) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 619d09713d6..00724c94a03 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -2029,3 +2029,17 @@ var/mob/dview/dview_mob = new /proc/pass() return + +/proc/params2turf(scr_loc, turf/origin, client/C) + if(!scr_loc) + return null + var/tX = splittext(scr_loc, ",") + var/tY = splittext(tX[2], ":") + var/tZ = origin.z + tY = tY[1] + tX = splittext(tX[1], ":") + tX = tX[1] + var/list/actual_view = getviewsize(C ? C.view : world.view) + tX = Clamp(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx) + tY = Clamp(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy) + return locate(tX, tY, tZ) \ No newline at end of file diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 24e58b502ad..b44efa5444f 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -399,7 +399,25 @@ icon_state = "passage0" plane = CLICKCATCHER_PLANE mouse_opacity = MOUSE_OPACITY_OPAQUE - screen_loc = "CENTER-7,CENTER-7" + screen_loc = "CENTER" + +#define MAX_SAFE_BYOND_ICON_SCALE_TILES (MAX_SAFE_BYOND_ICON_SCALE_PX / world.icon_size) +#define MAX_SAFE_BYOND_ICON_SCALE_PX (33 * 32) //Not using world.icon_size on purpose. + +/obj/screen/click_catcher/proc/UpdateGreed(view_size_x = 15, view_size_y = 15) + var/icon/newicon = icon('icons/mob/screen_gen.dmi', "catcher") + var/ox = min(MAX_SAFE_BYOND_ICON_SCALE_TILES, view_size_x) + var/oy = min(MAX_SAFE_BYOND_ICON_SCALE_TILES, view_size_y) + var/px = view_size_x * world.icon_size + var/py = view_size_y * world.icon_size + var/sx = min(MAX_SAFE_BYOND_ICON_SCALE_PX, px) + var/sy = min(MAX_SAFE_BYOND_ICON_SCALE_PX, py) + newicon.Scale(sx, sy) + icon = newicon + screen_loc = "CENTER-[(ox-1)*0.5],CENTER-[(oy-1)*0.5]" + var/matrix/M = new + M.Scale(px/sx, py/sy) + transform = M /obj/screen/click_catcher/Click(location, control, params) var/list/modifiers = params2list(params) @@ -407,6 +425,6 @@ var/mob/living/carbon/C = usr C.swap_hand() else - var/turf/T = screen_loc2turf(modifiers["screen-loc"], get_turf(usr)) + var/turf/T = params2turf(modifiers["screen-loc"], get_turf(usr)) T.Click(location, control, params) return 1 diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm index 2a7dab21a03..1e17cae1708 100644 --- a/code/_onclick/hud/devil.dm +++ b/code/_onclick/hud/devil.dm @@ -40,7 +40,6 @@ using.icon = ui_style using.icon_state = "swap_1" using.screen_loc = ui_swaphand1 - using.layer = 19 static_inventory += using using = new /obj/screen/swap_hand() @@ -48,7 +47,6 @@ using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand2 - using.layer = 19 static_inventory += using mymob.zone_sel = new /obj/screen/zone_sel() diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 673a49ffd22..4c9ff339052 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -54,6 +54,7 @@ icon_state = "default" screen_loc = "CENTER-7,CENTER-7" layer = FULLSCREEN_LAYER + plane = FULLSCREEN_PLANE mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/severity = 0 diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 410d49f973e..56d954313cc 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -38,6 +38,8 @@ var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle var/action_buttons_hidden = 0 + var/list/obj/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object + /mob/proc/create_mob_hud() if(client && !hud_used) hud_used = new /datum/hud(src) @@ -47,6 +49,11 @@ hide_actions_toggle = new hide_actions_toggle.InitialiseIcon(mymob) + for(var/mytype in subtypesof(/obj/screen/plane_master)) + var/obj/screen/plane_master/instance = new mytype() + plane_masters["[instance.plane]"] = instance + instance.backdrop(mymob) + /datum/hud/Destroy() if(mymob.hud_used == src) mymob.hud_used = null @@ -83,14 +90,16 @@ nightvisionicon = null devilsouldisplay = null + QDEL_LIST_ASSOC_VAL(plane_masters) + mymob = null return ..() /datum/hud/proc/show_hud(version = 0) if(!ismob(mymob)) - return 0 + return FALSE if(!mymob.client) - return 0 + return FALSE mymob.client.screen = list() @@ -162,13 +171,25 @@ mymob.update_action_buttons(1) reorganize_alerts() reload_fullscreen() + plane_masters_update() + +/datum/hud/proc/plane_masters_update() + // Plane masters are always shown to OUR mob, never to observers + for(var/thing in plane_masters) + var/obj/screen/plane_master/PM = plane_masters[thing] + PM.backdrop(mymob) + mymob.client.screen += PM /datum/hud/human/show_hud(version = 0) - ..() + . = ..() + if(!.) + return hidden_inventory_update() /datum/hud/robot/show_hud(version = 0) - ..() + . = ..() + if(!.) + return update_robot_modules_display() /datum/hud/proc/hidden_inventory_update() diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm new file mode 100644 index 00000000000..f56400c7198 --- /dev/null +++ b/code/_onclick/hud/plane_master.dm @@ -0,0 +1,34 @@ +/obj/screen/plane_master + screen_loc = "CENTER" + icon_state = "blank" + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + blend_mode = BLEND_OVERLAY + var/show_alpha = 255 + var/hide_alpha = 0 + +/obj/screen/plane_master/proc/Show(override) + alpha = override || show_alpha + +/obj/screen/plane_master/proc/Hide(override) + alpha = override || hide_alpha + +//Why do plane masters need a backdrop sometimes? Read http://www.byond.com/forum/?post=2141928 +//Trust me, you need one. Period. If you don't think you do, you're doing something extremely wrong. +/obj/screen/plane_master/proc/backdrop(mob/mymob) + +/obj/screen/plane_master/floor + name = "floor plane master" + plane = FLOOR_PLANE + appearance_flags = PLANE_MASTER + blend_mode = BLEND_OVERLAY + +/obj/screen/plane_master/game_world + name = "game world plane master" + plane = GAME_PLANE + appearance_flags = PLANE_MASTER //should use client color + blend_mode = BLEND_OVERLAY + +/obj/screen/plane_master/game_world/backdrop(mob/mymob) + filters -= AMBIENT_OCCLUSION + if(istype(mymob) && mymob.client && mymob.client.prefs && mymob.client.prefs.ambientocclusion) + filters += AMBIENT_OCCLUSION diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index a542c0345fd..ea23a56d8e4 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -226,8 +226,8 @@ A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7" else A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7" - A.layer = 20 - A.plane = HUD_PLANE + A.layer = ABOVE_HUD_LAYER + A.plane = ABOVE_HUD_PLANE x++ if(x == 4) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index d9f6653b0ff..aeda1e5baa6 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -10,7 +10,7 @@ name = "" icon = 'icons/mob/screen_gen.dmi' layer = HUD_LAYER_SCREEN - plane = HUD_PLANE + plane = ABOVE_HUD_PLANE unacidable = 1 var/obj/master = null //A reference to the object in the slot. Grabs or items, generally. var/datum/hud/hud = null @@ -47,7 +47,8 @@ /obj/screen/drop name = "drop" icon_state = "act_drop" - layer = 19 + layer = HUD_LAYER + plane = HUD_PLANE /obj/screen/drop/Click() usr.drop_item_v() @@ -143,8 +144,9 @@ name = "resist" icon = 'icons/mob/screen_midnight.dmi' icon_state = "act_resist" - layer = 19 - + layer = HUD_LAYER + plane = HUD_PLANE + /obj/screen/resist/Click() if(isliving(usr)) var/mob/living/L = usr @@ -327,7 +329,8 @@ /obj/screen/inventory var/slot_id //The indentifier for the slot. It has nothing to do with ID cards. var/list/object_overlays = list() - layer = 19 + layer = HUD_LAYER + plane = HUD_PLANE /obj/screen/inventory/MouseEntered() ..() @@ -417,7 +420,8 @@ return 1 /obj/screen/swap_hand - layer = 19 + layer = HUD_LAYER + plane = HUD_PLANE name = "swap hand" /obj/screen/swap_hand/Click() diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 238ce2d5a94..6ef7a797136 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -65,8 +65,8 @@ var/const/tk_maxrange = 15 flags = NOBLUDGEON | ABSTRACT | DROPDEL //item_state = null w_class = WEIGHT_CLASS_GIGANTIC - layer = 20 - plane = HUD_PLANE + layer = ABOVE_HUD_LAYER + plane = ABOVE_HUD_PLANE var/last_throw = 0 var/atom/movable/focus = null diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index c5683f366ae..6f25d1b23aa 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -16,6 +16,7 @@ // area from any other instances already present (meaning you can have // separate APCs, and so on) var/there_can_be_many = 0 + plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. /area/New() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 024b2a924cf..e46c1290637 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1,5 +1,6 @@ /atom - layer = 2 + layer = TURF_LAYER + plane = GAME_PLANE var/level = 2 var/flags = NONE var/flags_2 = NONE diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 35284594b46..216c946fc97 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -67,32 +67,32 @@ datum/hSB P.wear_suit.plane = initial(P.wear_suit.plane) P.wear_suit = null P.wear_suit = new/obj/item/clothing/suit/space(P) - P.wear_suit.layer = 20 - P.wear_suit.plane = HUD_PLANE + P.wear_suit.layer = ABOVE_HUD_LAYER + P.wear_suit.plane = ABOVE_HUD_PLANE if(P.head) P.head.loc = P.loc P.head.layer = initial(P.head.layer) P.head.plane = initial(P.head.plane) P.head = null P.head = new/obj/item/clothing/head/helmet/space(P) - P.head.layer = 20 - P.head.plane = HUD_PLANE + P.head.layer = ABOVE_HUD_LAYER + P.head.plane = ABOVE_HUD_PLANE if(P.wear_mask) P.wear_mask.loc = P.loc P.wear_mask.layer = initial(P.wear_mask.layer) P.wear_mask.plane = initial(P.wear_mask.plane) P.wear_mask = null P.wear_mask = new/obj/item/clothing/mask/gas(P) - P.wear_mask.layer = 20 - P.wear_mask.plane = HUD_PLANE + P.wear_mask.layer = ABOVE_HUD_LAYER + P.wear_mask.plane = ABOVE_HUD_PLANE if(P.back) P.back.loc = P.loc P.back.layer = initial(P.back.layer) P.back.plane = initial(P.back.plane) P.back = null P.back = new/obj/item/tank/jetpack(P) - P.back.layer = 20 - P.back.plane = HUD_PLANE + P.back.layer = ABOVE_HUD_LAYER + P.back.plane = ABOVE_HUD_PLANE P.internal = P.back if("hsbmetal") var/obj/item/stack/sheet/hsb = new/obj/item/stack/sheet/metal diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 29a2c9aadca..c11105e9f30 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -107,6 +107,8 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/collective_mind(null)) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_regenarmor(null)) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_extend_shuttle(null)) + + QDEL_NULL(H.hud_used) H.hud_used = new /datum/hud/human(H, ui_style2icon(H.client.prefs.UI_style), H.client.prefs.UI_style_color, H.client.prefs.UI_style_alpha) H.hud_used.show_hud(H.hud_used.hud_version) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 8a65da977ae..48b64e8c589 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -3,6 +3,7 @@ icon = 'icons/obj/device.dmi' icon_state = "motion3" layer = 3 + plane = FLOOR_PLANE anchored = 1.0 armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0) var/uses = 20 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 49a05371050..e6d967c8eb4 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -44,6 +44,7 @@ var/list/holopads = list() idle_power_usage = 5 active_power_usage = 100 layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them. + plane = FLOOR_PLANE armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0) var/list/masters = list()//List of living mobs that use the holopad var/list/holorays = list()//Holoray-mob link. diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 3c36edb1685..20d15a29e1f 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -3,6 +3,7 @@ desc = "It's useful for igniting plasma." icon = 'icons/obj/stationobjs.dmi' icon_state = "igniter1" + plane = FLOOR_PLANE armor = list(melee = 50, bullet = 30, laser = 70, energy = 50, bomb = 20, bio = 0, rad = 0) var/id = null var/on = 1.0 diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index e98c4e90c30..e77eef869dc 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -183,8 +183,8 @@ qdel(I) qdel(J) H.icon = HI - H.layer = 25 - H.plane = HUD_PLANE + H.layer = ABOVE_HUD_LAYER + H.plane = ABOVE_HUD_PLANE usr.mapobjs += H #else diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 07c7137d719..5feec285408 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -16,6 +16,7 @@ return FALSE /obj/effect/decal + plane = FLOOR_PLANE var/no_scoop = FALSE //if it has this, don't let it be scooped up var/no_clear = FALSE //if it has this, don't delete it when its' scooped up var/list/scoop_reagents = null diff --git a/code/game/objects/effects/temporary_visuals/cult.dm b/code/game/objects/effects/temporary_visuals/cult.dm index 8edb88a7e79..7a12caf6b10 100644 --- a/code/game/objects/effects/temporary_visuals/cult.dm +++ b/code/game/objects/effects/temporary_visuals/cult.dm @@ -37,4 +37,5 @@ /obj/effect/temp_visual/cult/turf/open/floor icon_state = "floorglow" - duration = 5 \ No newline at end of file + duration = 5 + plane = FLOOR_PLANE \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 507d6fdb9f3..8815cccd92f 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -151,8 +151,8 @@ src.boxes.screen_loc = "[tx]:,[ty] to [mx],[my]" for(var/obj/O in src.contents) O.screen_loc = "[cx],[cy]" - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE cx++ if(cx > mx) cx = tx @@ -171,8 +171,8 @@ ND.sample_object.mouse_opacity = MOUSE_OPACITY_OPAQUE ND.sample_object.screen_loc = "[cx]:16,[cy]:16" ND.sample_object.maptext = "[(ND.number > 1)? "[ND.number]" : ""]" - ND.sample_object.layer = 20 - ND.sample_object.plane = HUD_PLANE + ND.sample_object.layer = ABOVE_HUD_LAYER + ND.sample_object.plane = ABOVE_HUD_PLANE cx++ if(cx > (4+cols)) cx = 4 @@ -182,8 +182,8 @@ O.mouse_opacity = MOUSE_OPACITY_OPAQUE //This is here so storage items that spawn with contents correctly have the "click around item to equip" O.screen_loc = "[cx]:16,[cy]:16" O.maptext = "" - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE cx++ if(cx > (4+cols)) cx = 4 @@ -332,8 +332,8 @@ if(ismob(loc)) W.dropped(usr) if(ismob(new_location)) - W.layer = 20 - W.plane = HUD_PLANE + W.layer = ABOVE_HUD_LAYER + W.plane = ABOVE_HUD_PLANE else W.layer = initial(W.layer) W.plane = initial(W.plane) @@ -447,17 +447,18 @@ else verbs -= /obj/item/storage/verb/toggle_gathering_mode - src.boxes = new /obj/screen/storage( ) - src.boxes.name = "storage" - src.boxes.master = src - src.boxes.icon_state = "block" - src.boxes.screen_loc = "7,7 to 10,8" - src.boxes.layer = 19 - src.closer = new /obj/screen/close( ) - src.closer.master = src - src.closer.icon_state = "x" - src.closer.layer = 20 - src.closer.plane = HUD_PLANE + boxes = new /obj/screen/storage( ) + boxes.name = "storage" + boxes.master = src + boxes.icon_state = "block" + boxes.screen_loc = "7,7 to 10,8" + boxes.layer = HUD_LAYER + boxes.plane = HUD_PLANE + closer = new /obj/screen/close( ) + closer.master = src + closer.icon_state = "x" + closer.layer = ABOVE_HUD_LAYER + closer.plane = ABOVE_HUD_PLANE orient2hud() /obj/item/storage/Destroy() @@ -469,7 +470,7 @@ return ..() /obj/item/storage/emp_act(severity) - if(!istype(src.loc, /mob/living)) + if(!istype(loc, /mob/living)) for(var/obj/O in contents) O.emp_act(severity) ..() diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index 90e32882087..d23f4c9d606 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -113,6 +113,7 @@ anchored = TRUE density = FALSE layer = TURF_LAYER + plane = FLOOR_PLANE icon_state = "weeds" max_integrity = 15 var/obj/structure/alien/weeds/node/linked_node = null diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 936c94f5c4f..d88600fe4e7 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -7,6 +7,7 @@ anchored = 1.0 armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) layer = 2.3 //under pipes + plane = FLOOR_PLANE // flags = CONDUCT /obj/structure/lattice/New() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 07c2bb8a8d6..78103a4b441 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -17,7 +17,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," name = "floor" icon = 'icons/turf/floors.dmi' icon_state = "dont_use_this_floor" - + plane = FLOOR_PLANE var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default var/icon_plating = "plating" thermal_conductivity = 0.040 diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index a6216c87b1a..ae6cd9d2fa0 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -333,6 +333,8 @@ if(!prefs) prefs = new /datum/preferences(src) preferences_datums[ckey] = prefs + else + prefs.parent = src prefs.last_ip = address //these are gonna be used for banning prefs.last_id = computer_id //these are gonna be used for banning if(world.byond_version >= 511 && byond_version >= 511 && prefs.clientfps) @@ -393,10 +395,8 @@ if(establish_db_connection()) to_chat(src,"You have enabled karma gains.") - if(!void) - void = new() - - screen += void + generate_clickcatcher() + apply_clickcatcher() if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them. to_chat(src, "Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.") @@ -772,3 +772,13 @@ winset(src, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF") else winset(src, "rpane.changelog", "background-color=none;text-color=#000000") + +/client/proc/generate_clickcatcher() + if(!void) + void = new() + screen += void + +/client/proc/apply_clickcatcher() + generate_clickcatcher() + var/list/actualview = getviewsize(view) + void.UpdateGreed(actualview[1],actualview[2]) \ No newline at end of file diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index caf98b866cc..a90ced311a7 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -183,7 +183,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts // 0 = character settings, 1 = game preferences var/current_tab = TAB_CHAR - // OOC Metadata: + // OOC Metadata: var/metadata = "" var/slot_name = "" @@ -200,6 +200,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/list/gear = list() var/gear_tab = "General" + var/ambientocclusion = TRUE + /datum/preferences/New(client/C) parent = C b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") @@ -452,6 +454,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += "Donator Publicity: [(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]
" dat += "Fancy NanoUI: [(nanoui_fancy) ? "Yes" : "No"]
" dat += "FPS: [clientfps]
" + dat += "Ambient Occlusion: [ambientocclusion ? "Enabled" : "Disabled"]
" dat += "Ghost Ears: [(toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]
" dat += "Ghost Sight: [(toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]
" dat += "Ghost Radio: [(toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]
" @@ -1920,22 +1923,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(world.byond_version >= 511 && user.client && user.client.byond_version >= 511) parent.fps = clientfps -/* - if("skin_style") - var/skin_style_name = input(user, "Select a new skin style") as null|anything in list("default1", "default2", "default3") - if(!skin_style_name) return -*/ - -/* if("spawnpoint") - var/list/spawnkeys = list() - for(var/S in spawntypes) - spawnkeys += S - var/choice = input(user, "Where would you like to spawn when latejoining?") as null|anything in spawnkeys - if(!choice || !spawntypes[choice]) - spawnpoint = "Arrivals Shuttle" - return - spawnpoint = choice */ - else switch(href_list["preference"]) if("publicity") @@ -2080,6 +2067,14 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(href_list["tab"]) current_tab = text2num(href_list["tab"]) + if("ambientocclusion") + ambientocclusion = !ambientocclusion + if(parent && parent.screen && parent.screen.len) + var/obj/screen/plane_master/game_world/PM = locate(/obj/screen/plane_master/game_world) in parent.screen + PM.filters -= AMBIENT_OCCLUSION + if(ambientocclusion) + PM.filters += AMBIENT_OCCLUSION + ShowChoices(user) return 1 diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index b355d921016..e004c812315 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -18,7 +18,8 @@ ghost_anonsay, exp, clientfps, - atklog + atklog, + ambientocclusion, FROM [format_table_name("player")] WHERE ckey='[C.ckey]'"} ) @@ -50,6 +51,7 @@ exp = query.item[16] clientfps = text2num(query.item[17]) atklog = text2num(query.item[18]) + ambientocclusion = text2num(query.item[19]) //Sanitize ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) @@ -69,6 +71,7 @@ exp = sanitize_text(exp, initial(exp)) clientfps = sanitize_integer(clientfps, 0, 1000, initial(clientfps)) atklog = sanitize_integer(atklog, 0, 100, initial(atklog)) + ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion)) return 1 /datum/preferences/proc/save_preferences(client/C) @@ -98,7 +101,8 @@ windowflashing='[windowflashing]', ghost_anonsay='[ghost_anonsay]', clientfps='[clientfps]', - atklog='[atklog]' + atklog='[atklog]', + ambientocclusion='[ambientocclusion]' WHERE ckey='[C.ckey]'"} ) diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm index 29baf834bb5..a8f11681577 100644 --- a/code/modules/events/anomaly_bluespace.dm +++ b/code/modules/events/anomaly_bluespace.dm @@ -58,7 +58,8 @@ blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH" blueeffect.icon = 'icons/effects/effects.dmi' blueeffect.icon_state = "shieldsparkles" - blueeffect.layer = 17 + blueeffect.layer = FLASH_LAYER + blueeffect.plane = FULLSCREEN_PLANE blueeffect.mouse_opacity = MOUSE_OPACITY_TRANSPARENT M.client.screen += blueeffect sleep(20) diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 9b1588e1161..64b27eef7eb 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -23,7 +23,7 @@ "atrazine","banana","charcoal","space_drugs","methamphetamine","holywater","ethanol","hot_coco","facid", "blood","morphine","ether","fluorine","mutadone","mutagen","hydrocodone","fuel", "haloperidol","lsd","syndicate_nanites","lipolicide","frostoil","salglu_solution","beepskysmash", - "omnizine", "amanitin", "neurotoxin", "synaptizine") + "omnizine", "amanitin", "neurotoxin", "synaptizine","rotatium") var/datum/reagents/R = new/datum/reagents(50) R.my_atom = vent R.add_reagent(pick(gunk), 50) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 471f82c1511..d412d604ec2 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -38,8 +38,8 @@ if(!l_hand && has_left_hand()) W.forceMove(src) //TODO: move to equipped? l_hand = W - W.layer = 20 //TODO: move to equipped? - W.plane = HUD_PLANE //TODO: move to equipped? + W.layer = ABOVE_HUD_LAYER //TODO: move to equipped? + W.plane = ABOVE_HUD_PLANE //TODO: move to equipped? W.equipped(src,slot_l_hand) if(pulling == W) stop_pulling() @@ -54,8 +54,8 @@ if(!r_hand && has_right_hand()) W.forceMove(src) r_hand = W - W.layer = 20 - W.plane = HUD_PLANE + W.layer = ABOVE_HUD_LAYER + W.plane = ABOVE_HUD_PLANE W.equipped(src,slot_r_hand) if(pulling == W) stop_pulling() diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 79b41e47cc3..69f898fb677 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -202,8 +202,8 @@ W.screen_loc = null W.loc = src W.equipped(src, slot) - W.layer = 20 - W.plane = HUD_PLANE + W.layer = ABOVE_HUD_LAYER + W.plane = ABOVE_HUD_PLANE switch(slot) if(slot_back) @@ -248,8 +248,8 @@ var/obj/item/clothing/ears/offear/O = new(W) O.loc = src r_ear = O - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE update_inv_ears(redraw_mob) if(slot_r_ear) r_ear = W @@ -257,8 +257,8 @@ var/obj/item/clothing/ears/offear/O = new(W) O.loc = src l_ear = O - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE update_inv_ears(redraw_mob) if(slot_glasses) glasses = W diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 8eb8bb80763..7695145300e 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -55,24 +55,24 @@ if(!module_state_1) O.mouse_opacity = initial(O.mouse_opacity) module_state_1 = O - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE O.screen_loc = inv1.screen_loc contents += O set_actions(O) else if(!module_state_2) O.mouse_opacity = initial(O.mouse_opacity) module_state_2 = O - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE O.screen_loc = inv2.screen_loc contents += O set_actions(O) else if(!module_state_3) O.mouse_opacity = initial(O.mouse_opacity) module_state_3 = O - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE O.screen_loc = inv3.screen_loc contents += O set_actions(O) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index ae6a832f6ac..18bfe6998c3 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -114,7 +114,9 @@ var/list/robot_verbs_default = list( robot_modules_background = new() robot_modules_background.icon_state = "block" - robot_modules_background.layer = 19 //Objects that appear on screen are on layer 20, UI should be just below it. + robot_modules_background.layer = HUD_LAYER //Objects that appear on screen are on layer 20, UI should be just below it. + robot_modules_background.plane = HUD_PLANE + ident = rand(1, 999) rename_character(null, get_default_name()) update_icons() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 02f15a59709..66fb417733b 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -534,8 +534,8 @@ W.forceMove(src) W.equipped(src, slot) - W.layer = 20 - W.plane = HUD_PLANE + W.layer = ABOVE_HUD_LAYER + W.plane = ABOVE_HUD_PLANE switch(slot) if(slot_collar) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index d5ca6b0b0f8..5deebd22ee9 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -334,15 +334,15 @@ else if(h_user.l_store == src) h_user.unEquip(src) B.loc = h_user - B.layer = 20 - B.plane = HUD_PLANE + B.layer = ABOVE_HUD_LAYER + B.plane = ABOVE_HUD_PLANE h_user.l_store = B h_user.update_inv_pockets() else if(h_user.r_store == src) h_user.unEquip(src) B.loc = h_user - B.layer = 20 - B.plane = HUD_PLANE + B.layer = ABOVE_HUD_LAYER + B.plane = ABOVE_HUD_PLANE h_user.r_store = B h_user.update_inv_pockets() else if(h_user.head == src) diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 9d786dd0713..9e96ed5b56b 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -604,6 +604,32 @@ M.emote("laugh") return list(effect, update_flags) +/datum/reagent/rotatium //Rotatium. Fucks up your rotation and is hilarious + name = "Rotatium" + id = "rotatium" + description = "A constantly swirling, oddly colourful fluid. Causes the consumer's sense of direction and hand-eye coordination to become wild." + reagent_state = LIQUID + color = "#AC88CA" //RGB: 172, 136, 202 + metabolization_rate = 0.6 * REAGENTS_METABOLISM + taste_message = "spinning" + +/datum/reagent/rotatium/on_mob_life(mob/living/carbon/M) + if(M.hud_used) + if(current_cycle >= 20 && current_cycle % 20 == 0) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) + var/rotation = min(round(current_cycle / 20), 89) // By this point the player is probably puking and quitting anyway + for(var/whole_screen in screens) + animate(whole_screen, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1) + animate(transform = matrix(-rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING) + return ..() + +/datum/reagent/rotatium/on_mob_delete(mob/living/M) + if(M && M.hud_used) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) + for(var/whole_screen in screens) + animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING) + ..() + ////////////////////////////// // Synth-Drugs // ////////////////////////////// diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index ef002caa1ec..6413765c99c 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -680,7 +680,7 @@ dir = 0 // dir will contain dominant direction for junction pipes var/health = 10 // health points 0-10 armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100) - layer = 2.3 // slightly lower than wires and other pipes + layer = DISPOSAL_PIPE_LAYER // slightly lower than wires and other pipes var/base_icon_state // initial icon state on map // new pipe, set the icon_state as on map diff --git a/config/example/dbconfig.txt b/config/example/dbconfig.txt index 6ca1f0201e8..8b411db15e1 100644 --- a/config/example/dbconfig.txt +++ b/config/example/dbconfig.txt @@ -9,7 +9,7 @@ ## This value must be set to the version of the paradise schema in use. ## If this value does not match, the SQL database will not be loaded and an error will be generated. ## Roundstart will be delayed. -DB_VERSION 5 +DB_VERSION 6 ## Server the MySQL database can be found at. # Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. diff --git a/paradise.dme b/paradise.dme index a2d44d00044..70ed496f033 100644 --- a/paradise.dme +++ b/paradise.dme @@ -143,6 +143,7 @@ #include "code\_onclick\hud\movable_screen_objects.dm" #include "code\_onclick\hud\other_mobs.dm" #include "code\_onclick\hud\picture_in_picture.dm" +#include "code\_onclick\hud\plane_master.dm" #include "code\_onclick\hud\radial.dm" #include "code\_onclick\hud\robot.dm" #include "code\_onclick\hud\screen_objects.dm" From f9d067e9e6e0b8d59297f2f13ba870d557d77d1b Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sun, 21 Apr 2019 01:54:31 +0200 Subject: [PATCH 02/41] Remove rotatium from vent_clog and remove useless return --- code/ATMOSPHERICS/atmospherics.dm | 2 -- code/modules/events/vent_clog.dm | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 64ae485a75d..aa6d2f2625c 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -68,8 +68,6 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new()) else plane = FLOOR_PLANE - return null - /obj/machinery/atmospherics/proc/update_pipe_image() pipe_image = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) //the 20 puts it above Byond's darkness (not its opacity view) pipe_image.plane = HUD_PLANE diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 64b27eef7eb..9b1588e1161 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -23,7 +23,7 @@ "atrazine","banana","charcoal","space_drugs","methamphetamine","holywater","ethanol","hot_coco","facid", "blood","morphine","ether","fluorine","mutadone","mutagen","hydrocodone","fuel", "haloperidol","lsd","syndicate_nanites","lipolicide","frostoil","salglu_solution","beepskysmash", - "omnizine", "amanitin", "neurotoxin", "synaptizine","rotatium") + "omnizine", "amanitin", "neurotoxin", "synaptizine") var/datum/reagents/R = new/datum/reagents(50) R.my_atom = vent R.add_reagent(pick(gunk), 50) From 64f8300c2d48bdbe7409fadb61f768886dd775d0 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sun, 21 Apr 2019 18:11:10 +0200 Subject: [PATCH 03/41] Switch to preference toggle for ambient occlusion --- SQL/updates/5-6.sql | 4 ---- code/__DEFINES/misc.dm | 2 +- code/__DEFINES/preferences.dm | 4 ++-- code/_onclick/hud/plane_master.dm | 6 +++--- code/modules/client/preference/preferences.dm | 12 +++++------- code/modules/client/preference/preferences_mysql.dm | 6 +----- .../modules/client/preference/preferences_toggles.dm | 3 +-- code/modules/reagents/chemistry/reagents/drugs.dm | 4 ++-- config/example/dbconfig.txt | 2 +- 9 files changed, 16 insertions(+), 27 deletions(-) delete mode 100644 SQL/updates/5-6.sql diff --git a/SQL/updates/5-6.sql b/SQL/updates/5-6.sql deleted file mode 100644 index d2b7ed0d16e..00000000000 --- a/SQL/updates/5-6.sql +++ /dev/null @@ -1,4 +0,0 @@ -#Updating the SQL from version 5 to version 6. -Mark -#Adding new column to contain the atklog value. -ALTER TABLE `player` - ADD `ambientocclusion` smallint(4) DEFAULT '1' AFTER `atklog`; \ No newline at end of file diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 462191e49c3..106c1900a82 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -404,4 +404,4 @@ #define GHOST_ORBIT_PENTAGON "pentagon" // Filters -#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") \ No newline at end of file +#define FILTER_AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") \ No newline at end of file diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index aa3652046b5..1f2bc9d8240 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -29,10 +29,10 @@ #define UI_DARKMODE 131072 #define DISABLE_KARMA 262144 #define CHAT_NO_MENTORTICKETLOGS 524288 - #define TYPING_ONCE 1048576 +#define AMBIENT_OCCLUSION 2097152 -#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC) +#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC|AMBIENT_OCCLUSION) // Admin attack logs filter system, see /proc/add_attack_logs and /proc/msg_admin_attack #define ATKLOG_ALL 0 diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index f56400c7198..4d9d05856ae 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -29,6 +29,6 @@ blend_mode = BLEND_OVERLAY /obj/screen/plane_master/game_world/backdrop(mob/mymob) - filters -= AMBIENT_OCCLUSION - if(istype(mymob) && mymob.client && mymob.client.prefs && mymob.client.prefs.ambientocclusion) - filters += AMBIENT_OCCLUSION + filters -= FILTER_AMBIENT_OCCLUSION + if(istype(mymob) && mymob.client && mymob.client.prefs && (mymob.client.prefs.toggles & AMBIENT_OCCLUSION)) + filters += FILTER_AMBIENT_OCCLUSION diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index a90ced311a7..a810e7add6b 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -200,8 +200,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/list/gear = list() var/gear_tab = "General" - var/ambientocclusion = TRUE - /datum/preferences/New(client/C) parent = C b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") @@ -454,7 +452,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += "Donator Publicity: [(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]
" dat += "Fancy NanoUI: [(nanoui_fancy) ? "Yes" : "No"]
" dat += "FPS: [clientfps]
" - dat += "Ambient Occlusion: [ambientocclusion ? "Enabled" : "Disabled"]
" + dat += "Ambient Occlusion: [toggles & AMBIENT_OCCLUSION ? "Enabled" : "Disabled"]
" dat += "Ghost Ears: [(toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]
" dat += "Ghost Sight: [(toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]
" dat += "Ghost Radio: [(toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]
" @@ -2068,12 +2066,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts current_tab = text2num(href_list["tab"]) if("ambientocclusion") - ambientocclusion = !ambientocclusion + toggles ^= AMBIENT_OCCLUSION if(parent && parent.screen && parent.screen.len) var/obj/screen/plane_master/game_world/PM = locate(/obj/screen/plane_master/game_world) in parent.screen - PM.filters -= AMBIENT_OCCLUSION - if(ambientocclusion) - PM.filters += AMBIENT_OCCLUSION + PM.filters -= FILTER_AMBIENT_OCCLUSION + if(toggles & AMBIENT_OCCLUSION) + PM.filters += FILTER_AMBIENT_OCCLUSION ShowChoices(user) return 1 diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index e004c812315..0628276ccbc 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -19,7 +19,6 @@ exp, clientfps, atklog, - ambientocclusion, FROM [format_table_name("player")] WHERE ckey='[C.ckey]'"} ) @@ -51,7 +50,6 @@ exp = query.item[16] clientfps = text2num(query.item[17]) atklog = text2num(query.item[18]) - ambientocclusion = text2num(query.item[19]) //Sanitize ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) @@ -71,7 +69,6 @@ exp = sanitize_text(exp, initial(exp)) clientfps = sanitize_integer(clientfps, 0, 1000, initial(clientfps)) atklog = sanitize_integer(atklog, 0, 100, initial(atklog)) - ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion)) return 1 /datum/preferences/proc/save_preferences(client/C) @@ -101,8 +98,7 @@ windowflashing='[windowflashing]', ghost_anonsay='[ghost_anonsay]', clientfps='[clientfps]', - atklog='[atklog]', - ambientocclusion='[ambientocclusion]' + atklog='[atklog]' WHERE ckey='[C.ckey]'"} ) diff --git a/code/modules/client/preference/preferences_toggles.dm b/code/modules/client/preference/preferences_toggles.dm index 703de37468e..c4d7599d2de 100644 --- a/code/modules/client/preference/preferences_toggles.dm +++ b/code/modules/client/preference/preferences_toggles.dm @@ -230,7 +230,6 @@ to_chat(usr, "You have disabled karma gains.") else to_chat(usr, "You have enabled karma gains.") - return /client/verb/toggle_popup_limiter() set name = "Toggle Text Popup Limiter" @@ -242,4 +241,4 @@ to_chat(usr, "You have enabled text popup limiting.") else to_chat(usr, "You have disabled text popup limiting.") - return + diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 9e96ed5b56b..c5b48c74d81 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -616,7 +616,7 @@ /datum/reagent/rotatium/on_mob_life(mob/living/carbon/M) if(M.hud_used) if(current_cycle >= 20 && current_cycle % 20 == 0) - var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"]) var/rotation = min(round(current_cycle / 20), 89) // By this point the player is probably puking and quitting anyway for(var/whole_screen in screens) animate(whole_screen, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1) @@ -625,7 +625,7 @@ /datum/reagent/rotatium/on_mob_delete(mob/living/M) if(M && M.hud_used) - var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"]) for(var/whole_screen in screens) animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING) ..() diff --git a/config/example/dbconfig.txt b/config/example/dbconfig.txt index 8b411db15e1..6ca1f0201e8 100644 --- a/config/example/dbconfig.txt +++ b/config/example/dbconfig.txt @@ -9,7 +9,7 @@ ## This value must be set to the version of the paradise schema in use. ## If this value does not match, the SQL database will not be loaded and an error will be generated. ## Roundstart will be delayed. -DB_VERSION 6 +DB_VERSION 5 ## Server the MySQL database can be found at. # Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. From e5033a927a839e15851aac833ccf74cefa4fc4c9 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 00:55:54 +0200 Subject: [PATCH 04/41] Fix toggle sanization --- code/__DEFINES/preferences.dm | 2 ++ code/modules/client/preference/preferences_mysql.dm | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 1f2bc9d8240..32433975e9e 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -32,6 +32,8 @@ #define TYPING_ONCE 1048576 #define AMBIENT_OCCLUSION 2097152 +#define TOGGLES_TOTAL 4194304 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined. + #define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC|AMBIENT_OCCLUSION) // Admin attack logs filter system, see /proc/add_attack_logs and /proc/msg_admin_attack diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index 0628276ccbc..3483a4c77d3 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -55,7 +55,7 @@ ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) UI_style = sanitize_inlist(UI_style, list("White", "Midnight"), initial(UI_style)) default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot)) - toggles = sanitize_integer(toggles, 0, 2097151, initial(toggles)) + toggles = sanitize_integer(toggles, 0, TOGGLES_TOTAL, initial(toggles)) sound = sanitize_integer(sound, 0, 65535, initial(sound)) UI_style_color = sanitize_hexcolor(UI_style_color, initial(UI_style_color)) UI_style_alpha = sanitize_integer(UI_style_alpha, 0, 255, initial(UI_style_alpha)) From bdd379754b772af20e1e7bf361f9dfff75397dd4 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 01:12:51 +0200 Subject: [PATCH 05/41] Whelp, remove unused SQL changes --- SQL/paradise_schema.sql | 1 - SQL/paradise_schema_prefixed.sql | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index e2c2230a74c..0379517190f 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -266,7 +266,6 @@ CREATE TABLE `player` ( `exp` mediumtext, `clientfps` smallint(4) DEFAULT '0', `atklog` smallint(4) DEFAULT '0', - `ambientocclusion` smallint(4) DEFAULT '1', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index 7ad83febaf4..ab4badc4281 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -264,8 +264,7 @@ CREATE TABLE `SS13_player` ( `ghost_anonsay` tinyint(1) NOT NULL DEFAULT '0', `exp` mediumtext, `clientfps` smallint(4) DEFAULT '0', - `atklog` smallint(4) DEFAULT '0', - `ambientocclusion` smallint(4) DEFAULT '1', + `atklog` smallint(4) DEFAULT '0' PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; From a3bd9e1bb4fcb42f5a870b957f27ea9116600c94 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 01:35:34 +0200 Subject: [PATCH 06/41] Need to pay better attention --- SQL/paradise_schema_prefixed.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index ab4badc4281..e9a622cf037 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -264,7 +264,7 @@ CREATE TABLE `SS13_player` ( `ghost_anonsay` tinyint(1) NOT NULL DEFAULT '0', `exp` mediumtext, `clientfps` smallint(4) DEFAULT '0', - `atklog` smallint(4) DEFAULT '0' + `atklog` smallint(4) DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; From affae890284605a106c2797ac420923e2e794dd3 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 19:55:41 +0200 Subject: [PATCH 07/41] Attempt update to /tg/ lighting system --- code/__DEFINES/lighting.dm | 102 ++- code/_onclick/hud/fullscreen.dm | 47 +- code/_onclick/hud/plane_master.dm | 10 + code/controllers/Processes/lighting.dm | 98 --- code/controllers/subsystem/lighting.dm | 87 +++ code/game/area/Space Station 13 areas.dm | 3 + code/game/area/areas.dm | 56 +- code/game/objects/effects/misc.dm | 34 +- code/game/turfs/space/space.dm | 36 +- code/game/turfs/turf.dm | 27 +- code/modules/awaymissions/zvis.dm | 634 +++++++++--------- code/modules/lighting/__lighting_docs.dm | 2 +- code/modules/lighting/lighting_area.dm | 31 +- code/modules/lighting/lighting_atom.dm | 139 ++-- code/modules/lighting/lighting_corner.dm | 76 ++- code/modules/lighting/lighting_object.dm | 144 ++++ code/modules/lighting/lighting_overlay.dm | 89 --- code/modules/lighting/lighting_setup.dm | 23 +- code/modules/lighting/lighting_source.dm | 416 ++++++------ code/modules/lighting/lighting_turf.dm | 129 ++-- code/modules/lighting/~lighting_undefs.dm | 7 - .../living/simple_animal/hostile/statue.dm | 2 +- icons/effects/alphacolors.dmi | Bin 464 -> 633 bytes icons/effects/lighting_object.dmi | Bin 0 -> 1882 bytes icons/effects/lighting_overlay.dmi | Bin 5914 -> 0 bytes icons/effects/lighting_overlay.png | Bin 1480 -> 0 bytes paradise.dme | 5 +- 27 files changed, 1248 insertions(+), 949 deletions(-) delete mode 100644 code/controllers/Processes/lighting.dm create mode 100644 code/controllers/subsystem/lighting.dm create mode 100644 code/modules/lighting/lighting_object.dm delete mode 100644 code/modules/lighting/lighting_overlay.dm delete mode 100644 code/modules/lighting/~lighting_undefs.dm create mode 100644 icons/effects/lighting_object.dmi delete mode 100644 icons/effects/lighting_overlay.dmi delete mode 100644 icons/effects/lighting_overlay.png diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 3db7c467c24..37203792f76 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -1,42 +1,82 @@ -#define LIGHTING_FALLOFF 1 // type of falloff to use for lighting; 1 for circular, 2 for square -#define LIGHTING_LAMBERTIAN 0 // use lambertian shading for light sources -#define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone +//Bay lighting engine shit, not in /code/modules/lighting because BYOND is being shit about it +#define LIGHTING_INTERVAL 5 // frequency, in 1/10ths of a second, of the lighting process -#define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects +#define MINIMUM_USEFUL_LIGHT_RANGE 1.4 -#define LIGHTING_ROUND_VALUE (1 / 128) //Value used to round lumcounts, values smaller than 1/255 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. +#define LIGHTING_FALLOFF 1 // type of falloff to use for lighting; 1 for circular, 2 for square +#define LIGHTING_LAMBERTIAN 0 // use lambertian shading for light sources +#define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone +#define LIGHTING_ROUND_VALUE (1 / 64) //Value used to round lumcounts, values smaller than 1/129 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. -#define LIGHTING_SOFT_THRESHOLD 0.05 // If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting overlays. +#define LIGHTING_ICON 'icons/effects/lighting_object.dmi' // icon used for lighting shading effects + +// If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting objects. +// Set to zero to disable soft lighting. Luminosity changes then work if it's lit at all. +#define LIGHTING_SOFT_THRESHOLD 0 // If I were you I'd leave this alone. #define LIGHTING_BASE_MATRIX \ list \ ( \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ 0, 0, 0, 1 \ ) \ -// Helpers so we can (more easily) control the colour matrices. -#define CL_MATRIX_RR 1 -#define CL_MATRIX_RG 2 -#define CL_MATRIX_RB 3 -#define CL_MATRIX_RA 4 -#define CL_MATRIX_GR 5 -#define CL_MATRIX_GG 6 -#define CL_MATRIX_GB 7 -#define CL_MATRIX_GA 8 -#define CL_MATRIX_BR 9 -#define CL_MATRIX_BG 10 -#define CL_MATRIX_BB 11 -#define CL_MATRIX_BA 12 -#define CL_MATRIX_AR 13 -#define CL_MATRIX_AG 14 -#define CL_MATRIX_AB 15 -#define CL_MATRIX_AA 16 -#define CL_MATRIX_CR 17 -#define CL_MATRIX_CG 18 -#define CL_MATRIX_CB 19 -#define CL_MATRIX_CA 20 \ No newline at end of file + +//Some defines to generalise colours used in lighting. +//Important note on colors. Colors can end up significantly different from the basic html picture, especially when saturated +#define LIGHT_COLOR_WHITE "#FFFFFF" +#define LIGHT_COLOR_RED "#FA8282" //Warm but extremely diluted red. rgb(250, 130, 130) +#define LIGHT_COLOR_GREEN "#64C864" //Bright but quickly dissipating neon green. rgb(100, 200, 100) +#define LIGHT_COLOR_BLUE "#6496FA" //Cold, diluted blue. rgb(100, 150, 250) + +#define LIGHT_COLOR_BLUEGREEN "#7DE1AF" //Light blueish green. rgb(125, 225, 175) +#define LIGHT_COLOR_CYAN "#7DE1E1" //Diluted cyan. rgb(125, 225, 225) +#define LIGHT_COLOR_LIGHT_CYAN "#40CEFF" //More-saturated cyan. rgb(64, 206, 255) +#define LIGHT_COLOR_DARK_BLUE "#6496FA" //Saturated blue. rgb(51, 117, 248) +#define LIGHT_COLOR_PINK "#E17DE1" //Diluted, mid-warmth pink. rgb(225, 125, 225) +#define LIGHT_COLOR_YELLOW "#E1E17D" //Dimmed yellow, leaning kaki. rgb(225, 225, 125) +#define LIGHT_COLOR_BROWN "#966432" //Clear brown, mostly dim. rgb(150, 100, 50) +#define LIGHT_COLOR_ORANGE "#FA9632" //Mostly pure orange. rgb(250, 150, 50) +#define LIGHT_COLOR_PURPLE "#952CF4" //Light Purple. rgb(149, 44, 244) +#define LIGHT_COLOR_LAVENDER "#9B51FF" //Less-saturated light purple. rgb(155, 81, 255) + +#define LIGHT_COLOR_HOLY_MAGIC "#FFF743" //slightly desaturated bright yellow. +#define LIGHT_COLOR_BLOOD_MAGIC "#D00000" //deep crimson + +//These ones aren't a direct colour like the ones above, because nothing would fit +#define LIGHT_COLOR_FIRE "#FAA019" //Warm orange color, leaning strongly towards yellow. rgb(250, 160, 25) +#define LIGHT_COLOR_LAVA "#C48A18" //Very warm yellow, leaning slightly towards orange. rgb(196, 138, 24) +#define LIGHT_COLOR_FLARE "#FA644B" //Bright, non-saturated red. Leaning slightly towards pink for visibility. rgb(250, 100, 75) +#define LIGHT_COLOR_SLIME_LAMP "#AFC84B" //Weird color, between yellow and green, very slimy. rgb(175, 200, 75) +#define LIGHT_COLOR_TUNGSTEN "#FAE1AF" //Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175) +#define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) + +#define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow. + +#define LIGHTING_PLANE_ALPHA_VISIBLE 255 +#define LIGHTING_PLANE_ALPHA_NV_TRAIT 245 +#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192 +#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell. +#define LIGHTING_PLANE_ALPHA_INVISIBLE 0 + +//lighting area defines +#define DYNAMIC_LIGHTING_DISABLED 0 //dynamic lighting disabled (area stays at full brightness) +#define DYNAMIC_LIGHTING_ENABLED 1 //dynamic lighting enabled +#define DYNAMIC_LIGHTING_FORCED 2 //dynamic lighting enabled even if the area doesn't require power +#define DYNAMIC_LIGHTING_IFSTARLIGHT 3 //dynamic lighting enabled only if starlight is. +#define IS_DYNAMIC_LIGHTING(A) A.dynamic_lighting + + +//code assumes higher numbers override lower numbers. +#define LIGHTING_NO_UPDATE 0 +#define LIGHTING_VIS_UPDATE 1 +#define LIGHTING_CHECK_UPDATE 2 +#define LIGHTING_FORCE_UPDATE 3 + +#define FLASH_LIGHT_DURATION 2 +#define FLASH_LIGHT_POWER 3 +#define FLASH_LIGHT_RANGE 3.8 \ No newline at end of file diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 4c9ff339052..82b56aaf1b7 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -17,7 +17,7 @@ screen.severity = severity screens[category] = screen - if(client) + if(client && screen.should_show_to(src)) client.screen += screen return screen @@ -45,9 +45,15 @@ clear_fullscreen(category) /datum/hud/proc/reload_fullscreen() - var/list/screens = mymob.screens - for(var/category in screens) - mymob.client.screen |= screens[category] + if(mymob.client) + var/obj/screen/fullscreen/screen + var/list/screens = mymob.screens + for(var/category in screens) + screen = screens[category] + if(screen.should_show_to(src)) + mymob.client.screen |= screen + else + mymob.client.screen -= screen /obj/screen/fullscreen icon = 'icons/mob/screen_full.dmi' @@ -57,6 +63,12 @@ plane = FULLSCREEN_PLANE mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/severity = 0 + var/show_when_dead = FALSE + +/obj/screen/fullscreen/proc/should_show_to(mob/mymob) + if(!show_when_dead && mymob.stat == DEAD) + return FALSE + return TRUE /obj/screen/fullscreen/Destroy() severity = 0 @@ -101,6 +113,33 @@ screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "druggy" +/obj/screen/fullscreen/lighting_backdrop + icon = 'icons/mob/screen_gen.dmi' + icon_state = "flash" + transform = matrix(200, 0, 0, 0, 200, 0) + plane = LIGHTING_PLANE + blend_mode = BLEND_OVERLAY + show_when_dead = TRUE + +//Provides darkness to the back of the lighting plane +/obj/screen/fullscreen/lighting_backdrop/lit + invisibility = INVISIBILITY_LIGHTING + layer = BACKGROUND_LAYER+21 + color = "#000" + show_when_dead = TRUE + +//Provides whiteness in case you don't see lights so everything is still visible +/obj/screen/fullscreen/lighting_backdrop/unlit + layer = BACKGROUND_LAYER+20 + show_when_dead = TRUE + +/obj/screen/fullscreen/see_through_darkness + icon_state = "nightvision" + plane = LIGHTING_PLANE + layer = LIGHTING_LAYER + blend_mode = BLEND_ADD + show_when_dead = TRUE + #undef FULLSCREEN_LAYER #undef BLIND_LAYER #undef CRIT_LAYER diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index 4d9d05856ae..aebc194c97e 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -32,3 +32,13 @@ filters -= FILTER_AMBIENT_OCCLUSION if(istype(mymob) && mymob.client && mymob.client.prefs && (mymob.client.prefs.toggles & AMBIENT_OCCLUSION)) filters += FILTER_AMBIENT_OCCLUSION + +/obj/screen/plane_master/lighting + name = "lighting plane master" + plane = LIGHTING_PLANE + blend_mode = BLEND_MULTIPLY + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + +/obj/screen/plane_master/lighting/backdrop(mob/mymob) + mymob.overlay_fullscreen("lighting_backdrop_lit", /obj/screen/fullscreen/lighting_backdrop/lit) + mymob.overlay_fullscreen("lighting_backdrop_unlit", /obj/screen/fullscreen/lighting_backdrop/unlit) \ No newline at end of file diff --git a/code/controllers/Processes/lighting.dm b/code/controllers/Processes/lighting.dm deleted file mode 100644 index d46cab1d19f..00000000000 --- a/code/controllers/Processes/lighting.dm +++ /dev/null @@ -1,98 +0,0 @@ -/var/lighting_overlays_initialised = FALSE - -/var/list/lighting_update_lights = list() // List of lighting sources queued for update. -/var/list/lighting_update_corners = list() // List of lighting corners queued for update. -/var/list/lighting_update_overlays = list() // List of lighting overlays queued for update. - -/var/list/lighting_update_lights_old = list() // List of lighting sources currently being updated. -/var/list/lighting_update_corners_old = list() // List of lighting corners currently being updated. -/var/list/lighting_update_overlays_old = list() // List of lighting overlays currently being updated. - - -/datum/controller/process/lighting - // Queues of update counts, waiting to be rolled into stats lists - var/list/stats_queues = list( - "Source" = list(), "Corner" = list(), "Overlay" = list()) - // Stats lists - var/list/stats_lists = list( - "Source" = list(), "Corner" = list(), "Overlay" = list()) - var/update_stats_every = (1 SECONDS) - var/next_stats_update = 0 - var/stat_updates_to_keep = 5 - -/datum/controller/process/lighting/setup() - name = "lighting" - - schedule_interval = 0 // run as fast as you possibly can - sleep_interval = 10 // Yield every 10% of a tick - defer_usage = 80 // Defer at 80% of a tick - create_all_lighting_overlays() - lighting_overlays_initialised = TRUE - - // Pre-process lighting once before the round starts. Wait 30 seconds so the away mission has time to load. - spawn(300) - doWork(1) - -/datum/controller/process/lighting/doWork(roundstart) - - lighting_update_lights_old = lighting_update_lights //We use a different list so any additions to the update lists during a delay from scheck() don't cause things to be cut from the list without being updated. - lighting_update_lights = list() - for(var/datum/light_source/L in lighting_update_lights_old) - - if(L.check() || L.destroyed || L.force_update) - L.remove_lum() - if(!L.destroyed) - L.apply_lum() - - else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. - L.smart_vis_update() - - L.vis_update = FALSE - L.force_update = FALSE - L.needs_update = FALSE - - SCHECK - - lighting_update_corners_old = lighting_update_corners //Same as above. - lighting_update_corners = list() - for(var/A in lighting_update_corners_old) - var/datum/lighting_corner/C = A - - C.update_overlays() - - C.needs_update = FALSE - - SCHECK - - lighting_update_overlays_old = lighting_update_overlays //Same as above. - lighting_update_overlays = list() - - for(var/A in lighting_update_overlays_old) - var/atom/movable/lighting_overlay/O = A - O.update_overlay() - O.needs_update = 0 - SCHECK - - stats_queues["Source"] += lighting_update_lights_old.len - stats_queues["Corner"] += lighting_update_corners_old.len - stats_queues["Overlay"] += lighting_update_overlays_old.len - - if(next_stats_update <= world.time) - next_stats_update = world.time + update_stats_every - for(var/stat_name in stats_queues) - var/stat_sum = 0 - var/list/stats_queue = stats_queues[stat_name] - for(var/count in stats_queue) - stat_sum += count - stats_queue.Cut() - - var/list/stats_list = stats_lists[stat_name] - stats_list.Insert(1, stat_sum) - if(stats_list.len > stat_updates_to_keep) - stats_list.Cut(stats_list.len) - -/datum/controller/process/lighting/statProcess() - ..() - stat(null, "[total_lighting_sources] sources, [total_lighting_corners] corners, [total_lighting_overlays] overlays") - for(var/stat_type in stats_lists) - stat(null, "[stat_type] updates: [jointext(stats_lists[stat_type], " | ")]") diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm new file mode 100644 index 00000000000..252f2dcb2c8 --- /dev/null +++ b/code/controllers/subsystem/lighting.dm @@ -0,0 +1,87 @@ +GLOBAL_LIST_EMPTY(lighting_update_lights) // List of lighting sources queued for update. +GLOBAL_LIST_EMPTY(lighting_update_corners) // List of lighting corners queued for update. +GLOBAL_LIST_EMPTY(lighting_update_objects) // List of lighting objects queued for update. + +SUBSYSTEM_DEF(lighting) + name = "Lighting" + wait = 2 + init_order = INIT_ORDER_LIGHTING + flags = SS_TICKER + +/datum/controller/subsystem/lighting/stat_entry() + ..("L:[GLOB.lighting_update_lights.len]|C:[GLOB.lighting_update_corners.len]|O:[GLOB.lighting_update_objects.len]") + +/datum/controller/subsystem/lighting/Initialize(timeofday) + if(!initialized) + if(config.starlight) + for(var/I in GLOB.all_areas) + var/area/A = I + if (A.dynamic_lighting == DYNAMIC_LIGHTING_IFSTARLIGHT) + A.luminosity = 0 + + create_all_lighting_objects() + initialized = TRUE + + fire(FALSE, TRUE) + + return ..() + +/datum/controller/subsystem/lighting/fire(resumed, init_tick_checks) + MC_SPLIT_TICK_INIT(3) + if(!init_tick_checks) + MC_SPLIT_TICK + var/i = 0 + for(i in 1 to GLOB.lighting_update_lights.len) + var/datum/light_source/L = GLOB.lighting_update_lights[i] + + L.update_corners() + + L.needs_update = LIGHTING_NO_UPDATE + + if(init_tick_checks) + CHECK_TICK + else if (MC_TICK_CHECK) + break + if(i) + GLOB.lighting_update_lights.Cut(1, i+1) + i = 0 + + if(!init_tick_checks) + MC_SPLIT_TICK + + for (i in 1 to GLOB.lighting_update_corners.len) + var/datum/lighting_corner/C = GLOB.lighting_update_corners[i] + + C.update_objects() + C.needs_update = FALSE + if(init_tick_checks) + CHECK_TICK + else if (MC_TICK_CHECK) + break + if (i) + GLOB.lighting_update_corners.Cut(1, i+1) + i = 0 + + + if(!init_tick_checks) + MC_SPLIT_TICK + + for (i in 1 to GLOB.lighting_update_objects.len) + var/atom/movable/lighting_object/O = GLOB.lighting_update_objects[i] + + if (QDELETED(O)) + continue + + O.update() + O.needs_update = FALSE + if(init_tick_checks) + CHECK_TICK + else if (MC_TICK_CHECK) + break + if (i) + GLOB.lighting_update_objects.Cut(1, i+1) + + +/datum/controller/subsystem/lighting/Recover() + initialized = SSlighting.initialized + ..() \ No newline at end of file diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 067223c0285..ad7824c4854 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -26,6 +26,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon = 'icons/turf/areas.dmi' icon_state = "unknown" layer = AREA_LAYER + plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. luminosity = 0 mouse_opacity = MOUSE_OPACITY_TRANSPARENT invisibility = INVISIBILITY_LIGHTING @@ -128,6 +129,7 @@ var/list/ghostteleportlocs = list() valid_territory = FALSE outdoors = 1 ambientsounds = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/traitor.ogg') + dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT /area/space/atmosalert() return @@ -1424,6 +1426,7 @@ var/list/ghostteleportlocs = list() requires_power = 0 dynamic_lighting = 0 valid_territory = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT /area/solar/auxport name = "\improper Fore Port Solar Array" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 6f25d1b23aa..0bd54aa4530 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -16,38 +16,50 @@ // area from any other instances already present (meaning you can have // separate APCs, and so on) var/there_can_be_many = 0 - plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. - /area/New() - ..() + + GLOB.all_areas += src + +/area/Initialize(mapload) icon_state = "" layer = AREA_LAYER uid = ++global_uid - GLOB.all_areas += src + map_name = name // Save the initial (the name set in the map) name of the area. - if(type == /area) // override defaults for space. TODO: make space areas of type /area/space rather than /area - requires_power = 1 - always_unpowered = 1 - dynamic_lighting = 1 - power_light = 0 - power_equip = 0 - power_environ = 0 -// lighting_state = 4 - //has_gravity = 0 // Space has gravity. Because.. because. + if(requires_power) + luminosity = 0 + else + power_light = TRUE + power_equip = TRUE + power_environ = TRUE - if(requires_power != 0) - power_light = 0 //rastaf0 - power_equip = 0 //rastaf0 - power_environ = 0 //rastaf0 + if(dynamic_lighting == DYNAMIC_LIGHTING_FORCED) + dynamic_lighting = DYNAMIC_LIGHTING_ENABLED + luminosity = 0 + else if(dynamic_lighting != DYNAMIC_LIGHTING_IFSTARLIGHT) + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + if(dynamic_lighting == DYNAMIC_LIGHTING_IFSTARLIGHT) + dynamic_lighting = config.starlight ? DYNAMIC_LIGHTING_ENABLED : DYNAMIC_LIGHTING_DISABLED + + . = ..() blend_mode = BLEND_MULTIPLY // Putting this in the constructor so that it stops the icons being screwed up in the map editor. -/area/Initialize() - . = ..() + if(!IS_DYNAMIC_LIGHTING(src)) + add_overlay(/obj/effect/fullbright) + reg_in_areas_in_z() + + return INITIALIZE_HINT_LATELOAD + +/area/LateInitialize() + . = ..() + power_change() // all machines set to current power level, also updates lighting icon + +/area/proc/reg_in_areas_in_z() if(contents.len) var/list/areas_in_z = space_manager.areas_in_z var/z @@ -64,12 +76,6 @@ areas_in_z["[z]"] = list() areas_in_z["[z]"] += src - return INITIALIZE_HINT_LATELOAD - -/area/LateInitialize() - . = ..() - power_change() // all machines set to current power level, also updates lighting icon - /area/proc/get_cameras() var/list/cameras = list() for(var/obj/machinery/camera/C in src) diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index 3ea1fc0c3d6..191f776d01c 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -92,4 +92,36 @@ name = "horrific experiment" desc = "Some sort of pod filled with blood and vicerea. You swear you can see it moving..." icon = 'icons/obj/cloning.dmi' - icon_state = "pod_g" \ No newline at end of file + icon_state = "pod_g" + + +//Makes a tile fully lit no matter what +/obj/effect/fullbright + icon = 'icons/effects/alphacolors.dmi' + icon_state = "white" + plane = LIGHTING_PLANE + layer = LIGHTING_LAYER + blend_mode = BLEND_ADD + + +/obj/effect/dummy/lighting_obj + name = "lighting fx obj" + desc = "Tell a coder if you're seeing this." + icon_state = "nothing" + light_color = "#FFFFFF" + light_range = MINIMUM_USEFUL_LIGHT_RANGE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + +/obj/effect/dummy/lighting_obj/Initialize(mapload, _color, _range, _power, _duration) + . = ..() + set_light(_range ? _range : light_range, _power ? _power : light_power, _color ? _color : light_color) + if(_duration) + QDEL_IN(src, _duration) + +/obj/effect/dummy/lighting_obj/moblight + name = "mob lighting fx" + +/obj/effect/dummy/lighting_obj/moblight/Initialize(mapload, _color, _range, _power, _duration) + . = ..() + if(!ismob(loc)) + return INITIALIZE_HINT_QDEL \ No newline at end of file diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index f007aebfff1..1c24c444512 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -2,13 +2,16 @@ icon = 'icons/turf/space.dmi' name = "\proper space" icon_state = "0" - dynamic_lighting = 0 - luminosity = 1 temperature = TCMB thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT heat_capacity = HEAT_CAPACITY_VACUUM + plane = PLANE_SPACE + layer = SPACE_LAYER + light_power = 0.25 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + var/destination_z var/destination_x var/destination_y @@ -18,10 +21,16 @@ if(!istype(src, /turf/space/transit)) icon_state = SPACE_ICON_STATE - if(update_starlight() && is_station_level(z)) - // before you ask: Yes, this is fucking stupid, but looping through turf/space in world is how you make the server freeze - // so I don't see a better way of doing this - LAZYADD(GLOB.station_level_space_turfs, src) + +/turf/space/Initialize(mapload) + var/area/A = loc + if(!IS_DYNAMIC_LIGHTING(src) && IS_DYNAMIC_LIGHTING(A)) + add_overlay(/obj/effect/fullbright) + + if (light_power && light_range) + update_light() + + return INITIALIZE_HINT_NORMAL /turf/space/Destroy(force) if(force) @@ -29,7 +38,6 @@ else return QDEL_HINT_LETMELIVE - /turf/space/BeforeChange() ..() var/datum/space_level/S = space_manager.get_zlev(z) @@ -44,14 +52,14 @@ S.apply_transition(src) /turf/space/proc/update_starlight() - if(!config.starlight) - return FALSE - if(locate(/turf/simulated) in orange(src,1)) - set_light(config.starlight) - return TRUE - else + if(config.starlight) + for(var/t in RANGE_TURFS(1,src)) //RANGE_TURFS is in code\__HELPERS\game.dm + if(isspaceturf(t)) + //let's NOT update this that much pls + continue + set_light(config.starlight) + return set_light(0) - return FALSE /turf/space/attackby(obj/item/C as obj, mob/user as mob, params) ..() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 677357cf170..86f94ee37d2 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -41,6 +41,16 @@ if(smooth && ticker && ticker.current_state == GAME_STATE_PLAYING) queue_smooth(src) +/turf/Initialize(mapload) + . = ..() + + var/area/A = loc + if(!IS_DYNAMIC_LIGHTING(src) && IS_DYNAMIC_LIGHTING(A)) + add_overlay(/obj/effect/fullbright) + + if(light_power && light_range) + update_light() + /hook/startup/proc/smooth_world() var/watch = start_watch() log_startup_progress("Smoothing atoms...") @@ -177,7 +187,7 @@ var/old_opacity = opacity var/old_dynamic_lighting = dynamic_lighting var/old_affecting_lights = affecting_lights - var/old_lighting_overlay = lighting_overlay + var/old_lighting_object = lighting_object var/old_blueprint_data = blueprint_data var/old_obscured = obscured var/old_corners = corners @@ -196,18 +206,23 @@ recalc_atom_opacity() - if(lighting_overlays_initialised) - lighting_overlay = old_lighting_overlay + if(SSlighting.initialized) + recalc_atom_opacity() + lighting_object = old_lighting_object affecting_lights = old_affecting_lights corners = old_corners - if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting)) + if (old_opacity != opacity || dynamic_lighting != old_dynamic_lighting) reconsider_lights() - if(dynamic_lighting != old_dynamic_lighting) - if(dynamic_lighting) + + if (dynamic_lighting != old_dynamic_lighting) + if (IS_DYNAMIC_LIGHTING(src)) lighting_build_overlay() else lighting_clear_overlay() + for(var/turf/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm + S.update_starlight() + obscured = old_obscured return W diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index 03adaeda629..e6e8e610a4d 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -1,368 +1,368 @@ -/area/awaymission/upperlevel - name = "Open Space" - color = "#888" - dynamic_lighting = 0 - requires_power = 0 +// /area/awaymission/upperlevel +// name = "Open Space" +// color = "#888" +// dynamic_lighting = 0 +// requires_power = 0 -// Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is -/obj/effect/levelref - name = "level reference" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x2" - invisibility = 101 +// // Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is +// /obj/effect/levelref +// name = "level reference" +// icon = 'icons/mob/screen_gen.dmi' +// icon_state = "x2" +// invisibility = 101 - var/id = null - var/obj/effect/levelref/other = null - var/offset_x - var/offset_y - var/offset_z - var/global/list/levels[0] +// var/id = null +// var/obj/effect/levelref/other = null +// var/offset_x +// var/offset_y +// var/offset_z +// var/global/list/levels[0] -/obj/effect/levelref/New() - ..() - levels += src +// /obj/effect/levelref/New() +// ..() +// levels += src -/obj/effect/levelref/Initialize() - ..() - for(var/obj/effect/levelref/O in levels) - if(id == O.id && O != src) - other = O - update_offset() - O.other = src - O.update_offset() - for(var/turf/unsimulated/floor/upperlevel/U in get_area(loc)) - U.init(src) - return +// /obj/effect/levelref/Initialize() +// ..() +// for(var/obj/effect/levelref/O in levels) +// if(id == O.id && O != src) +// other = O +// update_offset() +// O.other = src +// O.update_offset() +// for(var/turf/unsimulated/floor/upperlevel/U in get_area(loc)) +// U.init(src) +// return -/obj/effect/levelref/Destroy() - levels -= src - return ..() +// /obj/effect/levelref/Destroy() +// levels -= src +// return ..() -/obj/effect/levelref/proc/update_offset() - offset_x = other.x - x - offset_y = other.y - y - offset_z = other.z - z +// /obj/effect/levelref/proc/update_offset() +// offset_x = other.x - x +// offset_y = other.y - y +// offset_z = other.z - z -// Used by /turf/unsimulated/floor/upperlevel and /obj/effect/view_portal/visual -// to know if the world changed on the remote side -/obj/effect/portal_sensor - invisibility = 101 - var/light_hash = -1 - var/triggered_this_tick = 0 - var/datum/owner // owner that receive signals - var/list/params[0] // what to send to the main object to indicate which sensor - var/trigger_limit = 5 // number of time we're allowed to trigger per ptick +// // Used by /turf/unsimulated/floor/upperlevel and /obj/effect/view_portal/visual +// // to know if the world changed on the remote side +// /obj/effect/portal_sensor +// invisibility = 101 +// var/light_hash = -1 +// var/triggered_this_tick = 0 +// var/datum/owner // owner that receive signals +// var/list/params[0] // what to send to the main object to indicate which sensor +// var/trigger_limit = 5 // number of time we're allowed to trigger per ptick -/obj/effect/portal_sensor/New(loc, o, ...) - ..() - owner = o - if(args.len >= 3) - params = args.Copy(3) - processing_objects += src - trigger() +// /obj/effect/portal_sensor/New(loc, o, ...) +// ..() +// owner = o +// if(args.len >= 3) +// params = args.Copy(3) +// processing_objects += src +// trigger() -/obj/effect/portal_sensor/Destroy() - processing_objects -= src - return ..() +// /obj/effect/portal_sensor/Destroy() +// processing_objects -= src +// return ..() -/obj/effect/portal_sensor/Crossed(A) - trigger() +// /obj/effect/portal_sensor/Crossed(A) +// trigger() -/obj/effect/portal_sensor/Uncrossed(A) - trigger() +// /obj/effect/portal_sensor/Uncrossed(A) +// trigger() -/obj/effect/portal_sensor/process() - check_light() - if(triggered_this_tick >= trigger_limit) - call(owner, "trigger")(arglist(params)) - triggered_this_tick = 0 +// /obj/effect/portal_sensor/process() +// check_light() +// if(triggered_this_tick >= trigger_limit) +// call(owner, "trigger")(arglist(params)) +// triggered_this_tick = 0 -/obj/effect/portal_sensor/proc/trigger() - triggered_this_tick++ - if(triggered_this_tick < trigger_limit) - call(owner, "trigger")(arglist(params)) +// /obj/effect/portal_sensor/proc/trigger() +// triggered_this_tick++ +// if(triggered_this_tick < trigger_limit) +// call(owner, "trigger")(arglist(params)) -/obj/effect/portal_sensor/proc/check_light() - var/turf/T = loc - if(istype(T) && T.lighting_overlay && !T.lighting_overlay.needs_update) - var/atom/movable/lighting_overlay/O = T.lighting_overlay - var/hash = O.lum_r + O.lum_g + O.lum_b - if(hash != light_hash) - light_hash = hash - trigger() - else - if(light_hash != -1) - light_hash = -1 - trigger() +// /obj/effect/portal_sensor/proc/check_light() +// var/turf/T = loc +// if(istype(T) && T.lighting_object && !T.lighting_object.needs_update) +// var/atom/movable/lighting_object/O = T.lighting_object +// var/hash = O.lum_r + O.lum_g + O.lum_b +// if(hash != light_hash) +// light_hash = hash +// trigger() +// else +// if(light_hash != -1) +// light_hash = -1 +// trigger() -// for second floor showing floor below -/turf/unsimulated/floor/upperlevel - icon = 'icons/turf/areas.dmi' - icon_state = "dark128" - layer = AREA_LAYER + 0.5 - appearance_flags = TILE_BOUND | KEEP_TOGETHER - var/turf/lower_turf - var/obj/effect/portal_sensor/sensor +// // for second floor showing floor below +// /turf/unsimulated/floor/upperlevel +// icon = 'icons/turf/areas.dmi' +// icon_state = "dark128" +// layer = AREA_LAYER + 0.5 +// appearance_flags = TILE_BOUND | KEEP_TOGETHER +// var/turf/lower_turf +// var/obj/effect/portal_sensor/sensor -/turf/unsimulated/floor/upperlevel/New() - ..() - var/obj/effect/levelref/R = locate() in get_area(src) - if(R && R.other) - init(R) +// /turf/unsimulated/floor/upperlevel/New() +// ..() +// var/obj/effect/levelref/R = locate() in get_area(src) +// if(R && R.other) +// init(R) -/turf/unsimulated/floor/upperlevel/Destroy() - QDEL_NULL(sensor) - return ..() +// /turf/unsimulated/floor/upperlevel/Destroy() +// QDEL_NULL(sensor) +// return ..() -/turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R) - lower_turf = locate(x + R.offset_x, y + R.offset_y, z + R.offset_z) - if(lower_turf) - sensor = new(lower_turf, src) +// /turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R) +// lower_turf = locate(x + R.offset_x, y + R.offset_y, z + R.offset_z) +// if(lower_turf) +// sensor = new(lower_turf, src) -/turf/unsimulated/floor/upperlevel/Entered(atom/movable/AM, atom/OL, ignoreRest = 0) - if(isliving(AM) || istype(AM, /obj)) - if(isliving(AM)) - var/mob/living/M = AM - M.emote("scream") - M.SpinAnimation(5, 1) - AM.forceMove(lower_turf) +// /turf/unsimulated/floor/upperlevel/Entered(atom/movable/AM, atom/OL, ignoreRest = 0) +// if(isliving(AM) || istype(AM, /obj)) +// if(isliving(AM)) +// var/mob/living/M = AM +// M.emote("scream") +// M.SpinAnimation(5, 1) +// AM.forceMove(lower_turf) -/turf/unsimulated/floor/upperlevel/attack_ghost(mob/user) - user.forceMove(lower_turf) +// /turf/unsimulated/floor/upperlevel/attack_ghost(mob/user) +// user.forceMove(lower_turf) -/turf/unsimulated/floor/upperlevel/proc/trigger() - name = lower_turf.name - desc = lower_turf.desc +// /turf/unsimulated/floor/upperlevel/proc/trigger() +// name = lower_turf.name +// desc = lower_turf.desc - // render each atom - underlays.Cut() - for(var/X in list(lower_turf) + lower_turf.contents) - var/atom/A = X - if(A && A.invisibility <= SEE_INVISIBLE_LIVING) - var/image/I = image(A, layer = AREA_LAYER + A.layer * 0.01, dir = A.dir) - I.pixel_x = A.pixel_x - I.pixel_y = A.pixel_y - underlays += I +// // render each atom +// underlays.Cut() +// for(var/X in list(lower_turf) + lower_turf.contents) +// var/atom/A = X +// if(A && A.invisibility <= SEE_INVISIBLE_LIVING) +// var/image/I = image(A, layer = AREA_LAYER + A.layer * 0.01, dir = A.dir) +// I.pixel_x = A.pixel_x +// I.pixel_y = A.pixel_y +// underlays += I -// remote end of narnia portal -/obj/effect/view_portal - name = "portal target" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x2" - invisibility = 101 - anchored = 1 +// // remote end of narnia portal +// /obj/effect/view_portal +// name = "portal target" +// icon = 'icons/mob/screen_gen.dmi' +// icon_state = "x2" +// invisibility = 101 +// anchored = 1 - var/id = null // id of other portal turf we connect to +// var/id = null // id of other portal turf we connect to - var/obj/effect/view_portal/other = null - var/global/list/portals[0] +// var/obj/effect/view_portal/other = null +// var/global/list/portals[0] -/obj/effect/view_portal/New() - ..() - GLOB.portals += src +// /obj/effect/view_portal/New() +// ..() +// GLOB.portals += src -/obj/effect/view_portal/Initialize() - ..() - if(id) - for(var/obj/effect/view_portal/O in GLOB.portals) - if(id == O.id && O != src && can_link(O)) - other = O - O.other = src - linkup() - O.linkup() - if(other) - return +// /obj/effect/view_portal/Initialize() +// ..() +// if(id) +// for(var/obj/effect/view_portal/O in GLOB.portals) +// if(id == O.id && O != src && can_link(O)) +// other = O +// O.other = src +// linkup() +// O.linkup() +// if(other) +// return -/obj/effect/view_portal/Destroy() - GLOB.portals -= src - return ..() +// /obj/effect/view_portal/Destroy() +// GLOB.portals -= src +// return ..() -/obj/effect/view_portal/proc/can_link(obj/effect/view_portal/P) - return P.type == /obj/effect/view_portal/visual && !P.other +// /obj/effect/view_portal/proc/can_link(obj/effect/view_portal/P) +// return P.type == /obj/effect/view_portal/visual && !P.other -/obj/effect/view_portal/proc/linkup() - // allow it to link to multiple visual nodes - other = null +// /obj/effect/view_portal/proc/linkup() +// // allow it to link to multiple visual nodes +// other = null -// near end of nania portal -/obj/effect/view_portal/visual - name = "???" - desc = "You'll have to get closer to clearly see what this is." +// // near end of nania portal +// /obj/effect/view_portal/visual +// name = "???" +// desc = "You'll have to get closer to clearly see what this is." - icon = 'icons/turf/floors.dmi' - icon_state = "loadingarea" - opacity = 1 - density = 1 - invisibility = 0 - appearance_flags = TILE_BOUND | KEEP_TOGETHER - var/dist = 6 // dist that we render out - var/radius = 3 // dist we render on other axis, in each direction - var/frustrum = 0 // if 1, get wider and wider at each step outward - var/teleport = 1 // should teleport? +// icon = 'icons/turf/floors.dmi' +// icon_state = "loadingarea" +// opacity = 1 +// density = 1 +// invisibility = 0 +// appearance_flags = TILE_BOUND | KEEP_TOGETHER +// var/dist = 6 // dist that we render out +// var/radius = 3 // dist we render on other axis, in each direction +// var/frustrum = 0 // if 1, get wider and wider at each step outward +// var/teleport = 1 // should teleport? - var/list/render_block - var/list/sensors[0] - var/list/tiles[0] +// var/list/render_block +// var/list/sensors[0] +// var/list/tiles[0] - var/list/near_render_block - var/turf/near_viewpoint +// var/list/near_render_block +// var/turf/near_viewpoint -/obj/effect/view_portal/visual/Destroy() - for(var/T in sensors) - qdel(sensors[T]) - sensors.Cut() - sensors = null - for(var/T in tiles) - qdel(tiles[T]) - tiles.Cut() - tiles = null - render_block = null - near_render_block = null - near_viewpoint = null - return ..() +// /obj/effect/view_portal/visual/Destroy() +// for(var/T in sensors) +// qdel(sensors[T]) +// sensors.Cut() +// sensors = null +// for(var/T in tiles) +// qdel(tiles[T]) +// tiles.Cut() +// tiles = null +// render_block = null +// near_render_block = null +// near_viewpoint = null +// return ..() -/obj/effect/view_portal/visual/can_link(obj/effect/view_portal/P) - return P.type == /obj/effect/view_portal +// /obj/effect/view_portal/visual/can_link(obj/effect/view_portal/P) +// return P.type == /obj/effect/view_portal -/obj/effect/view_portal/visual/linkup() - icon = null - icon_state = null - var/turf/Tloc = get_turf(loc) - if(Tloc) - Tloc.icon = null - Tloc.icon_state = null - Tloc.dynamic_lighting = 0 - layer = AREA_LAYER + 0.5 +// /obj/effect/view_portal/visual/linkup() +// icon = null +// icon_state = null +// var/turf/Tloc = get_turf(loc) +// if(Tloc) +// Tloc.icon = null +// Tloc.icon_state = null +// Tloc.dynamic_lighting = 0 +// layer = AREA_LAYER + 0.5 - // setup references - var/crossdir = angle2dir((dir2angle(dir) + 90) % 360) - near_viewpoint = get_step(get_turf(src), GetOppositeDir(dir)) +// // setup references +// var/crossdir = angle2dir((dir2angle(dir) + 90) % 360) +// near_viewpoint = get_step(get_turf(src), GetOppositeDir(dir)) - // setup far turfs - var/turf/T1 = get_turf(other) - var/turf/T2 = T1 +// // setup far turfs +// var/turf/T1 = get_turf(other) +// var/turf/T2 = T1 - for(var/i in 1 to radius) - T1 = get_step(T1, crossdir) - T2 = get_step(T2, GetOppositeDir(crossdir)) - if(frustrum) - // make a trapazoid, with length dist, short end radius*2 long, - // and 45 degree angles - render_block = block(T1, T2) - for(var/i in 1 to dist) - T1 = get_step(get_step(T1, dir), crossdir) - T2 = get_step(get_step(T2, dir), GetOppositeDir(crossdir)) - render_block += block(T1, T2) - else - // else make a box dist x radius*2 - for(var/i in 1 to dist) - T2 = get_step(T2, dir) - render_block = block(T1, T2) - for(var/turf/T in render_block) - sensors[T] = new /obj/effect/portal_sensor(T, src, 0, T) +// for(var/i in 1 to radius) +// T1 = get_step(T1, crossdir) +// T2 = get_step(T2, GetOppositeDir(crossdir)) +// if(frustrum) +// // make a trapazoid, with length dist, short end radius*2 long, +// // and 45 degree angles +// render_block = block(T1, T2) +// for(var/i in 1 to dist) +// T1 = get_step(get_step(T1, dir), crossdir) +// T2 = get_step(get_step(T2, dir), GetOppositeDir(crossdir)) +// render_block += block(T1, T2) +// else +// // else make a box dist x radius*2 +// for(var/i in 1 to dist) +// T2 = get_step(T2, dir) +// render_block = block(T1, T2) +// for(var/turf/T in render_block) +// sensors[T] = new /obj/effect/portal_sensor(T, src, 0, T) -// setup turfs on this side of the portal to cover the map streaming -// has to be done later for view() to be correct (so it happens when the walls exist) -/obj/effect/view_portal/visual/proc/setup_near() - var/nvs = dir & (EAST|WEST) ? near_viewpoint.x - x : near_viewpoint.y - y - if(nvs) - nvs = SIGN(nvs) - // need a mob for view() to work correctly - var/mob/M = new(near_viewpoint) - M.see_invisible = SEE_INVISIBLE_LIVING - near_render_block = view(M, world.view) - qdel(M) - for(var/A in near_render_block) - var/turf/T = A - if(istype(T)) - var/ts = dir & (EAST|WEST) ? T.x - x : T.y - y - if(ts) - ts = SIGN(ts) - if(nvs == ts) - sensors[T] = new /obj/effect/portal_sensor(T, src, 1, T) - else - near_render_block -= T - else - near_render_block -= T +// // setup turfs on this side of the portal to cover the map streaming +// // has to be done later for view() to be correct (so it happens when the walls exist) +// /obj/effect/view_portal/visual/proc/setup_near() +// var/nvs = dir & (EAST|WEST) ? near_viewpoint.x - x : near_viewpoint.y - y +// if(nvs) +// nvs = SIGN(nvs) +// // need a mob for view() to work correctly +// var/mob/M = new(near_viewpoint) +// M.see_invisible = SEE_INVISIBLE_LIVING +// near_render_block = view(M, world.view) +// qdel(M) +// for(var/A in near_render_block) +// var/turf/T = A +// if(istype(T)) +// var/ts = dir & (EAST|WEST) ? T.x - x : T.y - y +// if(ts) +// ts = SIGN(ts) +// if(nvs == ts) +// sensors[T] = new /obj/effect/portal_sensor(T, src, 1, T) +// else +// near_render_block -= T +// else +// near_render_block -= T -/obj/effect/view_portal/visual/Bumped(atom/movable/thing) - if((istype(thing, /obj) || isliving(thing)) && other && teleport) - if(!near_render_block) - setup_near() +// /obj/effect/view_portal/visual/Bumped(atom/movable/thing) +// if((istype(thing, /obj) || isliving(thing)) && other && teleport) +// if(!near_render_block) +// setup_near() - var/mob/living/M = thing - // make the person glide onto the dest, giving a smooth transition - var/ox = thing.x - x - var/oy = thing.y - y - if(istype(M) && M.client) - M.notransform = 1 - // cover up client-side map loading - M.screen_loc = "CENTER" - M.client.screen += M - for(var/T in tiles) - M.client.screen += tiles[T] +// var/mob/living/M = thing +// // make the person glide onto the dest, giving a smooth transition +// var/ox = thing.x - x +// var/oy = thing.y - y +// if(istype(M) && M.client) +// M.notransform = 1 +// // cover up client-side map loading +// M.screen_loc = "CENTER" +// M.client.screen += M +// for(var/T in tiles) +// M.client.screen += tiles[T] - // wait a tick for the screen to replicate across network - // or this whole exercise of covering the transition is pointless - spawn(1) - thing.forceMove(locate(other.x + ox, other.y + oy, other.z)) - sleep(1) - if(istype(M) && M.client) - for(var/T in tiles) - M.client.screen -= tiles[T] - M.client.screen -= M - M.screen_loc = initial(M.screen_loc) - thing.forceMove(get_turf(other.loc)) - if(istype(M) && M.client) - M.notransform = 0 +// // wait a tick for the screen to replicate across network +// // or this whole exercise of covering the transition is pointless +// spawn(1) +// thing.forceMove(locate(other.x + ox, other.y + oy, other.z)) +// sleep(1) +// if(istype(M) && M.client) +// for(var/T in tiles) +// M.client.screen -= tiles[T] +// M.client.screen -= M +// M.screen_loc = initial(M.screen_loc) +// thing.forceMove(get_turf(other.loc)) +// if(istype(M) && M.client) +// M.notransform = 0 -/obj/effect/view_portal/visual/attack_ghost(mob/user) - user.forceMove(get_turf(other.loc)) +// /obj/effect/view_portal/visual/attack_ghost(mob/user) +// user.forceMove(get_turf(other.loc)) -/obj/effect/view_portal/visual/proc/trigger(near, turf/T) - var/obj/effect/view_portal_dummy/D = tiles[T] - if(D) - D.overlays.Cut() - else - D = new(src, near, T) - tiles[T] = D +// /obj/effect/view_portal/visual/proc/trigger(near, turf/T) +// var/obj/effect/view_portal_dummy/D = tiles[T] +// if(D) +// D.overlays.Cut() +// else +// D = new(src, near, T) +// tiles[T] = D - // render atoms to overlays of a dummy object - if(D.name != T.name) - D.name = T.name - D.desc = T.desc - for(var/AX in list(T) + T.contents) - var/atom/A = AX - if(A && A.invisibility <= SEE_INVISIBLE_LIVING) - var/image/I = image(A, layer = D.layer + A.layer * 0.01, dir = A.dir) - I.pixel_x = A.pixel_x - I.pixel_y = A.pixel_y - D.overlays += I +// // render atoms to overlays of a dummy object +// if(D.name != T.name) +// D.name = T.name +// D.desc = T.desc +// for(var/AX in list(T) + T.contents) +// var/atom/A = AX +// if(A && A.invisibility <= SEE_INVISIBLE_LIVING) +// var/image/I = image(A, layer = D.layer + A.layer * 0.01, dir = A.dir) +// I.pixel_x = A.pixel_x +// I.pixel_y = A.pixel_y +// D.overlays += I -// tile of rendered other side for narnia portal -/obj/effect/view_portal_dummy - var/obj/effect/view_portal/visual/owner +// // tile of rendered other side for narnia portal +// /obj/effect/view_portal_dummy +// var/obj/effect/view_portal/visual/owner -/obj/effect/view_portal_dummy/New(obj/effect/view_portal/visual/V, near, turf/T) - ..() - if(!near) - loc = V.loc - owner = V +// /obj/effect/view_portal_dummy/New(obj/effect/view_portal/visual/V, near, turf/T) +// ..() +// if(!near) +// loc = V.loc +// owner = V - var/ox - var/oy - if(near) - ox = (T.x - V.near_viewpoint.x) - oy = (T.y - V.near_viewpoint.y) - layer = AREA_LAYER + 0.4 - else - ox = T.x - V.other.x + V.x - V.near_viewpoint.x - oy = T.y - V.other.y + V.y - V.near_viewpoint.y - pixel_x = 32 * (T.x - V.other.x) - pixel_y = 32 * (T.y - V.other.y) - layer = AREA_LAYER + 0.5 - if(abs(ox) <= world.view && abs(oy) <= world.view) - screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]" +// var/ox +// var/oy +// if(near) +// ox = (T.x - V.near_viewpoint.x) +// oy = (T.y - V.near_viewpoint.y) +// layer = AREA_LAYER + 0.4 +// else +// ox = T.x - V.other.x + V.x - V.near_viewpoint.x +// oy = T.y - V.other.y + V.y - V.near_viewpoint.y +// pixel_x = 32 * (T.x - V.other.x) +// pixel_y = 32 * (T.y - V.other.y) +// layer = AREA_LAYER + 0.5 +// if(abs(ox) <= world.view && abs(oy) <= world.view) +// screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]" -/obj/effect/view_portal_dummy/attack_ghost(mob/user) - owner.attack_ghost(user) +// /obj/effect/view_portal_dummy/attack_ghost(mob/user) +// owner.attack_ghost(user) diff --git a/code/modules/lighting/__lighting_docs.dm b/code/modules/lighting/__lighting_docs.dm index 8ef93935e9c..18041989910 100644 --- a/code/modules/lighting/__lighting_docs.dm +++ b/code/modules/lighting/__lighting_docs.dm @@ -54,7 +54,7 @@ turf: (lighting_turf.dm) - Create lighting overlays for this turf -atom/movable/lighting_overlay: (lighting_overlay.dm) +atom/movable/lighting_object: (lighting_object.dm) - var/lum_r, var/lum_g, var/lum_b; lumcounts of each colour - var/needs_update; set on update_lumcount, checked by lighting process diff --git a/code/modules/lighting/lighting_area.dm b/code/modules/lighting/lighting_area.dm index 92923e6b0d5..58e9a4337a5 100644 --- a/code/modules/lighting/lighting_area.dm +++ b/code/modules/lighting/lighting_area.dm @@ -1,9 +1,30 @@ /area luminosity = TRUE - var/dynamic_lighting = TRUE + var/dynamic_lighting = DYNAMIC_LIGHTING_ENABLED -/area/New() - . = ..() +/area/proc/set_dynamic_lighting(var/new_dynamic_lighting = DYNAMIC_LIGHTING_ENABLED) + if (new_dynamic_lighting == dynamic_lighting) + return FALSE - if(dynamic_lighting) - luminosity = FALSE \ No newline at end of file + dynamic_lighting = new_dynamic_lighting + + if (IS_DYNAMIC_LIGHTING(src)) + cut_overlay(/obj/effect/fullbright) + for (var/turf/T in src) + if (IS_DYNAMIC_LIGHTING(T)) + T.lighting_build_overlay() + + else + add_overlay(/obj/effect/fullbright) + for (var/turf/T in src) + if (T.lighting_object) + T.lighting_clear_overlay() + + return TRUE + +/area/vv_edit_var(var_name, var_value) + switch(var_name) + if("dynamic_lighting") + set_dynamic_lighting(var_value) + return TRUE + return ..() \ No newline at end of file diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 646fe0ba15d..85c857ab804 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -1,101 +1,134 @@ + /atom - var/light_power = 1 // intensity of the light - var/light_range = 0 // range in tiles of the light - var/light_color // Hexadecimal RGB string representing the colour of the light + var/light_power = 1 // Intensity of the light. + var/light_range = 0 // Range in tiles of the light. + var/light_color // Hexadecimal RGB string representing the colour of the light. - var/datum/light_source/light - var/list/light_sources + var/tmp/datum/light_source/light // Our light source. Don't fuck with this directly unless you have a good reason! + var/tmp/list/light_sources // Any light sources that are "inside" of us, for example, if src here was a mob that's carrying a flashlight, that flashlight's light source would be part of this list. -// Nonsensical value for l_color default, so we can detect if it gets set to null. +// The proc you should always use to set the light of this atom. +// Nonesensical value for l_color default, so we can detect if it gets set to null. #define NONSENSICAL_VALUE -99999 -/atom/proc/set_light(l_range, l_power, l_color = NONSENSICAL_VALUE) - if(l_power != null) +/atom/proc/set_light(var/l_range, var/l_power, var/l_color = NONSENSICAL_VALUE) + if(l_range > 0 && l_range < MINIMUM_USEFUL_LIGHT_RANGE) + l_range = MINIMUM_USEFUL_LIGHT_RANGE //Brings the range up to 1.4, which is just barely brighter than the soft lighting that surrounds players. + if (l_power != null) light_power = l_power - if(l_range != null) + if (l_range != null) light_range = l_range - if(l_color != NONSENSICAL_VALUE) + if (l_color != NONSENSICAL_VALUE) light_color = l_color + SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT, l_range, l_power, l_color) + update_light() #undef NONSENSICAL_VALUE +// Will update the light (duh). +// Creates or destroys it if needed, makes it update values, makes sure it's got the correct source turf... /atom/proc/update_light() set waitfor = FALSE + if (QDELETED(src)) + return - if(!light_power || !light_range) - if(light) - light.destroy() - light = null + if (!light_power || !light_range) // We won't emit light anyways, destroy the light source. + QDEL_NULL(light) else - if(!istype(loc, /atom/movable)) + if (!ismovableatom(loc)) // We choose what atom should be the top atom of the light here. . = src else . = loc - if(light) + if (light) // Update the light or create it if it does not exist. light.update(.) else - light = new /datum/light_source(src, .) + light = new/datum/light_source(src, .) /atom/proc/extinguish_light() return -/atom/Destroy() - if(light) - light.destroy() - light = null - return ..() - +// If we have opacity, make sure to tell (potentially) affected light sources. /atom/movable/Destroy() var/turf/T = loc - if(opacity && istype(T)) - T.reconsider_lights() - return ..() - -/atom/movable/Move() - var/turf/old_loc = loc . = ..() + if (opacity && istype(T)) + var/old_has_opaque_atom = T.has_opaque_atom + T.recalc_atom_opacity() + if (old_has_opaque_atom != T.has_opaque_atom) + T.reconsider_lights() - if(loc != old_loc) - for(var/datum/light_source/L in light_sources) - L.source_atom.update_light() - - var/turf/new_loc = loc - if(istype(old_loc) && opacity) - old_loc.reconsider_lights() - - if(istype(new_loc) && opacity) - new_loc.reconsider_lights() - -/atom/proc/set_opacity(new_opacity) - if(new_opacity == opacity) +// Should always be used to change the opacity of an atom. +// It notifies (potentially) affected light sources so they can update (if needed). +/atom/proc/set_opacity(var/new_opacity) + if (new_opacity == opacity) return opacity = new_opacity var/turf/T = loc - if(!isturf(T)) + if (!isturf(T)) return - if(new_opacity == TRUE) + if (new_opacity == TRUE) T.has_opaque_atom = TRUE T.reconsider_lights() else var/old_has_opaque_atom = T.has_opaque_atom T.recalc_atom_opacity() - if(old_has_opaque_atom != T.has_opaque_atom) + if (old_has_opaque_atom != T.has_opaque_atom) T.reconsider_lights() -/obj/item/equipped() - . = ..() - update_light() -/obj/item/pickup() +/atom/movable/Moved(atom/OldLoc, Dir) . = ..() - update_light() + var/datum/light_source/L + var/thing + for (thing in light_sources) // Cycle through the light sources on this atom and tell them to update. + L = thing + L.source_atom.update_light() -/obj/item/dropped() - . = ..() - update_light() +/atom/vv_edit_var(var_name, var_value) + switch (var_name) + if ("light_range") + set_light(l_range=var_value) + return TRUE + + if ("light_power") + set_light(l_power=var_value) + return TRUE + + if ("light_color") + set_light(l_color=var_value) + return TRUE + + return ..() + + +/atom/proc/flash_lighting_fx(_range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = LIGHT_COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _reset_lighting = TRUE) + return + +/turf/flash_lighting_fx(_range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = LIGHT_COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _reset_lighting = TRUE) + if(!_duration) + stack_trace("Lighting FX obj created on a turf without a duration") + new /obj/effect/dummy/lighting_obj (src, _color, _range, _power, _duration) + +/obj/flash_lighting_fx(_range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = LIGHT_COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _reset_lighting = TRUE) + var/temp_color + var/temp_power + var/temp_range + if(!_reset_lighting) //incase the obj already has a lighting color that you don't want cleared out after, ie computer monitors. + temp_color = light_color + temp_power = light_power + temp_range = light_range + set_light(_range, _power, _color) + addtimer(CALLBACK(src, /atom/proc/set_light, _reset_lighting ? initial(light_range) : temp_range, _reset_lighting ? initial(light_power) : temp_power, _reset_lighting ? initial(light_color) : temp_color), _duration, TIMER_OVERRIDE|TIMER_UNIQUE) + +/mob/living/flash_lighting_fx(_range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = LIGHT_COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _reset_lighting = TRUE) + mob_light(_color, _range, _power, _duration) + +/mob/living/proc/mob_light(_color, _range, _power, _duration) + var/obj/effect/dummy/lighting_obj/moblight/mob_light_obj = new (src, _color, _range, _power, _duration) + return mob_light_obj diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm index 907e7aab8b5..0c0f8d1b995 100644 --- a/code/modules/lighting/lighting_corner.dm +++ b/code/modules/lighting/lighting_corner.dm @@ -1,15 +1,13 @@ -/var/total_lighting_corners = 0 -/var/datum/lighting_corner/dummy/dummy_lighting_corner = new -// Because we can control each corner of every lighting overlay. +// Because we can control each corner of every lighting object. // And corners get shared between multiple turfs (unless you're on the corners of the map, then 1 corner doesn't). // For the record: these should never ever ever be deleted, even if the turf doesn't have dynamic lighting. // This list is what the code that assigns corners listens to, the order in this list is the order in which corners are added to the /turf/corners list. -/var/list/LIGHTING_CORNER_DIAGONAL = list(NORTHEAST, SOUTHEAST, SOUTHWEST, NORTHWEST) +GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, NORTHWEST)) /datum/lighting_corner - var/list/turf/masters = list() - var/list/datum/light_source/affecting = list() // Light sources affecting us. + var/list/turf/masters + var/list/datum/light_source/affecting // Light sources affecting us. var/active = FALSE // TRUE if one of our masters has dynamic lighting. var/x = 0 @@ -27,13 +25,9 @@ var/cache_b = LIGHTING_SOFT_THRESHOLD var/cache_mx = 0 - var/update_gen = 0 - /datum/lighting_corner/New(var/turf/new_turf, var/diagonal) . = ..() - - total_lighting_corners++ - + masters = list() masters[new_turf] = turn(diagonal, 180) z = new_turf.z @@ -56,7 +50,7 @@ T.corners = list(null, null, null, null) masters[T] = diagonal - i = LIGHTING_CORNER_DIAGONAL.Find(turn(diagonal, 180)) + i = GLOB.LIGHTING_CORNER_DIAGONAL.Find(turn(diagonal, 180)) T.corners[i] = src // Now the horizontal one. @@ -66,7 +60,7 @@ T.corners = list(null, null, null, null) masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. - i = LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) + i = GLOB.LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) T.corners[i] = src // And finally the vertical one. @@ -76,50 +70,74 @@ T.corners = list(null, null, null, null) masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. - i = LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) + i = GLOB.LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) T.corners[i] = src update_active() /datum/lighting_corner/proc/update_active() active = FALSE - for (var/turf/T in masters) - if (T.lighting_overlay) + var/turf/T + var/thing + for (thing in masters) + T = thing + if (T.lighting_object) active = TRUE // God that was a mess, now to do the rest of the corner code! Hooray! /datum/lighting_corner/proc/update_lumcount(var/delta_r, var/delta_g, var/delta_b) + + if ((abs(delta_r)+abs(delta_g)+abs(delta_b)) == 0) + return + lum_r += delta_r lum_g += delta_g lum_b += delta_b if (!needs_update) needs_update = TRUE - lighting_update_corners += src + GLOB.lighting_update_corners += src -/datum/lighting_corner/proc/update_overlays() - - // Cache these values a head of time so 4 individual lighting overlays don't all calculate them individually. - var/mx = max(lum_r, lum_g, lum_b) // Scale it so 1 is the strongest lum, if it is above 1. +/datum/lighting_corner/proc/update_objects() + // Cache these values a head of time so 4 individual lighting objects don't all calculate them individually. + var/lum_r = src.lum_r + var/lum_g = src.lum_g + var/lum_b = src.lum_b + var/mx = max(lum_r, lum_g, lum_b) // Scale it so one of them is the strongest lum, if it is above 1. . = 1 // factor if (mx > 1) . = 1 / mx + #if LIGHTING_SOFT_THRESHOLD != 0 else if (mx < LIGHTING_SOFT_THRESHOLD) . = 0 // 0 means soft lighting. - cache_r = lum_r * . || LIGHTING_SOFT_THRESHOLD - cache_g = lum_g * . || LIGHTING_SOFT_THRESHOLD - cache_b = lum_b * . || LIGHTING_SOFT_THRESHOLD - cache_mx = mx + cache_r = round(lum_r * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD + cache_g = round(lum_g * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD + cache_b = round(lum_b * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD + #else + cache_r = round(lum_r * ., LIGHTING_ROUND_VALUE) + cache_g = round(lum_g * ., LIGHTING_ROUND_VALUE) + cache_b = round(lum_b * ., LIGHTING_ROUND_VALUE) + #endif + cache_mx = round(mx, LIGHTING_ROUND_VALUE) for (var/TT in masters) var/turf/T = TT - if (T.lighting_overlay) - if (!T.lighting_overlay.needs_update) - T.lighting_overlay.needs_update = TRUE - lighting_update_overlays += T.lighting_overlay + if (T.lighting_object) + if (!T.lighting_object.needs_update) + T.lighting_object.needs_update = TRUE + GLOB.lighting_update_objects += T.lighting_object /datum/lighting_corner/dummy/New() return + + +/datum/lighting_corner/Destroy(var/force) + if (!force) + return QDEL_HINT_LETMELIVE + + stack_trace("Ok, Look, /tg/, I need you to find whatever fucker decided to call qdel on a fucking lighting corner, then tell him very nicely and politely that he is 100% retarded and needs his head checked. Thanks. Send them my regards by the way.") + + return ..() \ No newline at end of file diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm new file mode 100644 index 00000000000..6083c7af7f1 --- /dev/null +++ b/code/modules/lighting/lighting_object.dm @@ -0,0 +1,144 @@ +/atom/movable/lighting_object + name = "" + + anchored = TRUE + + icon = LIGHTING_ICON + icon_state = "transparent" + color = LIGHTING_BASE_MATRIX + plane = LIGHTING_PLANE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + layer = LIGHTING_LAYER + invisibility = INVISIBILITY_LIGHTING + + var/needs_update = FALSE + var/turf/myturf + +/atom/movable/lighting_object/Initialize(mapload) + . = ..() + verbs.Cut() + + myturf = loc + if (myturf.lighting_object) + qdel(myturf.lighting_object, force = TRUE) + myturf.lighting_object = src + myturf.luminosity = 0 + + for(var/turf/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm + S.update_starlight() + + needs_update = TRUE + GLOB.lighting_update_objects += src + +/atom/movable/lighting_object/Destroy(var/force) + if (force) + GLOB.lighting_update_objects -= src + if (loc != myturf) + var/turf/oldturf = get_turf(myturf) + var/turf/newturf = get_turf(loc) + stack_trace("A lighting object was qdeleted with a different loc then it is suppose to have ([COORD(oldturf)] -> [COORD(newturf)])") + if (isturf(myturf)) + myturf.lighting_object = null + myturf.luminosity = 1 + myturf = null + + return ..() + + else + return QDEL_HINT_LETMELIVE + +/atom/movable/lighting_object/proc/update() + if (loc != myturf) + if (loc) + var/turf/oldturf = get_turf(myturf) + var/turf/newturf = get_turf(loc) + warning("A lighting object realised it's loc had changed in update() ([myturf]\[[myturf ? myturf.type : "null"]]([COORD(oldturf)]) -> [loc]\[[ loc ? loc.type : "null"]]([COORD(newturf)]))!") + + qdel(src, TRUE) + return + + // To the future coder who sees this and thinks + // "Why didn't he just use a loop?" + // Well my man, it's because the loop performed like shit. + // And there's no way to improve it because + // without a loop you can make the list all at once which is the fastest you're gonna get. + // Oh it's also shorter line wise. + // Including with these comments. + + // See LIGHTING_CORNER_DIAGONAL in lighting_corner.dm for why these values are what they are. + var/static/datum/lighting_corner/dummy/dummy_lighting_corner = new + + var/list/corners = myturf.corners + var/datum/lighting_corner/cr = dummy_lighting_corner + var/datum/lighting_corner/cg = dummy_lighting_corner + var/datum/lighting_corner/cb = dummy_lighting_corner + var/datum/lighting_corner/ca = dummy_lighting_corner + if (corners) //done this way for speed + cr = corners[3] || dummy_lighting_corner + cg = corners[2] || dummy_lighting_corner + cb = corners[4] || dummy_lighting_corner + ca = corners[1] || dummy_lighting_corner + + var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx) + + var/rr = cr.cache_r + var/rg = cr.cache_g + var/rb = cr.cache_b + + var/gr = cg.cache_r + var/gg = cg.cache_g + var/gb = cg.cache_b + + var/br = cb.cache_r + var/bg = cb.cache_g + var/bb = cb.cache_b + + var/ar = ca.cache_r + var/ag = ca.cache_g + var/ab = ca.cache_b + + #if LIGHTING_SOFT_THRESHOLD != 0 + var/set_luminosity = max > LIGHTING_SOFT_THRESHOLD + #else + // Because of floating pointsâ„¢?, it won't even be a flat 0. + // This number is mostly arbitrary. + var/set_luminosity = max > 1e-6 + #endif + + if((rr & gr & br & ar) && (rg + gg + bg + ag + rb + gb + bb + ab == 8)) + //anything that passes the first case is very likely to pass the second, and addition is a little faster in this case + icon_state = "transparent" + color = null + else if(!set_luminosity) + icon_state = "dark" + color = null + else + icon_state = null + color = list( + rr, rg, rb, 00, + gr, gg, gb, 00, + br, bg, bb, 00, + ar, ag, ab, 00, + 00, 00, 00, 01 + ) + + luminosity = set_luminosity + +// Variety of overrides so the overlays don't get affected by weird things. + +/atom/movable/lighting_object/ex_act(severity) + return 0 + +/atom/movable/lighting_object/singularity_act() + return + +/atom/movable/lighting_object/singularity_pull() + return + +/atom/movable/lighting_object/blob_act() + return + +// Override here to prevent things accidentally moving around overlays. +/atom/movable/lighting_object/forceMove(atom/destination, var/no_tp=FALSE, var/harderforce = FALSE) + if(harderforce) + . = ..() \ No newline at end of file diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm deleted file mode 100644 index a8f87338ae8..00000000000 --- a/code/modules/lighting/lighting_overlay.dm +++ /dev/null @@ -1,89 +0,0 @@ -/var/total_lighting_overlays = 0 -/atom/movable/lighting_overlay - name = "" - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - simulated = 0 - anchored = 1 - icon = LIGHTING_ICON - layer = LIGHTING_LAYER - plane = LIGHTING_PLANE - invisibility = INVISIBILITY_LIGHTING - color = LIGHTING_BASE_MATRIX - icon_state = "light1" - blend_mode = BLEND_MULTIPLY - - var/lum_r = 0 - var/lum_g = 0 - var/lum_b = 0 - - var/needs_update = FALSE - -/atom/movable/lighting_overlay/New(var/atom/loc, var/no_update = FALSE) - . = ..() - verbs.Cut() - total_lighting_overlays++ - - var/turf/T = loc //If this runtimes atleast we'll know what's creating overlays outside of turfs. - T.lighting_overlay = src - T.luminosity = 0 - if(no_update) - return - update_overlay() - -/atom/movable/lighting_overlay/proc/update_overlay() - set waitfor = FALSE - var/turf/T = loc - - if(!istype(T)) - if(loc) - log_debug("A lighting overlay realised its loc was NOT a turf (actual loc: [loc][loc ? ", " + loc.type : "null"]) in update_overlay() and got qdel'ed!") - else - log_debug("A lighting overlay realised it was in nullspace in update_overlay() and got pooled!") - qdel(src) - return - - // To the future coder who sees this and thinks - // "Why didn't he just use a loop?" - // Well my man, it's because the loop performed like shit. - // And there's no way to improve it because - // without a loop you can make the list all at once which is the fastest you're gonna get. - // Oh it's also shorter line wise. - // Including with these comments. - - // See LIGHTING_CORNER_DIAGONAL in lighting_corner.dm for why these values are what they are. - // No I seriously cannot think of a more efficient method, fuck off Comic. - var/datum/lighting_corner/cr = T.corners[3] || dummy_lighting_corner - var/datum/lighting_corner/cg = T.corners[2] || dummy_lighting_corner - var/datum/lighting_corner/cb = T.corners[4] || dummy_lighting_corner - var/datum/lighting_corner/ca = T.corners[1] || dummy_lighting_corner - - var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx) - - color = list( - cr.cache_r, cr.cache_g, cr.cache_b, 0, - cg.cache_r, cg.cache_g, cg.cache_b, 0, - cb.cache_r, cb.cache_g, cb.cache_b, 0, - ca.cache_r, ca.cache_g, ca.cache_b, 0, - 0, 0, 0, 1 - ) - luminosity = max > LIGHTING_SOFT_THRESHOLD - - - -/atom/movable/lighting_overlay/singularity_act() - return - -/atom/movable/lighting_overlay/singularity_pull() - return - -/atom/movable/lighting_overlay/Destroy() - total_lighting_overlays-- - global.lighting_update_overlays -= src - global.lighting_update_overlays_old -= src - - var/turf/T = loc - if(istype(T)) - T.lighting_overlay = null - T.luminosity = 1 - - return ..() diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index 981de658649..6c1dab13ec6 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -1,16 +1,13 @@ -/proc/create_all_lighting_overlays() - for(var/zlevel = 1 to world.maxz) - create_lighting_overlays_zlevel(zlevel) - -/proc/create_lighting_overlays_zlevel(var/zlevel) - ASSERT(zlevel) - - for(var/turf/T in block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel))) - if(!T.dynamic_lighting) +/proc/create_all_lighting_objects() + for(var/area/A in world) + if(!IS_DYNAMIC_LIGHTING(A)) continue - var/area/A = T.loc - if(!A.dynamic_lighting) - continue + for(var/turf/T in A) - new /atom/movable/lighting_overlay(T, TRUE) + if(!IS_DYNAMIC_LIGHTING(T)) + continue + + new/atom/movable/lighting_object(T) + CHECK_TICK + CHECK_TICK \ No newline at end of file diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index d878d8c4b6e..b6dbd778371 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -1,12 +1,12 @@ -/var/total_lighting_sources = 0 // This is where the fun begins. // These are the main datums that emit light. /datum/light_source - var/atom/top_atom // The atom we're emitting light from(for example a mob if we're from a flashlight that's being held). + var/atom/top_atom // The atom we're emitting light from (for example a mob if we're from a flashlight that's being held). var/atom/source_atom // The atom that we belong to. var/turf/source_turf // The turf under the above. + var/turf/pixel_turf // The turf the top_atom appears to over. var/light_power // Intensity of the emitter light. var/light_range // The range of the emitted light. var/light_color // The colour of the light, string, decomposed by parse_light_color() @@ -26,133 +26,80 @@ var/applied = FALSE // Whether we have applied our light yet or not. - var/vis_update // Whether we should smartly recalculate visibility. and then only update tiles that became(in)visible to us. - var/needs_update // Whether we are queued for an update. - var/destroyed // Whether we are destroyed and need to stop emitting light. - var/force_update + var/needs_update = LIGHTING_NO_UPDATE // Whether we are queued for an update. + /datum/light_source/New(var/atom/owner, var/atom/top) - total_lighting_sources++ source_atom = owner // Set our new owner. - if(!source_atom.light_sources) - source_atom.light_sources = list() - - source_atom.light_sources += src // Add us to the lights of our owner. + LAZYADD(source_atom.light_sources, src) top_atom = top - if(top_atom != source_atom) - if(!top.light_sources) - top.light_sources = list() - - top_atom.light_sources += src + if (top_atom != source_atom) + LAZYADD(top_atom.light_sources, src) source_turf = top_atom + pixel_turf = get_turf_pixel(top_atom) || source_turf + light_power = source_atom.light_power light_range = source_atom.light_range light_color = source_atom.light_color parse_light_color() - effect_str = list() - affecting_turfs = list() - update() - return ..() -// Kill ourselves. -/datum/light_source/proc/destroy() - total_lighting_sources-- - destroyed = TRUE - force_update() - if(source_atom) - if(!source_atom.light_sources) - log_runtime(EXCEPTION("Atom [source_atom] was a light source, but lacked a light source list!\n"), source_atom) - else - source_atom.light_sources -= src +/datum/light_source/Destroy(force) + remove_lum() + if (source_atom) + LAZYREMOVE(source_atom.light_sources, src) - if(top_atom) - top_atom.light_sources -= src + if (top_atom) + LAZYREMOVE(top_atom.light_sources, src) + + if (needs_update) + GLOB.lighting_update_lights -= src + + . = ..() + +// Yes this doesn't align correctly on anything other than 4 width tabs. +// If you want it to go switch everybody to elastic tab stops. +// Actually that'd be great if you could! +#define EFFECT_UPDATE(level) \ + if (needs_update == LIGHTING_NO_UPDATE) \ + GLOB.lighting_update_lights += src; \ + if (needs_update < level) \ + needs_update = level; \ -// Call it dirty, I don't care. -// This is here so there's no performance loss on non-instant updates from the fact that the engine can also do instant updates. -// If you're wondering what's with the "BYOND" argument: BYOND won't let me have a() macro that has no arguments :|. -#define effect_update(BYOND) \ - if(!needs_update) \ - { \ - lighting_update_lights += src; \ - needs_update = TRUE; \ - } // This proc will cause the light source to update the top atom, and add itself to the update queue. /datum/light_source/proc/update(var/atom/new_top_atom) // This top atom is different. - if(new_top_atom && new_top_atom != top_atom) - if(top_atom != source_atom) // Remove ourselves from the light sources of that top atom. - top_atom.light_sources -= src + if (new_top_atom && new_top_atom != top_atom) + if(top_atom != source_atom && top_atom.light_sources) // Remove ourselves from the light sources of that top atom. + LAZYREMOVE(top_atom.light_sources, src) top_atom = new_top_atom - if(top_atom != source_atom) - if(!top_atom.light_sources) - top_atom.light_sources = list() + if (top_atom != source_atom) + LAZYADD(top_atom.light_sources, src) // Add ourselves to the light sources of our new top atom. - top_atom.light_sources += src // Add ourselves to the light sources of our new top atom. - - effect_update(null) + EFFECT_UPDATE(LIGHTING_CHECK_UPDATE) // Will force an update without checking if it's actually needed. /datum/light_source/proc/force_update() - force_update = 1 - - effect_update(null) + EFFECT_UPDATE(LIGHTING_FORCE_UPDATE) // Will cause the light source to recalculate turfs that were removed or added to visibility only. /datum/light_source/proc/vis_update() - vis_update = 1 - - effect_update(null) - -// Will check if we actually need to update, and update any variables that may need to be updated. -/datum/light_source/proc/check() - if(!source_atom || !light_range || !light_power) - destroy() - return 1 - - if(!top_atom) - top_atom = source_atom - . = 1 - - if(isturf(top_atom)) - if(source_turf != top_atom) - source_turf = top_atom - . = 1 - else if(top_atom.loc != source_turf) - source_turf = top_atom.loc - . = 1 - - if(source_atom.light_power != light_power) - light_power = source_atom.light_power - . = 1 - - if(source_atom.light_range != light_range) - light_range = source_atom.light_range - . = 1 - - if(light_range && light_power && !applied) - . = 1 - - if(source_atom.light_color != light_color) - light_color = source_atom.light_color - parse_light_color() - . = 1 + EFFECT_UPDATE(LIGHTING_VIS_UPDATE) // Decompile the hexadecimal colour into lumcounts of each perspective. /datum/light_source/proc/parse_light_color() - if(light_color) - lum_r = GetRedPart (light_color) / 255 - lum_g = GetGreenPart(light_color) / 255 - lum_b = GetBluePart (light_color) / 255 + if (light_color) + lum_r = GetRedPart (light_color) / 255 + lum_g = GetGreenPart (light_color) / 255 + lum_b = GetBluePart (light_color) / 255 else lum_r = 1 lum_g = 1 @@ -163,128 +110,189 @@ // If you're wondering what's with the backslashes, the backslashes cause BYOND to not automatically end the line. // As such this all gets counted as a single line. // The braces and semicolons are there to be able to do this on a single line. +#define LUM_FALLOFF(C, T) (1 - CLAMP01(sqrt((C.x - T.x) ** 2 + (C.y - T.y) ** 2 + LIGHTING_HEIGHT) / max(1, light_range))) -#define APPLY_CORNER(C) \ - . = LUM_FALLOFF(C, source_turf); \ - \ - . *= light_power; \ - \ - effect_str[C] = .; \ - \ - C.update_lumcount \ - ( \ - . * applied_lum_r, \ - . * applied_lum_g, \ - . * applied_lum_b \ +#define APPLY_CORNER(C) \ + . = LUM_FALLOFF(C, pixel_turf); \ + . *= light_power; \ + var/OLD = effect_str[C]; \ + effect_str[C] = .; \ + \ + C.update_lumcount \ + ( \ + (. * lum_r) - (OLD * applied_lum_r), \ + (. * lum_g) - (OLD * applied_lum_g), \ + (. * lum_b) - (OLD * applied_lum_b) \ ); -// I don't need to explain what this does, do I? -#define REMOVE_CORNER(C) \ - . = -effect_str[C]; \ - C.update_lumcount \ - ( \ - . * applied_lum_r, \ - . * applied_lum_g, \ - . * applied_lum_b \ +#define REMOVE_CORNER(C) \ + . = -effect_str[C]; \ + C.update_lumcount \ + ( \ + . * applied_lum_r, \ + . * applied_lum_g, \ + . * applied_lum_b \ ); // This is the define used to calculate falloff. -#define LUM_FALLOFF(C, T)(1 - CLAMP01(sqrt((C.x - T.x) ** 2 +(C.y - T.y) ** 2 + LIGHTING_HEIGHT) / max(1, light_range))) -/datum/light_source/proc/apply_lum() - var/static/update_gen = 1 - applied = 1 +/datum/light_source/proc/remove_lum() + applied = FALSE + var/thing + for (thing in affecting_turfs) + var/turf/T = thing + LAZYREMOVE(T.affecting_lights, src) + + affecting_turfs = null + + var/datum/lighting_corner/C + for (thing in effect_str) + C = thing + REMOVE_CORNER(C) + + LAZYREMOVE(C.affecting, src) + + effect_str = null + +/datum/light_source/proc/recalc_corner(var/datum/lighting_corner/C) + LAZYINITLIST(effect_str) + if (effect_str[C]) // Already have one. + REMOVE_CORNER(C) + effect_str[C] = 0 + + APPLY_CORNER(C) + UNSETEMPTY(effect_str) + +/datum/light_source/proc/update_corners() + var/update = FALSE + var/atom/source_atom = src.source_atom + + if (QDELETED(source_atom)) + qdel(src) + return + + if (source_atom.light_power != light_power) + light_power = source_atom.light_power + update = TRUE + + if (source_atom.light_range != light_range) + light_range = source_atom.light_range + update = TRUE + + if (!top_atom) + top_atom = source_atom + update = TRUE + + if (!light_range || !light_power) + qdel(src) + return + + if (isturf(top_atom)) + if (source_turf != top_atom) + source_turf = top_atom + pixel_turf = source_turf + update = TRUE + else if (top_atom.loc != source_turf) + source_turf = top_atom.loc + pixel_turf = get_turf_pixel(top_atom) + update = TRUE + else + var/P = get_turf_pixel(top_atom) + if (P != pixel_turf) + pixel_turf = P + update = TRUE + + if (!isturf(source_turf)) + if (applied) + remove_lum() + return + + if (light_range && light_power && !applied) + update = TRUE + + if (source_atom.light_color != light_color) + light_color = source_atom.light_color + parse_light_color() + update = TRUE + + else if (applied_lum_r != lum_r || applied_lum_g != lum_g || applied_lum_b != lum_b) + update = TRUE + + if (update) + needs_update = LIGHTING_CHECK_UPDATE + applied = TRUE + else if (needs_update == LIGHTING_CHECK_UPDATE) + return //nothing's changed + + var/list/datum/lighting_corner/corners = list() + var/list/turf/turfs = list() + var/thing + var/datum/lighting_corner/C + var/turf/T + if (source_turf) + var/oldlum = source_turf.luminosity + source_turf.luminosity = CEILING(light_range, 1) + for(T in view(CEILING(light_range, 1), source_turf)) + for (thing in T.get_corners(source_turf)) + C = thing + corners[C] = 0 + turfs += T + source_turf.luminosity = oldlum + + LAZYINITLIST(affecting_turfs) + var/list/L = turfs - affecting_turfs // New turfs, add us to the affecting lights of them. + affecting_turfs += L + for (thing in L) + T = thing + LAZYADD(T.affecting_lights, src) + + L = affecting_turfs - turfs // Now-gone turfs, remove us from the affecting lights. + affecting_turfs -= L + for (thing in L) + T = thing + LAZYREMOVE(T.affecting_lights, src) + + LAZYINITLIST(effect_str) + if (needs_update == LIGHTING_VIS_UPDATE) + for (thing in corners - effect_str) // New corners + C = thing + LAZYADD(C.affecting, src) + if (!C.active) + effect_str[C] = 0 + continue + APPLY_CORNER(C) + else + L = corners - effect_str + for (thing in L) // New corners + C = thing + LAZYADD(C.affecting, src) + if (!C.active) + effect_str[C] = 0 + continue + APPLY_CORNER(C) + + for (thing in corners - L) // Existing corners + C = thing + if (!C.active) + effect_str[C] = 0 + continue + APPLY_CORNER(C) + + L = effect_str - corners + for (thing in L) // Old, now gone, corners. + C = thing + REMOVE_CORNER(C) + LAZYREMOVE(C.affecting, src) + effect_str -= L - // Keep track of the last applied lum values so that the lighting can be reversed applied_lum_r = lum_r applied_lum_g = lum_g applied_lum_b = lum_b - FOR_DVIEW(var/turf/T, light_range, source_turf, INVISIBILITY_LIGHTING) - if(!T.lighting_corners_initialised) - T.generate_missing_corners() + UNSETEMPTY(effect_str) + UNSETEMPTY(affecting_turfs) - for(var/datum/lighting_corner/C in T.get_corners()) - if(C.update_gen == update_gen) - continue - - C.update_gen = update_gen - C.affecting += src - - if(!C.active) - effect_str[C] = 0 - continue - - APPLY_CORNER(C) - - if(!T.affecting_lights) - T.affecting_lights = list() - - T.affecting_lights += src - affecting_turfs += T - - update_gen++ - -/datum/light_source/proc/remove_lum() - applied = FALSE - - for(var/turf/T in affecting_turfs) - if(!T.affecting_lights) - T.affecting_lights = list() - else - T.affecting_lights -= src - - affecting_turfs.Cut() - - for(var/datum/lighting_corner/C in effect_str) - REMOVE_CORNER(C) - - C.affecting -= src - - effect_str.Cut() - -/datum/light_source/proc/recalc_corner(var/datum/lighting_corner/C) - if(effect_str.Find(C)) // Already have one. - REMOVE_CORNER(C) - - APPLY_CORNER(C) - -/datum/light_source/proc/smart_vis_update() - var/list/datum/lighting_corner/corners = list() - var/list/turf/turfs = list() - FOR_DVIEW(var/turf/T, light_range, source_turf, 0) - if(!T.lighting_corners_initialised) - T.generate_missing_corners() - corners |= T.get_corners() - turfs += T - - var/list/L = turfs - affecting_turfs // New turfs, add us to the affecting lights of them. - affecting_turfs += L - for(var/turf/T in L) - if(!T.affecting_lights) - T.affecting_lights = list(src) - else - T.affecting_lights += src - - L = affecting_turfs - turfs // Now-gone turfs, remove us from the affecting lights. - affecting_turfs -= L - for(var/turf/T in L) - T.affecting_lights -= src - - for(var/datum/lighting_corner/C in corners - effect_str) // New corners - C.affecting += src - if(!C.active) - effect_str[C] = 0 - continue - - APPLY_CORNER(C) - - for(var/datum/lighting_corner/C in effect_str - corners) // Old, now gone, corners. - REMOVE_CORNER(C) - C.affecting -= src - effect_str -= C - -#undef effect_update +#undef EFFECT_UPDATE #undef LUM_FALLOFF #undef REMOVE_CORNER -#undef APPLY_CORNER +#undef APPLY_CORNER \ No newline at end of file diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index ddb934aed61..0fe3caec840 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -5,98 +5,131 @@ var/tmp/lighting_corners_initialised = FALSE var/tmp/list/datum/light_source/affecting_lights // List of light sources affecting this turf. - var/tmp/atom/movable/lighting_overlay/lighting_overlay // Our lighting overlay. + var/tmp/atom/movable/lighting_object/lighting_object // Our lighting object. var/tmp/list/datum/lighting_corner/corners var/tmp/has_opaque_atom = FALSE // Not to be confused with opacity, this will be TRUE if there's any opaque atom on the tile. -/turf/New() - . = ..() - - if(opacity) - has_opaque_atom = TRUE - // Causes any affecting light sources to be queued for a visibility update, for example a door got opened. /turf/proc/reconsider_lights() - for(var/datum/light_source/L in affecting_lights) + var/datum/light_source/L + var/thing + for (thing in affecting_lights) + L = thing L.vis_update() /turf/proc/lighting_clear_overlay() - if(lighting_overlay) - qdel(lighting_overlay) + if (lighting_object) + qdel(lighting_object, TRUE) - for(var/datum/lighting_corner/C in corners) + var/datum/lighting_corner/C + var/thing + for (thing in corners) + if(!thing) + continue + C = thing C.update_active() -// Builds a lighting overlay for us, but only if our area is dynamic. +// Builds a lighting object for us, but only if our area is dynamic. /turf/proc/lighting_build_overlay() - if(lighting_overlay) - return + if (lighting_object) + qdel(lighting_object,force=TRUE) //Shitty fix for lighting objects persisting after death var/area/A = loc - if(A.dynamic_lighting) - if(!lighting_corners_initialised) - generate_missing_corners() + if (!IS_DYNAMIC_LIGHTING(A) && !light_sources) + return - new /atom/movable/lighting_overlay(src) + if (!lighting_corners_initialised) + generate_missing_corners() - for(var/datum/lighting_corner/C in corners) - if(!C.active) // We would activate the corner, calculate the lighting for it. - for(var/L in C.affecting) - var/datum/light_source/S = L - S.recalc_corner(C) + new/atom/movable/lighting_object(src) - C.active = TRUE + var/thing + var/datum/lighting_corner/C + var/datum/light_source/S + for (thing in corners) + if(!thing) + continue + C = thing + if (!C.active) // We would activate the corner, calculate the lighting for it. + for (thing in C.affecting) + S = thing + S.recalc_corner(C) + C.active = TRUE // Used to get a scaled lumcount. /turf/proc/get_lumcount(var/minlum = 0, var/maxlum = 1) - if(!lighting_overlay) + if (!lighting_object) return 1 var/totallums = 0 - for(var/datum/lighting_corner/L in corners) - totallums += max(L.lum_r, L.lum_g, L.lum_b) + var/thing + var/datum/lighting_corner/L + for (thing in corners) + if(!thing) + continue + L = thing + totallums += L.lum_r + L.lum_b + L.lum_g - totallums /= 4 // 4 corners, max channel selected, return the average + totallums /= 12 // 4 corners, each with 3 channels, get the average. - totallums =(totallums - minlum) /(maxlum - minlum) + totallums = (totallums - minlum) / (maxlum - minlum) return CLAMP01(totallums) +// Returns a boolean whether the turf is on soft lighting. +// Soft lighting being the threshold at which point the overlay considers +// itself as too dark to allow sight and see_in_dark becomes useful. +// So basically if this returns true the tile is unlit black. +/turf/proc/is_softly_lit() + if (!lighting_object) + return FALSE + + return !lighting_object.luminosity + // Can't think of a good name, this proc will recalculate the has_opaque_atom variable. /turf/proc/recalc_atom_opacity() - has_opaque_atom = FALSE - for(var/atom/A in src.contents + src) // Loop through every movable atom on our tile PLUS ourselves (we matter too...) - if(A.opacity) - has_opaque_atom = TRUE + has_opaque_atom = opacity + if (!has_opaque_atom) + for (var/atom/A in src.contents) // Loop through every movable atom on our tile PLUS ourselves (we matter too...) + if (A.opacity) + has_opaque_atom = TRUE + break -// If an opaque movable atom moves around we need to potentially update visibility. -/turf/Entered(var/atom/movable/Obj, var/atom/OldLoc) +/turf/Exited(atom/movable/Obj, atom/newloc) . = ..() - if(Obj && Obj.opacity) - has_opaque_atom = TRUE // Make sure to do this before reconsider_lights(), incase we're on instant updates. Guaranteed to be on in this case. - reconsider_lights() - -/turf/Exited(var/atom/movable/Obj, var/atom/newloc) - . = ..() - - if(Obj && Obj.opacity) + if (Obj && Obj.opacity) recalc_atom_opacity() // Make sure to do this before reconsider_lights(), incase we're on instant updates. reconsider_lights() +/turf/proc/change_area(var/area/old_area, var/area/new_area) + if(SSlighting.initialized) + if (new_area.dynamic_lighting != old_area.dynamic_lighting) + if (new_area.dynamic_lighting) + lighting_build_overlay() + else + lighting_clear_overlay() + /turf/proc/get_corners() - if(has_opaque_atom) + if (!IS_DYNAMIC_LIGHTING(src) && !light_sources) + return null + if (!lighting_corners_initialised) + generate_missing_corners() + if (has_opaque_atom) return null // Since this proc gets used in a for loop, null won't be looped though. return corners /turf/proc/generate_missing_corners() + if (!IS_DYNAMIC_LIGHTING(src) && !light_sources) + return lighting_corners_initialised = TRUE - if(!corners) + if (!corners) corners = list(null, null, null, null) - for(var/i = 1 to 4) - if(corners[i]) // Already have a corner on this direction. + for (var/i = 1 to 4) + if (corners[i]) // Already have a corner on this direction. continue - corners[i] = new /datum/lighting_corner(src, LIGHTING_CORNER_DIAGONAL[i]) + corners[i] = new/datum/lighting_corner(src, GLOB.LIGHTING_CORNER_DIAGONAL[i]) + diff --git a/code/modules/lighting/~lighting_undefs.dm b/code/modules/lighting/~lighting_undefs.dm deleted file mode 100644 index 2de3f9dbe26..00000000000 --- a/code/modules/lighting/~lighting_undefs.dm +++ /dev/null @@ -1,7 +0,0 @@ -#undef LIGHTING_FALLOFF -#undef LIGHTING_LAMBERTIAN -#undef LIGHTING_HEIGHT - -#undef LIGHTING_ICON - -#undef LIGHTING_BASE_MATRIX diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 829377720c1..ad90272a4ce 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -104,7 +104,7 @@ return null // Check for darkness var/turf/T = get_turf(loc) - if(T && destination && T.lighting_overlay) + if(T && destination && T.lighting_object) if(T.get_lumcount() * 10 < 1 && destination.get_lumcount() * 10 < 1) // No one can see us in the darkness, right? return null if(T == destination) diff --git a/icons/effects/alphacolors.dmi b/icons/effects/alphacolors.dmi index f27dfb036deb9daf6c3a8192b4b5d70f629f31f0..c01d261fe31d1b4d969c900acd4ea4bc6450cdad 100644 GIT binary patch literal 633 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRS%c?>mN?cNllZ!G7N;32F7#J$% zOzm^zI%FW?a{cFWiCei7qh1?HXHL|6Bdhe&tWoNzy4K#k-Ay|JR_&Io_&h^qciH`~ z8GN#LBNy#w$+)t5(v`!vpDft8(!=swvv+alNtHIYX%jcaDVbbb;+J&J=DB!*O#UCq zRi2S@XIXl8t>{`+5zTu@rmnEtr+dbRzyBM*p4^yo+O=9p_|a94_Ak9>FMi{lN?=-I@O1TaS?83{1OO+u@R9%k literal 464 zcmeAS@N?(olHy`uVBq!ia0vp^4M3d0!3HF+R#kZdshL$F5hX6E#mPmP1tppJc?=8{ zbArPPib}tK2`>2f^@*0ZuGYCT=Yuzd8eBAf@JQ#pkLF2+qMqIz7REuwmyNv?<~*8o zWKxJiu%_m6lhDp?W7W+oBu~)y|R(_kb{WJLEDppvKQKg%^fc4u{a4iB^i}Wc~FpQc=^D;2X}i@*1fEn{@woR zU+>}?&U#-4CIWI|`H@;ypL)s^; s`yW=Ud%x4{x%;Ot%tYG_GehPFV<``>)WR393mJgG)78&qol`;+0MT-j3;+NC diff --git a/icons/effects/lighting_object.dmi b/icons/effects/lighting_object.dmi new file mode 100644 index 0000000000000000000000000000000000000000..51985c0c981c5bdb3dd57606b733474016ca5c5d GIT binary patch literal 1882 zcmb7_`#;l*AICqt$QWYCWUdbh6Pux}IHo2vw~X8`8A4h^n24EMN1|_$)%JDNBvS5< zaa1GQiR02a5_O7CE)_YuX~!)cjrYniW5&mU2aJ<^Et^}O+N7h4+S##Ry?+#2M++d%H1eVzAXMfH+!z- z5>XUFz47AKcIjE2I_q@Y9=m1s|oogTItkX(FuuZ#2(x|k~~hm7LL6V^m{F! zSpYp9yVoQF*o6ROodF`41O}>0M!``DLuxitXS*b~)Gona!H*M1`Re@9+7*;22&4kx zp#90O-qJv*v~44AqiwvoC-kRW!_Oaq66+5($AY2pT*A=aV|VKStb2akX28Yg!1#W^ z6H@UKC6W)5V&!F@y?}LCW*Mo5eHjs zSt7@|iG54I6RXj4=zS&gXtQD8LFS+a*2ugK>^Cjq90kNQC_RUVgKnZBy`%3R8~0g? z8DiSBrT8k{N^JT_LJ}t;YP}z*fco}oa)p<0sx7?{qMCe}F$9U3Uh1e7Qk$viM@oH) z>(F&*zh+O!oYFBlfzZfW5#eNriy7ut+t5utA=vAretuL& zp%oFykk7Pa9bh#(xofDelAyQ{bR~v?sl@w*Jl8x*IPF}*UEw%ZdC3&o9Ayd7Q5$7d zCeFv>snA=<`4LrVZn(R1h6_UxD9+r@R-f|p{3?`&~;Z->)+q;ut<+`AJ z%-HULw5EM?D8FEh1SL9<96V**0hoQHdD6-5oJJL{73)g{{I~MABHk{erL;HVb9Q<{UtR~Y0O~MgxbW_kC#T&08)TKbfq+8X2Uyq@}1$C zx9@E8g91bU6BXE}(B^S?)?IYn!<~jr8_Do*pq5(>HtX`R%j4fRLCp@9H za6WIeDG(hNz2(Q|Tjnk=&*M&hyD@-=C=e9n1ihw+Gw*zEh6~dF+r9rxmhwI5XvV!Z literal 0 HcmV?d00001 diff --git a/icons/effects/lighting_overlay.dmi b/icons/effects/lighting_overlay.dmi deleted file mode 100644 index daa43134b3ce314d1347fca38a7e2b227fad6249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5914 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 diff --git a/icons/effects/lighting_overlay.png b/icons/effects/lighting_overlay.png deleted file mode 100644 index b317268b702d50c33c0099a63d0a0ea94a607744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1480 zcmV;(1vmPMP);Uvh8NW&Hj9u{oJD8zyJ38|NQOa z|M-u;{hjmky?xmq8}>77#ec@IUtGUa@plf}ajk^;9)r~m<`{nLsNF2OdGx_rY3A96 zWwR9@KGZP&dj?k!_@MxP`89$47XoiqfPb^<8{l_T-46&HRgVq^@fTWi|u4@}5K=9BMP`7XFfwUSsJI_mEWW(PCeh02& zNn|@X0Zjqdt-wdi7E1uvIVX_Dg_zyjxLsR=04I?4)&vMoe@{5NZ|_WYuexV8bdMw_ z&@_QA0ZbqPZ4k(UySG5!=(=I=@@j&;6`0+l<|&{l_`4(sME8`S0Kk+83glVQJ(ocO zgw_Q7g1fb#04kw5DB*&Sq{JmqVAgR4YfH&VwI zYSle5C?OFFa1Vs-P4 zXaf5TCA8^OIRy$ZfTMH3Id(`;0M{oRQ6a0nnn6DWZw0pHIYOQO{TB!C=9 zTLKlqmF*74#$&b#?*-3-r*GJ505g{WM~@J`AxAr~0ShX4KLp0_3qGL>e&9&E;C;iX z-D50?+%U|ZnOjNN23#K{z)g7YNAQCZ*;xVZ5IMN!+HC9|Y74&Y60i*?vEU^!2%q4_ zD)=aPh21}FL*Lt+z;XWUgYXr~0IqNl3VK2`+F=;5gy-I3)xhkE$9y^Qd}G-~rq=C~%w;0NlD`C$y3P7zx59flY=S zvDRK|e!?$kRjfClT@`z|psa^u_)hdgOK@lp?6n~^f#y*H9t87rV-1~fTxZ_rA8US0 zXw`fKps}s4QM*4<0_eK48YZA!@W6iM1lakE;JctYTC>19WTNhEopcxcHuhB5wIn*O z0|HxnVpU6`Yy1HFhXA^7E0FL?@=R~*eDBIUV7Sxc-{H^D_=E6gPB5ncI7HBW<*6y0 z0@gHvJOyxc=6bLY>hpLVXZLBJYaTNh@x-Z(3B*$q=oEoKqk!_jbMR@r8QUdbf}1;^ zTodk9*F$BUa5`kV?(vqJI&U3aZzX{1fP}z+ati22*AyUpTmsyL=$zn!U&-}IJ)dfl z5SX_Zg7*M+FOlrp`2aDE-9KZ31z!_rl<=3PP!nMHt_h4w01ps=^XwkaaUHAce80dA zw^|FrYZ47(_bGv(``1_k?ypf3P`w1uJ>L@-9Ot#`Io<%z^+;V$HNo*JnsvXoz`OCr zO4x!wMpeNv%onEcLZ1|Q0d=2%Q-E(ulz>3JFb;J;_+m{c-}G2{u6K5>^W6gz2*8+{ z0Q?sm9V-()!|ov>3D+Jd@cFhnZf~$DfhEyZ0Ua3y_o_-e1g^AOZg6M!EA|C}FMX8o zCDkqouD8JEHvvn2a%}qk@#-F*A*>I48$GxTgVjpFX7`e?w%}hty};lUZUXohQ}<=U z?)l+>7YR!A`nCy4SbeJjr|xgm*~ z0>LZw1qdj!X#?W(6zLP(pGLUAt-yv`&ua6rd%;WKTOX!&&jPP++HrpG-lDE=>5qS= iJ#V4J*JlhL?0*5J6wAQ~73C2C0000 Date: Mon, 22 Apr 2019 19:57:47 +0200 Subject: [PATCH 08/41] Move some stray area defines to the proper location --- code/game/area/Space Station 13 areas.dm | 49 ++++++++++++++++-------- code/game/area/areas.dm | 21 ---------- 2 files changed, 33 insertions(+), 37 deletions(-) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 067223c0285..f0d8b780f0c 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -18,51 +18,68 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area var/fire = null var/atmosalm = ATMOS_ALARM_NONE - var/poweralm = 1 + var/poweralm = TRUE var/party = null - var/report_alerts = 1 // Should atmos alerts notify the AI/computers + var/report_alerts = TRUE // Should atmos alerts notify the AI/computers level = null name = "Space" icon = 'icons/turf/areas.dmi' icon_state = "unknown" layer = AREA_LAYER + plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. luminosity = 0 mouse_opacity = MOUSE_OPACITY_TRANSPARENT invisibility = INVISIBILITY_LIGHTING var/valid_territory = TRUE //used for cult summoning areas on station zlevel var/map_name // Set in New(); preserves the name set by the map maker, even if renamed by the Blueprints. - var/lightswitch = 1 + var/lightswitch = TRUE var/eject = null var/debug = 0 - var/requires_power = 1 + var/requires_power = TRUE var/always_unpowered = 0 //this gets overriden to 1 for space in area/New() - var/power_equip = 1 - var/power_light = 1 - var/power_environ = 1 + var/power_equip = TRUE + var/power_light = TRUE + var/power_environ = TRUE var/music = null - var/used_equip = 0 - var/used_light = 0 - var/used_environ = 0 + var/used_equip = FALSE + var/used_light = FALSE + var/used_environ = FALSE var/static_equip - var/static_light = 0 + var/static_light = FALSE var/static_environ - var/has_gravity = 1 + var/has_gravity = TRUE var/list/apc = list() var/no_air = null // var/list/lights // list of all lights on this area - var/air_doors_activated = 0 + var/air_doors_activated = FALSE - var/tele_proof = 0 - var/no_teleportlocs = 0 + var/tele_proof = FALSE + var/no_teleportlocs = FALSE - var/outdoors = 0 //For space, the asteroid, lavaland, etc. Used with blueprints to determine if we are adding a new area (vs editing a station room) + var/outdoors = FALSE //For space, the asteroid, lavaland, etc. Used with blueprints to determine if we are adding a new area (vs editing a station room) var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default? var/nad_allowed = FALSE //is the station NAD allowed on this area? + // This var is used with the maploader (modules/awaymissions/maploader/reader.dm) + // if this is 1, when used in a map snippet, this will instantiate a unique + // area from any other instances already present (meaning you can have + // separate APCs, and so on) + var/there_can_be_many = 0 + + var/global/global_uid = 0 + var/uid + + var/list/ambientsounds = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg',\ + 'sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg',\ + 'sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg',\ + 'sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg',\ + 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ + 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') + /*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ var/list/teleportlocs = list() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 6f25d1b23aa..9d1867046a7 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -1,24 +1,3 @@ -// Areas.dm - -// === -/area - var/global/global_uid = 0 - var/uid - var/list/ambientsounds = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg',\ - 'sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg',\ - 'sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg',\ - 'sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg',\ - 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ - 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') - - // This var is used with the maploader (modules/awaymissions/maploader/reader.dm) - // if this is 1, when used in a map snippet, this will instantiate a unique - // area from any other instances already present (meaning you can have - // separate APCs, and so on) - var/there_can_be_many = 0 - plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. - - /area/New() ..() From fb4173177219024b1a5163a64b289235f6760e43 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 20:10:54 +0200 Subject: [PATCH 09/41] 0 --> FALSE --- code/game/area/Space Station 13 areas.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index f0d8b780f0c..ced4bf0eaf6 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -68,7 +68,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station // if this is 1, when used in a map snippet, this will instantiate a unique // area from any other instances already present (meaning you can have // separate APCs, and so on) - var/there_can_be_many = 0 + var/there_can_be_many = FALSE var/global/global_uid = 0 var/uid From 75b06fe82cc15a92a0154321d499cf3bb0ec73d5 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 21:47:08 +0200 Subject: [PATCH 10/41] Lighting fixes --- code/__DEFINES/lighting.dm | 10 ++ code/__DEFINES/misc.dm | 27 ----- code/game/area/Space Station 13 areas.dm | 132 +++++++---------------- code/game/area/areas.dm | 67 +++++++++++- code/game/turfs/turf.dm | 3 - code/modules/events/aurora_caelus.dm | 26 +++-- code/modules/lighting/lighting_object.dm | 2 +- code/modules/lighting/lighting_setup.dm | 1 - 8 files changed, 127 insertions(+), 141 deletions(-) diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 37203792f76..7357c5f441e 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -47,6 +47,16 @@ #define LIGHT_COLOR_HOLY_MAGIC "#FFF743" //slightly desaturated bright yellow. #define LIGHT_COLOR_BLOOD_MAGIC "#D00000" //deep crimson +#define LIGHT_COLOR_PURE_CYAN "#00FFFF" +#define LIGHT_COLOR_DARKRED "#A91515" +#define LIGHT_COLOR_PURE_RED "#FF0000" +#define LIGHT_COLOR_DARKGREEN "#50AB00" +#define LIGHT_COLOR_PURE_GREEN "#00FF00" +#define LIGHT_COLOR_LIGHTBLUE "#0099FF" +#define LIGHT_COLOR_DARKBLUE "#315AB4" +#define LIGHT_COLOR_PURE_BLUE "#0000FF" +#define LIGHT_COLOR_FADEDPURPLE "#A97FAA" + //These ones aren't a direct colour like the ones above, because nothing would fit #define LIGHT_COLOR_FIRE "#FAA019" //Warm orange color, leaning strongly towards yellow. rgb(250, 160, 25) #define LIGHT_COLOR_LAVA "#C48A18" //Very warm yellow, leaning slightly towards orange. rgb(196, 138, 24) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 106c1900a82..eae4478d0a1 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -114,33 +114,6 @@ #define CHRISTMAS "Christmas" #define FRIDAY_13TH "Friday the 13th" -//Light color defs, for light-emitting things -//Some defs may be pure color- this is for neatness, and configurability. Changing #define COLOR_ is a bad idea. -#define LIGHT_COLOR_CYAN "#7BF9FF" -#define LIGHT_COLOR_PURE_CYAN "#00FFFF" - -#define LIGHT_COLOR_RED "#B40000" -#define LIGHT_COLOR_ORANGE "#FF9933" -#define LIGHT_COLOR_DARKRED "#A91515" -#define LIGHT_COLOR_PURE_RED "#FF0000" - -#define LIGHT_COLOR_GREEN "#00CC00" -#define LIGHT_COLOR_DARKGREEN "#50AB00" -#define LIGHT_COLOR_PURE_GREEN "#00FF00" - -#define LIGHT_COLOR_BLUE "#6496FA" //Cold, diluted blue. rgb(100, 150, 250) -#define LIGHT_COLOR_LIGHTBLUE "#0099FF" -#define LIGHT_COLOR_DARKBLUE "#315AB4" -#define LIGHT_COLOR_PURE_BLUE "#0000FF" - -#define LIGHT_COLOR_FADEDPURPLE "#A97FAA" -#define LIGHT_COLOR_PURPLE "#CD00CD" -#define LIGHT_COLOR_PINK "#FF33CC" - -#define LIGHT_COLOR_YELLOW "#E1E17D" //Dimmed yellow, leaning kaki. rgb(225, 225, 125) - -#define LIGHT_COLOR_WHITE "#FFFFFF" - #define RESIZE_DEFAULT_SIZE 1 //transfer_ai() defines. Main proc in ai_core.dm diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 3fa1c169521..ca444b4abdc 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -13,73 +13,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station */ - - -/area - var/fire = null - var/atmosalm = ATMOS_ALARM_NONE - var/poweralm = TRUE - var/party = null - var/report_alerts = TRUE // Should atmos alerts notify the AI/computers - level = null - name = "Space" - icon = 'icons/turf/areas.dmi' - icon_state = "unknown" - layer = AREA_LAYER - plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. - luminosity = 0 - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - invisibility = INVISIBILITY_LIGHTING - var/valid_territory = TRUE //used for cult summoning areas on station zlevel - var/map_name // Set in New(); preserves the name set by the map maker, even if renamed by the Blueprints. - var/lightswitch = TRUE - - var/eject = null - - var/debug = 0 - var/requires_power = TRUE - var/always_unpowered = 0 //this gets overriden to 1 for space in area/New() - - var/power_equip = TRUE - var/power_light = TRUE - var/power_environ = TRUE - var/music = null - var/used_equip = FALSE - var/used_light = FALSE - var/used_environ = FALSE - var/static_equip - var/static_light = FALSE - var/static_environ - - var/has_gravity = TRUE - var/list/apc = list() - var/no_air = null - - var/air_doors_activated = FALSE - - var/tele_proof = FALSE - var/no_teleportlocs = FALSE - - var/outdoors = FALSE //For space, the asteroid, lavaland, etc. Used with blueprints to determine if we are adding a new area (vs editing a station room) - var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default? - var/nad_allowed = FALSE //is the station NAD allowed on this area? - - // This var is used with the maploader (modules/awaymissions/maploader/reader.dm) - // if this is 1, when used in a map snippet, this will instantiate a unique - // area from any other instances already present (meaning you can have - // separate APCs, and so on) - var/there_can_be_many = FALSE - - var/global/global_uid = 0 - var/uid - - var/list/ambientsounds = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg',\ - 'sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg',\ - 'sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg',\ - 'sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg',\ - 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ - 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') - /*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ var/list/teleportlocs = list() @@ -137,14 +70,18 @@ var/list/ghostteleportlocs = list() /area/space icon_state = "space" - requires_power = 1 - always_unpowered = 1 - power_light = 0 - power_equip = 0 - power_environ = 0 + requires_power = TRUE + always_unpowered = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + power_light = FALSE + power_equip = FALSE + power_environ = FALSE valid_territory = FALSE outdoors = 1 ambientsounds = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/traitor.ogg') + +/area/space/nearstation + icon_state = "space_near" dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT /area/space/atmosalert() @@ -167,8 +104,9 @@ var/list/ghostteleportlocs = list() //All shuttles show now be under shuttle since we have smooth-wall code. /area/shuttle - no_teleportlocs = 1 - requires_power = 0 + no_teleportlocs = TRUE + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED valid_territory = FALSE /area/shuttle/arrival @@ -504,7 +442,7 @@ var/list/ghostteleportlocs = list() icon_state = "start" requires_power = 0 luminosity = 1 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED has_gravity = 1 // === end remove @@ -519,8 +457,8 @@ var/list/ghostteleportlocs = list() /area/centcom name = "\improper Centcom" icon_state = "centcom" - requires_power = 0 - dynamic_lighting = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED nad_allowed = TRUE /area/centcom/control @@ -573,6 +511,7 @@ var/list/ghostteleportlocs = list() /area/syndicate_mothership/control name = "\improper Syndicate Control Room" icon_state = "syndie-control" + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/syndicate_mothership/elite_squad name = "\improper Syndicate Elite Squad" @@ -587,14 +526,14 @@ var/list/ghostteleportlocs = list() /area/asteroid // -- TLE name = "\improper Asteroid" icon_state = "asteroid" - requires_power = 0 + requires_power = FALSE valid_territory = FALSE /area/asteroid/cave // -- TLE name = "\improper Asteroid - Underground" icon_state = "cave" - requires_power = 0 - outdoors = 1 + requires_power = FALSE + outdoors = TRUE /area/asteroid/artifactroom name = "\improper Asteroid - Artifact" @@ -603,17 +542,19 @@ var/list/ghostteleportlocs = list() /area/tdome name = "\improper Thunderdome" icon_state = "thunder" - requires_power = 0 - dynamic_lighting = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/tdome/arena_source name = "\improper Thunderdome Arena Template" icon_state = "thunder" + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/tdome/arena name = "\improper Thunderdome Arena" icon_state = "thunder" + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/tdome/tdome1 name = "\improper Thunderdome (Team 1)" @@ -687,20 +628,21 @@ var/list/ghostteleportlocs = list() /area/abductor_ship name = "\improper Abductor Ship" icon_state = "yellow" - requires_power = 0 - has_gravity = 1 - dynamic_lighting = 0 + requires_power = FALSE + has_gravity = TRUE + dynamic_lighting = FALSE /area/wizard_station name = "\improper Wizard's Den" icon_state = "yellow" - requires_power = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/ninja name = "\improper Ninja Area Parent" icon_state = "ninjabase" - requires_power = 0 - no_teleportlocs = 1 + requires_power = FALSE + no_teleportlocs = TRUE /area/ninja/outpost name = "\improper SpiderClan Outpost" @@ -711,9 +653,9 @@ var/list/ghostteleportlocs = list() /area/vox_station name = "\improper Vox Base" icon_state = "yellow" - requires_power = 0 - dynamic_lighting = 0 - no_teleportlocs = 1 + requires_power = FALSE + dynamic_lighting = FALSE + no_teleportlocs = TRUE /area/vox_station/transit name = "\improper Hyperspace" @@ -2554,9 +2496,9 @@ var/list/ghostteleportlocs = list() /area/awaymission/beach name = "Beach" icon_state = "beach" - luminosity = 1 - dynamic_lighting = 0 - requires_power = 0 + luminosity = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + requires_power = FALSE ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag2.ogg') /area/awaymission/undersea @@ -2668,7 +2610,7 @@ var/list/ghostteleportlocs = list() /area/vr name = "VR" requires_power = 0 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED no_teleportlocs = 1 diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index eb1ef3c1458..672c3a0f18c 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -1,9 +1,70 @@ -/area/New() - ..() +/area + var/fire = null + var/atmosalm = ATMOS_ALARM_NONE + var/poweralm = TRUE + var/party = null + var/report_alerts = TRUE // Should atmos alerts notify the AI/computers + level = null + name = "Space" + icon = 'icons/turf/areas.dmi' + icon_state = "unknown" + layer = AREA_LAYER + plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. + luminosity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + invisibility = INVISIBILITY_LIGHTING + var/valid_territory = TRUE //used for cult summoning areas on station zlevel + var/map_name // Set in New(); preserves the name set by the map maker, even if renamed by the Blueprints. + var/lightswitch = TRUE - GLOB.all_areas += src + var/eject = null + + var/debug = 0 + var/requires_power = TRUE + var/always_unpowered = 0 //this gets overriden to 1 for space in area/New() + + var/power_equip = TRUE + var/power_light = TRUE + var/power_environ = TRUE + var/music = null + var/used_equip = FALSE + var/used_light = FALSE + var/used_environ = FALSE + var/static_equip + var/static_light = FALSE + var/static_environ + + var/has_gravity = TRUE + var/list/apc = list() + var/no_air = null + + var/air_doors_activated = FALSE + + var/tele_proof = FALSE + var/no_teleportlocs = FALSE + + var/outdoors = FALSE //For space, the asteroid, lavaland, etc. Used with blueprints to determine if we are adding a new area (vs editing a station room) + var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default? + var/nad_allowed = FALSE //is the station NAD allowed on this area? + + // This var is used with the maploader (modules/awaymissions/maploader/reader.dm) + // if this is 1, when used in a map snippet, this will instantiate a unique + // area from any other instances already present (meaning you can have + // separate APCs, and so on) + var/there_can_be_many = FALSE + + var/global/global_uid = 0 + var/uid + + var/list/ambientsounds = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg',\ + 'sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg',\ + 'sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg',\ + 'sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg',\ + 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ + 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') /area/Initialize(mapload) + GLOB.all_areas += src icon_state = "" layer = AREA_LAYER uid = ++global_uid diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 86f94ee37d2..f9f19d4d4c4 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -201,9 +201,6 @@ W.blueprint_data = old_blueprint_data - for(var/turf/space/S in range(W,1)) - S.update_starlight() - recalc_atom_opacity() if(SSlighting.initialized) diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm index 58302950b5e..62de79a19cb 100644 --- a/code/modules/events/aurora_caelus.dm +++ b/code/modules/events/aurora_caelus.dm @@ -17,10 +17,11 @@ We hope you enjoy the lights.", "Harmless ions approaching", new_sound = 'sound/ M.playsound_local(null, 'sound/ambience/aurora_caelus.ogg', 20, FALSE, pressure_affected = FALSE) /datum/event/aurora_caelus/start() - for(var/s in GLOB.station_level_space_turfs) - var/turf/space/S = s - S.set_light(S.light_range * 3, S.light_power * 0.5, aurora_colors[1]) - CHECK_TICK + for(var/area in GLOB.all_areas) + var/area/A = area + if(initial(A.dynamic_lighting) == DYNAMIC_LIGHTING_IFSTARLIGHT) + for(var/turf/space/S in A) + S.set_light(S.light_range * 3, S.light_power * 0.5) /datum/event/aurora_caelus/tick() if(aurora_progress >= aurora_colors.len) @@ -28,15 +29,18 @@ We hope you enjoy the lights.", "Harmless ions approaching", new_sound = 'sound/ if(activeFor % 5 == 0) aurora_progress++ var/aurora_color = aurora_colors[aurora_progress] - for(var/s in GLOB.station_level_space_turfs) - var/turf/space/S = s - S.set_light(l_color = aurora_color) - CHECK_TICK + for(var/area in GLOB.all_areas) + var/area/A = area + if(initial(A.dynamic_lighting) == DYNAMIC_LIGHTING_IFSTARLIGHT) + for(var/turf/space/S in A) + S.set_light(l_color = aurora_color) /datum/event/aurora_caelus/end() - for(var/s in GLOB.station_level_space_turfs) - var/turf/space/S = s - fade_to_black(S) + for(var/area in GLOB.all_areas) + var/area/A = area + if(initial(A.dynamic_lighting) == DYNAMIC_LIGHTING_IFSTARLIGHT) + for(var/turf/space/S in A) + fade_to_black(S) event_announcement.Announce("The Aurora Caelus event is now ending. Starlight conditions will slowly return to normal. \ When this has concluded, please return to your workplace and continue work as normal. \ Have a pleasant shift, [station_name()], and thank you for watching with us.", diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index 6083c7af7f1..586668ec139 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -7,7 +7,7 @@ icon_state = "transparent" color = LIGHTING_BASE_MATRIX plane = LIGHTING_PLANE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT + mouse_opacity = MOUSE_OPACITY_TRANSPARENT layer = LIGHTING_LAYER invisibility = INVISIBILITY_LIGHTING diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index 6c1dab13ec6..68119ba3921 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -4,7 +4,6 @@ continue for(var/turf/T in A) - if(!IS_DYNAMIC_LIGHTING(T)) continue From ab7fb176f67e455d594aeedb4c279bfb1370ea77 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 22:04:31 +0200 Subject: [PATCH 11/41] Opacity fix, re-add rotatium --- code/game/turfs/space/space.dm | 3 +++ code/game/turfs/turf.dm | 3 +++ code/modules/events/vent_clog.dm | 2 +- code/modules/reagents/chemistry/reagents/drugs.dm | 4 ++-- code/modules/reagents/chemistry/recipes/toxins.dm | 9 ++++++++- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 66a2db0f970..342c7f23ff1 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -27,6 +27,9 @@ if (light_power && light_range) update_light() + if (opacity) + has_opaque_atom = TRUE + return INITIALIZE_HINT_NORMAL /turf/space/Destroy(force) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index f9f19d4d4c4..dc7de45f695 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -51,6 +51,9 @@ if(light_power && light_range) update_light() + if (opacity) + has_opaque_atom = TRUE + /hook/startup/proc/smooth_world() var/watch = start_watch() log_startup_progress("Smoothing atoms...") diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 9b1588e1161..29b0b44e721 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -23,7 +23,7 @@ "atrazine","banana","charcoal","space_drugs","methamphetamine","holywater","ethanol","hot_coco","facid", "blood","morphine","ether","fluorine","mutadone","mutagen","hydrocodone","fuel", "haloperidol","lsd","syndicate_nanites","lipolicide","frostoil","salglu_solution","beepskysmash", - "omnizine", "amanitin", "neurotoxin", "synaptizine") + "omnizine", "amanitin", "neurotoxin", "synaptizine", "rotatium") var/datum/reagents/R = new/datum/reagents(50) R.my_atom = vent R.add_reagent(pick(gunk), 50) diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 8a4d9b338ed..9e96ed5b56b 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -616,7 +616,7 @@ /datum/reagent/rotatium/on_mob_life(mob/living/carbon/M) if(M.hud_used) if(current_cycle >= 20 && current_cycle % 20 == 0) - var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"]) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) var/rotation = min(round(current_cycle / 20), 89) // By this point the player is probably puking and quitting anyway for(var/whole_screen in screens) animate(whole_screen, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1) @@ -625,7 +625,7 @@ /datum/reagent/rotatium/on_mob_delete(mob/living/M) if(M && M.hud_used) - var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"]) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) for(var/whole_screen in screens) animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING) ..() diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index cdc10bcbcc5..6d7fa9028a8 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -174,4 +174,11 @@ required_reagents = list("formaldehyde" = 1, "sodium" = 1, "chlorine" = 1, "lithium" = 1) result_amount = 4 mix_message = "The mixture thins and loses all color." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' \ No newline at end of file + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/rotatium + name = "Rotatium" + id = "Rotatium" + results = "rotatium" + required_reagents = list("lsd" = 1, "teslium" = 1, "fentanyl" = 1) + mix_message = "After sparks, fire, and the smell of LSD, the mix is constantly spinning with no stop in sight." \ No newline at end of file From 3285efd36c29da2fec6fe0e2dd08b5d5d40385d0 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 22:43:21 +0200 Subject: [PATCH 12/41] Final lighting updates --- code/game/area/Space Station 13 areas.dm | 54 +- .../mission_code/blackmarketpackers.dm | 11 +- .../awaymissions/mission_code/clownplanet.dm | 13 +- .../awaymissions/mission_code/wildwest.dm | 13 +- code/modules/awaymissions/zvis.dm | 633 +++++++++--------- code/modules/lighting/lighting_setup.dm | 2 +- .../reagents/chemistry/recipes/toxins.dm | 2 +- 7 files changed, 351 insertions(+), 377 deletions(-) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index ca444b4abdc..c9fc4a64e91 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -55,11 +55,11 @@ var/list/ghostteleportlocs = list() name = "\improper Arrival Area" icon_state = "start" -/area/admin/ +/area/admin name = "\improper Admin Room" icon_state = "start" requires_power = 0 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/adminconstruction @@ -106,7 +106,6 @@ var/list/ghostteleportlocs = list() /area/shuttle no_teleportlocs = TRUE requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_FORCED valid_territory = FALSE /area/shuttle/arrival @@ -423,7 +422,7 @@ var/list/ghostteleportlocs = list() /area/shuttle/trade name = "Trade Shuttle" icon_state = "shuttle" - requires_power = 0 + requires_power = FALSE /area/shuttle/trade/sol name = "Sol Freighter" @@ -440,17 +439,16 @@ var/list/ghostteleportlocs = list() /area/start // will be unused once kurper gets his login interface patch done name = "start area" icon_state = "start" - requires_power = 0 - luminosity = 1 + requires_power = FALSE dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - has_gravity = 1 + has_gravity = TRUE // === end remove /area/alien name = "\improper Alien base" icon_state = "yellow" - requires_power = 0 + requires_power = FALSE // CENTCOM @@ -458,7 +456,7 @@ var/list/ghostteleportlocs = list() name = "\improper Centcom" icon_state = "centcom" requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_FORCED + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED nad_allowed = TRUE /area/centcom/control @@ -511,7 +509,6 @@ var/list/ghostteleportlocs = list() /area/syndicate_mothership/control name = "\improper Syndicate Control Room" icon_state = "syndie-control" - dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/syndicate_mothership/elite_squad name = "\improper Syndicate Elite Squad" @@ -543,18 +540,16 @@ var/list/ghostteleportlocs = list() name = "\improper Thunderdome" icon_state = "thunder" requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_FORCED + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/tdome/arena_source name = "\improper Thunderdome Arena Template" icon_state = "thunder" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/tdome/arena name = "\improper Thunderdome Arena" icon_state = "thunder" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/tdome/tdome1 name = "\improper Thunderdome (Team 1)" @@ -630,13 +625,12 @@ var/list/ghostteleportlocs = list() icon_state = "yellow" requires_power = FALSE has_gravity = TRUE - dynamic_lighting = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/wizard_station name = "\improper Wizard's Den" icon_state = "yellow" requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/ninja name = "\improper Ninja Area Parent" @@ -654,7 +648,7 @@ var/list/ghostteleportlocs = list() name = "\improper Vox Base" icon_state = "yellow" requires_power = FALSE - dynamic_lighting = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED no_teleportlocs = TRUE /area/vox_station/transit @@ -1237,7 +1231,7 @@ var/list/ghostteleportlocs = list() /area/holodeck name = "\improper Holodeck" icon_state = "Holodeck" - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/holodeck/alphadeck name = "\improper Holodeck Alpha" @@ -2306,26 +2300,22 @@ var/list/ghostteleportlocs = list() /area/turret_protected/AIsatextFP name = "\improper AI Sat Ext" icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/turret_protected/AIsatextFS name = "\improper AI Sat Ext" icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/turret_protected/AIsatextAS name = "\improper AI Sat Ext" icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/turret_protected/AIsatextAP name = "\improper AI Sat Ext" icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/turret_protected/NewAIMain name = "\improper AI Main New" @@ -2419,31 +2409,26 @@ var/list/ghostteleportlocs = list() /area/awaymission/wwmines name = "\improper Wild West Mines" icon_state = "away1" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwgov name = "\improper Wild West Mansion" icon_state = "away2" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwrefine name = "\improper Wild West Refinery" icon_state = "away3" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwvault name = "\improper Wild West Vault" icon_state = "away3" - luminosity = 0 /area/awaymission/wwvaultdoors name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power icon_state = "away2" - requires_power = 0 - luminosity = 0 + requires_power = FALSE /area/awaymission/desert name = "Mars" @@ -2496,7 +2481,6 @@ var/list/ghostteleportlocs = list() /area/awaymission/beach name = "Beach" icon_state = "beach" - luminosity = TRUE dynamic_lighting = DYNAMIC_LIGHTING_DISABLED requires_power = FALSE ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag2.ogg') diff --git a/code/modules/awaymissions/mission_code/blackmarketpackers.dm b/code/modules/awaymissions/mission_code/blackmarketpackers.dm index c2d10d7c97d..73e288b56ed 100644 --- a/code/modules/awaymissions/mission_code/blackmarketpackers.dm +++ b/code/modules/awaymissions/mission_code/blackmarketpackers.dm @@ -3,25 +3,24 @@ /area/awaymission/BMPship name = "\improper BMP Asteroids" icon_state = "away" - luminosity = 0 - report_alerts = 0 + report_alerts = FALSE /area/awaymission/BMPship/Aft name = "\improper Aft Block" icon_state = "away1" - requires_power = 1 + requires_power = TRUE /area/awaymission/BMPship/Midship name = "\improper Midship Block" icon_state = "away2" - requires_power = 1 + requires_power = TRUE /area/awaymission/BMPship/Fore name = "\improper Fore Block" icon_state = "away3" - requires_power = 1 + requires_power = TRUE /area/awaymission/BMPship/Gate name = "\improper Gateway Block" icon_state = "away4" - requires_power = 1 \ No newline at end of file + requires_power = TRUE \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/clownplanet.dm b/code/modules/awaymissions/mission_code/clownplanet.dm index 8d64d3074d2..8ac9fd1fb4c 100644 --- a/code/modules/awaymissions/mission_code/clownplanet.dm +++ b/code/modules/awaymissions/mission_code/clownplanet.dm @@ -3,19 +3,16 @@ /area/planet/clown name = "\improper Clown Planet" icon_state = "honk" - luminosity = 1 - dynamic_lighting = 0 - requires_power = 0 - report_alerts = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + requires_power = FALSE + report_alerts = FALSE /area/awaymission/clownplanet/miningtown name = "\improper Clown Planet - Bananium-o-Rama" icon_state = "away1" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/clownplanet/mine name = "\improper Clown Planet - Bananium-o-Rama Mines" icon_state = "away2" - luminosity = 1 - requires_power = 0 \ No newline at end of file + requires_power = FALSE \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index 91c09d15f30..a24da0d6df7 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -9,31 +9,26 @@ /area/awaymission/wwmines name = "\improper Wild West Mines" icon_state = "away1" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwgov name = "\improper Wild West Mansion" icon_state = "away2" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwrefine name = "\improper Wild West Refinery" icon_state = "away3" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwvault name = "\improper Wild West Vault" icon_state = "away3" - luminosity = 0 /area/awaymission/wwvaultdoors name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power icon_state = "away2" - requires_power = 0 - luminosity = 0 + requires_power = FALSE /* * Wish Granter diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index e6e8e610a4d..b8f635b6344 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -1,368 +1,367 @@ -// /area/awaymission/upperlevel -// name = "Open Space" -// color = "#888" -// dynamic_lighting = 0 -// requires_power = 0 +/area/awaymission/upperlevel + name = "Open Space" + color = "#888" + dynamic_lighting = 0 + requires_power = 0 -// // Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is -// /obj/effect/levelref -// name = "level reference" -// icon = 'icons/mob/screen_gen.dmi' -// icon_state = "x2" -// invisibility = 101 +// Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is +/obj/effect/levelref + name = "level reference" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + invisibility = 101 -// var/id = null -// var/obj/effect/levelref/other = null -// var/offset_x -// var/offset_y -// var/offset_z -// var/global/list/levels[0] + var/id = null + var/obj/effect/levelref/other = null + var/offset_x + var/offset_y + var/offset_z + var/global/list/levels[0] -// /obj/effect/levelref/New() -// ..() -// levels += src +/obj/effect/levelref/New() + ..() + levels += src -// /obj/effect/levelref/Initialize() -// ..() -// for(var/obj/effect/levelref/O in levels) -// if(id == O.id && O != src) -// other = O -// update_offset() -// O.other = src -// O.update_offset() -// for(var/turf/unsimulated/floor/upperlevel/U in get_area(loc)) -// U.init(src) -// return +/obj/effect/levelref/Initialize() + ..() + for(var/obj/effect/levelref/O in levels) + if(id == O.id && O != src) + other = O + update_offset() + O.other = src + O.update_offset() + for(var/turf/unsimulated/floor/upperlevel/U in get_area(loc)) + U.init(src) + return -// /obj/effect/levelref/Destroy() -// levels -= src -// return ..() +/obj/effect/levelref/Destroy() + levels -= src + return ..() -// /obj/effect/levelref/proc/update_offset() -// offset_x = other.x - x -// offset_y = other.y - y -// offset_z = other.z - z +/obj/effect/levelref/proc/update_offset() + offset_x = other.x - x + offset_y = other.y - y + offset_z = other.z - z -// // Used by /turf/unsimulated/floor/upperlevel and /obj/effect/view_portal/visual -// // to know if the world changed on the remote side -// /obj/effect/portal_sensor -// invisibility = 101 -// var/light_hash = -1 -// var/triggered_this_tick = 0 -// var/datum/owner // owner that receive signals -// var/list/params[0] // what to send to the main object to indicate which sensor -// var/trigger_limit = 5 // number of time we're allowed to trigger per ptick +// Used by /turf/unsimulated/floor/upperlevel and /obj/effect/view_portal/visual +// to know if the world changed on the remote side +/obj/effect/portal_sensor + invisibility = 101 + var/required_color = -1 + var/triggered_this_tick = 0 + var/datum/owner // owner that receive signals + var/list/params[0] // what to send to the main object to indicate which sensor + var/trigger_limit = 5 // number of time we're allowed to trigger per ptick -// /obj/effect/portal_sensor/New(loc, o, ...) -// ..() -// owner = o -// if(args.len >= 3) -// params = args.Copy(3) -// processing_objects += src -// trigger() +/obj/effect/portal_sensor/New(loc, o, ...) + ..() + owner = o + if(args.len >= 3) + params = args.Copy(3) + processing_objects += src + trigger() -// /obj/effect/portal_sensor/Destroy() -// processing_objects -= src -// return ..() +/obj/effect/portal_sensor/Destroy() + processing_objects -= src + return ..() -// /obj/effect/portal_sensor/Crossed(A) -// trigger() +/obj/effect/portal_sensor/Crossed(A) + trigger() -// /obj/effect/portal_sensor/Uncrossed(A) -// trigger() +/obj/effect/portal_sensor/Uncrossed(A) + trigger() -// /obj/effect/portal_sensor/process() -// check_light() -// if(triggered_this_tick >= trigger_limit) -// call(owner, "trigger")(arglist(params)) -// triggered_this_tick = 0 +/obj/effect/portal_sensor/process() + check_light() + if(triggered_this_tick >= trigger_limit) + call(owner, "trigger")(arglist(params)) + triggered_this_tick = 0 -// /obj/effect/portal_sensor/proc/trigger() -// triggered_this_tick++ -// if(triggered_this_tick < trigger_limit) -// call(owner, "trigger")(arglist(params)) +/obj/effect/portal_sensor/proc/trigger() + triggered_this_tick++ + if(triggered_this_tick < trigger_limit) + call(owner, "trigger")(arglist(params)) -// /obj/effect/portal_sensor/proc/check_light() -// var/turf/T = loc -// if(istype(T) && T.lighting_object && !T.lighting_object.needs_update) -// var/atom/movable/lighting_object/O = T.lighting_object -// var/hash = O.lum_r + O.lum_g + O.lum_b -// if(hash != light_hash) -// light_hash = hash -// trigger() -// else -// if(light_hash != -1) -// light_hash = -1 -// trigger() +/obj/effect/portal_sensor/proc/check_light() + var/turf/T = loc + if(istype(T) && T.lighting_object && !T.lighting_object.needs_update) + var/atom/movable/lighting_object/O = T.lighting_object + if(O.color != required_color) + required_color = O.color + trigger() + else + if(required_color != -1) + required_color = -1 + trigger() -// // for second floor showing floor below -// /turf/unsimulated/floor/upperlevel -// icon = 'icons/turf/areas.dmi' -// icon_state = "dark128" -// layer = AREA_LAYER + 0.5 -// appearance_flags = TILE_BOUND | KEEP_TOGETHER -// var/turf/lower_turf -// var/obj/effect/portal_sensor/sensor +// for second floor showing floor below +/turf/unsimulated/floor/upperlevel + icon = 'icons/turf/areas.dmi' + icon_state = "dark128" + layer = AREA_LAYER + 0.5 + appearance_flags = TILE_BOUND | KEEP_TOGETHER + var/turf/lower_turf + var/obj/effect/portal_sensor/sensor -// /turf/unsimulated/floor/upperlevel/New() -// ..() -// var/obj/effect/levelref/R = locate() in get_area(src) -// if(R && R.other) -// init(R) +/turf/unsimulated/floor/upperlevel/New() + ..() + var/obj/effect/levelref/R = locate() in get_area(src) + if(R && R.other) + init(R) -// /turf/unsimulated/floor/upperlevel/Destroy() -// QDEL_NULL(sensor) -// return ..() +/turf/unsimulated/floor/upperlevel/Destroy() + QDEL_NULL(sensor) + return ..() -// /turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R) -// lower_turf = locate(x + R.offset_x, y + R.offset_y, z + R.offset_z) -// if(lower_turf) -// sensor = new(lower_turf, src) +/turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R) + lower_turf = locate(x + R.offset_x, y + R.offset_y, z + R.offset_z) + if(lower_turf) + sensor = new(lower_turf, src) -// /turf/unsimulated/floor/upperlevel/Entered(atom/movable/AM, atom/OL, ignoreRest = 0) -// if(isliving(AM) || istype(AM, /obj)) -// if(isliving(AM)) -// var/mob/living/M = AM -// M.emote("scream") -// M.SpinAnimation(5, 1) -// AM.forceMove(lower_turf) +/turf/unsimulated/floor/upperlevel/Entered(atom/movable/AM, atom/OL, ignoreRest = 0) + if(isliving(AM) || istype(AM, /obj)) + if(isliving(AM)) + var/mob/living/M = AM + M.emote("scream") + M.SpinAnimation(5, 1) + AM.forceMove(lower_turf) -// /turf/unsimulated/floor/upperlevel/attack_ghost(mob/user) -// user.forceMove(lower_turf) +/turf/unsimulated/floor/upperlevel/attack_ghost(mob/user) + user.forceMove(lower_turf) -// /turf/unsimulated/floor/upperlevel/proc/trigger() -// name = lower_turf.name -// desc = lower_turf.desc +/turf/unsimulated/floor/upperlevel/proc/trigger() + name = lower_turf.name + desc = lower_turf.desc -// // render each atom -// underlays.Cut() -// for(var/X in list(lower_turf) + lower_turf.contents) -// var/atom/A = X -// if(A && A.invisibility <= SEE_INVISIBLE_LIVING) -// var/image/I = image(A, layer = AREA_LAYER + A.layer * 0.01, dir = A.dir) -// I.pixel_x = A.pixel_x -// I.pixel_y = A.pixel_y -// underlays += I + // render each atom + underlays.Cut() + for(var/X in list(lower_turf) + lower_turf.contents) + var/atom/A = X + if(A && A.invisibility <= SEE_INVISIBLE_LIVING) + var/image/I = image(A, layer = AREA_LAYER + A.layer * 0.01, dir = A.dir) + I.pixel_x = A.pixel_x + I.pixel_y = A.pixel_y + underlays += I -// // remote end of narnia portal -// /obj/effect/view_portal -// name = "portal target" -// icon = 'icons/mob/screen_gen.dmi' -// icon_state = "x2" -// invisibility = 101 -// anchored = 1 +// remote end of narnia portal +/obj/effect/view_portal + name = "portal target" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + invisibility = 101 + anchored = 1 -// var/id = null // id of other portal turf we connect to + var/id = null // id of other portal turf we connect to -// var/obj/effect/view_portal/other = null -// var/global/list/portals[0] + var/obj/effect/view_portal/other = null + var/global/list/portals[0] -// /obj/effect/view_portal/New() -// ..() -// GLOB.portals += src +/obj/effect/view_portal/New() + ..() + GLOB.portals += src -// /obj/effect/view_portal/Initialize() -// ..() -// if(id) -// for(var/obj/effect/view_portal/O in GLOB.portals) -// if(id == O.id && O != src && can_link(O)) -// other = O -// O.other = src -// linkup() -// O.linkup() -// if(other) -// return +/obj/effect/view_portal/Initialize() + ..() + if(id) + for(var/obj/effect/view_portal/O in GLOB.portals) + if(id == O.id && O != src && can_link(O)) + other = O + O.other = src + linkup() + O.linkup() + if(other) + return -// /obj/effect/view_portal/Destroy() -// GLOB.portals -= src -// return ..() +/obj/effect/view_portal/Destroy() + GLOB.portals -= src + return ..() -// /obj/effect/view_portal/proc/can_link(obj/effect/view_portal/P) -// return P.type == /obj/effect/view_portal/visual && !P.other +/obj/effect/view_portal/proc/can_link(obj/effect/view_portal/P) + return P.type == /obj/effect/view_portal/visual && !P.other -// /obj/effect/view_portal/proc/linkup() -// // allow it to link to multiple visual nodes -// other = null +/obj/effect/view_portal/proc/linkup() + // allow it to link to multiple visual nodes + other = null -// // near end of nania portal -// /obj/effect/view_portal/visual -// name = "???" -// desc = "You'll have to get closer to clearly see what this is." +// near end of nania portal +/obj/effect/view_portal/visual + name = "???" + desc = "You'll have to get closer to clearly see what this is." -// icon = 'icons/turf/floors.dmi' -// icon_state = "loadingarea" -// opacity = 1 -// density = 1 -// invisibility = 0 -// appearance_flags = TILE_BOUND | KEEP_TOGETHER -// var/dist = 6 // dist that we render out -// var/radius = 3 // dist we render on other axis, in each direction -// var/frustrum = 0 // if 1, get wider and wider at each step outward -// var/teleport = 1 // should teleport? + icon = 'icons/turf/floors.dmi' + icon_state = "loadingarea" + opacity = 1 + density = 1 + invisibility = 0 + appearance_flags = TILE_BOUND | KEEP_TOGETHER + var/dist = 6 // dist that we render out + var/radius = 3 // dist we render on other axis, in each direction + var/frustrum = 0 // if 1, get wider and wider at each step outward + var/teleport = 1 // should teleport? -// var/list/render_block -// var/list/sensors[0] -// var/list/tiles[0] + var/list/render_block + var/list/sensors[0] + var/list/tiles[0] -// var/list/near_render_block -// var/turf/near_viewpoint + var/list/near_render_block + var/turf/near_viewpoint -// /obj/effect/view_portal/visual/Destroy() -// for(var/T in sensors) -// qdel(sensors[T]) -// sensors.Cut() -// sensors = null -// for(var/T in tiles) -// qdel(tiles[T]) -// tiles.Cut() -// tiles = null -// render_block = null -// near_render_block = null -// near_viewpoint = null -// return ..() +/obj/effect/view_portal/visual/Destroy() + for(var/T in sensors) + qdel(sensors[T]) + sensors.Cut() + sensors = null + for(var/T in tiles) + qdel(tiles[T]) + tiles.Cut() + tiles = null + render_block = null + near_render_block = null + near_viewpoint = null + return ..() -// /obj/effect/view_portal/visual/can_link(obj/effect/view_portal/P) -// return P.type == /obj/effect/view_portal +/obj/effect/view_portal/visual/can_link(obj/effect/view_portal/P) + return P.type == /obj/effect/view_portal -// /obj/effect/view_portal/visual/linkup() -// icon = null -// icon_state = null -// var/turf/Tloc = get_turf(loc) -// if(Tloc) -// Tloc.icon = null -// Tloc.icon_state = null -// Tloc.dynamic_lighting = 0 -// layer = AREA_LAYER + 0.5 +/obj/effect/view_portal/visual/linkup() + icon = null + icon_state = null + var/turf/Tloc = get_turf(loc) + if(Tloc) + Tloc.icon = null + Tloc.icon_state = null + Tloc.dynamic_lighting = 0 + layer = AREA_LAYER + 0.5 -// // setup references -// var/crossdir = angle2dir((dir2angle(dir) + 90) % 360) -// near_viewpoint = get_step(get_turf(src), GetOppositeDir(dir)) + // setup references + var/crossdir = angle2dir((dir2angle(dir) + 90) % 360) + near_viewpoint = get_step(get_turf(src), GetOppositeDir(dir)) -// // setup far turfs -// var/turf/T1 = get_turf(other) -// var/turf/T2 = T1 + // setup far turfs + var/turf/T1 = get_turf(other) + var/turf/T2 = T1 -// for(var/i in 1 to radius) -// T1 = get_step(T1, crossdir) -// T2 = get_step(T2, GetOppositeDir(crossdir)) -// if(frustrum) -// // make a trapazoid, with length dist, short end radius*2 long, -// // and 45 degree angles -// render_block = block(T1, T2) -// for(var/i in 1 to dist) -// T1 = get_step(get_step(T1, dir), crossdir) -// T2 = get_step(get_step(T2, dir), GetOppositeDir(crossdir)) -// render_block += block(T1, T2) -// else -// // else make a box dist x radius*2 -// for(var/i in 1 to dist) -// T2 = get_step(T2, dir) -// render_block = block(T1, T2) -// for(var/turf/T in render_block) -// sensors[T] = new /obj/effect/portal_sensor(T, src, 0, T) + for(var/i in 1 to radius) + T1 = get_step(T1, crossdir) + T2 = get_step(T2, GetOppositeDir(crossdir)) + if(frustrum) + // make a trapazoid, with length dist, short end radius*2 long, + // and 45 degree angles + render_block = block(T1, T2) + for(var/i in 1 to dist) + T1 = get_step(get_step(T1, dir), crossdir) + T2 = get_step(get_step(T2, dir), GetOppositeDir(crossdir)) + render_block += block(T1, T2) + else + // else make a box dist x radius*2 + for(var/i in 1 to dist) + T2 = get_step(T2, dir) + render_block = block(T1, T2) + for(var/turf/T in render_block) + sensors[T] = new /obj/effect/portal_sensor(T, src, 0, T) -// // setup turfs on this side of the portal to cover the map streaming -// // has to be done later for view() to be correct (so it happens when the walls exist) -// /obj/effect/view_portal/visual/proc/setup_near() -// var/nvs = dir & (EAST|WEST) ? near_viewpoint.x - x : near_viewpoint.y - y -// if(nvs) -// nvs = SIGN(nvs) -// // need a mob for view() to work correctly -// var/mob/M = new(near_viewpoint) -// M.see_invisible = SEE_INVISIBLE_LIVING -// near_render_block = view(M, world.view) -// qdel(M) -// for(var/A in near_render_block) -// var/turf/T = A -// if(istype(T)) -// var/ts = dir & (EAST|WEST) ? T.x - x : T.y - y -// if(ts) -// ts = SIGN(ts) -// if(nvs == ts) -// sensors[T] = new /obj/effect/portal_sensor(T, src, 1, T) -// else -// near_render_block -= T -// else -// near_render_block -= T +// setup turfs on this side of the portal to cover the map streaming +// has to be done later for view() to be correct (so it happens when the walls exist) +/obj/effect/view_portal/visual/proc/setup_near() + var/nvs = dir & (EAST|WEST) ? near_viewpoint.x - x : near_viewpoint.y - y + if(nvs) + nvs = SIGN(nvs) + // need a mob for view() to work correctly + var/mob/M = new(near_viewpoint) + M.see_invisible = SEE_INVISIBLE_LIVING + near_render_block = view(M, world.view) + qdel(M) + for(var/A in near_render_block) + var/turf/T = A + if(istype(T)) + var/ts = dir & (EAST|WEST) ? T.x - x : T.y - y + if(ts) + ts = SIGN(ts) + if(nvs == ts) + sensors[T] = new /obj/effect/portal_sensor(T, src, 1, T) + else + near_render_block -= T + else + near_render_block -= T -// /obj/effect/view_portal/visual/Bumped(atom/movable/thing) -// if((istype(thing, /obj) || isliving(thing)) && other && teleport) -// if(!near_render_block) -// setup_near() +/obj/effect/view_portal/visual/Bumped(atom/movable/thing) + if((istype(thing, /obj) || isliving(thing)) && other && teleport) + if(!near_render_block) + setup_near() -// var/mob/living/M = thing -// // make the person glide onto the dest, giving a smooth transition -// var/ox = thing.x - x -// var/oy = thing.y - y -// if(istype(M) && M.client) -// M.notransform = 1 -// // cover up client-side map loading -// M.screen_loc = "CENTER" -// M.client.screen += M -// for(var/T in tiles) -// M.client.screen += tiles[T] + var/mob/living/M = thing + // make the person glide onto the dest, giving a smooth transition + var/ox = thing.x - x + var/oy = thing.y - y + if(istype(M) && M.client) + M.notransform = 1 + // cover up client-side map loading + M.screen_loc = "CENTER" + M.client.screen += M + for(var/T in tiles) + M.client.screen += tiles[T] -// // wait a tick for the screen to replicate across network -// // or this whole exercise of covering the transition is pointless -// spawn(1) -// thing.forceMove(locate(other.x + ox, other.y + oy, other.z)) -// sleep(1) -// if(istype(M) && M.client) -// for(var/T in tiles) -// M.client.screen -= tiles[T] -// M.client.screen -= M -// M.screen_loc = initial(M.screen_loc) -// thing.forceMove(get_turf(other.loc)) -// if(istype(M) && M.client) -// M.notransform = 0 + // wait a tick for the screen to replicate across network + // or this whole exercise of covering the transition is pointless + spawn(1) + thing.forceMove(locate(other.x + ox, other.y + oy, other.z)) + sleep(1) + if(istype(M) && M.client) + for(var/T in tiles) + M.client.screen -= tiles[T] + M.client.screen -= M + M.screen_loc = initial(M.screen_loc) + thing.forceMove(get_turf(other.loc)) + if(istype(M) && M.client) + M.notransform = 0 -// /obj/effect/view_portal/visual/attack_ghost(mob/user) -// user.forceMove(get_turf(other.loc)) +/obj/effect/view_portal/visual/attack_ghost(mob/user) + user.forceMove(get_turf(other.loc)) -// /obj/effect/view_portal/visual/proc/trigger(near, turf/T) -// var/obj/effect/view_portal_dummy/D = tiles[T] -// if(D) -// D.overlays.Cut() -// else -// D = new(src, near, T) -// tiles[T] = D +/obj/effect/view_portal/visual/proc/trigger(near, turf/T) + var/obj/effect/view_portal_dummy/D = tiles[T] + if(D) + D.overlays.Cut() + else + D = new(src, near, T) + tiles[T] = D -// // render atoms to overlays of a dummy object -// if(D.name != T.name) -// D.name = T.name -// D.desc = T.desc -// for(var/AX in list(T) + T.contents) -// var/atom/A = AX -// if(A && A.invisibility <= SEE_INVISIBLE_LIVING) -// var/image/I = image(A, layer = D.layer + A.layer * 0.01, dir = A.dir) -// I.pixel_x = A.pixel_x -// I.pixel_y = A.pixel_y -// D.overlays += I + // render atoms to overlays of a dummy object + if(D.name != T.name) + D.name = T.name + D.desc = T.desc + for(var/AX in list(T) + T.contents) + var/atom/A = AX + if(A && A.invisibility <= SEE_INVISIBLE_LIVING) + var/image/I = image(A, layer = D.layer + A.layer * 0.01, dir = A.dir) + I.pixel_x = A.pixel_x + I.pixel_y = A.pixel_y + D.overlays += I -// // tile of rendered other side for narnia portal -// /obj/effect/view_portal_dummy -// var/obj/effect/view_portal/visual/owner +// tile of rendered other side for narnia portal +/obj/effect/view_portal_dummy + var/obj/effect/view_portal/visual/owner -// /obj/effect/view_portal_dummy/New(obj/effect/view_portal/visual/V, near, turf/T) -// ..() -// if(!near) -// loc = V.loc -// owner = V +/obj/effect/view_portal_dummy/New(obj/effect/view_portal/visual/V, near, turf/T) + ..() + if(!near) + loc = V.loc + owner = V -// var/ox -// var/oy -// if(near) -// ox = (T.x - V.near_viewpoint.x) -// oy = (T.y - V.near_viewpoint.y) -// layer = AREA_LAYER + 0.4 -// else -// ox = T.x - V.other.x + V.x - V.near_viewpoint.x -// oy = T.y - V.other.y + V.y - V.near_viewpoint.y -// pixel_x = 32 * (T.x - V.other.x) -// pixel_y = 32 * (T.y - V.other.y) -// layer = AREA_LAYER + 0.5 -// if(abs(ox) <= world.view && abs(oy) <= world.view) -// screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]" + var/ox + var/oy + if(near) + ox = (T.x - V.near_viewpoint.x) + oy = (T.y - V.near_viewpoint.y) + layer = AREA_LAYER + 0.4 + else + ox = T.x - V.other.x + V.x - V.near_viewpoint.x + oy = T.y - V.other.y + V.y - V.near_viewpoint.y + pixel_x = 32 * (T.x - V.other.x) + pixel_y = 32 * (T.y - V.other.y) + layer = AREA_LAYER + 0.5 + if(abs(ox) <= world.view && abs(oy) <= world.view) + screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]" -// /obj/effect/view_portal_dummy/attack_ghost(mob/user) -// owner.attack_ghost(user) +/obj/effect/view_portal_dummy/attack_ghost(mob/user) + owner.attack_ghost(user) diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index 68119ba3921..ed8b7e71d6c 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -1,5 +1,5 @@ /proc/create_all_lighting_objects() - for(var/area/A in world) + for(var/area/A in GLOB.all_areas) if(!IS_DYNAMIC_LIGHTING(A)) continue diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index 6d7fa9028a8..e8134c4ac5c 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -179,6 +179,6 @@ /datum/chemical_reaction/rotatium name = "Rotatium" id = "Rotatium" - results = "rotatium" + result = "rotatium" required_reagents = list("lsd" = 1, "teslium" = 1, "fentanyl" = 1) mix_message = "After sparks, fire, and the smell of LSD, the mix is constantly spinning with no stop in sight." \ No newline at end of file From b79d3545e153867621850be731ef0e5323bd8392 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 23:28:48 +0200 Subject: [PATCH 13/41] Enable viewing own mob in darkness --- code/__DEFINES/misc.dm | 6 +++++- code/_onclick/hud/fullscreen.dm | 32 +++++++++++++++++++------------- code/_onclick/hud/human.dm | 1 + icons/mob/screen_full.dmi | Bin 1367919 -> 1371578 bytes 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index eae4478d0a1..9ecf8efb974 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -377,4 +377,8 @@ #define GHOST_ORBIT_PENTAGON "pentagon" // Filters -#define FILTER_AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") \ No newline at end of file +#define FILTER_AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") + +//Fullscreen overlay resolution in tiles. +#define FULLSCREEN_OVERLAY_RESOLUTION_X 15 +#define FULLSCREEN_OVERLAY_RESOLUTION_Y 15 \ No newline at end of file diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 82b56aaf1b7..0a9d0f6b4f0 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -2,23 +2,21 @@ var/list/screens = list() /mob/proc/overlay_fullscreen(category, type, severity) - var/obj/screen/fullscreen/screen - if(screens[category]) - screen = screens[category] - if(screen.type != type) - clear_fullscreen(category, FALSE) - return .() - else if(!severity || severity == screen.severity) - return null - else - screen = new type + var/obj/screen/fullscreen/screen = screens[category] + if (!screen || screen.type != type) + // needs to be recreated + clear_fullscreen(category, FALSE) + screens[category] = screen = new type() + else if ((!severity || severity == screen.severity) && (!client || screen.screen_loc != "CENTER-7,CENTER-7" || screen.view == client.view)) + // doesn't need to be updated + return screen screen.icon_state = "[initial(screen.icon_state)][severity]" screen.severity = severity - - screens[category] = screen - if(client && screen.should_show_to(src)) + if (client && screen.should_show_to(src)) + screen.update_for_view(client.view) client.screen += screen + return screen /mob/proc/clear_fullscreen(category, animated = 10) @@ -51,6 +49,7 @@ for(var/category in screens) screen = screens[category] if(screen.should_show_to(src)) + screen.update_for_view(mymob.client.view) mymob.client.screen |= screen else mymob.client.screen -= screen @@ -62,9 +61,16 @@ layer = FULLSCREEN_LAYER plane = FULLSCREEN_PLANE mouse_opacity = MOUSE_OPACITY_TRANSPARENT + var/view = 7 var/severity = 0 var/show_when_dead = FALSE +/obj/screen/fullscreen/proc/update_for_view(client_view) + if (screen_loc == "CENTER-7,CENTER-7" && view != client_view) + var/list/actualview = getviewsize(client_view) + view = client_view + transform = matrix(actualview[1]/FULLSCREEN_OVERLAY_RESOLUTION_X, 0, 0, 0, actualview[2]/FULLSCREEN_OVERLAY_RESOLUTION_Y, 0) + /obj/screen/fullscreen/proc/should_show_to(mob/mymob) if(!show_when_dead && mymob.stat == DEAD) return FALSE diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 6f5c8ee0548..811a7e89cdb 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -83,6 +83,7 @@ /datum/hud/human/New(mob/living/carbon/human/owner, var/ui_style = 'icons/mob/screen_white.dmi', var/ui_color = "#ffffff", var/ui_alpha = 255) ..() + owner.overlay_fullscreen("see_through_darkness", /obj/screen/fullscreen/see_through_darkness) var/obj/screen/using var/obj/screen/inventory/inv_box diff --git a/icons/mob/screen_full.dmi b/icons/mob/screen_full.dmi index e84b05469506dba025f5e6a0681e663318fb9368..595b870a17280aa7a15603ceb61108bbac5d85ad 100644 GIT binary patch delta 37450 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≠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 RJLuydytm@r^Gi4E`+r1-f(8Hp delta 33762 zcmXtfc|g+l|Nr{7<*u^U*5$RWEw`+!EH6CPwsIZDERjrwmQ(UT@<0WI_xiZiI@C31 zY6{d`T9`0XRFq>al{|pVkOYMi0R@qS0J(qf{qg(b`JcS;_2%_F9>=p+cGAE-`P*lJ z7e4V+(YG0e=>=Kmi?T3zZ@f|3So3@P@khJYUPL**Jg(nzyC?qk`-tzi|8bjmDJbTH z)_3mZp1j#@ID7Byl^d&Wa19qdrVkLs48aO5acl4_+b{O3Z_M8xS;~l?`|2C!&O39D zyV8CQ4%of++$mo|8Dw%r%9h|+eB*`_n{-jmdAiy_};l0>cZ8x50P^ zjCa9!4~+N0SPjM+FucK73&uJyJ^*8Vcl3%6g{eT_XG7TZ15ZY`lI!_hq?`3=oq~54 z-zCJKmZTou@BP7jHrw~(?+$G{alsH$j?4UU?VFw#pRIft)fy!KIXlekAvxtN&1zWM z?7)FG&gurt13}s2%`FwCR_UpD&$=V*AJ%!^Dn)qE$!@oSD)S2Rgp-I{io}bhO|;%{ zAx#J{!+vW09r~?uwX0qT8F8GXJBHu57lJAem3d{^9{pB!T>*LcIBWvHu?!6iW8<3E zgo;82mnma8;(^nly`>dEKw2(8{e@8Qh!VAF?)cY31`IYa>`TV`&ddBC&D<%GFW*)% z#n#X0mcr?)vaPGKVJo|5MB??e=|E`)0q80oOnl=-PmL9ITF5k1sbAx&#Np&mR^Q)m=zzd1Eb-DbeaMu;nS925G4#0G0nGo!W ziNIWQCHHwruAx7Kif(?~&(c&15k|~szx|>X|%XTG1UwD1L!e&34=^1i-lPWKrf;kdm z;-Vb8xh3cXW}&*225{GIuvT=CI%px(_oC+mq*w!$FIw?eME9U&Q19rYVSpzC&RbfnIC5vP`E*DB3!n+R(b2@bQY5~#2Nz7Vl z{dP&CxSF9exr?yCW6dTTQ&}eyCNC0{%(*W-{x7YKAwnaDQo{C>-2h|`#;oFtHO4%^ z02$%o>_OIq)&u`=2wt|bn8iRbn?~4@Pw31Lpk3b?L=0<}x&9O;Y8&{O4t?0oW-V`V zR?hY-ASWAQpmIimpO{punRXD|DPp%4!?BuYU9K#*z;UXKGyUjS;^UeFBC(;wgo(0b z8e%o*u<>9xx&d8Srl`RJHM(<4!!I<-Wh}C;K9oM*r>VEy{J}DHH*y1G*kue7)({+7 z*!$KSSk&c32=>qy-2Y%;3!RmKj0z<%?i^zfF}Z)qhi7#Tgf1~usq5WD4RXr zAQB!GHWSWvaTt%gIk*6Rj=?iJiaCh1|K;u8WwYjT1!SCs4xluIjAUfH2T?DAqstR~ z5M)3k9O9jHyLND#4jP`oi)~|ADG<%OW7UNXaJ2$5K7}@{a{e+<;%ZV}d1q)HkPPwKPk=s&DTyYxURuXx{yua9Jp)p*bS9-xV2a z%TxC^+0Qr@hmI_IlwKoE7ozzI)_j&s&bI`Z*Ja=bjfc7(WzsRS8O5lj0k7lLtC~8+nJ7eb(9$kXTXS=4FGtV zorGyx1%TU(68W6vk+4$bvg`ERj<|l$_Vb~C-_l^?O`5=Xu9v7fV#}fI3Y}RW2%`(nZ#+V z@Rh&NxRHwr+~0YhuW`Bi*!DskrY^bM$=!uPAu{}3QE&0(Ga`P>Og8OVYr+UsHOm3xMziIZJkKz~e^FERf$7z?DnO~RMEE@M zbyO4!O3mzT)`q3`T2Y$KwiTOM0(fVnwA>HB@=t?W5n7dm;v!3mr~k0N>~o2axhnvw zfR})E5pDp4ak%CVr?6&h>D11gvbJ8v?rg%s`T|HR4nEG^?inN)J8af@X695ticGph zXrU+YLaPJuShMjvU_a3yorU3vtXVmKJ5mW08&b3N29ZPqJ6=r*H)j3fI6Cf5MS zn%2y!2Dm(=Pv#v%)+`+~xvn?~q5AwnH&o{SQO2dk-qjL+2Vx&VR0_uKYJmC-Acg^n z*y*JrH&nP2DTWi9vwfzAcqPVSZeGtxelmwwcBUFt8v60QKrT?++jB;LNHe!8Bkv?6 z;tF)8u3izq7quMMcv}x``~zq_wq90O@@HwfmU@p;rraTad4%oA~xIFcth zr2umFGT^v^*>eb2Up1o{>$LTp+arIQQ+Rv7=?Ao!vO&of^}qLTwxf%5d-{wZELHZ^ z#pV7Nlb@~c#_ji9cOF<00}7coyi#F(l^cWq<8Ivn<-CH@2xtZ3Ej8Ud~}N1Fvc#}<+J*( zFyiiTeUm5hdTsRL)qL5k_b;Zsvr}n)P2w_HQHbn^qP)HKe^}YyFnQ5KLrXnF0cX`N zj`bN+-Zc~pOt64&%nykxyWWQ(izj&SnMew&-N!V7TxG~H2#ALoL}K)Ys&a&TK{XTgw|-%2&xE*{oZKDz zlu)I#t_W+d%y#2ANd~e&iSuM@V&d!sA&-+IxDL>&7}BC7g;*KN1Jw2~4K@6WziX>z zYVS+;0kL+xgvVbhe1Q}4#J!hgjOZ-K5qE`NSpE)}BQk}Nbb{>D->ZB;Rw+|aWzZNe zwBf4flb0c20v%`&eBntdU)O2}XNyt{>wNLz8*hC4#^G-dB&v?MU0*cYuH?Mj?g4~d zFL!{`fo4*tC=1xpjrwc?xw=ef7&=V~AK|r8dXCv*6B9LlO}#Ttl-X$bE~R_PUQ$fq z9H2LO$~MSgX+g+j`SZ$C7$L7s{@hz3;0fmNf8nG1dK>e}e*CF3>YkWP6Q(iL9gXNX z*ranN#j(2>(pqGd77wz(t$!h7Eg$LyJB2}eojD=M02UPXknzJJsneG zXJ)_a&QqBetvDLy7f@oq7&^Vs?q4{*Fiv80ZKWDuMC??o@yx`S`8%wJWWQOAcI4?9qCn%Hr13pms1&!;*9v7nqAUhKq3)ofTB!B( zS^zLCrk8Xn$f{hL?%H*>Cr!YC0R_xTWhseLFWWnQG0;}>tn!o<1ucpuM?|3ZJb=i!3`?nHWoG67vG{l4MVWy1M>v`J%afsfj3EcQS zhj=TJWMrKl@B8wUUw{qM&d5g36W_phDKr?;AG3`z`(E^EZHoAlE6OLBDJu9u9>-yyh-z zHY}y?icxizD4VyuiMRZr=(^VAl#M8tPCb^Cqa-?3>=lM+R*{f`AD^997VDWE04LUx zrGI`^*3!GJahjJxZudr)j|q+DRXYbs4ar4HXiRtxeX9#)N2FRKD7Go4*FFXe;<<(rGH{(0s~qKtpEsf9-hs>i+Vq zda{sXaZg=Jt;e|kH!|r23V3)dY3tHE^AVmwTl5eQMnubT+@^VkS`lTaclxvp$?%ph z9ca7uhtE-xv3NO;W;fY#Vv<^Q7qyLHeZK=H1wnRqcr$F;<~E6)KDtreonanI(*ZSM z7pj^j=ro4oitcrDciRj}fq=AX!V$GVoN0uZ7!@O;18BV2+{G6=8ypWN=LuFLm_AX{ zWZ#>jcTg==njmt!%DOwv=*DfKV5Ox0NJXbKMmN28rI>&=!P*Xz+0wA9(6?7@on~?nyFf0RbU1 zV6#eq@HwRM7n9^U81W)J&3p72oY|D^slinUFJ^I;Z%o@_ZH+W z6(QnK(pH%T=CG5wDwyj;9)H?YtL#xU*ZcmV08lYws96wnup>RfQO9B@&dqo|X{#lG z<4};stSpsxD$9(;9Vc}I#SJV&Xt)K5C7lY4KoWr^5VxS ziBb|*t38}$E^03OC$pWi)Qn|6{0-{wu6HM`_JveZ18%6RUzcwEoH8mZJMXU>))iR} z*{WU<*y~EW($Wd7m4915e6lqjl8tc_=!Vt-OTW)?_?ksPyYgOFDvpT2*}oAF!tfj8 zY{=s=tkNsxNTYz)7pQ@+G7W|fv;eo_jP11$`n6+dmVE9uJ6fT{wq;CzL%kj^eY- zq8L{1WzE+x#E2t_DMCzFDf4|m2BG1-0KUO-BKHw|vr5qj$7|TQe@6LBrZ4~E;HJ<@ z)STWRW~c1>mH%&oGYTS-_YUz5qpWnm8BGbUv_CuIc*PtJM43Br{KCs)gsP?(gAZ8* z&LhV+id;hJCZJNI2X@Ng`i*G$($puC>DItCGtoYO!P8Jo<${515vm`a!sHw^M14#* zAQpT6Y`bJBnhjTUw7eW_^zjO$3Jmu-I0%f@bu;silPScd`5K&JFIuWk}9Z`uae7Fvwiyt2e9;(;Gn-3QUoRY^wl=C0%gKrCJmkQAx6VpzY-$`D!x>4Bd{Api*a}W-9-*D zRTz9+=;GL4O;>qvL;XE#E@G_JXb|(roRU8zi2b5I%B*6!kjX;`HpASU6VQ_?MG*Rm zd6ZJZ>}_>IAo^;Y#wKbEjuMaX;LQOp(l+%FM6-z#DrgL-Y9{_N=}d{YcE)$$nr@25 zZPC~gpG2FrHIXP82O<#(no;(jEw+-l5~E>M!4UF#g`B4?RYEHT;hlyvOhEARDl`q7M9`nwZnR{h zlJtQc?*tkC$nO)B&7IGn-nS@wxVFfpZG|xrWlwFY19lM2z`Nnh`An~IHEythCw>c! zWrxDOMEv*YJl|L^Wg_&<&Ffyrko9zqXPD=GO?Kb<^PgpBH^%;!qx;ew_ESe!w_Uhu zyXXp_|5ZPNbt65M5vYooyMAUu?1?PgK4>lUn9P9Nogh@ODvvCjBt(3v;fL%0!#=%_ zp?~^Duh_%$*O;%90^(C#jntm#r>njgKo{KzYxPZvcD073IU*R=(($ZAkdkwnFFIIU znx-$Z@24Cd&?R>sLi;dn;UvG=wGJtu9h!hkH;JGPjX-M_%5+2*$3T2ISaxbPer~9| z0)?UQo!4VuaeLYPJ^pNv%kn;=>{?jOr4^(_LFb6isoe+e$9lr9SPJt9xkxPK)pfZ< zE$O@NYqgbf{_r}%?{zD7$B$lsGJy15c2sHG5dR!0TJx$Sr$%edIR~r*V2@D z$*cvYc?X626lh00gj9RAItga!eL)E62dx&HJIaIe-ky-hLYBeP z$6PP_1L&v&3QYhhn?Y^U-3U_JrqY)1W&2(&02iqytf1N{Yo1RV2T{k}op3t5fC?Gr zv7*6D-q$-pO}hkJL%!Ek3$$X%491KOZp3`Z3qPUi)!yvZ)L5wm>xcB?RGGqEoFQ90 ztKQOX7TGA@u_?V$g~o>P>zC$~5IFefz(6t)=7Tbx*kcx+HfR=@&(ok2 z{2C`=;$jd3j=ozkxzNiCQ3M)9<3l_X2!o10hbNf@qt^SC32x3w#b^$|$ui~V@5gZe zoo16|=R?s^p5AmzsE%-w(+=#7m=U0Hbxq>UaP z5wCxjQM_-71E&C`buEtX+L?Da-I3>JZvCm;mSlAsjRvxgG*T6?jBbO z^~3ScI`Api9Ao*;vLhO?PhAskinV-oWv!56Pr|x^{EyL&XyAK)s%3*BK+!dP_=4>TfrBp(8#DO5ocz1 zgbjFqCNg3c0pKs*K=3vgAUeAyhlmS~?N60WKz&jn_y>jidCEG7m5g_B z0Jk;WnRq|jttaLuql_5D#d=f2l$sp{FF^S^VXm^DC3r`w!!aBP6AtSP3qNw~DTexpyU3?79ziLh+4v)`a+7nHY4HkZW%v#7*XufXx4Ph9QrmE7{)wKAjc!)fq zZHI_w=jhkBF#=o-Gh?sO?j|ds4j<;hg%8g{r1s0`p>iKLd^u(Ra<{exHQ>9Jw_~sN zy;f?vo2(BcNO(;+erf1hRNJ+q+zD#3W>2j^tvJGVN2iFIbc!Hk<`v0K zn|pA<$hT)o;Dy+KB19_p;^F9>N#HY_yJ^9^V(XT0gl91LFCbOGiwG7xUfIT&@_KBW z5i&hs`|lzZxGT!*;*1d|+_qfla^hl(LzVy9^C&TI#B+?NapXgdn1&d{ILL}=F)24YxYZv6W-@{1pmP24G=bQoREg5%tfGar)P5i>v5GqTw-?N0A5a!i=^qX z2?1J8yLQV$uDy>)xF0BtMfz|*^{9DiL$@O~j?O;m$xHV{H-N8rr;NQ9gbjnXs#RYF#1Yfh>-ri1Mrw7c%TYtP-!ZPp5{U_Sp|8OTvKkI{ zH>XHigtco8R5Hlb`KT0B0O&g*8ZYj*!EGh4DM9*s+6J_uCacxysL^$@3MhMM$}6S9 zq71n$RVU<@`Z7lP;^hHBsFk;DL$4Er-Sa-^X6L4C`R!LV9A zFQ_^V_;=zpht5NTUjn{7ci%**X&=`!{1)uK&A6FPm4mu1!jrlxIvUQzmV?yssPOgdTUf>ZMOr@F!(EFIlv^WEx6ovzbz zdjal5IioRJP3ztNNL#K)gblk}T?MYmBVL%!4f%LKa& zMyW7WF}huz0AN0vV>ahIb@pyocXfihVrFmm1!V~xkcn*Nbw}h@r9q5)JX!mv$j%zW zB{>MGsQg$5C_}{_aDJK%f`|12HDiaNP|vJVYRs60V1jiY9-A~Su<+uRxbksl+zkGz zBsgSzkQ5Yv?2vf$r*c@z;jSwqehflp^Ho6BVV({_z7V<&274^c0_$PQujo9-7}?`1 z79J?z4#$cn#L~SDK%5>#wCLWs9iGso$ih(1Ar4_o&qTQW#N&=apd)tK+Y zSP53)JnJMuDE&ZD?HFsZb>o3l6fU-5Qc)PNSu#2LAU0y~5V{vqrN!R{T%i8th6}b@ zD|T*Fu(rj>G&7FHSw$VsL?Bq#7Nl{kmE;@CxBy~vCjkSg)ZSfOFF4*Hn5C9B zI&n_CoA7xU$ZNG%Fi3BFRdW?3xZfHCiVF+5ZoR;IKX|hrgCn7LwTAI1K{o3!J5x9Y zDw)?4s8c!v!05W8?aMSCbVqcz(@Y<+pl(0O`WBuvHVJ%!;R`5;I`aMDM#V9TA>Iez zR>v*UC8_*Y`(Lf5Ym#WVcG$p^Rt8Cm;HiSX8bqw;-4au3qr3Eb{uRd+Y7M|RW-4Nd z=xE-9oh+`i&@?GK?RJ$l5f@<*uAzd_Mqs6=Gd)yc)t2HbJGOh|ZOZv}<8Wi~;r(w! z%J;QJUg_KT3;O#fhArZu zq8zB9L7%_2AIu0(MOG@M^ue-n*}M%Pv`xR#t)6jTKkL8m^z_e*Sgtsdp$-EIe<<@c zU()WmCun@T|LRSxOKca7j7!%ls-bnUy3g!=cPsB{n+^OW$M{9U#-BqRU)}I}d%tbQ zJp9hTLBAuN|7`D0FEZ^kR4-l3aJ;b;PO^NS|I=~bxiPy$etB+g)j|1jI7L3$Y8rm4 z%#c;ja=`+&cu1P^sppKSXxm-DuAH>bMCO#AcjKKwNHX~gIEyh5e)o>*iE^1^(3y3% zt5G=n^MJ$|*0(ZLt2vFlu`~S>pf0i_X6Dkn?HKOU*iIG0=$ZS!y_Tc-A7>a`w&g0* zmb8DERHb`^m0ExGezqr~QsMQWLObV56{nc5q6q^;?RPw?N@2(ao>?p1F*moV70)G! zt~1#6i`i}g@mmH@zw@Mlz1!f8LT;MB%y-Q>U+1RGK6Joq_izI#t(7+d-JG^^nme>= zjD_`ITO%v`OJa;{;QS!VNy$Bm&5O|n(+aQC784q1?9d>J&I-agQ+bc4Gnk*6g(7gw z7vS!o;|&0y8}ZM7V#Vx&*-kX4_2Z&ovvqsF=IN#w9gwqo5RHAol{cd-S*;-$0yRhv1EOff9bQp)s(( ztOyl75DXhAhFSNY9$lHv*a0-g0QI`zE|3}7&X^^J%im)Nfy$=Et20dCyzhr)#UyGW zg2W*=^=B1A@S5js@FM!25L9+O!!TR`IkYCLR@2hj$EXcVA8Yv~&B7Z=`$Oynt&>EJKl!7g+Yf9bPXVfsxfMWA{5o>FY$;N`!W4AYjzv>YD3*Pt#y zI+v9EDi0ZPHS7!J_-{smsLwCM{8>{+q>+8P?<~>g0$=F6mjea?x3UgXlB1b>=NJcj zomyHis|Dz47w7?4Y<(D?e=EryitEc#I3)ezx8fIHnF`=~fAZs5JrSk2Z05IYSE(ZV zuD`z0pRyB~lXCo=?aRB0G%hZxx{g{j1tZ#+Rez?T0zZMP2^w{V?=?T&9P>_Z{ZmA1 z-adZtUuC`?V9U>Iy@Hs5JWZ$ySJ@SxQdJU+H+6;tI74x}38@nZ&mS#USC++mU0-jV z_R%**g7^iHm8m_pl54nTw5~p;gh}}@1Zj6H!wstvJ-ekHIUZw1DzrK`OBD@`f9hmy4Fc~A& zer?_AO68R7^Motvvsy18+Ud`4Xj8WymvrgHQ}w*_`y+wJvdBC}Hb-T#2nEJapwe7v z#6;CPk@J`~YOXE2Xu4RlWt*B?79XL7rZgDMFOKcHCgIsM^%;>PJkI=CNStozSXA&Z z=tSvtx`WCe&lIR~Y?ExstYdo!Zax=z&T*dWj+O<3nV?)I;%?GJHs}b?c9h#zb>Hpt z6_?A??U3~A{-goCn*g9xv^qn!QmXr-_GUw2ad~l5yf`D9KKu76J_u!=!5(JkCZw~aot#X=Zx;zE!Sv#$YY#erQ|uL%{@fV@5Dcc3Z! zjCJAk1C)A8UZ>zRWN{XBL&yojiG$AnO+2nK{TwvT20rzKazq(7Jz(YYbI%z@dAF-#Ht2l?1ms2gD&evnTL*$PQB4YJPj3vhY|@_PCLSa*a`{(6%ZlBu;dvAT;QhHXNUP$)Ef-kw z7R@SZvNgzvDs0&a1!`Z;gY!^#udK2Ke5H%?k*4+kVe}Pm=vU#6&T(2cAy{uzl>6et z{?}2e{POsEFN^xED(s+5O%+L}wK-vund(i#Jhi$dlsw%--xWDCl;*s(6Eo{vF}<#N z#H{LVMSnm2R~9WWMU(ZQ=Y89ku^mQZ*Sv`raW%|ftOoc(>1NqJX)qyhOgvNydgPi+ z)R&yte+?X*`oQ-%;0ixa+#DLuo}cJD$BPVqohuXFcd((FK+9~gpsOu=gdDh2HJ?I= ziPR7CVKGTFCmT(jOGg83t8`ULB>x5VUNon_pi8JMGj(na;B&k=;OV?Wjge$l)+P-E zz@N>$V>Mu@zd~_@f{;&QR%!i42T>qC0q=IabV|OJtq#T(vT|vMRV!NnvQLUIe;ue^)&^gcnDmZc5pL;WH6qVwX z2$atX0#XIK+~_3NVXWvDhx8#29HvGizAD3Dy^D$iDs6l7#;2MmvFmI1AW=Y)8$DyW zHnIfTCOo<5Y{yr9o)c*Vq5shk*}ZPEDWVihyxyHKy1!<^kcfMc2e<{A6j%UZzb6T# zHSAkiqAT7%h4)mw79ncl|?XibKmdZC@rAg9u3~g z8f9q`idj)5%mK;${k)F_DqeWB7I+i7zfDHD?^?Xpe6O$kq zMd@@2lcHtgilxd@fxFrvgwT)Iiq;wCrr+y(dNFWhs?}6uHs2rRp~k1tBgt-Z{bHp^ z2r2_a=|#AKz(@^a$*+s*G{QwSpn#8Bb15ZSUotZ7p5`Nc>1j=?#CC1c^+PiS-l>A^ zlI-tIPFo#w%`?3CHbYc=BEN+rYaj4t8NISu@wTrcx^7PwJ@#z*Te7&^9S}EtnCkbT zzWGN2r{rW?7_skw$@)++=N9X7z?QkV8GbGJoArc|aithoc=}u;gq-mHQ5XL57%haeK=lpHElBUqK3a%+Rg?!uz?Z%*-lxxZ_Qumxm&3mCtOIAEqW~xlJWyXK zj%PscO<0G>k$pCC4l4E1(l^y(1LytwUxO6Hr6%tgnzD7vG1yRfrtyUa5u2i7_6Uuk z^KISX@u_i3k8aj`KPilzuyjlfW^b;Xu{xz+@G5}Hn&&9hfwy2TaZK1vMXtMT;-r%m zDG`*%nrvg!jpLOarBegE{V;{&$B&_fpL@D+Nqlp)EosF3Syi{)#EXm}cWob0&AbVH#$e0n+cgUB_A5`gAFAR-qa;|H$9&*gr zWot!YnWD>}*)V1+WhGOx`2NMp^5-+Xp#2i+?m@kNWeVB$UegjAKUhur`?P1t93;($5LRz7AP0jNg}X`?c&F1s zBn`GHy0(LU#dM8moHp@?C-)z{2A?IF!nMjS38hDo3L+Tf92x+rx$m1;;H=_&rp$gd zJsNq=kb~Zw=IF9^;$>$Z)>XHLe#?q(r`}!lwdh#_*~E9h0GkkuBX(CS)|(tCwPINw zO4UAmL(eP?h@gh`hYnH;cipWVnCNB__bqB7ko}@>Xlyu|x*6n2osM%ca62}=dm}9SB!<(dQph`-x~R;pNS~=_z76!=yk)J=ni2gcZHPKhg$Gj9psPq( zil*zu3fUsmXjou_ep&EBm_}d2{NS}2+dLGe?l|a<4s;{T5luRAy_3+z#bX=OP>te{ zVV>B5N4rLykm0T3u9${6Y-Iv)nV*i}$}M+|gOdgns8E=#@XdbjHCbWiMwPZj^Ld9x z2A7eNBy)AtHq95>oAqjX3z|Nd6t$GhIzJF)Q2)oN+^-Zp=5?4zC*tUVZjuV$OViBn zoo;KQp+Y?|`C%SoFiNw)=;4yH9<^$52kBR^(d6PHQVCNCFevW%C44tkXadaK&`60s zl5jfCxpq5n-nI_W*SB}((r8CesC>C1Y`f`lJiA@eP{LjZDSYXR`J>bOc_!x1?&5x6 zeB#FEz%9tryifTTe%B)tx&veSTWD$@9q#<`)((63;}9L){;IU-hx(Fdp;g*L7IFFh zl4JRsm0rL^+cf9BCu8x~5SkLrV4PSTv{BRn1YqB0uz#g#1&)(D^vtL)7Uth7rKlIO zHZ-9>bo^>@J2U<#FG5Es+iPVT9WR~-^mE(d17crixxNyYRCFDVQPb(NiHkg631$mF z@XxLbiA`6l>QDuJ$^k_(ghn(Ef7Od1qul{~fOn%s^)m$eaF_^noSzdZk&Xjyj2DQ` zdV33|IS%l< z!;d)d*tRhpl%V+>=40G5t_B4+^P#dbV~S61X-UIuq3(X9;c~>M8bx-%mdl#AmTqdo zNz^W>2t^N?sf|kk`cm8#tXD!a$S|3lZT8;>#tDC@UjI1 z;fXm0B9wQ{v=5{%Z)&rAXjA)W)?8|iq#ou5^ybyk5griwjrHC)8m3p=U0SB138vZq z#8GDOZqRWZheh80-5??UZ0qJBKXS-H|5tvky+3f6$rQy7p_4A+AN zy!q-#>@etzPBVQg9Ej!=Dkqw^do1*Wh4N8W>9dPtidNmrC}OUx#ua7#0pJ{Xf~*0Q z1iZvQK6s;*M7LMVnZwh8gRw(A8?nUE3c3y}sWKM+?U4oMcidG1E8{HPz}(~U7x7zz zzXcBrLG^t~?}NxbMtI~Av7_GQJ)c_R;KFZ=xY7Kml&UtNeB(GJvTs{>B+yW!ix~ly znA&LDDPKW1UU3X?x6#Q)MV#p>;(9qM(e=+Ho1kNLvr$+|TSNVPx-7F&ri~66kvFJA zj2N?NQgH}NHfuTz5e<@Yr{i@b=pLnzADQLrRZbaXF%CV-tLie{1;LDNI7&3d$t*kQ zL+Rwy22o1!et-nTi7?HAYgGPPKrWuH_kiD@ra#_y2rQH0i&4Zvv)y`6G|cnd%QP7l zbd2mr(~eK0q1F!gY@=wDS5j+O+y@t?A)-N8&`44ilTl&R8J=`xqdo$m&z*57L9x;M zps9OK#v8i^v{K~1RcEu4@n+=r11-h{UJLk;8I13bDNOQxqX0Xd!SP-* zQ_S5yF?J(5_I9YIF550w7`dBy?B98hPo(8`#&EUXGr*=_U0Ds=V&_%gnMOwbFs0W7 zp6>G`IDH3PF~P_N^}=$Sbe-uu=zdo?K#F9MMvn^r0kB-ma<1L)eGOwY&SDeVB=Ukv z;X7xi6QUTG4XvwqD&l7vS%=abV!|*zYFpAqO^D1h3J&EAO|TgT4F{zRfh(!T$1o9K zy;rs-f1BkK+oPx2Qvv$ed~Q3YL9lfXN;OYF$6o1G{?u0dzTp1V(0Bq6CD|0eUXp+S z0FH%E+#8E4`2#?S;%D&pD@SNTL^R6y&o9n94VxH?x^_>VW?NHw^l^9^Fkp@jS=*`t zS!x*gAI4@ODZ@lOhS+bCEq~t9;cQT4R6@i3Rq`le4q+sMGxa>Bvd2}h=CLMmPm*a4 z?Z^($sV*!N4E8YpT67vS<|P&2Gc=#l0c0(p+y`1;^5ue2W-`MwTwV^!Y9sqY&b8G7 zrihoxK5?MgzcFm_*>&pks0KjhJnQC|kpDZoh63`iIvZHGiDqP#PO_LB1>CI^!-q8h zE|${(K2^MO-60K@g{idu0=Cx%OE`(Q0c3J)ji8lVUpY&v`?E?5nu(8@y9&p3JZWdX zC&x81`HzAvJnJbA^r-Q1ChiG|*jX()csiybBJ`}xRJ+2^`EuB$VK+ien4CD>R-pxG z4?N^bb=nTQ+w7uAXM^sFK5`_ziLkN*T&NL^+BccIn=FDly+L^6HeP?60D74g(}fcW z`#tr}hT67n-eaECgki6uq*Zlff(62w`v*W6Ath=3j0ED)JDdkzAuFlSwkrXDA@s}mjSv)e zcKvYpPdUZA3mc)n-$su|3}m$iLL14iy0Fiskeg6Mcia--SSKCpI_&dfsc&qo^IYJE zwnMmTuRtf~9ANnL6Kbkjb(3{?tt17(&Hn1y`gVG$lIyn~?Kk+)lh17;GEdVHMw;{w z&xFhk|KLzeLu5xbb6R3|Vqp?|Q#q0J6!{k5KbAY>Aa$tXk4_fhDp;BgLexJgOpD8$)zx$|M z9Sx&y@!UXG1w3WqR57L@!Eay<=1hTjb8M-m4CS_1@BGRJMlJCiB9k-W^Gtq( zJ64M2?ty~b&{Ls`w&FdIMZC)?p~z&UCQE;MX3;emw!*$t@BOcGpY0tsuoa!G^csZ= zqiLop=P#5gONTvOF;Q?q(LKifc*y?=>2r)~Ub^vDSx(77RGqa( z^t+7gkU(tR;s(=Tvb#+xmYz3%`2@{dj>GHk1HmHwf9RtpU^e&#BAFVZ7n)VvAa~m^ zubqNuFrImx8YiZA;7|Jn+?FrDML(q&jVb^ro{6(D0V5hhhkM*;$n861?hi%I>*#rm z#;dIlmr!gNp%-kZvz2xUFy4Dq9PGPRG<-0HBi#HFLhI>y2MMUmx>w)8TfOHZ1r zT2!;j-shg(os@f&Ygo?4@rE@I!4e_2nz}dzoCIb!E&Z8Cq*ip0Uf-W?vQ8&cw}QqF z2m`DErv7BYp^<2l95P;Esg;wWLOcn5#UR-r1vh^z(gF(?{3B0j(=abTZSn}Dv13wez`mSut zJ%cpYyFD z+!pOVQw7N7xApE>s~at+NFA--Su?9^djzzW_)c55_uq%0%~5?9e5s#_9k>1#hxC?K zdYvap)pz|+c)!dt``3*nSC=;Z8n#Ml9IW=pyWcbvy^jiP5xWyVe?`&$FVN#-`eIF& zNC)U^&Js&vj*Vhrfd^6LS7?#6Q1`kcB*o~9{_xUBe+4RlrU?uRE5XPIu}`lyWu@G& zybXfu=JTo0c0vBf6E!{@w9jnlwAe1GN?e>OquVXZ-CLb)0&6(QwfATllv1poX(A47 zRT~lR3K!;npm!3zAQ!V)rjY*gvl9sTXeLq!osX|ij{8hzBE%nd_(P3Ja$OzgP@MTHm7wDZ#N!$Q9vQCgvzqOWOCE^sqI?T!sccNg1Vzt}ecg<0#T&x0p`mj^{UOejWqZg_OrecWC6r z(*e^2yLs-=3E?A9Y<3OC| z|1L}k6SuGTP&9tZ8l56)d3(Us68eFe@nX~Z8WS^~!MiM>!zo`+R?aWq>C?t;@3*P- z68nqrI!F3${hS@Jf@ofFjC7Cw3qg_^-9)k-Lj>nTI$eL29DmwSLPDm(Ly+GNI|#6n z8X(1?+~_Zh*&rI1M%UJr6!*A6k%O^AaaX_!K)YU42X0oI*A_az;8VmtvW?W6Q7Q0L zKCn7gfj-LS_H-PJFsMDF`$9Z*-I=26?%zq=r?r4ee;x%ah#LyE)kJVHOE3=lpSpUD z|ABs|Ox*I7#%-p)v?i<(NZ!GLtBjZl$Nxse|F5`fjcV%3!WU4{Qj1nv+9E@(wK~%( zZSjGR5ZkIu$6Cf(panu$?abf{X+#7faAKWVR*O(=s}*XXrL9Vuq#fiT5Q0k`rbUP| z7y<+XBVsTy2@r2W$m7nr$xTTs!2}bMAFiyNowN7Z`#XE@^W|Ke+b*G^x~wN#lu>W< z8=nvtN&~CL07# zxMr7F#r-#5H}YKucjtGUj(VObU!$g#GuIf;kivA@mgTF8c6|mazw*`y zd^`fBo-IGGKlwfvWOXuQZ=RA2UfV)Bk&rIkc$1bpSf_ie%%J~<6MI(?rB-DW3AWb9 zibNpJbZXniJa&tw^HX(kS<6CrnMBZ86(j97m}1dLF8rB_x{MpkJs5jVTRx-$4{_hg z7dCy;7ja{=UYT&M(N78Q-p{UXozZw2tJr^K@YaQ`@X6q;w6NTd60Wb~T=M@aGAgtG zC;5Et$Jt4mUHzB$-u$$*OnqhHz~Ho~+_+8g#e>uIkbI^{7g8?W?mVaSktIGO5SJG| z$B((qW)07Kzi!60PAa=}^`T|me?AP-FD;yLIjAHn>FQBh~>N2KMCU{sI0W2Fb~+=s;|+z5eC?m4{PqlPKZbi<#yBtU(Uv z?C#+bLyXurh@RLuX8+`OVYSq4<- z|32?3uG}_6TUAzC2v7+*AM{-rR^4Q2E*qDGe4JGhl@OBEv)lCETNV7ux&ZPg#_(K4 z{Js_6Z;)4=D8KPi%wp`_h@W!a>Wb@&ZtFm;RE2%)444+wf?+RJlxy7h>0gK7WPUNO^tNOah1=Omv z7T@Mii#S5nN^K0_w{riL^X*e5*~?S%vOf54$DA{f=btU+GW)m^+GAYbGWCa&nw{y< zjcZ#jmPRZ}d@VX_&jv}v`Rng~8M!l3)m8TMwq(WGX-G_pd~xdMVaf!oQt^}k^r;Qp zt*|(6L8Ezeaduiu&C9b`HKr7w=heXPXXBrDfB@;rea0ZJuD9aq9ZlJBUd^p1Q;N2) zUB4qL{=4j)HOJt|C;=ABhzRwGj?SgRq%*QL+s;u+!>2Fszn157BR*snM#)NF5}R{g z5iR0J8wU+9NW%Utohd|BWd;y0Tp2ceUKRwecM1nr9#gA2G~qb6oRXB4nj_uTn=3xf z9^v|gDLyi0v((?`SDHFaOtng=e80 zANfR8d%2jUKGQDIq@^-xg)*(Ap(Q-?*)~kjtNn60ebH+uT}3M089t6pxo4tMTR;VlwZ9X?&JC#QL-KLDcZ&M#& zD6^N$mS!abN+OT{QY*7eQron*Y9{Se-7}{JEg82|$tyW;QG)JD!bZ+-Z+*i=S`D&< zHNj{xPi;Dxp7yY0ivseFC)fOkRk}SgbtJs`4U?jRbvPP(n<9u&vu|x?7nK{t`@ol+ zr_SUaFJM*j%A$(k!`txT2ofZ*^e-mwmelXdlYpPXXr2G5-&4h@-U<2H#L!qN_80QL zV}X%>Qy!tP<j{e&#;7CA59{l|9*V$QKmXV&|?|)}lfPc1n0~}tz`FMb30Fhi8 zdL;>$t$zP){F{AEe#D3>3GE5RWxHPb1OCl_enSilJa^pRdk)kea5=aX|LP)YA~BTd z%kl+>;Ac1TH{)OZY{68^2xG;M*|WaDWtC4nhFhQ;vKqbm9n$bdTs2|z3%@5Ot2@+p zpaEYgtk@=zs^=JT8b1K#+zBZypy!2kJ+ViEbVjL++(MhfPi$w+f{BLyZW&Do6W4@6anKfe9llak8_BX;hjWf>G`L6Whwkx zp_m$QIj2`B)Esgs)6r zCSsg$?xGrjNLsHXc`l#)0SlT|6yNm$kcaH$m^*>RkI6l0o2 z688r$-0C&gISs&QIqx;sISp8%?xfdT=QN1_$%5LLP6Lw%wK1Irtb5e`P#Y6z=KM3> z1|8FDu5%i=-v%AiYp!z|ut_kk%W9504Y(z%Iqo#zmaH}=)Xa(Wx1|8s)B?x7<~pb0 z^~YKZ9QT^*oCY4WfIgtp0QP_d^Z}hl)E^=QlV1v8{_{ZBG3qp6+pb}&FA2pA9$SK; zSbQr+v{-dsQHsIcFPhwmj7A;Z)Uq#W~5^LWky1{AqX~e2MQRQ zU~6e@k}x3+9Z81z&2M}yvzna_yEyQhHV#wGicR&wS0=(zH(`YIz_c}9ojvoDw%8;V zke z7>c1yv zI)j3m;+1rbT&Ck+MIUaDDF%8_Xe7Y=0VA-465+i;s88j|fsV_PQZtOkj+kPsMy|3R znF2GtM)q_3y?$UxKodofOCe!_HB2wDOr45Fm1D%#d}P4;TvKGj89K(!AYtjKLC)cm zp$tBubw_xIt|ebZ=OKHczVq@9s1AEo6qXd9V^Uz-G{CxXy%HIFb<>}SR`F4el+R&; z>!>yv3gI&n+7f!E_WRaEOljcIvBeoAJ=90-r%&6-67Y@WW)o4A!=V$Fgm{(8j8ziU zAQGy%wI&mk!6&qCe!n`zxK?x!X^#dfejg_p>cjjf0!9j|tHMrqz@V64zL{Q~ee;vv z=3#BMOss}(N*8q(Lm7NVLga(}fh8gRBeRfNsILpX1NDKglhqZqL-MCkhywVT4t56O6Ek0sxf3XCyq(Fg1~pTOxlAxdZj>7L`MN*grVQ4V5DX zG1hvAa3{m34p9t&*)Nt!fSe)#Fv2kY0w{#fNGxvxh;j~4z~zV{+}Yq5pn%H}5{^q%o^lyiu34p6{>9OWFMoC6eaAV)ceDCYnL z9LQ15A<8*G0Z$Y?8$bb16g?Y20Z$Y?8$bb16g?Y2nd3j%Mb9Qhne)$sw^25Tat=_y zHEom)qMQSidHo3Tply^5qMQR1a7`O!gDB^^D7%fhJBuFP+z~Yo*lWxuj40;-1?)BE z6GoJ!b9EF@z+PiMVMI9xC}6KKpAe#6?LF3pAdko6|I5L6r@m2e0gs&eM!^LBd5MmZ~>2;`bG<&CI5S_00I~B2&0H{4p2n>^H>1{F5(eJ5#=PHJX`>Q zU1n-DN4Yaa0lUo9L=iO8iPckn=t8~B%o|T`&iPuEmcQ{#Tp$IeeKYj%e;Tl6 zzpFHnFQmh)>>Iz0UM05@hDe}6t<`E-pwONG4)^@pW^RQYmXlHOn4q~QJEhL*|rB>J8%lTPU40tcK zh~Q@C*G3>XQ%NwR6>YT?6`7b}lvcy{pM|NlsL1@~`UvDC8Yv+N&IS_fW1Rdt{1X7g z6l0K~78P~KOp6HK0`+qI5uC!c5PX1*?h;u!NekZyeoZ)9R3ut&o#1wk3ygbMVnRje zT7rwj%^VLBU<^!5CM0nDTYF*KR(P@?0mi_@q(Wj0OiU&ufSC@zZ<=r$BmmCa-#<;b zElU8$(uCU}0nDApeba>7AYtBr2y(wP;kGOROcSjfu7L!YaOH3fBrN=ola=GmVZB~& z%;jU-*%fUgwU5u9ee_wPEX_Si^=^&Z!48aHw{Bg;FTW;UJHbEK7AL=ak0@|L)*Yh2 zDQjJC0dUe^uC@Rm&PL3&7U28elNMO=kLN5P@}I|i04BV1U4sMg0J*~z7Jz$Gk}IZl zcvdi0Qk+B!z}RVd(kuY>3d1B>00Qlnrb)2??thP3K*Q^{do1uZ_!UK#2T{4 Date: Mon, 22 Apr 2019 23:43:05 +0200 Subject: [PATCH 14/41] fentanyl --> meth --- code/modules/reagents/chemistry/recipes/toxins.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index e8134c4ac5c..01b94d1e519 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -180,5 +180,5 @@ name = "Rotatium" id = "Rotatium" result = "rotatium" - required_reagents = list("lsd" = 1, "teslium" = 1, "fentanyl" = 1) + required_reagents = list("lsd" = 1, "teslium" = 1, "meth" = 1) mix_message = "After sparks, fire, and the smell of LSD, the mix is constantly spinning with no stop in sight." \ No newline at end of file From 7687bf85ca55bf251bd68c4cec757a858546f199 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 23:43:47 +0200 Subject: [PATCH 15/41] Proper meth --- code/modules/reagents/chemistry/recipes/toxins.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index 01b94d1e519..99f33d625a6 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -180,5 +180,5 @@ name = "Rotatium" id = "Rotatium" result = "rotatium" - required_reagents = list("lsd" = 1, "teslium" = 1, "meth" = 1) + required_reagents = list("lsd" = 1, "teslium" = 1, "methamphetamine" = 1) mix_message = "After sparks, fire, and the smell of LSD, the mix is constantly spinning with no stop in sight." \ No newline at end of file From 1bb35a43efd7b7e39a855e5e42fd602edada8f2c Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 15:13:33 +0200 Subject: [PATCH 16/41] SQL fix --- code/modules/client/preference/preferences_mysql.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index 3483a4c77d3..731bf06496e 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -18,7 +18,7 @@ ghost_anonsay, exp, clientfps, - atklog, + atklog FROM [format_table_name("player")] WHERE ckey='[C.ckey]'"} ) From 429dd20ded7791a5eab2784773d87d2b34fb8eb4 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 20:08:04 +0200 Subject: [PATCH 17/41] Button plane fix --- code/datums/action.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/datums/action.dm b/code/datums/action.dm index d316bd29b41..08c92a37bad 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -107,6 +107,7 @@ /datum/action/item_action check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_CONSCIOUS var/use_itemicon = TRUE + /datum/action/item_action/New(Target, custom_icon, custom_icon_state) ..() var/obj/item/I = target @@ -136,9 +137,10 @@ var/obj/item/I = target var/old_layer = I.layer var/old_plane = I.plane - I.layer = HUD_LAYER_SCREEN + 1 - I.plane = HUD_PLANE - current_button.overlays += I + I.layer = FLOAT_LAYER //AAAH + I.plane = FLOAT_PLANE //^ what that guy said + current_button.cut_overlays() + current_button.add_overlay(I) I.layer = old_layer I.plane = old_plane else From 9213b891797916aaf689ba8e3c55c9a4c52ef3a2 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 20:27:12 +0200 Subject: [PATCH 18/41] Remove receive_signal from alarm --- code/game/machinery/alarm.dm | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 1faf99daec0..7680eb5f67b 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -375,38 +375,6 @@ if(ATMOS_ALARM_DANGER) icon_state = "alarm1" -/obj/machinery/alarm/receive_signal(datum/signal/signal) - if(stat & (NOPOWER|BROKEN) || !alarm_area) - return - if(alarm_area.master_air_alarm != src) - if(master_is_operating()) - return - elect_master() - if(alarm_area.master_air_alarm != src) - return - if(!signal || signal.encryption) - return - var/id_tag = signal.data["tag"] - if(!id_tag) - return - if(signal.data["area"] != area_uid) - return - if(signal.data["sigtype"] != "status") - return - - var/dev_type = signal.data["device"] - if(!(id_tag in alarm_area.air_scrub_names) && !(id_tag in alarm_area.air_vent_names)) - register_env_machine(id_tag, dev_type) - var/got_update=0 - if(dev_type == "AScr") - alarm_area.air_scrub_info[id_tag] = signal.data - got_update=1 - else if(dev_type == "AVP") - alarm_area.air_vent_info[id_tag] = signal.data - got_update=1 - if(got_update && waiting_on_device==id_tag) - waiting_on_device=null - /obj/machinery/alarm/proc/register_env_machine(var/m_id, var/device_type) var/new_name if(device_type=="AVP") From 0d883a5b886fb01534b58551a30baec4e31f401e Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 22:59:00 +0200 Subject: [PATCH 19/41] Darkness handling update --- code/ATMOSPHERICS/atmospherics.dm | 1 + code/_onclick/hud/hud.dm | 1 + code/datums/vision_override.dm | 10 ++- code/game/atoms.dm | 1 + code/game/gamemodes/blob/blobs/blob_mobs.dm | 3 +- code/game/gamemodes/blob/overmind.dm | 13 +--- code/game/gamemodes/devil/imp/imp.dm | 2 +- .../gamemodes/devil/true_devil/_true_devil.dm | 16 ---- .../gamemodes/malfunction/Malf_Modules.dm | 2 +- .../miniantags/guardian/types/ranged.dm | 24 ++++-- code/game/gamemodes/miniantags/morph/morph.dm | 2 +- .../gamemodes/miniantags/revenant/revenant.dm | 15 +--- .../miniantags/revenant/revenant_abilities.dm | 2 - .../miniantags/slaughter/slaughter.dm | 2 +- .../shadowling/ascendant_shadowling.dm | 2 +- .../gamemodes/shadowling/shadowling_items.dm | 1 + code/game/gamemodes/wizard/rightandwrong.dm | 3 +- code/game/gamemodes/wizard/spellbook.dm | 2 +- code/game/machinery/camera/camera.dm | 11 ++- code/game/machinery/navbeacon.dm | 2 +- code/game/mecha/mecha.dm | 2 + code/game/objects/items/devices/flashlight.dm | 2 +- code/modules/clothing/clothing.dm | 7 +- code/modules/clothing/glasses/glasses.dm | 34 +++++---- code/modules/clothing/glasses/hud.dm | 9 ++- code/modules/clothing/head/helmet.dm | 3 +- .../clothing/spacesuits/miscellaneous.dm | 2 +- .../mining/lavaland/loot/tendril_loot.dm | 36 +++++---- code/modules/mining/minebot.dm | 34 +++------ code/modules/mob/dead/observer/observer.dm | 27 ++++++- code/modules/mob/living/carbon/alien/alien.dm | 46 ++++++++++-- code/modules/mob/living/carbon/alien/life.dm | 30 -------- code/modules/mob/living/carbon/carbon.dm | 39 +++++++++- code/modules/mob/living/carbon/human/human.dm | 7 +- .../mob/living/carbon/human/inventory.dm | 8 +- .../living/carbon/human/species/_species.dm | 74 ++++++++++--------- code/modules/mob/living/carbon/life.dm | 30 -------- code/modules/mob/living/life.dm | 17 +---- code/modules/mob/living/living.dm | 34 +++++++++ code/modules/mob/living/living_defines.dm | 1 - code/modules/mob/living/silicon/ai/ai.dm | 27 ++++++- code/modules/mob/living/silicon/ai/life.dm | 13 ---- code/modules/mob/living/silicon/robot/life.dm | 34 --------- .../modules/mob/living/silicon/robot/robot.dm | 40 ++++++++++ .../mob/living/simple_animal/hostile/alien.dm | 2 +- .../simple_animal/hostile/giant_spider.dm | 1 + .../simple_animal/hostile/mining_mobs.dm | 2 +- .../living/simple_animal/hostile/statue.dm | 29 ++++---- .../hostile/terror_spiders/terror_spiders.dm | 3 +- .../mob/living/simple_animal/simple_animal.dm | 16 ---- code/modules/mob/mob.dm | 9 +++ code/modules/mob/mob_defines.dm | 4 +- code/modules/shuttle/navigation_computer.dm | 2 + code/modules/surgery/organs/augments_eyes.dm | 10 ++- code/modules/surgery/organs/eyes.dm | 13 ++-- .../surgery/organs/subtypes/abductor.dm | 2 +- code/modules/surgery/organs/subtypes/drask.dm | 2 +- code/modules/surgery/organs/subtypes/grey.dm | 2 +- .../modules/surgery/organs/subtypes/shadow.dm | 2 +- .../surgery/organs/subtypes/tajaran.dm | 4 +- .../modules/surgery/organs/subtypes/unathi.dm | 2 +- .../surgery/organs/subtypes/vulpkanin.dm | 4 +- code/modules/surgery/organs/subtypes/wryn.dm | 2 +- 63 files changed, 412 insertions(+), 370 deletions(-) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index aa6d2f2625c..a6b346ee1c2 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -332,3 +332,4 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new()) /obj/machinery/atmospherics/update_remote_sight(mob/user) user.sight |= (SEE_TURFS|BLIND) + . = ..() diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 56d954313cc..0063feae9cf 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -43,6 +43,7 @@ /mob/proc/create_mob_hud() if(client && !hud_used) hud_used = new /datum/hud(src) + update_sight() /datum/hud/New(mob/owner) mymob = owner diff --git a/code/datums/vision_override.dm b/code/datums/vision_override.dm index 140ceb8d5fa..86aab6d65ec 100644 --- a/code/datums/vision_override.dm +++ b/code/datums/vision_override.dm @@ -1,13 +1,15 @@ /datum/vision_override var/name = "vision override" - var/see_in_dark = 0 - var/see_invisible = 0 - var/light_sensitive = 0 + var/sight_flags = 0 + var/see_in_dark = 0 + var/lighting_alpha + + var/light_sensitive = 0 /datum/vision_override/nightvision see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE /datum/vision_override/nightvision/thermals sight_flags = SEE_MOBS diff --git a/code/game/atoms.dm b/code/game/atoms.dm index e46c1290637..f30fa412a8f 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -675,6 +675,7 @@ var/list/blood_splatter_icons = list() //the sight changes to give to the mob whose perspective is set to that atom (e.g. A mob with nightvision loses its nightvision while looking through a normal camera) /atom/proc/update_remote_sight(mob/living/user) + sync_lighting_plane_alpha() return /atom/proc/checkpass(passflag) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index e6e9dfe4196..bf2143b9784 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -178,7 +178,8 @@ environment_smash = ENVIRONMENT_SMASH_RWALLS pressure_resistance = 100 //100 kPa difference required to push throw_pressure_limit = 120 //120 kPa difference required to throw - + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE /mob/living/simple_animal/hostile/blob/blobbernaut/blob_act() return diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index ca1dffbfa74..02af98f74c5 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -5,8 +5,8 @@ icon_state = "marker" see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM invisibility = INVISIBILITY_OBSERVER + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE pass_flags = PASSBLOB faction = list("blob") @@ -20,7 +20,6 @@ var/is_offspring = FALSE var/datum/reagent/blob/blob_reagent_datum = new/datum/reagent/blob() var/list/blob_mobs = list() - var/ghostimage = null /mob/camera/blob/New() var/new_name = "[initial(name)] ([rand(1, 999)])" @@ -35,9 +34,6 @@ blob_core.adjustcolors(blob_reagent_datum.color) color = blob_reagent_datum.complementary_color - ghostimage = image(src.icon,src,src.icon_state) - ghost_darkness_images |= ghostimage //so ghosts can see the blob cursor when they disable darkness - updateallghostimages() ..() /mob/camera/blob/Life(seconds, times_fired) @@ -45,13 +41,6 @@ qdel(src) ..() -/mob/camera/blob/Destroy() - if(ghostimage) - ghost_darkness_images -= ghostimage - QDEL_NULL(ghostimage) - updateallghostimages() - return ..() - /mob/camera/blob/Login() ..() sync_mind() diff --git a/code/game/gamemodes/devil/imp/imp.dm b/code/game/gamemodes/devil/imp/imp.dm index b012edc1930..e863eaf1f6a 100644 --- a/code/game/gamemodes/devil/imp/imp.dm +++ b/code/game/gamemodes/devil/imp/imp.dm @@ -29,7 +29,7 @@ melee_damage_lower = 10 melee_damage_upper = 15 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE var/boost var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \ Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \ diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm index 18058b42279..a6c04c5dcc0 100644 --- a/code/game/gamemodes/devil/true_devil/_true_devil.dm +++ b/code/game/gamemodes/devil/true_devil/_true_devil.dm @@ -30,22 +30,6 @@ E.insert() ..() - -/mob/living/carbon/true_devil/update_sight() - if(stat == DEAD) - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - else - sight = (SEE_TURFS | SEE_OBJS) - see_in_dark = 2 - see_invisible = SEE_INVISIBLE_LIVING - - if(see_override) - see_invisible = see_override - // inventory system could use some love /mob/living/carbon/true_devil/put_in_hands(obj/item/W) if(!W) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 830ae26f3c1..c44150a8450 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -496,7 +496,7 @@ return var/upgradedcams = 0 - see_override = SEE_INVISIBLE_MINIMUM //Night-vision, without which X-ray would be very limited in power. + see_override = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //Night-vision, without which X-ray would be very limited in power. update_sight() for(var/obj/machinery/camera/C in cameranet.cameras) diff --git a/code/game/gamemodes/miniantags/guardian/types/ranged.dm b/code/game/gamemodes/miniantags/guardian/types/ranged.dm index 0979ed45a6c..641d44dae2e 100644 --- a/code/game/gamemodes/miniantags/guardian/types/ranged.dm +++ b/code/game/gamemodes/miniantags/guardian/types/ranged.dm @@ -16,7 +16,7 @@ ranged = 1 rapid = 1 range = 13 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE see_in_dark = 8 playstyle_string = "As a Ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit." magic_fluff_string = "..And draw the Sentinel, an alien master of ranged combat." @@ -53,12 +53,22 @@ to_chat(src, "You have to be recalled to toggle modes!") /mob/living/simple_animal/hostile/guardian/ranged/ToggleLight() - if(see_invisible == SEE_INVISIBLE_MINIMUM) - to_chat(src, "You deactivate your night vision.") - see_invisible = SEE_INVISIBLE_LIVING - else - to_chat(src, "You activate your night vision.") - see_invisible = SEE_INVISIBLE_MINIMUM + var/msg + switch(lighting_alpha) + if (LIGHTING_PLANE_ALPHA_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + msg = "You activate your night vision." + if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + msg = "You increase your night vision." + if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + msg = "You maximize your night vision." + else + lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE + msg = "You deactivate your night vision." + + to_chat(src, "[msg]") /mob/living/simple_animal/hostile/guardian/ranged/verb/Snare() set name = "Set Surveillance Trap" diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index 3bb36870d31..bcaecfb0eea 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -27,7 +27,7 @@ melee_damage_lower = 20 melee_damage_upper = 20 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE idle_vision_range = 1 // Only attack when target is close wander = 0 attacktext = "glomps" diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index bde3f7ee8e9..2096522ba0b 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -18,7 +18,7 @@ health = INFINITY //Revenants don't use health, they use essence instead maxHealth = INFINITY see_in_dark = 8 - see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE universal_understand = 1 response_help = "passes through" response_disarm = "swings at" @@ -51,7 +51,6 @@ var/draining = 0 //If the revenant is draining someone. var/list/drained_mobs = list() //Cannot harvest the same mob twice var/perfectsouls = 0 //How many perfect, regen-cap increasing souls the revenant has. - var/image/ghostimage = null //Visible to ghost with darkness off /mob/living/simple_animal/revenant/Life(seconds, times_fired) @@ -91,13 +90,6 @@ if(essence == 0) to_chat(src, "You feel your essence fraying!") -/mob/living/simple_animal/revenant/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - /mob/living/simple_animal/revenant/say(message) if(!message) return @@ -120,9 +112,6 @@ /mob/living/simple_animal/revenant/New() ..() - ghostimage = image(src.icon,src,src.icon_state) - ghost_darkness_images |= ghostimage - updateallghostimages() remove_from_all_data_huds() addtimer(CALLBACK(src, .proc/firstSetupAttempt), 15 SECONDS) // Give admin 15 seconds to put in a ghost (Or wait 15 seconds before giving it objectives) @@ -196,8 +185,6 @@ . = ..() if(!.) return FALSE - ghost_darkness_images -= ghostimage - updateallghostimages() to_chat(src, "NO! No... it's too late, you can feel your essence breaking apart...") notransform = 1 diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index cdb55aa1b31..34bf06f07f7 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -110,8 +110,6 @@ message = "You toggle your night vision." action_icon_state = "r_nightvision" action_background_icon_state = "bg_revenant" - non_night_vision = INVISIBILITY_REVENANT - night_vision = SEE_INVISIBLE_OBSERVER_NOLIGHTING //Transmit: the revemant's only direct way to communicate. Sends a single message silently to a single mob /obj/effect/proc_holder/spell/targeted/revenant_transmit diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 7e74de27267..68b886207e3 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -33,7 +33,7 @@ melee_damage_lower = 30 melee_damage_upper = 30 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE var/boost = 0 bloodcrawl = BLOODCRAWL_EAT diff --git a/code/game/gamemodes/shadowling/ascendant_shadowling.dm b/code/game/gamemodes/shadowling/ascendant_shadowling.dm index 51f4d147bba..9eeadeaba0f 100644 --- a/code/game/gamemodes/shadowling/ascendant_shadowling.dm +++ b/code/game/gamemodes/shadowling/ascendant_shadowling.dm @@ -12,7 +12,7 @@ speed = 0 var/phasing = 0 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE universal_speak = 1 diff --git a/code/game/gamemodes/shadowling/shadowling_items.dm b/code/game/gamemodes/shadowling/shadowling_items.dm index 500c3ee25c5..69f5688829c 100644 --- a/code/game/gamemodes/shadowling/shadowling_items.dm +++ b/code/game/gamemodes/shadowling/shadowling_items.dm @@ -81,4 +81,5 @@ unacidable = 1 flash_protect = -1 vision_flags = SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE flags = ABSTRACT | NODROP \ No newline at end of file diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index aff40200c6b..deb054f6d3e 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -146,7 +146,8 @@ H.mutations.Add(XRAY) H.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) H.see_in_dark = 8 - H.see_invisible = SEE_INVISIBLE_LEVEL_TWO + H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + H.update_sight() to_chat(H, "The walls suddenly disappear.") if("voodoo") new /obj/item/voodoo(get_turf(H)) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 66cdff69b3f..e33848b61c5 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -333,7 +333,7 @@ user.mutations.Add(XRAY) user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) user.see_in_dark = 8 - user.see_invisible = SEE_INVISIBLE_LEVEL_TWO + user.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE to_chat(user, "The walls suddenly disappear.") return 1 diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 7535381197a..a21b399f5db 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -382,14 +382,17 @@ user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 2) /obj/machinery/camera/update_remote_sight(mob/living/user) - user.see_invisible = SEE_INVISIBLE_LIVING //can't see ghosts through cameras if(isXRay()) user.sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) user.see_in_dark = max(user.see_in_dark, 8) + user.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE else - user.sight = 0 - user.see_in_dark = 2 - return 1 + user.sight = initial(user.sight) + user.see_in_dark = initial(user.see_in_dark) + user.lighting_alpha = initial(user.lighting_alpha) + + ..() + return TRUE /obj/machinery/camera/portable //Cameras which are placed inside of things, such as helmets. var/turf/prev_turf diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index f278ee2adda..d4175b10ae1 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -72,7 +72,7 @@ // called when turf state changes // hide the object if turf is intact /obj/machinery/navbeacon/hide(intact) - invisibility = intact ? INVISIBILITY_MAXIMUM : SEE_INVISIBLE_MINIMUM + invisibility = intact ? INVISIBILITY_MAXIMUM : 0 updateicon() // update the icon_state diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 6cfd1d63942..45e36d9a30c 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1518,6 +1518,8 @@ if(user == occupant) user.sight |= occupant_sight_flags + ..() + /obj/mecha/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect, end_pixel_y) if(!no_effect) if(selected) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 24c8cbcd3b7..0a44c439fc0 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -76,7 +76,7 @@ var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) if(M.stat == DEAD || !eyes || M.disabilities & BLIND) //mob is dead or fully blind to_chat(user, "[M]'s pupils are unresponsive to the light!") - else if((XRAY in M.mutations) || eyes.get_dark_view() >= 8) //The mob's either got the X-RAY vision or has a tapetum lucidum (extreme nightvision, i.e. Vulp/Tajara with COLOURBLIND & their monkey forms). + else if((XRAY in M.mutations) || eyes.see_in_dark >= 8) //The mob's either got the X-RAY vision or has a tapetum lucidum (extreme nightvision, i.e. Vulp/Tajara with COLOURBLIND & their monkey forms). to_chat(user, "[M]'s pupils glow eerily!") else //they're okay! if(M.flash_eyes(visual = 1)) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 484151de797..5e103f14c72 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -154,6 +154,7 @@ var/darkness_view = 0 //Base human is 2 var/invis_view = SEE_INVISIBLE_LIVING var/invis_override = 0 + var/lighting_alpha var/emagged = 0 var/list/color_view = null//overrides client.color while worn @@ -281,9 +282,11 @@ BLIND // can't see anything slot_flags = SLOT_HEAD var/blockTracking // Do we block AI tracking? var/HUDType = null - var/darkness_view = 0 - var/helmet_goggles_invis_view = 0 + var/vision_flags = 0 + var/darkness_view = 0 + var/lighting_alpha + var/can_toggle = null //Mask diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index b527bb2717d..6a7da898b25 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -37,7 +37,7 @@ item_state = "glasses" origin_tech = "magnets=1;engineering=2" vision_flags = SEE_TURFS - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 1 species_fit = list("Vox") sprite_sheets = list( @@ -53,6 +53,7 @@ item_state = "glasses" origin_tech = "magnets=4;engineering=5;plasmatech=4" darkness_view = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE prescription_upgradable = 0 /obj/item/clothing/glasses/meson/prescription @@ -104,7 +105,7 @@ icon_state = "nvpurple" item_state = "glasses" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these /obj/item/clothing/glasses/janitor name = "Janitorial Goggles" @@ -123,7 +124,7 @@ item_state = "glasses" origin_tech = "materials=4;magnets=4;plasmatech=4;engineering=4" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/eyes.dmi', @@ -382,6 +383,7 @@ item_state = "glasses" origin_tech = "magnets=3" vision_flags = SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE flash_protect = -1 species_fit = list("Vox") sprite_sheets = list( @@ -389,18 +391,18 @@ "Grey" = 'icons/mob/species/grey/eyes.dmi' ) - emp_act(severity) - if(istype(src.loc, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = src.loc - to_chat(M, "The Optical Thermal Scanner overloads and blinds you!") - if(M.glasses == src) - M.EyeBlind(3) - M.EyeBlurry(5) - if(!(M.disabilities & NEARSIGHTED)) - M.BecomeNearsighted() - spawn(100) - M.CureNearsighted() - ..() +/obj/item/clothing/glasses/thermal/emp_act(severity) + if(istype(src.loc, /mob/living/carbon/human)) + var/mob/living/carbon/human/M = src.loc + to_chat(M, "The Optical Thermal Scanner overloads and blinds you!") + if(M.glasses == src) + M.EyeBlind(3) + M.EyeBlurry(5) + if(!(M.disabilities & NEARSIGHTED)) + M.BecomeNearsighted() + spawn(100) + M.CureNearsighted() + ..() /obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete name = "Optical Meson Scanner" @@ -507,7 +509,7 @@ scan_reagents = 1 flags = NODROP flags_cover = null - invis_view = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE /obj/item/clothing/glasses/godeye/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, src) && W != src && W.loc == user) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index d778ea5e63a..ad775b04c14 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -51,7 +51,7 @@ item_state = "glasses" origin_tech = "magnets=4;biotech=4;plasmatech=4;engineering=5" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 /obj/item/clothing/glasses/hud/diagnostic @@ -73,7 +73,7 @@ item_state = "glasses" origin_tech = "magnets=4;powerstorage=4;plasmatech=4;engineering=5" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 /obj/item/clothing/glasses/hud/security @@ -105,6 +105,7 @@ icon_state = "jensenshades" item_state = "jensenshades" vision_flags = SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE /obj/item/clothing/glasses/hud/security/night name = "\improper Night Vision Security HUD" @@ -112,7 +113,7 @@ icon_state = "securityhudnight" origin_tech = "magnets=4;combat=4;plasmatech=4;engineering=5" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these prescription_upgradable = 0 /obj/item/clothing/glasses/hud/security/sunglasses/read_only @@ -154,7 +155,7 @@ icon_state = "hydroponichudnight" item_state = "glasses" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 /obj/item/clothing/glasses/hud/security/tajblind diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 35b4b6a75e0..6e3a0302cbc 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -50,6 +50,7 @@ desc = "A helmet with a built-in thermal scanning visor." icon_state = "helmetthermals" vision_flags = SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE /obj/item/clothing/head/helmet/meson name = "meson visor helmet" @@ -67,7 +68,7 @@ name = "night-vision helmet" desc = "A helmet with a built-in pair of night vision goggles." icon_state = "helmetNVG" - helmet_goggles_invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these /obj/item/clothing/head/helmet/alt name = "bulletproof helmet" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 8a79b192d0c..6b86d8f5d5c 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -47,7 +47,7 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT unacidable = 1 vision_flags = SEE_MOBS - helmet_goggles_invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these HUDType = MEDHUD strip_delay = 130 diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index 878a3951202..5a39264e668 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -184,42 +184,46 @@ generic_pixel_x = 1 vehicle_move_delay = 1 -// Wisp Lantern +//Wisp Lantern /obj/item/wisp_lantern name = "spooky lantern" desc = "This lantern gives off no light, but is home to a friendly wisp." icon = 'icons/obj/lighting.dmi' icon_state = "lantern-blue" + item_state = "lantern" var/obj/effect/wisp/wisp /obj/item/wisp_lantern/attack_self(mob/user) if(!wisp) to_chat(user, "The wisp has gone missing!") + icon_state = "lantern" return + if(wisp.loc == src) to_chat(user, "You release the wisp. It begins to bob around your head.") - user.sight |= SEE_MOBS icon_state = "lantern" - wisp.orbit(user, 20, forceMove = TRUE) + wisp.orbit(user, 20) + user.update_sight() feedback_add_details("wisp_lantern","F") // freed else to_chat(user, "You return the wisp to the lantern.") + var/mob/target if(wisp.orbiting) - var/atom/A = wisp.orbiting - if(isliving(A)) - var/mob/living/M = A - M.sight &= ~SEE_MOBS - to_chat(M, "Your vision returns to normal.") - + target = wisp.orbiting wisp.stop_orbit() - wisp.loc = src + wisp.forceMove(src) + + if (istype(target)) + target.update_sight() + to_chat(target, "Your vision returns to normal.") + icon_state = "lantern-blue" feedback_add_details("wisp_lantern","R") // returned -/obj/item/wisp_lantern/New() - ..() +/obj/item/wisp_lantern/Initialize() + . = ..() wisp = new(src) /obj/item/wisp_lantern/Destroy() @@ -228,19 +232,19 @@ qdel(wisp) else wisp.visible_message("[wisp] has a sad feeling for a moment, then it passes.") - return ..() + ..() /obj/effect/wisp name = "friendly wisp" desc = "Happy to light your way." icon = 'icons/obj/lighting.dmi' icon_state = "orb" - layer = ABOVE_ALL_MOB_LAYER - light_power = 1 light_range = 7 + layer = ABOVE_ALL_MOB_LAYER + var/sight_flags = SEE_MOBS + var/lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE //Red/Blue Cubes - /obj/item/warp_cube name = "blue cube" desc = "A mysterious blue cube." diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index cf8b897104c..08e7bf305ca 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -184,28 +184,6 @@ mode = MINEDRONE_COLLECT SetCollectBehavior() - -/mob/living/simple_animal/hostile/mining_drone/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - - if(mesons_active) - sight |= SEE_TURFS - see_invisible = SEE_INVISIBLE_MINIMUM - else - sight &= ~SEE_TURFS - see_invisible = SEE_INVISIBLE_LIVING - - see_in_dark = initial(see_in_dark) - - if(client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - //Actions for sentient minebots /datum/action/innate/minedrone @@ -232,10 +210,16 @@ /datum/action/innate/minedrone/toggle_meson_vision/Activate() var/mob/living/simple_animal/hostile/mining_drone/user = owner - user.mesons_active = !user.mesons_active - user.update_sight() + if(user.sight & SEE_TURFS) + user.sight &= ~SEE_TURFS + user.lighting_alpha = initial(user.lighting_alpha) + else + user.sight |= SEE_TURFS + user.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - to_chat(user, "You toggle your meson vision [(user.mesons_active) ? "on" : "off"].") + user.sync_lighting_plane_alpha() + + to_chat(user, "You toggle your meson vision [(user.sight & SEE_TURFS) ? "on" : "off"].") /datum/action/innate/minedrone/toggle_mode name = "Toggle Mode" diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index dfd4e1e3332..aaad280cc0d 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -666,14 +666,32 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set desc = "Toggles your ability to see things only ghosts can see, like other ghosts" set category = "Ghost" ghostvision = !(ghostvision) - updateghostsight() + update_sight() to_chat(usr, "You [(ghostvision?"now":"no longer")] have ghost vision.") /mob/dead/observer/verb/toggle_darkness() set name = "Toggle Darkness" set category = "Ghost" - seedarkness = !(seedarkness) - updateghostsight() + switch(lighting_alpha) + if (LIGHTING_PLANE_ALPHA_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + else + lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE + + update_sight() + +/mob/dead/observer/update_sight() + if (!ghostvision) + see_invisible = SEE_INVISIBLE_LIVING + else + see_invisible = SEE_INVISIBLE_OBSERVER + + updateghostimages() + ..() /mob/dead/observer/proc/updateghostsight() if(!seedarkness) @@ -681,7 +699,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp else see_invisible = SEE_INVISIBLE_OBSERVER if(!ghostvision) - see_invisible = SEE_INVISIBLE_LIVING; + see_invisible = SEE_INVISIBLE_LIVING + updateghostimages() /proc/updateallghostimages() diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 9c87b04b0e5..4d1d91696eb 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -6,7 +6,7 @@ gender = NEUTER dna = null alien_talk_understand = 1 - nightvision = 1 + var/nightvision = 1 var/obj/item/card/id/wear_id = null // Fix for station bounced radios -- Skie var/has_fine_manipulation = 0 var/move_delay_add = 0 // movement delay to add @@ -149,15 +149,17 @@ if(!nightvision) see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM - nightvision = 1 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + nightvision = TRUE usr.hud_used.nightvisionicon.icon_state = "nightvision1" - else if(nightvision == 1) + else if(nightvision) see_in_dark = 4 - see_invisible = 45 - nightvision = 0 + lighting_alpha = initial(lighting_alpha) + nightvision = FALSE usr.hud_used.nightvisionicon.icon_state = "nightvision0" + update_sight() + /mob/living/carbon/alien/assess_threat(var/mob/living/simple_animal/bot/secbot/judgebot, var/lasercolor) if(judgebot.emagged == 2) @@ -264,3 +266,35 @@ Des: Removes all infected images from the alien. return pick("xltrails_1", "xltrails_2") else return pick("xttrails_1", "xttrails_2") + +/mob/living/carbon/alien/update_sight() + if(!client) + return + if(stat == DEAD) + grant_death_vision() + return + + sight = SEE_MOBS + if(nightvision) + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + else + see_in_dark = initial(see_in_dark) + lighting_alpha = initial(lighting_alpha) + + if(client.eye != src) + var/atom/A = client.eye + if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. + return + + for(var/obj/item/organ/internal/cyberimp/eyes/E in internal_organs) + sight |= E.vision_flags + if(E.see_in_dark) + see_in_dark = max(see_in_dark, E.see_in_dark) + if(E.see_invisible) + see_invisible = min(see_invisible, E.see_invisible) + if(!isnull(E.lighting_alpha)) + lighting_alpha = min(lighting_alpha, E.lighting_alpha) + + if(see_override) + see_invisible = see_override diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index d3ecc9e3e1c..a584f66dc97 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -28,33 +28,3 @@ //BREATH TEMPERATURE handle_breath_temperature(breath) - -/mob/living/carbon/alien/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - - sight = SEE_MOBS - if(nightvision) - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM - else - see_in_dark = 4 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - - if(client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - - for(var/obj/item/organ/internal/cyberimp/eyes/E in internal_organs) - sight |= E.vision_flags - if(E.dark_view) - see_in_dark = max(see_in_dark, E.dark_view) - if(E.see_invisible) - see_invisible = min(see_invisible, E.see_invisible) - - if(see_override) - see_invisible = see_override diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 277bbbd8789..c1941c39a6e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -323,8 +323,8 @@ return var/extra_darkview = 0 - if(E.dark_view) - extra_darkview = max(E.dark_view - 2, 0) + if(E.see_in_dark) + extra_darkview = max(E.see_in_dark - 2, 0) extra_damage = extra_darkview var/light_amount = 10 // assume full brightness @@ -1129,4 +1129,37 @@ so that different stomachs can handle things in different ways VB*/ /mob/living/carbon/proc/shock_internal_organs(intensity) for(var/obj/item/organ/O in internal_organs) - O.shock_organ(intensity) \ No newline at end of file + O.shock_organ(intensity) + +/mob/living/carbon/update_sight() + if(!client) + return + + if(stat == DEAD) + grant_death_vision() + return + + sight = initial(sight) + lighting_alpha = initial(lighting_alpha) + + for(var/obj/item/organ/internal/cyberimp/eyes/E in internal_organs) + sight |= E.vision_flags + if(E.see_in_dark) + see_in_dark = max(see_in_dark, E.see_in_dark) + if(E.see_invisible) + see_invisible = min(see_invisible, E.see_invisible) + if(!isnull(E.lighting_alpha)) + lighting_alpha = min(lighting_alpha, E.lighting_alpha) + + if(client.eye != src) + var/atom/A = client.eye + if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. + return + + if(XRAY in mutations) + sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + + if(see_override) + see_invisible = see_override \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index bd5817e8867..b20776419d2 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -545,6 +545,7 @@ /mob/living/carbon/human/update_sight() if(!client) return + if(stat == DEAD) grant_death_vision() return @@ -1427,11 +1428,7 @@ dna.species.on_species_gain(src) - see_in_dark = dna.species.get_resultant_darksight(src) - if(see_in_dark > 2) - see_invisible = SEE_INVISIBLE_LEVEL_ONE - else - see_invisible = SEE_INVISIBLE_LIVING + update_sight() dna.species.handle_dna(src) //Give them whatever special dna business they got. diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 69f898fb677..ba4f2fbbcf4 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -115,7 +115,7 @@ update_tint() if(G.prescription) update_nearsighted_effects() - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view) + if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses() update_client_colour() @@ -128,7 +128,7 @@ // Bandanas and paper hats go on the head but are not head clothing if(istype(I,/obj/item/clothing/head)) var/obj/item/clothing/head/hat = I - if(hat.vision_flags || hat.darkness_view || hat.helmet_goggles_invis_view) + if(hat.vision_flags || hat.darkness_view || !isnull(hat.lighting_alpha)) update_sight() head_update(I) update_inv_head() @@ -267,7 +267,7 @@ update_tint() if(G.prescription) update_nearsighted_effects() - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view) + if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses(redraw_mob) update_client_colour() @@ -283,7 +283,7 @@ // paper + bandanas if(istype(W, /obj/item/clothing/head)) var/obj/item/clothing/head/hat = W - if(hat.vision_flags || hat.darkness_view || hat.helmet_goggles_invis_view) + if(hat.vision_flags || hat.darkness_view || !isnull(hat.lighting_alpha)) update_sight() head_update(W) update_inv_head(redraw_mob) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index d9a501d2251..0b597c17a6f 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -39,8 +39,6 @@ var/siemens_coeff = 1 //base electrocution coefficient - var/invis_sight = SEE_INVISIBLE_LIVING - var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure. var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning. var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning. @@ -630,22 +628,21 @@ It'll return null if the organ doesn't correspond, so include null checks when u return null return has_organ[organ_slot] -/datum/species/proc/get_resultant_darksight(mob/living/carbon/human/H) //Returns default value of 2 if the mob doesn't have eyes, otherwise it grabs the eyes darksight. - var/resultant_darksight = 2 +/datum/species/proc/update_sight(mob/living/carbon/human/H) var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) if(eyes) - resultant_darksight = eyes.get_dark_view() - return resultant_darksight - -/datum/species/proc/update_sight(mob/living/carbon/human/H) - H.sight = initial(H.sight) - H.see_in_dark = get_resultant_darksight(H) - H.see_invisible = invis_sight + H.sight |= eyes.vision_flags + H.see_in_dark = eyes.see_in_dark + H.see_invisible = eyes.see_invisible + H.lighting_alpha = eyes.lighting_alpha + else + H.sight = initial(H.sight) + H.see_in_dark = initial(H.see_in_dark) + H.see_invisible = initial(H.see_invisible) + H.lighting_alpha = initial(H.lighting_alpha) if(H.see_in_dark > 2) //Preliminary see_invisible handling as per set_species() in code\modules\mob\living\carbon\human\human.dm. - H.see_invisible = SEE_INVISIBLE_LEVEL_ONE - else - H.see_invisible = SEE_INVISIBLE_LIVING + H.lighting_alpha = min(H.lighting_alpha, LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) if(H.client && H.client.eye != H) var/atom/A = H.client.eye @@ -656,39 +653,43 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(H.mind.vampire.get_ability(/datum/vampire_passive/full)) H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS H.see_in_dark = 8 - H.see_invisible = SEE_INVISIBLE_MINIMUM + H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE else if(H.mind.vampire.get_ability(/datum/vampire_passive/vision)) H.sight |= SEE_MOBS + H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE for(var/obj/item/organ/internal/cyberimp/eyes/E in H.internal_organs) H.sight |= E.vision_flags - if(E.dark_view) - H.see_in_dark = E.dark_view + if(E.see_in_dark) + H.see_in_dark = max(H.see_in_dark, E.see_in_dark) if(E.see_invisible) H.see_invisible = min(H.see_invisible, E.see_invisible) + if(E.lighting_alpha) + H.lighting_alpha = min(H.lighting_alpha, E.lighting_alpha) - var/lesser_darkview_bonus = INFINITY // my glasses, I can't see without my glasses if(H.glasses) var/obj/item/clothing/glasses/G = H.glasses H.sight |= G.vision_flags - lesser_darkview_bonus = G.darkness_view + H.see_in_dark = max(G.darkness_view, H.see_in_dark) + if(G.invis_override) H.see_invisible = G.invis_override else H.see_invisible = min(G.invis_view, H.see_invisible) + + if(!isnull(G.lighting_alpha)) + H.lighting_alpha = min(G.lighting_alpha, H.lighting_alpha) // better living through hat trading if(H.head) if(istype(H.head, /obj/item/clothing/head)) var/obj/item/clothing/head/hat = H.head H.sight |= hat.vision_flags + H.see_in_dark = max(hat.darkness_view, H.see_in_dark) - if(hat.darkness_view) // Pick the lowest of the two darkness_views between the glasses and helmet. - lesser_darkview_bonus = min(hat.darkness_view,lesser_darkview_bonus) - - if(hat.helmet_goggles_invis_view) - H.see_invisible = min(hat.helmet_goggles_invis_view, H.see_invisible) + if(!isnull(hat.lighting_alpha)) + H.lighting_alpha = min(hat.lighting_alpha, H.lighting_alpha) if(istype(H.back, /obj/item/rig)) ///aghhh so snowflakey var/obj/item/rig/rig = H.back @@ -697,28 +698,33 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(rig.visor && rig.visor.vision && rig.visor.active && rig.visor.vision.glasses) var/obj/item/clothing/glasses/G = rig.visor.vision.glasses if(istype(G)) - H.see_in_dark = (G.darkness_view ? G.darkness_view : get_resultant_darksight(H)) // Otherwise we keep our darkness view with togglable nightvision. - if(G.vision_flags) // MESONS - H.sight |= G.vision_flags - + H.sight |= G.vision_flags + H.see_in_dark = max(G.darkness_view, H.see_in_dark) H.see_invisible = min(G.invis_view, H.see_invisible) - if(lesser_darkview_bonus != INFINITY) - H.see_in_dark = max(lesser_darkview_bonus, H.see_in_dark) + if(!isnull(G.lighting_alpha)) + H.lighting_alpha = min(G.lighting_alpha, H.lighting_alpha) if(H.vision_type) - H.see_in_dark = max(H.see_in_dark, H.vision_type.see_in_dark, get_resultant_darksight(H)) - H.see_invisible = H.vision_type.see_invisible - if(H.vision_type.light_sensitive) - H.weakeyes = 1 H.sight |= H.vision_type.sight_flags + H.see_in_dark = max(H.see_in_dark, H.vision_type.see_in_dark) + + if(!isnull(H.vision_type.lighting_alpha)) + H.lighting_alpha = min(H.vision_type.lighting_alpha, H.lighting_alpha) + + if(H.vision_type.light_sensitive) + H.weakeyes = TRUE if(XRAY in H.mutations) H.sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) + H.see_in_dark = 8 + H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE if(H.see_override) //Override all H.see_invisible = H.see_override + H.sync_lighting_plane_alpha() + /datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source) if(abs(temperature - M.bodytemperature) > 10) //If our water and mob temperature varies by more than 10K, cool or/ heat them appropriately M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 48d8137092a..63f9f10dc71 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -343,36 +343,6 @@ Sleeping(2) return sleeping -/mob/living/carbon/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - - see_invisible = initial(see_invisible) - see_in_dark = initial(see_in_dark) - sight = initial(sight) - - if(XRAY in mutations) - grant_xray_vision() - - if(client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - - for(var/obj/item/organ/internal/cyberimp/eyes/E in internal_organs) - sight |= E.vision_flags - if(E.dark_view) - see_in_dark = max(see_in_dark,E.dark_view) - if(E.see_invisible) - see_invisible = min(see_invisible, E.see_invisible) - - if(see_override) - see_invisible = see_override - - /mob/living/carbon/handle_hud_icons() return diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index d28e728c82c..35ab0402b0c 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -197,28 +197,15 @@ if(!remote_view && !client.adminobs) reset_perspective(null) -/mob/living/proc/update_sight() - if(stat == DEAD) - grant_death_vision() - return - // Gives a mob the vision of being dead /mob/living/proc/grant_death_vision() sight |= SEE_TURFS sight |= SEE_MOBS sight |= SEE_OBJS + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE see_in_dark = 8 see_invisible = SEE_INVISIBLE_OBSERVER - -// See through walls, dark, etc. -// basically the same as death vision except you can't -// see ghosts -/mob/living/proc/grant_xray_vision() - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO + sync_lighting_plane_alpha() /mob/living/proc/handle_hud_icons() handle_hud_icons_health() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 52fde3d0d9e..10fc68d7363 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -992,3 +992,37 @@ for(var/atom/A in src) if(A.light_range > 0) A.extinguish_light() + +/mob/living/vv_edit_var(var_name, var_value) + switch(var_name) + if("stat") + if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life + GLOB.dead_mob_list -= src + GLOB.living_mob_list += src + if((stat < DEAD) && (var_value == DEAD))//Kill he + GLOB.living_mob_list -= src + GLOB.dead_mob_list += src + . = ..() + switch(var_name) + if("weakened") + SetWeakened(var_value) + if("stunned") + SetStunned(var_value) + if("paralysis") + SetParalysis(var_value) + if("sleeping") + SetSleeping(var_value) + if("maxHealth") + updatehealth() + if("resize") + update_transform() + if("lighting_alpha") + sync_lighting_plane_alpha() + +/mob/living/update_sight() + if(!client) + return + + if(stat == DEAD) + grant_death_vision() + return diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 6e12748911b..ac89553865c 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -33,7 +33,6 @@ var/mob_size = MOB_SIZE_HUMAN var/metabolism_efficiency = 1 //more or less efficiency to metabolize helpful/harmful reagents and regulate body temperature.. var/digestion_ratio = 1 //controls how quickly reagents metabolize; largely governered by species attributes. - var/nightvision = 0 var/bloodcrawl = 0 //0 No blood crawling, 1 blood crawling, 2 blood crawling+mob devour var/holder = null //The holder for blood crawling diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index ccf319b0884..4d4bff42ae7 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1290,4 +1290,29 @@ var/list/ai_verbs_default = list( return FALSE /mob/living/silicon/ai/ExtinguishMob() - return \ No newline at end of file + return + + +/mob/living/silicon/ai/update_sight() + if(!client) + return + + if(stat == DEAD) + grant_death_vision() + return + + see_invisible = initial(see_invisible) + see_in_dark = initial(see_in_dark) + lighting_alpha = initial(lighting_alpha) + sight = initial(sight) + + if(aiRestorePowerRoutine) + sight = sight &~ SEE_TURFS + sight = sight &~ SEE_MOBS + sight = sight &~ SEE_OBJS + see_in_dark = 0 + + if(see_override) + see_invisible = see_override + + sync_lighting_plane_alpha() diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index eec1ec5b8b8..06043025f7c 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -152,16 +152,3 @@ /mob/living/silicon/ai/rejuvenate() ..() add_ai_verbs(src) - -/mob/living/silicon/ai/update_sight() - see_invisible = initial(see_invisible) - see_in_dark = initial(see_in_dark) - sight = initial(sight) - if(aiRestorePowerRoutine) - sight = sight&~SEE_TURFS - sight = sight&~SEE_MOBS - sight = sight&~SEE_OBJS - see_in_dark = 0 - - if(see_override) - see_invisible = see_override diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 5f37177f674..bf09191ecf2 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -88,40 +88,6 @@ return 1 -/mob/living/silicon/robot/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - - see_invisible = initial(see_invisible) - see_in_dark = initial(see_in_dark) - sight = initial(sight) - - if(client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - - if(sight_mode & BORGMESON) - sight |= SEE_TURFS - see_invisible = min(see_invisible, SEE_INVISIBLE_MINIMUM) - see_in_dark = 1 - - if(sight_mode & BORGXRAY) - sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) - see_invisible = SEE_INVISIBLE_LIVING - see_in_dark = 8 - - if(sight_mode & BORGTHERM) - sight |= SEE_MOBS - see_invisible = min(see_invisible, SEE_INVISIBLE_LIVING) - see_in_dark = 8 - - if(see_override) - see_invisible = see_override - /mob/living/silicon/robot/handle_hud_icons() update_items() update_cell() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 18bfe6998c3..de66b7b737a 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1385,3 +1385,43 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/check_ear_prot() return ear_protection + +/mob/living/silicon/robot/update_sight() + if(!client) + return + + if(stat == DEAD) + grant_death_vision() + return + + see_invisible = initial(see_invisible) + see_in_dark = initial(see_in_dark) + sight = initial(sight) + lighting_alpha = initial(lighting_alpha) + + if(client.eye != src) + var/atom/A = client.eye + if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. + return + + if(sight_mode & BORGMESON) + sight |= SEE_TURFS + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + see_in_dark = 1 + + if(sight_mode & BORGXRAY) + sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) + see_invisible = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + see_invisible = SEE_INVISIBLE_LIVING + see_in_dark = 8 + + if(sight_mode & BORGTHERM) + sight |= SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + see_invisible = min(see_invisible, SEE_INVISIBLE_LIVING) + see_in_dark = 8 + + if(see_override) + see_invisible = see_override + + sync_lighting_plane_alpha() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 6ba407c8a90..d1982ac359d 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -30,7 +30,7 @@ status_flags = CANPUSH minbodytemp = 0 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE death_sound = 'sound/voice/hiss6.ogg' deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..." diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 18219179d40..e45000ff34f 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -17,6 +17,7 @@ speak_chance = 5 turns_per_move = 5 see_in_dark = 10 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE butcher_results = list(/obj/item/reagent_containers/food/snacks/spidermeat = 2, /obj/item/reagent_containers/food/snacks/spiderleg = 8) response_help = "pets" response_disarm = "gently pushes aside" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 81b384f56b7..f0160879e22 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -16,7 +16,7 @@ var/throw_message = "bounces off of" var/icon_aggro = null // for swapping to when we get aggressive see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE mob_size = MOB_SIZE_LARGE /mob/living/simple_animal/hostile/asteroid/Aggro() diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index ad90272a4ce..5b9d94341ef 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -40,7 +40,7 @@ search_objects = 1 // So that it can see through walls - see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS move_force = MOVE_FORCE_EXTREMELY_STRONG move_resist = MOVE_FORCE_EXTREMELY_STRONG @@ -189,13 +189,6 @@ L.EyeBlind(4) return -/mob/living/simple_animal/hostile/statue/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - //Toggle Night Vision /obj/effect/proc_holder/spell/targeted/night_vision name = "Toggle Nightvision" @@ -207,15 +200,23 @@ message = "You toggle your night vision!" range = -1 include_user = 1 - var/non_night_vision = SEE_INVISIBLE_LIVING - var/night_vision = SEE_INVISIBLE_OBSERVER_NOLIGHTING /obj/effect/proc_holder/spell/targeted/night_vision/cast(list/targets, mob/user = usr) for(var/mob/living/target in targets) - if(target.see_invisible == non_night_vision) - target.see_invisible = night_vision - else - target.see_invisible = non_night_vision + switch(target.lighting_alpha) + if (LIGHTING_PLANE_ALPHA_VISIBLE) + target.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + name = "Toggle Nightvision \[More]" + if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + target.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + name = "Toggle Nightvision \[Full]" + if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) + target.lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + name = "Toggle Nightvision \[OFF]" + else + target.lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE + name = "Toggle Nightvision \[ON]" + target.update_sight() /mob/living/simple_animal/hostile/statue/sentience_act() faction -= "neutral" diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 39c03feb928..1503c2bffe6 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -95,8 +95,7 @@ var/global/list/ts_spiderling_list = list() idle_vision_range = 10 aggro_vision_range = 10 see_in_dark = 10 - nightvision = 1 - see_invisible = 5 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE sight = SEE_MOBS // AI aggression settings diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 66fb417733b..adc498873bb 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -564,21 +564,5 @@ /mob/living/simple_animal/proc/sentience_act() //Called when a simple animal gains sentience via gold slime potion return -/mob/living/simple_animal/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - - see_invisible = initial(see_invisible) - see_in_dark = initial(see_in_dark) - sight = initial(sight) - - if(client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - /mob/living/simple_animal/can_hear() . = TRUE \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ee04e624f02..9fe0e54f800 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1341,3 +1341,12 @@ var/list/slot_equipment_priority = list( \ /mob/proc/is_literate() return FALSE + +/mob/proc/update_sight() + sync_lighting_plane_alpha() + +/mob/proc/sync_lighting_plane_alpha() + if(hud_used) + var/obj/screen/plane_master/lighting/L = hud_used.plane_masters["[LIGHTING_PLANE]"] + if (L) + L.alpha = lighting_alpha \ No newline at end of file diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 3e9ff0b7ba6..e36e7e4a004 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -1,6 +1,6 @@ /mob density = 1 - layer = 4.0 + layer = MOB_LAYER animate_movement = 2 pressure_resistance = 8 dont_save = TRUE //to avoid it messing up in buildmode saving @@ -93,7 +93,7 @@ var/list/grabbed_by = list() var/list/requests = list() - + var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE var/list/mapobjs = list() var/in_throw_mode = 0 diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index feff384ed87..4ef9cfc55b0 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -291,6 +291,8 @@ /mob/camera/aiEye/remote/shuttle_docker/update_remote_sight(mob/living/user) user.sight = SEE_TURFS + + ..() return TRUE /datum/action/innate/shuttledocker_rotate diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index da559d38d5f..a8ee1beb2a6 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -8,8 +8,10 @@ w_class = WEIGHT_CLASS_TINY var/vision_flags = 0 - var/dark_view = 0 + var/see_in_dark = 0 var/see_invisible = 0 + var/lighting_alpha + var/eye_colour = "#000000" var/old_eye_colour = "#000000" var/flash_protect = 0 @@ -54,7 +56,7 @@ implant_color = "#AEFF00" origin_tech = "materials=4;engineering=4;biotech=4;magnets=4" vision_flags = SEE_TURFS - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE aug_message = "Suddenly, you realize how much of a mess the station really is..." /obj/item/organ/internal/cyberimp/eyes/xray @@ -63,8 +65,8 @@ implant_color = "#000000" origin_tech = "materials=4;programming=4;biotech=6;magnets=4" vision_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS - dark_view = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE /obj/item/organ/internal/cyberimp/eyes/thermals name = "Thermals implant" diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 51d73fc9873..fba2df57e8a 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -10,9 +10,13 @@ var/list/colourblind_matrix = MATRIX_GREYSCALE //Special colourblindness parameters. By default, it's black-and-white. var/list/replace_colours = LIST_GREYSCALE_REPLACE var/dependent_disabilities = null //Gets set by eye-dependent disabilities such as colourblindness so the eyes can transfer the disability during transplantation. - var/dark_view = 2 //Default dark_view for Humans. var/weld_proof = null //If set, the eyes will not take damage during welding. eg. IPC optical sensors do not take damage when they weld things while all other eyes will. + var/vision_flags = 0 + var/see_in_dark = 2 + var/see_invisible = SEE_INVISIBLE_LIVING + var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE + /obj/item/organ/internal/eyes/proc/update_colour() dna.write_eyes_attributes(src) @@ -31,11 +35,8 @@ else return colourmatrix -/obj/item/organ/internal/eyes/proc/get_dark_view() //Returns dark_view (if the eyes are organic) for see_invisible handling in species.dm to be autoprocessed by life(). - return dark_view - /obj/item/organ/internal/eyes/proc/shine() - if(is_robotic() || (dark_view > EYE_SHINE_THRESHOLD)) + if(is_robotic() || (see_in_dark > EYE_SHINE_THRESHOLD)) return TRUE /obj/item/organ/internal/eyes/insert(mob/living/carbon/human/M, special = 0) @@ -70,7 +71,7 @@ colourmatrix = null ..() //Make sure the organ's got the robotic status indicators before updating the client colour. if(owner) - owner.update_client_colour(0) //Since mechanical eyes give dark_view of 2 and full colour vision atm, just having this here is fine. + owner.update_client_colour(0) //Since mechanical eyes give see_in_dark of 2 and full colour vision atm, just having this here is fine. /obj/item/organ/internal/eyes/cybernetic name = "cybernetic eyes" diff --git a/code/modules/surgery/organs/subtypes/abductor.dm b/code/modules/surgery/organs/subtypes/abductor.dm index fd57464381a..b499135417e 100644 --- a/code/modules/surgery/organs/subtypes/abductor.dm +++ b/code/modules/surgery/organs/subtypes/abductor.dm @@ -4,4 +4,4 @@ /obj/item/organ/internal/eyes/abductor name = "abductor eyeballs" - dark_view = 3 \ No newline at end of file + see_in_dark = 3 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/drask.dm b/code/modules/surgery/organs/subtypes/drask.dm index e457c4cddaa..49b11d096b6 100644 --- a/code/modules/surgery/organs/subtypes/drask.dm +++ b/code/modules/surgery/organs/subtypes/drask.dm @@ -26,4 +26,4 @@ name = "drask eyeballs" icon = 'icons/obj/species_organs/drask.dmi' desc = "Drask eyes. They look even stranger disembodied" - dark_view = 5 \ No newline at end of file + see_in_dark = 5 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/grey.dm b/code/modules/surgery/organs/subtypes/grey.dm index 3e7598fa06f..6e4a0e3eafd 100644 --- a/code/modules/surgery/organs/subtypes/grey.dm +++ b/code/modules/surgery/organs/subtypes/grey.dm @@ -23,7 +23,7 @@ name = "grey eyeballs" desc = "They still look creepy and emotionless" icon = 'icons/obj/species_organs/grey.dmi' - dark_view = 5 + see_in_dark = 5 /obj/item/organ/internal/heart/grey name = "grey heart" diff --git a/code/modules/surgery/organs/subtypes/shadow.dm b/code/modules/surgery/organs/subtypes/shadow.dm index 26a0bc50577..56bec1a4a7e 100644 --- a/code/modules/surgery/organs/subtypes/shadow.dm +++ b/code/modules/surgery/organs/subtypes/shadow.dm @@ -1,3 +1,3 @@ /obj/item/organ/internal/eyes/shadow name = "dark orbs" - dark_view = 8 \ No newline at end of file + see_in_dark = 8 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/tajaran.dm b/code/modules/surgery/organs/subtypes/tajaran.dm index d6202a377e6..99598a80fb1 100644 --- a/code/modules/surgery/organs/subtypes/tajaran.dm +++ b/code/modules/surgery/organs/subtypes/tajaran.dm @@ -8,12 +8,12 @@ name = "tajaran eyeballs" colourblind_matrix = MATRIX_TAJ_CBLIND //The colour matrix and darksight parameters that the mob will recieve when they get the disability. replace_colours = LIST_TAJ_REPLACE - dark_view = 8 + see_in_dark = 8 /obj/item/organ/internal/eyes/tajaran/farwa //Being the lesser form of Tajara, Farwas have an utterly incurable version of their colourblindness. name = "farwa eyeballs" colourmatrix = MATRIX_TAJ_CBLIND - dark_view = 8 + see_in_dark = 8 replace_colours = LIST_TAJ_REPLACE /obj/item/organ/internal/heart/tajaran diff --git a/code/modules/surgery/organs/subtypes/unathi.dm b/code/modules/surgery/organs/subtypes/unathi.dm index 26ad86d4700..a612bc7f253 100644 --- a/code/modules/surgery/organs/subtypes/unathi.dm +++ b/code/modules/surgery/organs/subtypes/unathi.dm @@ -7,7 +7,7 @@ /obj/item/organ/internal/eyes/unathi name = "unathi eyeballs" icon = 'icons/obj/species_organs/unathi.dmi' - dark_view = 3 + see_in_dark = 3 /obj/item/organ/internal/heart/unathi name = "unathi heart" diff --git a/code/modules/surgery/organs/subtypes/vulpkanin.dm b/code/modules/surgery/organs/subtypes/vulpkanin.dm index 2c583c8f84a..820b152c43f 100644 --- a/code/modules/surgery/organs/subtypes/vulpkanin.dm +++ b/code/modules/surgery/organs/subtypes/vulpkanin.dm @@ -8,12 +8,12 @@ icon = 'icons/obj/species_organs/vulpkanin.dmi' colourblind_matrix = MATRIX_VULP_CBLIND //The colour matrix and darksight parameters that the mob will recieve when they get the disability. replace_colours = LIST_VULP_REPLACE - dark_view = 8 + see_in_dark = 8 /obj/item/organ/internal/eyes/vulpkanin/wolpin //Being the lesser form of Vulpkanin, Wolpins have an utterly incurable version of their colourblindness. name = "wolpin eyeballs" colourmatrix = MATRIX_VULP_CBLIND - dark_view = 8 + see_in_dark = 8 replace_colours = LIST_VULP_REPLACE /obj/item/organ/internal/heart/vulpkanin diff --git a/code/modules/surgery/organs/subtypes/wryn.dm b/code/modules/surgery/organs/subtypes/wryn.dm index ab30c16f61f..8900bb8b37d 100644 --- a/code/modules/surgery/organs/subtypes/wryn.dm +++ b/code/modules/surgery/organs/subtypes/wryn.dm @@ -8,4 +8,4 @@ slot = "hivenode" /obj/item/organ/internal/eyes/wryn - dark_view = 3 \ No newline at end of file + see_in_dark = 3 \ No newline at end of file From 5387d0ee6718fff28f90c91489093b83020853bf Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 22:59:58 +0200 Subject: [PATCH 20/41] TOGGLES_TOTAL fix --- code/__DEFINES/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 32433975e9e..22b4334e3be 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -32,7 +32,7 @@ #define TYPING_ONCE 1048576 #define AMBIENT_OCCLUSION 2097152 -#define TOGGLES_TOTAL 4194304 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined. +#define TOGGLES_TOTAL 4194303 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined. #define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC|AMBIENT_OCCLUSION) From 44347029db30d105c6daec4aab5cd3d947b334d5 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 23:22:03 +0200 Subject: [PATCH 21/41] Compile fix --- code/game/atoms.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f30fa412a8f..5410d5f66a0 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -675,7 +675,7 @@ var/list/blood_splatter_icons = list() //the sight changes to give to the mob whose perspective is set to that atom (e.g. A mob with nightvision loses its nightvision while looking through a normal camera) /atom/proc/update_remote_sight(mob/living/user) - sync_lighting_plane_alpha() + user.sync_lighting_plane_alpha() return /atom/proc/checkpass(passflag) From 9e9d72d2ae380e195cc00acda4ab769fa258f57f Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 24 Apr 2019 00:47:55 +0200 Subject: [PATCH 22/41] Darkness fixes --- code/_onclick/hud/fullscreen.dm | 2 +- .../mining/lavaland/loot/tendril_loot.dm | 31 +++++++++++-------- code/modules/mob/dead/observer/observer.dm | 2 +- code/modules/mob/living/carbon/alien/alien.dm | 20 +++++++----- code/modules/mob/living/carbon/carbon.dm | 4 ++- code/modules/mob/living/carbon/human/human.dm | 1 + .../living/carbon/human/species/_species.dm | 3 -- code/modules/mob/living/living.dm | 2 ++ code/modules/mob/living/silicon/ai/ai.dm | 1 + .../modules/mob/living/silicon/robot/robot.dm | 4 ++- code/modules/mob/mob.dm | 1 + 11 files changed, 44 insertions(+), 27 deletions(-) diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 0a9d0f6b4f0..9d00f216eac 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -48,7 +48,7 @@ var/list/screens = mymob.screens for(var/category in screens) screen = screens[category] - if(screen.should_show_to(src)) + if(screen.should_show_to(mymob)) screen.update_for_view(mymob.client.view) mymob.client.screen |= screen else diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index 5a39264e668..bf42a4af0b1 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -192,6 +192,8 @@ icon_state = "lantern-blue" item_state = "lantern" var/obj/effect/wisp/wisp + var/sight_flags = SEE_MOBS + var/lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE /obj/item/wisp_lantern/attack_self(mob/user) if(!wisp) @@ -203,26 +205,25 @@ to_chat(user, "You release the wisp. It begins to bob around your head.") icon_state = "lantern" wisp.orbit(user, 20) - user.update_sight() - feedback_add_details("wisp_lantern","F") // freed + RegisterSignal(user, COMSIG_MOB_UPDATE_SIGHT, .proc/update_user_sight) + user.update_sight() + to_chat(user, "The wisp enhances your vision.") + + feedback_add_details("wisp_lantern","F") // freed else to_chat(user, "You return the wisp to the lantern.") - - var/mob/target - if(wisp.orbiting) - target = wisp.orbiting wisp.stop_orbit() wisp.forceMove(src) - if (istype(target)) - target.update_sight() - to_chat(target, "Your vision returns to normal.") + UnregisterSignal(user, COMSIG_MOB_UPDATE_SIGHT) + user.update_sight() + to_chat(user, "Your vision returns to normal.") icon_state = "lantern-blue" feedback_add_details("wisp_lantern","R") // returned -/obj/item/wisp_lantern/Initialize() +/obj/item/wisp_lantern/Initialize(mapload) . = ..() wisp = new(src) @@ -232,7 +233,13 @@ qdel(wisp) else wisp.visible_message("[wisp] has a sad feeling for a moment, then it passes.") - ..() + return ..() + +/obj/item/wisp_lantern/proc/update_user_sight(mob/user) + user.sight |= sight_flags + if(!isnull(lighting_alpha)) + user.lighting_alpha = min(user.lighting_alpha, lighting_alpha) + user.sync_lighting_plane_alpha() /obj/effect/wisp name = "friendly wisp" @@ -241,8 +248,6 @@ icon_state = "orb" light_range = 7 layer = ABOVE_ALL_MOB_LAYER - var/sight_flags = SEE_MOBS - var/lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE //Red/Blue Cubes /obj/item/warp_cube diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index aaad280cc0d..8d7285ceb4f 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -691,7 +691,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp see_invisible = SEE_INVISIBLE_OBSERVER updateghostimages() - ..() + . = ..() /mob/dead/observer/proc/updateghostsight() if(!seedarkness) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 4d1d91696eb..84bb5af399d 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -5,18 +5,21 @@ icon = 'icons/mob/alien.dmi' gender = NEUTER dna = null - alien_talk_understand = 1 - var/nightvision = 1 + alien_talk_understand = TRUE + + var/nightvision = FALSE + see_in_dark = 4 + var/obj/item/card/id/wear_id = null // Fix for station bounced radios -- Skie - var/has_fine_manipulation = 0 - var/move_delay_add = 0 // movement delay to add + var/has_fine_manipulation = FALSE + var/move_delay_add = FALSE // movement delay to add status_flags = CANPARALYSE|CANPUSH var/heal_rate = 5 - var/large = 0 + var/large = FALSE var/heat_protection = 0.5 - var/leaping = 0 + var/leaping = FALSE ventcrawler = 2 var/list/alien_organs = list() var/death_message = "lets out a waning guttural screech, green blood bubbling from its maw..." @@ -153,7 +156,7 @@ nightvision = TRUE usr.hud_used.nightvisionicon.icon_state = "nightvision1" else if(nightvision) - see_in_dark = 4 + see_in_dark = initial(see_in_dark) lighting_alpha = initial(lighting_alpha) nightvision = FALSE usr.hud_used.nightvisionicon.icon_state = "nightvision0" @@ -298,3 +301,6 @@ Des: Removes all infected images from the alien. if(see_override) see_invisible = see_override + + sync_lighting_plane_alpha() + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c1941c39a6e..7feebe30766 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1162,4 +1162,6 @@ so that different stomachs can handle things in different ways VB*/ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE if(see_override) - see_invisible = see_override \ No newline at end of file + see_invisible = see_override + + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b20776419d2..f094f5611a6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -551,6 +551,7 @@ return dna.species.update_sight(src) + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) //Added a safety check in case you want to shock a human mob directly through electrocute_act. /mob/living/carbon/human/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = FALSE, override = FALSE, tesla_shock = FALSE, illusion = FALSE, stun = TRUE) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 0b597c17a6f..c24a066f073 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -641,9 +641,6 @@ It'll return null if the organ doesn't correspond, so include null checks when u H.see_invisible = initial(H.see_invisible) H.lighting_alpha = initial(H.lighting_alpha) - if(H.see_in_dark > 2) //Preliminary see_invisible handling as per set_species() in code\modules\mob\living\carbon\human\human.dm. - H.lighting_alpha = min(H.lighting_alpha, LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) - if(H.client && H.client.eye != H) var/atom/A = H.client.eye if(A.update_remote_sight(H)) //returns 1 if we override all other sight updates. diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 10fc68d7363..28089468d8c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1026,3 +1026,5 @@ if(stat == DEAD) grant_death_vision() return + + . = ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 4d4bff42ae7..d339ae12dc6 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1316,3 +1316,4 @@ var/list/ai_verbs_default = list( see_invisible = see_override sync_lighting_plane_alpha() + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index de66b7b737a..8084b358d96 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1424,4 +1424,6 @@ var/list/robot_verbs_default = list( if(see_override) see_invisible = see_override - sync_lighting_plane_alpha() \ No newline at end of file + sync_lighting_plane_alpha() + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9fe0e54f800..68cb8703820 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1343,6 +1343,7 @@ var/list/slot_equipment_priority = list( \ return FALSE /mob/proc/update_sight() + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) sync_lighting_plane_alpha() /mob/proc/sync_lighting_plane_alpha() From 20b9285fc4f746c707491c09867345d792231880 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 24 Apr 2019 01:36:56 +0200 Subject: [PATCH 23/41] Wisp/meson implant fixes --- code/modules/mining/lavaland/loot/tendril_loot.dm | 9 +++++++-- code/modules/surgery/organs/augments_eyes.dm | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index bf42a4af0b1..ac3ec9d04c3 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -191,6 +191,7 @@ icon = 'icons/obj/lighting.dmi' icon_state = "lantern-blue" item_state = "lantern" + light_range = 7 var/obj/effect/wisp/wisp var/sight_flags = SEE_MOBS var/lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE @@ -202,21 +203,25 @@ return if(wisp.loc == src) + RegisterSignal(user, COMSIG_MOB_UPDATE_SIGHT, .proc/update_user_sight) + to_chat(user, "You release the wisp. It begins to bob around your head.") icon_state = "lantern" wisp.orbit(user, 20) + set_light(0) - RegisterSignal(user, COMSIG_MOB_UPDATE_SIGHT, .proc/update_user_sight) user.update_sight() to_chat(user, "The wisp enhances your vision.") feedback_add_details("wisp_lantern","F") // freed else + UnregisterSignal(user, COMSIG_MOB_UPDATE_SIGHT) + to_chat(user, "You return the wisp to the lantern.") wisp.stop_orbit() wisp.forceMove(src) + set_light(initial(light_range)) - UnregisterSignal(user, COMSIG_MOB_UPDATE_SIGHT) user.update_sight() to_chat(user, "Your vision returns to normal.") diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index a8ee1beb2a6..0dc99e310cb 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -56,7 +56,7 @@ implant_color = "#AEFF00" origin_tech = "materials=4;engineering=4;biotech=4;magnets=4" vision_flags = SEE_TURFS - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE aug_message = "Suddenly, you realize how much of a mess the station really is..." /obj/item/organ/internal/cyberimp/eyes/xray From c8277bd282e2072df859615053614eeec2b2aea3 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 24 Apr 2019 02:35:53 +0200 Subject: [PATCH 24/41] More darkness fixes --- code/_onclick/hud/plane_master.dm | 11 ++++++++++- .../gamemodes/miniantags/guardian/types/ranged.dm | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index aebc194c97e..b43715ee598 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -12,6 +12,15 @@ /obj/screen/plane_master/proc/Hide(override) alpha = override || hide_alpha +/obj/screen/plane_master/proc/outline(_size, _color) + filters += filter(type = "outline", size = _size, color = _color) + +/obj/screen/plane_master/proc/shadow(_size, _border, _offset = 0, _x = 0, _y = 0, _color = "#04080FAA") + filters += filter(type = "drop_shadow", x = _x, y = _y, color = _color, size = _size, offset = _offset, border = _border) + +/obj/screen/plane_master/proc/clear_filters() + filters = list() + //Why do plane masters need a backdrop sometimes? Read http://www.byond.com/forum/?post=2141928 //Trust me, you need one. Period. If you don't think you do, you're doing something extremely wrong. /obj/screen/plane_master/proc/backdrop(mob/mymob) @@ -29,7 +38,7 @@ blend_mode = BLEND_OVERLAY /obj/screen/plane_master/game_world/backdrop(mob/mymob) - filters -= FILTER_AMBIENT_OCCLUSION + clear_filters() if(istype(mymob) && mymob.client && mymob.client.prefs && (mymob.client.prefs.toggles & AMBIENT_OCCLUSION)) filters += FILTER_AMBIENT_OCCLUSION diff --git a/code/game/gamemodes/miniantags/guardian/types/ranged.dm b/code/game/gamemodes/miniantags/guardian/types/ranged.dm index 641d44dae2e..3e57a059d10 100644 --- a/code/game/gamemodes/miniantags/guardian/types/ranged.dm +++ b/code/game/gamemodes/miniantags/guardian/types/ranged.dm @@ -68,6 +68,8 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE msg = "You deactivate your night vision." + update_sight() + to_chat(src, "[msg]") /mob/living/simple_animal/hostile/guardian/ranged/verb/Snare() From b410ee5a973d378a2406696ba6608be4cb8e0d9d Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Fri, 26 Apr 2019 23:13:13 +0200 Subject: [PATCH 25/41] zvis fix --- code/modules/awaymissions/zvis.dm | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index 7e7c65485c4..5561e5e90cd 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -47,7 +47,7 @@ // to know if the world changed on the remote side /obj/effect/portal_sensor invisibility = 101 - var/required_color = -1 + var/light_hash = -1 var/triggered_this_tick = 0 var/datum/owner // owner that receive signals var/list/params[0] // what to send to the main object to indicate which sensor @@ -86,12 +86,18 @@ var/turf/T = loc if(istype(T) && T.lighting_object && !T.lighting_object.needs_update) var/atom/movable/lighting_object/O = T.lighting_object - if(O.color != required_color) - required_color = O.color + var/hash = 0 + + for(var/lighting_corner in O) + var/datum/lighting_corner/C = lighting_corner + hash = hash + C.lum_r + C.lum_g + C.lum_b + + if(hash != light_hash) + light_hash = hash trigger() else - if(required_color != -1) - required_color = -1 + if(light_hash != -1) + light_hash = -1 trigger() // for second floor showing floor below @@ -364,4 +370,4 @@ screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]" /obj/effect/view_portal_dummy/attack_ghost(mob/user) - owner.attack_ghost(user) + owner.attack_ghost(user) \ No newline at end of file From 40c1a25eb5794e11c661801c387a208d8e42f2aa Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 27 Apr 2019 01:08:17 +0200 Subject: [PATCH 26/41] Lighting fixes --- code/controllers/subsystem/lighting.dm | 14 ++--- code/game/gamemodes/cult/cult_items.dm | 2 +- .../gamemodes/malfunction/Malf_Modules.dm | 10 +-- code/modules/clothing/clothing.dm | 4 +- code/modules/clothing/glasses/glasses.dm | 16 ++--- code/modules/clothing/glasses/hud.dm | 10 +-- .../clothing/spacesuits/miscellaneous.dm | 1 + code/modules/lighting/lighting_area.dm | 8 +-- code/modules/lighting/lighting_atom.dm | 32 +++++----- code/modules/lighting/lighting_corner.dm | 28 ++++----- code/modules/lighting/lighting_object.dm | 14 ++--- code/modules/lighting/lighting_source.dm | 62 +++++++++---------- code/modules/lighting/lighting_turf.dm | 36 +++++------ .../mining/lavaland/loot/tendril_loot.dm | 1 - code/modules/mob/camera/camera.dm | 2 +- code/modules/mob/living/carbon/alien/alien.dm | 9 +-- code/modules/mob/living/carbon/carbon.dm | 6 +- code/modules/mob/living/carbon/human/human.dm | 1 + .../mob/living/carbon/human/inventory.dm | 8 +-- .../living/carbon/human/species/_species.dm | 9 +-- code/modules/mob/living/life.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 5 +- .../mob/living/silicon/ai/freelook/chunk.dm | 8 ++- .../modules/mob/living/silicon/robot/robot.dm | 11 +--- .../mob/living/simple_animal/constructs.dm | 2 +- .../simple_animal/hostile/giant_spider.dm | 2 +- .../living/simple_animal/hostile/statue.dm | 2 +- .../hostile/terror_spiders/terror_spiders.dm | 2 +- code/modules/mob/mob_defines.dm | 1 - code/modules/surgery/organs/augments_eyes.dm | 1 + 30 files changed, 148 insertions(+), 161 deletions(-) diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 252f2dcb2c8..82bbd52471a 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -16,7 +16,7 @@ SUBSYSTEM_DEF(lighting) if(config.starlight) for(var/I in GLOB.all_areas) var/area/A = I - if (A.dynamic_lighting == DYNAMIC_LIGHTING_IFSTARLIGHT) + if(A.dynamic_lighting == DYNAMIC_LIGHTING_IFSTARLIGHT) A.luminosity = 0 create_all_lighting_objects() @@ -40,7 +40,7 @@ SUBSYSTEM_DEF(lighting) if(init_tick_checks) CHECK_TICK - else if (MC_TICK_CHECK) + else if(MC_TICK_CHECK) break if(i) GLOB.lighting_update_lights.Cut(1, i+1) @@ -56,9 +56,9 @@ SUBSYSTEM_DEF(lighting) C.needs_update = FALSE if(init_tick_checks) CHECK_TICK - else if (MC_TICK_CHECK) + else if(MC_TICK_CHECK) break - if (i) + if(i) GLOB.lighting_update_corners.Cut(1, i+1) i = 0 @@ -69,16 +69,16 @@ SUBSYSTEM_DEF(lighting) for (i in 1 to GLOB.lighting_update_objects.len) var/atom/movable/lighting_object/O = GLOB.lighting_update_objects[i] - if (QDELETED(O)) + if(QDELETED(O)) continue O.update() O.needs_update = FALSE if(init_tick_checks) CHECK_TICK - else if (MC_TICK_CHECK) + else if(MC_TICK_CHECK) break - if (i) + if(i) GLOB.lighting_update_objects.Cut(1, i+1) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index f38958e0c2b..e4274d18d49 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -218,7 +218,7 @@ name = "zealot's blindfold" icon_state = "blindfold" item_state = "blindfold" - darkness_view = 8 + see_in_dark = 8 flash_protect = 1 /obj/item/clothing/glasses/night/cultblind/equipped(mob/user, slot) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 5cf32951e11..13df41fe531 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -496,22 +496,22 @@ return var/upgradedcams = 0 - see_override = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //Night-vision, without which X-ray would be very limited in power. + RegisterSignal(src, COMSIG_MOB_UPDATE_SIGHT, .proc/update_upgraded_cameras_sight) //Makes sure the AI has night vision, without which X-ray would be very limited in power. update_sight() for(var/obj/machinery/camera/C in cameranet.cameras) if(C.assembly) - var/upgraded = 0 + var/upgraded = FALSE if(!C.isXRay()) C.upgradeXRay() //Update what it can see. cameranet.updateVisibility(C, 0) - upgraded = 1 + upgraded = TRUE if(!C.isEmpProof()) C.upgradeEmpProof() - upgraded = 1 + upgraded = TRUE if(upgraded) upgradedcams++ @@ -519,6 +519,8 @@ to_chat(src, "OTA firmware distribution complete! Cameras upgraded: [upgradedcams]. Light amplification system online.") verbs -= /mob/living/silicon/ai/proc/upgrade_cameras +/mob/living/silicon/ai/proc/update_upgraded_cameras_sight() + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE /datum/AI_Module/large/eavesdrop module_name = "Enhanced Surveillance" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 5e103f14c72..d339f767865 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -151,7 +151,7 @@ slot_flags = SLOT_EYES materials = list(MAT_GLASS = 250) var/vision_flags = 0 - var/darkness_view = 0 //Base human is 2 + var/see_in_dark = 0 //Base human is 2 var/invis_view = SEE_INVISIBLE_LIVING var/invis_override = 0 var/lighting_alpha @@ -284,7 +284,7 @@ BLIND // can't see anything var/HUDType = null var/vision_flags = 0 - var/darkness_view = 0 + var/see_in_dark = 0 var/lighting_alpha var/can_toggle = null diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 6a7da898b25..3a427d96bec 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -52,7 +52,7 @@ icon_state = "nvgmeson" item_state = "glasses" origin_tech = "magnets=4;engineering=5;plasmatech=4" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE prescription_upgradable = 0 @@ -104,7 +104,7 @@ desc = "Now you can science in darkness." icon_state = "nvpurple" item_state = "glasses" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these /obj/item/clothing/glasses/janitor @@ -123,7 +123,7 @@ icon_state = "night" item_state = "glasses" origin_tech = "materials=4;magnets=4;plasmatech=4;engineering=4" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these species_fit = list("Vox") sprite_sheets = list( @@ -224,7 +224,7 @@ name = "sunglasses" icon_state = "sun" item_state = "sunglasses" - darkness_view = 1 + see_in_dark = 1 flash_protect = 1 tint = 1 prescription_upgradable = 1 @@ -238,7 +238,7 @@ /obj/item/clothing/glasses/sunglasses/fake desc = "Cheap, plastic sunglasses. They don't even have UV protection." name = "cheap sunglasses" - darkness_view = 0 + see_in_dark = 0 flash_protect = 0 tint = 0 @@ -286,7 +286,7 @@ name = "sunglasses" icon_state = "sun" item_state = "sunglasses" - darkness_view = 1 + see_in_dark = 1 flash_protect = 1 tint = 1 species_fit = list("Vox") @@ -505,11 +505,11 @@ icon_state = "godeye" item_state = "godeye" vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS - darkness_view = 8 + see_in_dark = 8 scan_reagents = 1 flags = NODROP flags_cover = null - lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE /obj/item/clothing/glasses/godeye/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, src) && W != src && W.loc == user) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index ad775b04c14..7f5d73acb1d 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -50,7 +50,7 @@ icon_state = "healthhudnight" item_state = "glasses" origin_tech = "magnets=4;biotech=4;plasmatech=4;engineering=5" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 @@ -72,7 +72,7 @@ icon_state = "diagnostichudnight" item_state = "glasses" origin_tech = "magnets=4;powerstorage=4;plasmatech=4;engineering=5" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 @@ -112,7 +112,7 @@ desc = "An advanced heads-up display which provides id data and vision in complete darkness." icon_state = "securityhudnight" origin_tech = "magnets=4;combat=4;plasmatech=4;engineering=5" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these prescription_upgradable = 0 @@ -124,7 +124,7 @@ desc = "Sunglasses with a HUD." icon_state = "sunhud" origin_tech = "magnets=3;combat=3;engineering=3" - darkness_view = 1 + see_in_dark = 1 flash_protect = 1 tint = 1 prescription_upgradable = 1 @@ -154,7 +154,7 @@ desc = "A hydroponic HUD fitted with a light amplifier." icon_state = "hydroponichudnight" item_state = "glasses" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 6b86d8f5d5c..91b28ad3206 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -48,6 +48,7 @@ unacidable = 1 vision_flags = SEE_MOBS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these + see_in_dark = 8 HUDType = MEDHUD strip_delay = 130 diff --git a/code/modules/lighting/lighting_area.dm b/code/modules/lighting/lighting_area.dm index 58e9a4337a5..77e955d10a6 100644 --- a/code/modules/lighting/lighting_area.dm +++ b/code/modules/lighting/lighting_area.dm @@ -3,21 +3,21 @@ var/dynamic_lighting = DYNAMIC_LIGHTING_ENABLED /area/proc/set_dynamic_lighting(var/new_dynamic_lighting = DYNAMIC_LIGHTING_ENABLED) - if (new_dynamic_lighting == dynamic_lighting) + if(new_dynamic_lighting == dynamic_lighting) return FALSE dynamic_lighting = new_dynamic_lighting - if (IS_DYNAMIC_LIGHTING(src)) + if(IS_DYNAMIC_LIGHTING(src)) cut_overlay(/obj/effect/fullbright) for (var/turf/T in src) - if (IS_DYNAMIC_LIGHTING(T)) + if(IS_DYNAMIC_LIGHTING(T)) T.lighting_build_overlay() else add_overlay(/obj/effect/fullbright) for (var/turf/T in src) - if (T.lighting_object) + if(T.lighting_object) T.lighting_clear_overlay() return TRUE diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 85c857ab804..ff4bc517979 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -13,13 +13,13 @@ /atom/proc/set_light(var/l_range, var/l_power, var/l_color = NONSENSICAL_VALUE) if(l_range > 0 && l_range < MINIMUM_USEFUL_LIGHT_RANGE) l_range = MINIMUM_USEFUL_LIGHT_RANGE //Brings the range up to 1.4, which is just barely brighter than the soft lighting that surrounds players. - if (l_power != null) + if(l_power != null) light_power = l_power - if (l_range != null) + if(l_range != null) light_range = l_range - if (l_color != NONSENSICAL_VALUE) + if(l_color != NONSENSICAL_VALUE) light_color = l_color SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT, l_range, l_power, l_color) @@ -32,18 +32,18 @@ // Creates or destroys it if needed, makes it update values, makes sure it's got the correct source turf... /atom/proc/update_light() set waitfor = FALSE - if (QDELETED(src)) + if(QDELETED(src)) return - if (!light_power || !light_range) // We won't emit light anyways, destroy the light source. + if(!light_power || !light_range) // We won't emit light anyways, destroy the light source. QDEL_NULL(light) else - if (!ismovableatom(loc)) // We choose what atom should be the top atom of the light here. + if(!ismovableatom(loc)) // We choose what atom should be the top atom of the light here. . = src else . = loc - if (light) // Update the light or create it if it does not exist. + if(light) // Update the light or create it if it does not exist. light.update(.) else light = new/datum/light_source(src, .) @@ -55,30 +55,30 @@ /atom/movable/Destroy() var/turf/T = loc . = ..() - if (opacity && istype(T)) + if(opacity && istype(T)) var/old_has_opaque_atom = T.has_opaque_atom T.recalc_atom_opacity() - if (old_has_opaque_atom != T.has_opaque_atom) + if(old_has_opaque_atom != T.has_opaque_atom) T.reconsider_lights() // Should always be used to change the opacity of an atom. // It notifies (potentially) affected light sources so they can update (if needed). /atom/proc/set_opacity(var/new_opacity) - if (new_opacity == opacity) + if(new_opacity == opacity) return opacity = new_opacity var/turf/T = loc - if (!isturf(T)) + if(!isturf(T)) return - if (new_opacity == TRUE) + if(new_opacity == TRUE) T.has_opaque_atom = TRUE T.reconsider_lights() else var/old_has_opaque_atom = T.has_opaque_atom T.recalc_atom_opacity() - if (old_has_opaque_atom != T.has_opaque_atom) + if(old_has_opaque_atom != T.has_opaque_atom) T.reconsider_lights() @@ -92,15 +92,15 @@ /atom/vv_edit_var(var_name, var_value) switch (var_name) - if ("light_range") + if("light_range") set_light(l_range=var_value) return TRUE - if ("light_power") + if("light_power") set_light(l_power=var_value) return TRUE - if ("light_color") + if("light_color") set_light(l_color=var_value) return TRUE diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm index e12876dbcc2..d8b05d0c17f 100644 --- a/code/modules/lighting/lighting_corner.dm +++ b/code/modules/lighting/lighting_corner.dm @@ -45,8 +45,8 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, // Diagonal one is easy. T = get_step(new_turf, diagonal) - if (T) // In case we're on the map's border. - if (!T.corners) + if(T) // In case we're on the map's border. + if(!T.corners) T.corners = list(null, null, null, null) masters[T] = diagonal @@ -55,8 +55,8 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, // Now the horizontal one. T = get_step(new_turf, horizontal) - if (T) // Ditto. - if (!T.corners) + if(T) // Ditto. + if(!T.corners) T.corners = list(null, null, null, null) masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. @@ -65,8 +65,8 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, // And finally the vertical one. T = get_step(new_turf, vertical) - if (T) - if (!T.corners) + if(T) + if(!T.corners) T.corners = list(null, null, null, null) masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. @@ -81,20 +81,20 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, var/thing for (thing in masters) T = thing - if (T.lighting_object) + if(T.lighting_object) active = TRUE // God that was a mess, now to do the rest of the corner code! Hooray! /datum/lighting_corner/proc/update_lumcount(var/delta_r, var/delta_g, var/delta_b) - if ((abs(delta_r)+abs(delta_g)+abs(delta_b)) == 0) + if((abs(delta_r)+abs(delta_g)+abs(delta_b)) == 0) return lum_r += delta_r lum_g += delta_g lum_b += delta_b - if (!needs_update) + if(!needs_update) needs_update = TRUE GLOB.lighting_update_corners += src @@ -105,11 +105,11 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, var/lum_b = src.lum_b var/mx = max(lum_r, lum_g, lum_b) // Scale it so one of them is the strongest lum, if it is above 1. . = 1 // factor - if (mx > 1) + if(mx > 1) . = 1 / mx #if LIGHTING_SOFT_THRESHOLD != 0 - else if (mx < LIGHTING_SOFT_THRESHOLD) + else if(mx < LIGHTING_SOFT_THRESHOLD) . = 0 // 0 means soft lighting. cache_r = round(lum_r * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD @@ -124,8 +124,8 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, for (var/TT in masters) var/turf/T = TT - if (T.lighting_object) - if (!T.lighting_object.needs_update) + if(T.lighting_object) + if(!T.lighting_object.needs_update) T.lighting_object.needs_update = TRUE GLOB.lighting_update_objects += T.lighting_object @@ -135,7 +135,7 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, /datum/lighting_corner/Destroy(var/force) - if (!force) + if(!force) return QDEL_HINT_LETMELIVE stack_trace("Attempted qdel of a lighting corner.") diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index 586668ec139..c233c887c9a 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -19,7 +19,7 @@ verbs.Cut() myturf = loc - if (myturf.lighting_object) + if(myturf.lighting_object) qdel(myturf.lighting_object, force = TRUE) myturf.lighting_object = src myturf.luminosity = 0 @@ -31,13 +31,13 @@ GLOB.lighting_update_objects += src /atom/movable/lighting_object/Destroy(var/force) - if (force) + if(force) GLOB.lighting_update_objects -= src - if (loc != myturf) + if(loc != myturf) var/turf/oldturf = get_turf(myturf) var/turf/newturf = get_turf(loc) stack_trace("A lighting object was qdeleted with a different loc then it is suppose to have ([COORD(oldturf)] -> [COORD(newturf)])") - if (isturf(myturf)) + if(isturf(myturf)) myturf.lighting_object = null myturf.luminosity = 1 myturf = null @@ -48,8 +48,8 @@ return QDEL_HINT_LETMELIVE /atom/movable/lighting_object/proc/update() - if (loc != myturf) - if (loc) + if(loc != myturf) + if(loc) var/turf/oldturf = get_turf(myturf) var/turf/newturf = get_turf(loc) warning("A lighting object realised it's loc had changed in update() ([myturf]\[[myturf ? myturf.type : "null"]]([COORD(oldturf)]) -> [loc]\[[ loc ? loc.type : "null"]]([COORD(newturf)]))!") @@ -73,7 +73,7 @@ var/datum/lighting_corner/cg = dummy_lighting_corner var/datum/lighting_corner/cb = dummy_lighting_corner var/datum/lighting_corner/ca = dummy_lighting_corner - if (corners) //done this way for speed + if(corners) //done this way for speed cr = corners[3] || dummy_lighting_corner cg = corners[2] || dummy_lighting_corner cb = corners[4] || dummy_lighting_corner diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index b6dbd778371..207a91d58b4 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -33,7 +33,7 @@ source_atom = owner // Set our new owner. LAZYADD(source_atom.light_sources, src) top_atom = top - if (top_atom != source_atom) + if(top_atom != source_atom) LAZYADD(top_atom.light_sources, src) source_turf = top_atom @@ -51,13 +51,13 @@ /datum/light_source/Destroy(force) remove_lum() - if (source_atom) + if(source_atom) LAZYREMOVE(source_atom.light_sources, src) - if (top_atom) + if(top_atom) LAZYREMOVE(top_atom.light_sources, src) - if (needs_update) + if(needs_update) GLOB.lighting_update_lights -= src . = ..() @@ -66,22 +66,22 @@ // If you want it to go switch everybody to elastic tab stops. // Actually that'd be great if you could! #define EFFECT_UPDATE(level) \ - if (needs_update == LIGHTING_NO_UPDATE) \ + if(needs_update == LIGHTING_NO_UPDATE) \ GLOB.lighting_update_lights += src; \ - if (needs_update < level) \ + if(needs_update < level) \ needs_update = level; \ // This proc will cause the light source to update the top atom, and add itself to the update queue. /datum/light_source/proc/update(var/atom/new_top_atom) // This top atom is different. - if (new_top_atom && new_top_atom != top_atom) + if(new_top_atom && new_top_atom != top_atom) if(top_atom != source_atom && top_atom.light_sources) // Remove ourselves from the light sources of that top atom. LAZYREMOVE(top_atom.light_sources, src) top_atom = new_top_atom - if (top_atom != source_atom) + if(top_atom != source_atom) LAZYADD(top_atom.light_sources, src) // Add ourselves to the light sources of our new top atom. EFFECT_UPDATE(LIGHTING_CHECK_UPDATE) @@ -96,7 +96,7 @@ // Decompile the hexadecimal colour into lumcounts of each perspective. /datum/light_source/proc/parse_light_color() - if (light_color) + if(light_color) lum_r = GetRedPart (light_color) / 255 lum_g = GetGreenPart (light_color) / 255 lum_b = GetBluePart (light_color) / 255 @@ -156,7 +156,7 @@ /datum/light_source/proc/recalc_corner(var/datum/lighting_corner/C) LAZYINITLIST(effect_str) - if (effect_str[C]) // Already have one. + if(effect_str[C]) // Already have one. REMOVE_CORNER(C) effect_str[C] = 0 @@ -167,61 +167,61 @@ var/update = FALSE var/atom/source_atom = src.source_atom - if (QDELETED(source_atom)) + if(QDELETED(source_atom)) qdel(src) return - if (source_atom.light_power != light_power) + if(source_atom.light_power != light_power) light_power = source_atom.light_power update = TRUE - if (source_atom.light_range != light_range) + if(source_atom.light_range != light_range) light_range = source_atom.light_range update = TRUE - if (!top_atom) + if(!top_atom) top_atom = source_atom update = TRUE - if (!light_range || !light_power) + if(!light_range || !light_power) qdel(src) return - if (isturf(top_atom)) - if (source_turf != top_atom) + if(isturf(top_atom)) + if(source_turf != top_atom) source_turf = top_atom pixel_turf = source_turf update = TRUE - else if (top_atom.loc != source_turf) + else if(top_atom.loc != source_turf) source_turf = top_atom.loc pixel_turf = get_turf_pixel(top_atom) update = TRUE else var/P = get_turf_pixel(top_atom) - if (P != pixel_turf) + if(P != pixel_turf) pixel_turf = P update = TRUE - if (!isturf(source_turf)) - if (applied) + if(!isturf(source_turf)) + if(applied) remove_lum() return - if (light_range && light_power && !applied) + if(light_range && light_power && !applied) update = TRUE - if (source_atom.light_color != light_color) + if(source_atom.light_color != light_color) light_color = source_atom.light_color parse_light_color() update = TRUE - else if (applied_lum_r != lum_r || applied_lum_g != lum_g || applied_lum_b != lum_b) + else if(applied_lum_r != lum_r || applied_lum_g != lum_g || applied_lum_b != lum_b) update = TRUE - if (update) + if(update) needs_update = LIGHTING_CHECK_UPDATE applied = TRUE - else if (needs_update == LIGHTING_CHECK_UPDATE) + else if(needs_update == LIGHTING_CHECK_UPDATE) return //nothing's changed var/list/datum/lighting_corner/corners = list() @@ -229,7 +229,7 @@ var/thing var/datum/lighting_corner/C var/turf/T - if (source_turf) + if(source_turf) var/oldlum = source_turf.luminosity source_turf.luminosity = CEILING(light_range, 1) for(T in view(CEILING(light_range, 1), source_turf)) @@ -253,11 +253,11 @@ LAZYREMOVE(T.affecting_lights, src) LAZYINITLIST(effect_str) - if (needs_update == LIGHTING_VIS_UPDATE) + if(needs_update == LIGHTING_VIS_UPDATE) for (thing in corners - effect_str) // New corners C = thing LAZYADD(C.affecting, src) - if (!C.active) + if(!C.active) effect_str[C] = 0 continue APPLY_CORNER(C) @@ -266,14 +266,14 @@ for (thing in L) // New corners C = thing LAZYADD(C.affecting, src) - if (!C.active) + if(!C.active) effect_str[C] = 0 continue APPLY_CORNER(C) for (thing in corners - L) // Existing corners C = thing - if (!C.active) + if(!C.active) effect_str[C] = 0 continue APPLY_CORNER(C) diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 0fe3caec840..c2198cea650 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -18,7 +18,7 @@ L.vis_update() /turf/proc/lighting_clear_overlay() - if (lighting_object) + if(lighting_object) qdel(lighting_object, TRUE) var/datum/lighting_corner/C @@ -31,14 +31,14 @@ // Builds a lighting object for us, but only if our area is dynamic. /turf/proc/lighting_build_overlay() - if (lighting_object) + if(lighting_object) qdel(lighting_object,force=TRUE) //Shitty fix for lighting objects persisting after death var/area/A = loc - if (!IS_DYNAMIC_LIGHTING(A) && !light_sources) + if(!IS_DYNAMIC_LIGHTING(A) && !light_sources) return - if (!lighting_corners_initialised) + if(!lighting_corners_initialised) generate_missing_corners() new/atom/movable/lighting_object(src) @@ -50,7 +50,7 @@ if(!thing) continue C = thing - if (!C.active) // We would activate the corner, calculate the lighting for it. + if(!C.active) // We would activate the corner, calculate the lighting for it. for (thing in C.affecting) S = thing S.recalc_corner(C) @@ -58,7 +58,7 @@ // Used to get a scaled lumcount. /turf/proc/get_lumcount(var/minlum = 0, var/maxlum = 1) - if (!lighting_object) + if(!lighting_object) return 1 var/totallums = 0 @@ -81,7 +81,7 @@ // itself as too dark to allow sight and see_in_dark becomes useful. // So basically if this returns true the tile is unlit black. /turf/proc/is_softly_lit() - if (!lighting_object) + if(!lighting_object) return FALSE return !lighting_object.luminosity @@ -89,46 +89,46 @@ // Can't think of a good name, this proc will recalculate the has_opaque_atom variable. /turf/proc/recalc_atom_opacity() has_opaque_atom = opacity - if (!has_opaque_atom) + if(!has_opaque_atom) for (var/atom/A in src.contents) // Loop through every movable atom on our tile PLUS ourselves (we matter too...) - if (A.opacity) + if(A.opacity) has_opaque_atom = TRUE break /turf/Exited(atom/movable/Obj, atom/newloc) . = ..() - if (Obj && Obj.opacity) + if(Obj && Obj.opacity) recalc_atom_opacity() // Make sure to do this before reconsider_lights(), incase we're on instant updates. reconsider_lights() /turf/proc/change_area(var/area/old_area, var/area/new_area) if(SSlighting.initialized) - if (new_area.dynamic_lighting != old_area.dynamic_lighting) - if (new_area.dynamic_lighting) + if(new_area.dynamic_lighting != old_area.dynamic_lighting) + if(new_area.dynamic_lighting) lighting_build_overlay() else lighting_clear_overlay() /turf/proc/get_corners() - if (!IS_DYNAMIC_LIGHTING(src) && !light_sources) + if(!IS_DYNAMIC_LIGHTING(src) && !light_sources) return null - if (!lighting_corners_initialised) + if(!lighting_corners_initialised) generate_missing_corners() - if (has_opaque_atom) + if(has_opaque_atom) return null // Since this proc gets used in a for loop, null won't be looped though. return corners /turf/proc/generate_missing_corners() - if (!IS_DYNAMIC_LIGHTING(src) && !light_sources) + if(!IS_DYNAMIC_LIGHTING(src) && !light_sources) return lighting_corners_initialised = TRUE - if (!corners) + if(!corners) corners = list(null, null, null, null) for (var/i = 1 to 4) - if (corners[i]) // Already have a corner on this direction. + if(corners[i]) // Already have a corner on this direction. continue corners[i] = new/datum/lighting_corner(src, GLOB.LIGHTING_CORNER_DIAGONAL[i]) diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index ac3ec9d04c3..3c154e351c7 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -244,7 +244,6 @@ user.sight |= sight_flags if(!isnull(lighting_alpha)) user.lighting_alpha = min(user.lighting_alpha, lighting_alpha) - user.sync_lighting_plane_alpha() /obj/effect/wisp name = "friendly wisp" diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm index bfeecdef055..df6fd57423d 100644 --- a/code/modules/mob/camera/camera.dm +++ b/code/modules/mob/camera/camera.dm @@ -7,7 +7,7 @@ move_resist = INFINITY status_flags = GODMODE // You can't damage it. mouse_opacity = MOUSE_OPACITY_TRANSPARENT - see_in_dark = 7 + see_in_dark = 8 invisibility = 101 // No one can see us sight = SEE_SELF move_on_shuttle = 0 diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 84bb5af399d..e6dcaebf51c 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -297,10 +297,7 @@ Des: Removes all infected images from the alien. if(E.see_invisible) see_invisible = min(see_invisible, E.see_invisible) if(!isnull(E.lighting_alpha)) - lighting_alpha = min(lighting_alpha, E.lighting_alpha) + lighting_alpha = min(lighting_alpha, E.lighting_alpha) - if(see_override) - see_invisible = see_override - - sync_lighting_plane_alpha() - SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) \ No newline at end of file + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + sync_lighting_plane_alpha() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c2a01eee4f7..44a333fbe44 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1160,8 +1160,6 @@ so that different stomachs can handle things in different ways VB*/ sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - - if(see_override) - see_invisible = see_override - + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + sync_lighting_plane_alpha() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f094f5611a6..01faa9d9422 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -552,6 +552,7 @@ dna.species.update_sight(src) SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + sync_lighting_plane_alpha() //Added a safety check in case you want to shock a human mob directly through electrocute_act. /mob/living/carbon/human/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = FALSE, override = FALSE, tesla_shock = FALSE, illusion = FALSE, stun = TRUE) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index ba4f2fbbcf4..9e6ab986395 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -115,7 +115,7 @@ update_tint() if(G.prescription) update_nearsighted_effects() - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) + if(G.vision_flags || G.see_in_dark || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses() update_client_colour() @@ -128,7 +128,7 @@ // Bandanas and paper hats go on the head but are not head clothing if(istype(I,/obj/item/clothing/head)) var/obj/item/clothing/head/hat = I - if(hat.vision_flags || hat.darkness_view || !isnull(hat.lighting_alpha)) + if(hat.vision_flags || hat.see_in_dark || !isnull(hat.lighting_alpha)) update_sight() head_update(I) update_inv_head() @@ -267,7 +267,7 @@ update_tint() if(G.prescription) update_nearsighted_effects() - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) + if(G.vision_flags || G.see_in_dark || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses(redraw_mob) update_client_colour() @@ -283,7 +283,7 @@ // paper + bandanas if(istype(W, /obj/item/clothing/head)) var/obj/item/clothing/head/hat = W - if(hat.vision_flags || hat.darkness_view || !isnull(hat.lighting_alpha)) + if(hat.vision_flags || hat.see_in_dark || !isnull(hat.lighting_alpha)) update_sight() head_update(W) update_inv_head(redraw_mob) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index c24a066f073..7990dbad915 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -668,7 +668,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(H.glasses) var/obj/item/clothing/glasses/G = H.glasses H.sight |= G.vision_flags - H.see_in_dark = max(G.darkness_view, H.see_in_dark) + H.see_in_dark = max(G.see_in_dark, H.see_in_dark) if(G.invis_override) H.see_invisible = G.invis_override @@ -683,7 +683,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(istype(H.head, /obj/item/clothing/head)) var/obj/item/clothing/head/hat = H.head H.sight |= hat.vision_flags - H.see_in_dark = max(hat.darkness_view, H.see_in_dark) + H.see_in_dark = max(hat.see_in_dark, H.see_in_dark) if(!isnull(hat.lighting_alpha)) H.lighting_alpha = min(hat.lighting_alpha, H.lighting_alpha) @@ -696,7 +696,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u var/obj/item/clothing/glasses/G = rig.visor.vision.glasses if(istype(G)) H.sight |= G.vision_flags - H.see_in_dark = max(G.darkness_view, H.see_in_dark) + H.see_in_dark = max(G.see_in_dark, H.see_in_dark) H.see_invisible = min(G.invis_view, H.see_invisible) if(!isnull(G.lighting_alpha)) @@ -717,9 +717,6 @@ It'll return null if the organ doesn't correspond, so include null checks when u H.see_in_dark = 8 H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - if(H.see_override) //Override all - H.see_invisible = H.see_override - H.sync_lighting_plane_alpha() /datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 35ab0402b0c..4f17801111a 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -202,7 +202,7 @@ sight |= SEE_TURFS sight |= SEE_MOBS sight |= SEE_OBJS - lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE see_in_dark = 8 see_invisible = SEE_INVISIBLE_OBSERVER sync_lighting_plane_alpha() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index d339ae12dc6..4389198fd10 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1312,8 +1312,5 @@ var/list/ai_verbs_default = list( sight = sight &~ SEE_OBJS see_in_dark = 0 - if(see_override) - see_invisible = see_override - - sync_lighting_plane_alpha() SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + sync_lighting_plane_alpha() diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm index ec2fd378ed5..4b124c364c2 100644 --- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm +++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm @@ -116,7 +116,8 @@ var/turf/t = turf if(obscuredTurfs[t]) if(!t.obscured) - t.obscured = image('icons/effects/cameravis.dmi', t, null, 15) + t.obscured = image('icons/effects/cameravis.dmi', t, null, BYOND_LIGHTING_LAYER + 0.1) + t.obscured.plane = BYOND_LIGHTING_PLANE + 1 obscured += t.obscured for(var/eye in seenby) @@ -169,7 +170,8 @@ for(var/turf in obscuredTurfs) var/turf/t = turf if(!t.obscured) - t.obscured = image('icons/effects/cameravis.dmi', t, "black", 15) + t.obscured = image('icons/effects/cameravis.dmi', t, "black", BYOND_LIGHTING_LAYER + 0.1) + t.obscured.plane = BYOND_LIGHTING_PLANE + 1 obscured += t.obscured -#undef UPDATE_BUFFER \ No newline at end of file +#undef UPDATE_BUFFER diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 8084b358d96..e6a65545646 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1406,24 +1406,17 @@ var/list/robot_verbs_default = list( if(sight_mode & BORGMESON) sight |= SEE_TURFS - lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE - see_in_dark = 1 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE if(sight_mode & BORGXRAY) sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) see_invisible = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - see_invisible = SEE_INVISIBLE_LIVING see_in_dark = 8 if(sight_mode & BORGTHERM) sight |= SEE_MOBS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - see_invisible = min(see_invisible, SEE_INVISIBLE_LIVING) - see_in_dark = 8 - if(see_override) - see_invisible = see_override - - sync_lighting_plane_alpha() SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + sync_lighting_plane_alpha() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 2b3d11357d1..91abb6b2696 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -168,7 +168,7 @@ melee_damage_lower = 25 melee_damage_upper = 25 attacktext = "slashes" - see_in_dark = 7 + see_in_dark = 8 attack_sound = 'sound/weapons/bladeslice.ogg' const_type = "wraith" construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index e45000ff34f..6795f4ccec2 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -16,7 +16,7 @@ emote_hear = list("chitters") speak_chance = 5 turns_per_move = 5 - see_in_dark = 10 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE butcher_results = list(/obj/item/reagent_containers/food/snacks/spidermeat = 2, /obj/item/reagent_containers/food/snacks/spiderleg = 8) response_help = "pets" diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 5b9d94341ef..2416781d78d 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -33,7 +33,7 @@ animate_movement = NO_STEPS // Do not animate movement, you jump around as you're a scary statue. - see_in_dark = 13 + see_in_dark = 8 vision_range = 12 aggro_vision_range = 12 idle_vision_range = 12 diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 1503c2bffe6..f73ee07441a 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -94,7 +94,7 @@ var/global/list/ts_spiderling_list = list() // Vision idle_vision_range = 10 aggro_vision_range = 10 - see_in_dark = 10 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE sight = SEE_MOBS diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index e36e7e4a004..7a67ce911b1 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -83,7 +83,6 @@ var/obj/item/clothing/mask/wear_mask = null//Carbon var/seer = 0 //for cult//Carbon, probably Human - var/see_override = 0 var/datum/hud/hud_used = null diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 0dc99e310cb..463911861c2 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -74,6 +74,7 @@ eye_colour = "#FFCC00" implant_color = "#FFCC00" vision_flags = SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE flash_protect = -1 origin_tech = "materials=5;programming=4;biotech=4;magnets=4;syndicate=1" aug_message = "You see prey everywhere you look..." From 97fbfb279aff9604d289253a268619b86c5a0f55 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 27 Apr 2019 01:15:21 +0200 Subject: [PATCH 27/41] Fix default statue vision --- code/modules/mob/living/simple_animal/hostile/statue.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 2416781d78d..3f649eae984 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -40,7 +40,7 @@ search_objects = 1 // So that it can see through walls - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS move_force = MOVE_FORCE_EXTREMELY_STRONG move_resist = MOVE_FORCE_EXTREMELY_STRONG From adf53ecbed4880143f503b338499f5b70cde006e Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 27 Apr 2019 16:48:32 +0200 Subject: [PATCH 28/41] Fix lights not turning off on delete --- code/game/atoms.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 99a1db51ef2..f49cf05197a 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -145,9 +145,12 @@ alternate_appearances = null QDEL_NULL(reagents) - invisibility = 101 + invisibility = INVISIBILITY_MAXIMUM LAZYCLEARLIST(overlays) LAZYCLEARLIST(priority_overlays) + + QDEL_NULL(light) + return ..() //Hook for running code when a dir change occurs From 4705c4e2fed93c211bb11bd2b6dfd4f0cbcb31e1 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sun, 28 Apr 2019 20:15:30 +0200 Subject: [PATCH 29/41] Limit genetics XRay again --- code/modules/mob/living/carbon/human/species/_species.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 7990dbad915..18451ff31cf 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -714,8 +714,6 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(XRAY in H.mutations) H.sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) - H.see_in_dark = 8 - H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE H.sync_lighting_plane_alpha() From e2cf2782af4aad5cfb514ee7f0bd3b0182ff85db Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 30 Apr 2019 19:16:44 +0200 Subject: [PATCH 30/41] Re-add fast_despawn --- code/game/area/areas.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index f1402b235fe..6fd122261fb 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -63,6 +63,8 @@ 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') + var/fast_despawn = TRUE + /area/Initialize(mapload) GLOB.all_areas += src icon_state = "" From 4ad9fd4d1816f3b7af37cec7954d16d15f5ddc9c Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 30 Apr 2019 19:17:34 +0200 Subject: [PATCH 31/41] Correct value --- code/game/area/areas.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 6fd122261fb..e5a7377b5b6 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -63,7 +63,7 @@ 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') - var/fast_despawn = TRUE + var/fast_despawn = FALSE /area/Initialize(mapload) GLOB.all_areas += src From ea76fd2136d08b611efd05d43c211804b72baf14 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Fri, 3 May 2019 19:32:53 +0200 Subject: [PATCH 32/41] Add onTransitZ --- code/modules/lighting/lighting_object.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index c233c887c9a..2e549a3b68d 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -138,6 +138,9 @@ /atom/movable/lighting_object/blob_act() return +/atom/movable/lighting_object/onTransitZ() + return + // Override here to prevent things accidentally moving around overlays. /atom/movable/lighting_object/forceMove(atom/destination, var/no_tp=FALSE, var/harderforce = FALSE) if(harderforce) From de2fd6e1c276bf8c31f872578c0d3a6c9670ff62 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 4 May 2019 00:27:15 +0200 Subject: [PATCH 33/41] Update cryo plane --- code/game/machinery/cryo.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 3dad2e66f7d..b45a8331188 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -5,7 +5,8 @@ icon_state = "pod0" density = 1 anchored = 1.0 - layer = 2.8 + layer = ABOVE_WINDOW_LAYER + plane = GAME_PLANE interact_offline = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100) var/on = 0 @@ -324,7 +325,6 @@ overlays += "lid[on]" //if no occupant, just put the lid overlay on, and ignore the rest return - if(occupant) var/image/pickle = image(occupant.icon, occupant.icon_state) pickle.overlays = occupant.overlays From 9009cd443ee64f1f7876aaf5f34403402091acc5 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 4 May 2019 00:47:16 +0200 Subject: [PATCH 34/41] Fix pipe layering --- .../components/binary_devices/binary_atmos_base.dm | 2 ++ code/ATMOSPHERICS/components/binary_devices/circulator.dm | 2 -- code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm | 1 + code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm | 2 +- .../components/unary_devices/portables_connector.dm | 2 +- code/ATMOSPHERICS/components/unary_devices/vent_pump.dm | 2 ++ code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm | 1 + code/ATMOSPHERICS/pipes/cap.dm | 1 - code/ATMOSPHERICS/pipes/manifold.dm | 1 - code/ATMOSPHERICS/pipes/manifold4w.dm | 1 - code/ATMOSPHERICS/pipes/pipe.dm | 1 - code/game/machinery/atmoalter/meter.dm | 3 +++ code/modules/power/cable.dm | 2 +- 13 files changed, 12 insertions(+), 9 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index 5b09cc250c5..68a1033a266 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -3,6 +3,8 @@ initialize_directions = SOUTH|NORTH use_power = IDLE_POWER_USE + layer = GAS_PUMP_LAYER + var/datum/gas_mixture/air1 var/datum/gas_mixture/air2 diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index c1019236425..6bb16cb36c9 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -15,8 +15,6 @@ var/obj/machinery/power/generator/generator - layer = 2.45 // Just above wires - anchored = 1 density = 1 diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index c0787a95612..8087db9966e 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -4,6 +4,7 @@ use_power = IDLE_POWER_USE var/on = 0 + layer = GAS_FILTER_LAYER var/datum/gas_mixture/air1 var/datum/gas_mixture/air2 diff --git a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm index 009b2531745..5302a99caa1 100644 --- a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm @@ -2,7 +2,7 @@ icon = 'icons/atmos/injector.dmi' icon_state = "map_injector" use_power = IDLE_POWER_USE - layer = 3 + layer = GAS_SCRUBBER_LAYER can_unwrench = 1 diff --git a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm index a9e4e2a282b..7b4ba08af77 100644 --- a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm @@ -6,7 +6,7 @@ desc = "For connecting portables devices related to atmospherics control." can_unwrench = 1 - layer = 2.4 + layer = GAS_FILTER_LAYER var/obj/machinery/portable_atmospherics/connected_device diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 25ee6417184..2a22052c7dc 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -10,6 +10,8 @@ desc = "Has a valve and pump attached to it" use_power = IDLE_POWER_USE + layer = GAS_SCRUBBER_LAYER + can_unwrench = 1 var/open = 0 diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 5a8fb02ec7d..86f2d3b9973 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -6,6 +6,7 @@ name = "air scrubber" desc = "Has a valve and pump attached to it" + layer = GAS_SCRUBBER_LAYER use_power = IDLE_POWER_USE idle_power_usage = 10 diff --git a/code/ATMOSPHERICS/pipes/cap.dm b/code/ATMOSPHERICS/pipes/cap.dm index 71630aef1c2..8421685d44c 100644 --- a/code/ATMOSPHERICS/pipes/cap.dm +++ b/code/ATMOSPHERICS/pipes/cap.dm @@ -4,7 +4,6 @@ icon = 'icons/atmos/pipes.dmi' icon_state = "cap" level = 2 - layer = 2.4 //under wires with their 2.44 volume = 35 diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm index bddc0281472..13e35d10c7b 100644 --- a/code/ATMOSPHERICS/pipes/manifold.dm +++ b/code/ATMOSPHERICS/pipes/manifold.dm @@ -14,7 +14,6 @@ var/obj/machinery/atmospherics/node3 level = 1 - layer = 2.4 //under wires with their 2.44 /obj/machinery/atmospherics/pipe/manifold/New() diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm index a948b22fd19..d2cee29c0ba 100644 --- a/code/ATMOSPHERICS/pipes/manifold4w.dm +++ b/code/ATMOSPHERICS/pipes/manifold4w.dm @@ -15,7 +15,6 @@ var/obj/machinery/atmospherics/node4 level = 1 - layer = 2.4 //under wires with their 2.44 /obj/machinery/atmospherics/pipe/manifold4w/New() ..() diff --git a/code/ATMOSPHERICS/pipes/pipe.dm b/code/ATMOSPHERICS/pipes/pipe.dm index 4cd51e66b67..ec4f6bfd7ec 100644 --- a/code/ATMOSPHERICS/pipes/pipe.dm +++ b/code/ATMOSPHERICS/pipes/pipe.dm @@ -3,7 +3,6 @@ var/datum/pipeline/parent var/volume = 0 force = 20 - layer = 2.4 //under wires with their 2.44 use_power = NO_POWER_USE can_unwrench = 1 var/alert_pressure = 80*ONE_ATMOSPHERE //minimum pressure before check_pressure(...) should be called diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index 453d5cdee1e..4777cdcc5f2 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -3,6 +3,9 @@ desc = "It measures something." icon = 'icons/obj/meter.dmi' icon_state = "meterX" + + layer = GAS_PUMP_LAYER + var/obj/machinery/atmospherics/pipe/target = null anchored = TRUE armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 5cf1d5efbe3..a1f4c3b8e89 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -35,7 +35,7 @@ By design, d1 is the smallest direction and d2 is the highest icon_state = "0-1" var/d1 = 0 var/d2 = 1 - layer = 2.44 //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4 + layer = WIRE_LAYER //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4 color = COLOR_RED /obj/structure/cable/yellow From bbeb07abd24f6cfce84b255125745bf8def52909 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 4 May 2019 03:06:10 +0200 Subject: [PATCH 35/41] More lighting fixes --- _maps/map_files/MetaStation/z2.dmm | 4 +- _maps/map_files/generic/z5.dmm | 46 +-- code/game/area/Dynamic areas.dm | 9 +- code/game/area/Space Station 13 areas.dm | 375 +----------------- code/game/asteroid.dm | 2 + code/game/gamemodes/nuclear/nuclear.dm | 2 +- code/game/gamemodes/vampire/vampire_powers.dm | 3 - code/game/objects/items/blueprints.dm | 30 +- .../weapons/implants/implant_death_alarm.dm | 2 +- code/game/objects/structures/window.dm | 2 +- code/modules/admin/verbs/one_click_antag.dm | 11 - .../mission_code/UO71-terrorspiders.dm | 51 +-- .../awaymissions/mission_code/challenge.dm | 8 +- .../awaymissions/mission_code/clownplanet.dm | 18 - .../mission_code/ruins/oldstation.dm | 1 + .../awaymissions/mission_code/spacebattle.dm | 5 +- .../awaymissions/mission_code/spacehotel.dm | 3 +- .../mission_code/stationCollision.dm | 2 +- .../awaymissions/mission_code/wildwest.dm | 4 + code/modules/awaymissions/zvis.dm | 4 +- .../clothing/under/accessories/accessory.dm | 2 +- code/modules/mining/mine_items.dm | 5 +- code/modules/mob/mob.dm | 2 +- code/modules/mob/mob_defines.dm | 2 +- .../reagents/chemistry/reagents/water.dm | 2 +- code/modules/ruins/ruin_areas.dm | 12 +- code/modules/shuttle/on_move.dm | 6 +- code/modules/shuttle/shuttle.dm | 5 +- code/modules/shuttle/supply.dm | 14 +- code/modules/tram/tram.dm | 2 +- paradise.dme | 1 - 31 files changed, 127 insertions(+), 508 deletions(-) delete mode 100644 code/modules/awaymissions/mission_code/clownplanet.dm diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm index 50a81f6e6e8..e306ba87c95 100644 --- a/_maps/map_files/MetaStation/z2.dmm +++ b/_maps/map_files/MetaStation/z2.dmm @@ -12,7 +12,7 @@ /area/space) "ad" = ( /turf/space/transit, -/area/syndicate_station/transit) +/area/space) "ae" = ( /turf/unsimulated/wall{ tag = "icon-iron6"; @@ -1284,7 +1284,7 @@ width = 18 }, /turf/space/transit, -/area/syndicate_station/transit) +/area/space) "dy" = ( /obj/docking_port/stationary/transit{ dir = 8; diff --git a/_maps/map_files/generic/z5.dmm b/_maps/map_files/generic/z5.dmm index af8d04699dc..a679318ca71 100644 --- a/_maps/map_files/generic/z5.dmm +++ b/_maps/map_files/generic/z5.dmm @@ -104,7 +104,7 @@ icon_state = "pwall"; dir = 1 }, -/area/space) +/area/mine/abandoned) "ar" = ( /turf/simulated/floor/plating/airless, /turf/simulated/shuttle/wall{ @@ -143,7 +143,7 @@ tag = "icon-floor2"; icon_state = "floor2" }, -/area/space) +/area/mine/abandoned) "aw" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8; @@ -156,7 +156,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/mine/abandoned) "ax" = ( /obj/machinery/door/airlock/hatch, /turf/simulated/shuttle/floor{ @@ -172,7 +172,7 @@ tag = "icon-floor2"; icon_state = "floor2" }, -/area/space) +/area/mine/abandoned) "az" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -223,7 +223,7 @@ icon_state = "pwall"; dir = 5 }, -/area/space) +/area/mine/abandoned) "aH" = ( /obj/structure/alien/weeds, /turf/simulated/floor/plating/airless{ @@ -252,7 +252,7 @@ icon_state = "pwall"; dir = 6 }, -/area/space) +/area/mine/abandoned) "aL" = ( /turf/space, /turf/simulated/shuttle/wall{ @@ -260,7 +260,7 @@ icon_state = "pwall"; dir = 9 }, -/area/space) +/area/mine/abandoned) "aM" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -4315,12 +4315,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/mine/eva) -"kh" = ( -/turf/simulated/floor/plating/airless{ - icon_state = "asteroidwarning"; - dir = 5 - }, -/area/space) "ki" = ( /obj/machinery/light, /turf/simulated/floor/plating/airless/asteroid, @@ -4598,7 +4592,7 @@ icon_state = "asteroidwarning"; dir = 4 }, -/area/space) +/area/mine/dangerous/explored) "kR" = ( /obj/machinery/door/airlock/external{ frequency = 1379; @@ -5368,12 +5362,6 @@ }, /turf/simulated/floor/plasteel, /area/mine/eva) -"mx" = ( -/turf/simulated/floor/plating/airless{ - icon_state = "asteroidwarning"; - dir = 6 - }, -/area/space) "my" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden, @@ -52246,11 +52234,11 @@ bV bV bV bV -ll -kh +bV +dP kQ -mx -ll +dK +bV mQ nj nj @@ -52503,11 +52491,11 @@ bV bV bV bV -ll -ll -ll -ll -ll +bV +bV +bV +bV +bV bV bV bV diff --git a/code/game/area/Dynamic areas.dm b/code/game/area/Dynamic areas.dm index 1cb24e23512..c6d1154847b 100644 --- a/code/game/area/Dynamic areas.dm +++ b/code/game/area/Dynamic areas.dm @@ -24,18 +24,21 @@ match_tag = "arrivals" match_width = 5 match_height = 4 - requires_power = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/dynamic/source/lobby_russian name = "\improper Russian Lounge" match_tag = "arrivals" match_width = 5 match_height = 4 - requires_power = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/dynamic/source/lobby_disco name = "\improper Disco Lounge" match_tag = "arrivals" match_width = 5 match_height = 4 - requires_power = 0 \ No newline at end of file + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED \ No newline at end of file diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index f7f768e8dfb..82fe75b3cf7 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -6,7 +6,7 @@ name = "NICE NAME" (not required but makes things really nice) icon = "ICON FILENAME" (defaults to areas.dmi) icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) - requires_power = 0 (defaults to 1) + requires_power = FALSE (defaults to TRUE) music = "music/music.ogg" (defaults to "music/music.ogg") NOTE: there are two lists of areas in the end of this file: centcom and station itself. Please maintain these lists valid. --rastaf0 @@ -44,29 +44,19 @@ var/list/ghostteleportlocs = list() /*-----------------------------------------------------------------------------*/ -/area/engine/ - -/area/turret_protected/ - -/area/arrival - requires_power = 0 - -/area/arrival/start - name = "\improper Arrival Area" - icon_state = "start" /area/admin name = "\improper Admin Room" icon_state = "start" - requires_power = 0 + requires_power = FALSE dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/adminconstruction name = "\improper Admin Testing Area" icon_state = "start" - requires_power = 0 - dynamic_lighting = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/space icon_state = "space" @@ -77,7 +67,7 @@ var/list/ghostteleportlocs = list() power_equip = FALSE power_environ = FALSE valid_territory = FALSE - outdoors = 1 + outdoors = TRUE ambientsounds = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/traitor.ogg') /area/space/nearstation @@ -107,6 +97,7 @@ var/list/ghostteleportlocs = list() no_teleportlocs = TRUE requires_power = FALSE valid_territory = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/shuttle/arrival name = "\improper Arrival Shuttle" @@ -232,12 +223,10 @@ var/list/ghostteleportlocs = list() /area/shuttle/gamma/space icon_state = "shuttle" name = "\improper Gamma Armory" - requires_power = 0 /area/shuttle/gamma/station icon_state = "shuttle" name = "\improper Gamma Armory Station" - requires_power = 0 /area/shuttle/prison/ name = "\improper Prison Shuttle" @@ -341,17 +330,14 @@ var/list/ghostteleportlocs = list() /area/shuttle/vox name = "\improper Vox Skipjack" icon_state = "shuttle" - requires_power = 0 /area/shuttle/vox/station name = "\improper Vox Skipjack" icon_state = "yellow" - requires_power = 0 /area/shuttle/salvage name = "\improper Salvage Ship" icon_state = "yellow" - requires_power = 0 /area/shuttle/salvage/start name = "\improper Middle of Nowhere" @@ -408,7 +394,6 @@ var/list/ghostteleportlocs = list() /area/shuttle/supply name = "Supply Shuttle" icon_state = "shuttle3" - requires_power = 0 /area/shuttle/abandoned name = "Abandoned Ship" @@ -422,7 +407,6 @@ var/list/ghostteleportlocs = list() /area/shuttle/trade name = "Trade Shuttle" icon_state = "shuttle" - requires_power = FALSE /area/shuttle/trade/sol name = "Sol Freighter" @@ -445,11 +429,6 @@ var/list/ghostteleportlocs = list() // === end remove -/area/alien - name = "\improper Alien base" - icon_state = "yellow" - requires_power = FALSE - // CENTCOM /area/centcom @@ -503,7 +482,8 @@ var/list/ghostteleportlocs = list() /area/syndicate_mothership name = "\improper Syndicate Forward Base" icon_state = "syndie-ship" - requires_power = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED nad_allowed = TRUE /area/syndicate_mothership/control @@ -525,6 +505,7 @@ var/list/ghostteleportlocs = list() icon_state = "asteroid" requires_power = FALSE valid_territory = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/asteroid/cave // -- TLE name = "\improper Asteroid - Underground" @@ -571,72 +552,25 @@ var/list/ghostteleportlocs = list() name = "\improper Abandoned Drug Lab" icon_state = "green" -//ENEMY - -//names are used -/area/syndicate_station - name = "\improper Syndicate Station" - icon_state = "yellow" - requires_power = 0 - -/area/syndicate_station/start - name = "\improper Syndicate Forward Operating Base" - icon_state = "yellow" - -/area/syndicate_station/southwest - name = "\improper South-West of SS13" - icon_state = "southwest" - -/area/syndicate_station/northwest - name = "\improper North-West of SS13" - icon_state = "northwest" - -/area/syndicate_station/northeast - name = "\improper North-East of SS13" - icon_state = "northeast" - -/area/syndicate_station/southeast - name = "\improper South-East of SS13" - icon_state = "southeast" - -/area/syndicate_station/north - name = "\improper North of SS13" - icon_state = "north" - -/area/syndicate_station/south - name = "\improper South of SS13" - icon_state = "south" - -/area/syndicate_station/commssat - name = "\improper South of the Communication Satellite" - icon_state = "south" - -/area/syndicate_station/mining - name = "\improper North-East of the Mining Asteroid" - icon_state = "north" - -/area/syndicate_station/transit - name = "\improper Hyperspace" - icon_state = "shuttle" - //Abductors /area/abductor_ship name = "\improper Abductor Ship" icon_state = "yellow" requires_power = FALSE has_gravity = TRUE - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/wizard_station name = "\improper Wizard's Den" icon_state = "yellow" requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/ninja name = "\improper Ninja Area Parent" icon_state = "ninjabase" requires_power = FALSE no_teleportlocs = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/ninja/outpost name = "\improper SpiderClan Outpost" @@ -651,183 +585,15 @@ var/list/ghostteleportlocs = list() dynamic_lighting = DYNAMIC_LIGHTING_DISABLED no_teleportlocs = TRUE -/area/vox_station/transit - name = "\improper Hyperspace" - icon_state = "shuttle" - requires_power = 0 - -/area/vox_station/southwest_solars - name = "\improper Aft Port Solars" - icon_state = "southwest" - requires_power = 0 - -/area/vox_station/northwest_solars - name = "\improper Fore Port Solars" - icon_state = "northwest" - requires_power = 0 - -/area/vox_station/northeast_solars - name = "\improper Fore Starboard Solars" - icon_state = "northeast" - requires_power = 0 - -/area/vox_station/southeast_solars - name = "\improper Aft Starboard Solars" - icon_state = "southeast" - requires_power = 0 - /area/trader_station name = "Trade Base" icon_state = "yellow" - requires_power = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/trader_station/sol name = "Jupiter Station 6" -/area/vox_station/mining - name = "\improper Nearby Mining Asteroid" - icon_state = "north" - requires_power = 0 - -/area/xenos_station/start - name = "\improper Alien Shuttle" - icon_state = "north" - requires_power = 0 - -/area/xenos_station/transit - name = "\improper Hyperspace" - icon_state = "shuttle" - requires_power = 0 - -/area/xenos_station/southwest - name = "\improper Aft Port Solars Landing Area" - icon_state = "southwest" - requires_power = 0 - -/area/xenos_station/northwest - name = "\improper Fore Port Solars Landing Area" - icon_state = "northwest" - requires_power = 0 - -/area/xenos_station/northeast - name = "\improper Fore Starboard Solars Landing Area" - icon_state = "northeast" - requires_power = 0 - -/area/xenos_station/southeast - name = "\improper Aft Starboard Solars Landing Area" - icon_state = "southeast" - requires_power = 0 - -/area/xenos_station/east - name = "\improper East Landing Area" - icon_state = "east" - requires_power = 0 - -/area/xenos_station/west - name = "\improper West Landing Area" - icon_state = "west" - requires_power = 0 - -/area/xenos_station/researchoutpost - name = "\improper Research Outpost Landing Area" - icon_state = "north" - requires_power = 0 - -/area/xenos_station/miningoutpost - name = "\improper Mining Outpost Landing Area" - icon_state = "south" - requires_power = 0 - -//PRISON -/area/prison - name = "\improper Prison Station" - icon_state = "brig" - -/area/prison/arrival_airlock - name = "\improper Prison Station Airlock" - icon_state = "green" - requires_power = 0 - -/area/prison/control - name = "\improper Prison Security Checkpoint" - icon_state = "security" - -/area/prison/crew_quarters - name = "\improper Prison Security Quarters" - icon_state = "security" - -/area/prison/rec_room - name = "\improper Prison Rec Room" - icon_state = "green" - -/area/prison/closet - name = "\improper Prison Supply Closet" - icon_state = "dk_yellow" - -/area/prison/hallway/fore - name = "\improper Prison Fore Hallway" - icon_state = "yellow" - -/area/prison/hallway/aft - name = "\improper Prison Aft Hallway" - icon_state = "yellow" - -/area/prison/hallway/port - name = "\improper Prison Port Hallway" - icon_state = "yellow" - -/area/prison/hallway/starboard - name = "\improper Prison Starboard Hallway" - icon_state = "yellow" - -/area/prison/morgue - name = "\improper Prison Morgue" - icon_state = "morgue" - -/area/prison/medical_research - name = "\improper Prison Genetic Research" - icon_state = "medresearch" - -/area/prison/medical - name = "\improper Prison Medbay" - icon_state = "medbay" - -/area/prison/solar - name = "\improper Prison Solar Array" - icon_state = "storage" - requires_power = 0 - -/area/prison/podbay - name = "\improper Prison Podbay" - icon_state = "dk_yellow" - -/area/prison/solar_control - name = "\improper Prison Solar Array Control" - icon_state = "dk_yellow" - -/area/prison/solitary - name = "\improper Solitary Confinement" - icon_state = "brig" - fast_despawn = TRUE - -/area/prison/cell_block - name = "\improper Prison Cell Block" - icon_state = "brig" - fast_despawn = TRUE - -/area/prison/cell_block/A - name = "\improper Prison Cell Block A" - icon_state = "brig" - -/area/prison/cell_block/B - name = "\improper Prison Cell Block B" - icon_state = "brig" - -/area/prison/cell_block/C - name = "\improper Prison Cell Block C" - icon_state = "brig" - //Labor camp /area/mine/laborcamp name = "Labor Camp" @@ -1332,7 +1098,8 @@ var/list/ghostteleportlocs = list() /area/engine/engine_smes name = "\improper Engineering SMES" icon_state = "engine_smes" - requires_power = 0//This area only covers the batteries and they deal with their own power + requires_power = FALSE //This area only covers the batteries and they deal with their own power + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/engine/engineering name = "Engineering" @@ -1377,8 +1144,7 @@ var/list/ghostteleportlocs = list() //Solars /area/solar - requires_power = 0 - dynamic_lighting = 0 + requires_power = FALSE valid_territory = FALSE dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT @@ -1719,11 +1485,6 @@ var/list/ghostteleportlocs = list() name = "\improper Secure Armory" icon_state = "secarmory" -/area/security/armoury/gamma - name = "\improper Gamma Armory" - icon_state = "Warden" - requires_power = 0 - /area/security/securehallway name = "\improper Security Secure Hallway" icon_state = "securehall" @@ -1946,11 +1707,6 @@ var/list/ghostteleportlocs = list() name = "Technical Storage" icon_state = "auxstorage" -/area/storage/testroom - requires_power = 0 - name = "\improper Test Room" - icon_state = "storage" - /area/storage/office name = "\improper Office Supplies" icon_state = "office_supplies" @@ -2300,31 +2056,6 @@ var/list/ghostteleportlocs = list() name = "\improper AI Satellite Antechamber" icon_state = "ai" -/area/turret_protected/AIsatextFP - name = "\improper AI Sat Ext" - icon_state = "storage" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - -/area/turret_protected/AIsatextFS - name = "\improper AI Sat Ext" - icon_state = "storage" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - -/area/turret_protected/AIsatextAS - name = "\improper AI Sat Ext" - icon_state = "storage" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - -/area/turret_protected/AIsatextAP - name = "\improper AI Sat Ext" - icon_state = "storage" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - -/area/turret_protected/NewAIMain - name = "\improper AI Main New" - icon_state = "storage" - - //Misc @@ -2409,78 +2140,10 @@ var/list/ghostteleportlocs = list() name = "\improper Strange Station" icon_state = "away" -/area/awaymission/wwmines - name = "\improper Wild West Mines" - icon_state = "away1" - requires_power = FALSE - -/area/awaymission/wwgov - name = "\improper Wild West Mansion" - icon_state = "away2" - requires_power = FALSE - -/area/awaymission/wwrefine - name = "\improper Wild West Refinery" - icon_state = "away3" - requires_power = FALSE - -/area/awaymission/wwvault - name = "\improper Wild West Vault" - icon_state = "away3" - -/area/awaymission/wwvaultdoors - name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power - icon_state = "away2" - requires_power = FALSE - /area/awaymission/desert name = "Mars" icon_state = "away" -/area/awaymission/BMPship1 - name = "\improper Aft Block" - icon_state = "away1" - -/area/awaymission/BMPship2 - name = "\improper Midship Block" - icon_state = "away2" - -/area/awaymission/BMPship3 - name = "\improper Fore Block" - icon_state = "away3" - -/area/awaymission/spacebattle - name = "\improper Space Battle" - icon_state = "away" - requires_power = 0 - -/area/awaymission/spacebattle/cruiser - name = "\improper Nanotrasen Cruiser" - -/area/awaymission/spacebattle/syndicate1 - name = "\improper Syndicate Assault Ship 1" - -/area/awaymission/spacebattle/syndicate2 - name = "\improper Syndicate Assault Ship 2" - -/area/awaymission/spacebattle/syndicate3 - name = "\improper Syndicate Assault Ship 3" - -/area/awaymission/spacebattle/syndicate4 - name = "\improper Syndicate War Sphere 1" - -/area/awaymission/spacebattle/syndicate5 - name = "\improper Syndicate War Sphere 2" - -/area/awaymission/spacebattle/syndicate6 - name = "\improper Syndicate War Sphere 3" - -/area/awaymission/spacebattle/syndicate7 - name = "\improper Syndicate Fighter" - -/area/awaymission/spacebattle/secret - name = "\improper Hidden Chamber" - /area/awaymission/beach name = "Beach" icon_state = "beach" @@ -2596,10 +2259,9 @@ var/list/ghostteleportlocs = list() /area/vr name = "VR" - requires_power = 0 + requires_power = FALSE dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - no_teleportlocs = 1 - + no_teleportlocs = TRUE /area/vr/lobby name = "VR Lobby" @@ -2662,7 +2324,6 @@ var/list/the_station_areas = list ( /area/teleporter, /area/medical, /area/security, - /area/prison, /area/quartermaster, /area/janitor, /area/hydroponics, diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index 66124a9582e..83a4db07f8d 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -30,7 +30,9 @@ var/global/max_secret_rooms = 6 T.ChangeTurf(floor) room_turfs["floors"] += T + var/old_area = T.loc A.contents += T + T.change_area(old_area, A) return room_turfs diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index d19d2dd7cc5..8271a3c860d 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -457,7 +457,7 @@ proc/issyndicate(mob/living/M as mob) var/turf/T = get_turf(nuke) var/area/A = T.loc - var/list/thousand_penalty = list(/area/syndicate_station, /area/wizard_station, /area/solar, /area) + var/list/thousand_penalty = list(/area/wizard_station, /area/solar, /area) var/list/fiftythousand_penalty = list(/area/security/main, /area/security/brig, /area/security/armoury, /area/security/checkpoint2) if(is_type_in_list(A, thousand_penalty)) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 5e7b8f9a237..6a664fbe75c 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -438,9 +438,6 @@ steam.start() sleep(jaunt_duration) var/mobloc = get_turf(user.loc) - if(get_area(mobloc) == /area/security/armoury/gamma) - to_chat(user, "A strange energy repels you!") - mobloc = originalloc animation.loc = mobloc steam.location = mobloc steam.start() diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 3ce114bde9b..0c7e4a509f3 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -174,14 +174,10 @@ var/list/SPECIALS = list( /area/shuttle, /area/admin, - /area/arrival, /area/centcom, /area/asteroid, /area/tdome, - /area/syndicate_station, - /area/wizard_station, - /area/prison - // /area/derelict //commented out, all hail derelict-rebuilders! + /area/wizard_station ) for(var/type in SPECIALS) if( istype(A,type) ) @@ -211,23 +207,21 @@ return var/area/A = new A.name = str - //var/ma - //ma = A.master ? "[A.master]" : "(null)" -// to_chat(world, "DEBUG: create_area:
A.name=[A.name]
A.tag=[A.tag]
A.master=[ma]") - A.power_equip = 0 - A.power_light = 0 - A.power_environ = 0 - A.always_unpowered = 0 - move_turfs_to_area(turfs, A) + A.power_equip = FALSE + A.power_light = FALSE + A.power_environ = FALSE + A.always_unpowered = FALSE + A.set_dynamic_lighting() + + for(var/i in 1 to turfs.len) + var/turf/thing = turfs[i] + var/area/old_area = thing.loc + A.contents += thing + thing.change_area(old_area, A) interact() return - -/obj/item/areaeditor/proc/move_turfs_to_area(var/list/turf/turfs, var/area/A) - A.contents.Add(turfs) - - /obj/item/areaeditor/proc/edit_area() var/area/A = get_area() var/prevname = "[sanitize(A.name)]" diff --git a/code/game/objects/items/weapons/implants/implant_death_alarm.dm b/code/game/objects/items/weapons/implants/implant_death_alarm.dm index 68c8e111520..d27d6dd5f7e 100644 --- a/code/game/objects/items/weapons/implants/implant_death_alarm.dm +++ b/code/game/objects/items/weapons/implants/implant_death_alarm.dm @@ -3,7 +3,7 @@ desc = "An alarm which monitors host vital signs and transmits a radio message upon death." var/mobname = "Will Robinson" activated = 0 - var/static/list/stealth_areas = typecacheof(list(/area/syndicate_station, /area/syndicate_mothership, /area/shuttle/syndicate_elite)) + var/static/list/stealth_areas = typecacheof(list(/area/syndicate_mothership, /area/shuttle/syndicate_elite)) /obj/item/implant/death_alarm/get_data() var/dat = {"Implant Specifications:
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index ad655a39b64..e63451de8b6 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -4,7 +4,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f /obj/proc/color_windows(obj/W) var/list/wcBarAreas = list(/area/crew_quarters/bar) - var/list/wcBrigAreas = list(/area/security,/area/prison,/area/shuttle/gamma) + var/list/wcBrigAreas = list(/area/security, /area/shuttle/gamma) var/newcolor var/turf/T = get_turf(W) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 4b3905f37e2..8b172630d7b 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -247,17 +247,6 @@ client/proc/one_click_antag() if(closet_spawn) new /obj/structure/closet/syndicate/nuclear(closet_spawn.loc) - for(var/obj/effect/landmark/A in /area/syndicate_station/start)//Because that's the only place it can BE -Sieve - if(A.name == "Syndicate-Gear-Closet") - new /obj/structure/closet/syndicate/personal(A.loc) - qdel(A) - continue - - if(A.name == "Syndicate-Bomb") - new /obj/effect/spawner/newbomb/timer/syndicate(A.loc) - qdel(A) - continue - for(var/datum/mind/synd_mind in ticker.mode.syndicates) if(synd_mind.current) if(synd_mind.current.client) diff --git a/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm b/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm index 6da42a682fa..7d045f0afcb 100644 --- a/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm +++ b/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm @@ -1,44 +1,44 @@ /area/awaymission/UO71 name = "UO71" icon_state = "away" - report_alerts = 0 - tele_proof = 1 + report_alerts = FALSE + tele_proof = TRUE /area/awaymission/UO71/plaza name = "UO71 Plaza" icon_state = "awaycontent1" - fire = 1 + fire = TRUE /area/awaymission/UO71/centralhall name = "UO71 Central" icon_state = "awaycontent2" - fire = 1 + fire = TRUE /area/awaymission/UO71/eng name = "UO71 Engineering" icon_state = "awaycontent3" - fire = 1 + fire = TRUE /area/awaymission/UO71/mining name = "UO71 Mining" icon_state = "awaycontent4" - fire = 1 + fire = TRUE /area/awaymission/UO71/science name = "UO71 Science" icon_state = "awaycontent5" - fire = 1 + fire = TRUE /area/awaymission/UO71/medical name = "UO71 Medical" icon_state = "awaycontent6" - fire = 1 + fire = TRUE /area/awaymission/UO71/gateway name = "UO71 Gateway" icon_state = "awaycontent7" - fire = 1 + fire = TRUE /area/awaymission/UO71/outside name = "UO71 Outside" @@ -47,36 +47,41 @@ /area/awaymission/UO71/bridge name = "UO71 Bridge" icon_state = "awaycontent21" - fire = 1 - requires_power = 0 - tele_proof = 1 + fire = TRUE + requires_power = FALSE + tele_proof = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/awaymission/UO71/queen name = "UO71 Queen Lair" icon_state = "awaycontent9" - fire = 1 - requires_power = 0 - tele_proof = 1 + fire = TRUE + requires_power = FALSE + tele_proof = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/awaymission/UO71/prince name = "UO71 Prince Containment" icon_state = "awaycontent10" - fire = 1 - requires_power = 0 - tele_proof = 1 + fire = TRUE + requires_power = FALSE + tele_proof = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/awaymission/UO71/mother name = "UO71 Mother Containment" icon_state = "awaycontent10" - fire = 1 - requires_power = 0 - tele_proof = 1 + fire = TRUE + requires_power = FALSE + tele_proof = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/awaymission/UO71/loot name = "UO71 Loot Vault" icon_state = "awaycontent11" - requires_power = 0 - tele_proof = 1 + requires_power = FALSE + tele_proof = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /obj/item/paper/terrorspiders1 name = "paper - 'Sealed Facility'" diff --git a/code/modules/awaymissions/mission_code/challenge.dm b/code/modules/awaymissions/mission_code/challenge.dm index b0a092b7e7d..15dac122c54 100644 --- a/code/modules/awaymissions/mission_code/challenge.dm +++ b/code/modules/awaymissions/mission_code/challenge.dm @@ -3,7 +3,7 @@ /area/awaymission/challenge name = "Challenge" icon_state = "away" - report_alerts = 0 + report_alerts = FALSE /area/awaymission/challenge/start name = "Where Am I?" @@ -12,12 +12,14 @@ /area/awaymission/challenge/main name = "\improper Danger Room" icon_state = "away1" - requires_power = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/awaymission/challenge/end name = "Administration" icon_state = "away2" - requires_power = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /obj/machinery/power/emitter/energycannon diff --git a/code/modules/awaymissions/mission_code/clownplanet.dm b/code/modules/awaymissions/mission_code/clownplanet.dm deleted file mode 100644 index 8ac9fd1fb4c..00000000000 --- a/code/modules/awaymissions/mission_code/clownplanet.dm +++ /dev/null @@ -1,18 +0,0 @@ -//Clown Planet Areas - -/area/planet/clown - name = "\improper Clown Planet" - icon_state = "honk" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - requires_power = FALSE - report_alerts = FALSE - -/area/awaymission/clownplanet/miningtown - name = "\improper Clown Planet - Bananium-o-Rama" - icon_state = "away1" - requires_power = FALSE - -/area/awaymission/clownplanet/mine - name = "\improper Clown Planet - Bananium-o-Rama Mines" - icon_state = "away2" - requires_power = FALSE \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/ruins/oldstation.dm b/code/modules/awaymissions/mission_code/ruins/oldstation.dm index 1886aba02ab..7150d0c74c4 100644 --- a/code/modules/awaymissions/mission_code/ruins/oldstation.dm +++ b/code/modules/awaymissions/mission_code/ruins/oldstation.dm @@ -307,6 +307,7 @@ name = "Powered Tile" icon_state = "teleporter" requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/ruin/space/ancientstation/space name = "Exposed To Space" diff --git a/code/modules/awaymissions/mission_code/spacebattle.dm b/code/modules/awaymissions/mission_code/spacebattle.dm index 3f9c9925772..146597fe457 100644 --- a/code/modules/awaymissions/mission_code/spacebattle.dm +++ b/code/modules/awaymissions/mission_code/spacebattle.dm @@ -3,8 +3,9 @@ /area/awaymission/spacebattle name = "\improper Space Battle" icon_state = "away" - requires_power = 0 - report_alerts = 0 + requires_power = FALSE + report_alerts = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/awaymission/spacebattle/cruiser name = "\improper Nanotrasen Cruiser" diff --git a/code/modules/awaymissions/mission_code/spacehotel.dm b/code/modules/awaymissions/mission_code/spacehotel.dm index fc8b4f4d260..d2fda046d7e 100644 --- a/code/modules/awaymissions/mission_code/spacehotel.dm +++ b/code/modules/awaymissions/mission_code/spacehotel.dm @@ -2,7 +2,8 @@ /area/awaymission/spacehotel name = "Deep Space Hotel 419" - requires_power = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/awaymission/spacehotel/kitchen name = "Hotel Kitchen" diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index 17ece10d71a..8e7b267f2d3 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -161,7 +161,7 @@ var/sc_safecode5 = "[rand(0,9)]" desc = "Your body becomes weak and your feel your mind slipping away as you try to comprehend what you know can't be possible." move_self = 0 //Contianed narsie does not move! grav_pull = 0 //Contained narsie does not pull stuff in! - var/uneatable = list(/turf/space, /obj/effect/overlay, /atom/movable/lighting_overlay, /mob/living/simple_animal/hostile/construct) + var/uneatable = list(/turf/space, /obj/effect/overlay, /atom/movable/lighting_object, /mob/living/simple_animal/hostile/construct) //Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment /obj/singularity/narsie/sc_Narsie/admin_investigate_setup() diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index a24da0d6df7..ef576760ada 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -10,16 +10,19 @@ name = "\improper Wild West Mines" icon_state = "away1" requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/awaymission/wwgov name = "\improper Wild West Mansion" icon_state = "away2" requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/awaymission/wwrefine name = "\improper Wild West Refinery" icon_state = "away3" requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/awaymission/wwvault name = "\improper Wild West Vault" @@ -29,6 +32,7 @@ name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power icon_state = "away2" requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /* * Wish Granter diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index 5561e5e90cd..de60531e590 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -1,8 +1,8 @@ /area/awaymission/upperlevel name = "Open Space" color = "#888" - dynamic_lighting = 0 - requires_power = 0 + dynamic_lighting = DYNAMIC_LIGHTING_FORCED + requires_power = FALSE // Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is /obj/effect/levelref diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index b1da17677de..9d2c29e2679 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -630,7 +630,7 @@ var/area/t = get_area(M) var/obj/item/radio/headset/a = new /obj/item/radio/headset(src) - if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) ) + if(istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite)) //give the syndicats a bit of stealth a.autosay("[M] has been vandalized in Space!", "[M]'s Death Alarm") else diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index c3c276a5766..e21a3ab2db6 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -273,8 +273,9 @@ /area/survivalpod name = "\improper Emergency Shelter" icon_state = "away" - requires_power = 0 - has_gravity = 1 + requires_power = FALSE + has_gravity = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /obj/item/survivalcapsule name = "bluespace shelter capsule" diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index f2ee5b62707..d386720a428 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -930,7 +930,7 @@ var/list/slot_equipment_priority = list( \ // They should be in a cell or the Brig portion of the shuttle. var/area/A = loc.loc - if(!istype(A, /area/security/prison) && !istype(A, /area/prison)) + if(!istype(A, /area/security/prison)) if(!istype(A, /area/shuttle/escape) || loc.name != "Brig floor") return 0 diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index d15d1dc6d5a..35851ba30d0 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -176,7 +176,7 @@ var/player_ghosted = 0 var/turf/listed_turf = null //the current turf being examined in the stat panel - var/list/shouldnt_see = list(/atom/movable/lighting_overlay) //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes + var/list/shouldnt_see = list(/atom/movable/lighting_object) //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes var/kills = 0 diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index dcd21f639d1..6e6c4dce1a7 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -109,7 +109,7 @@ if(!(istype(B) && B.off_floor)) qdel(O) else - if(!istype(O, /atom/movable/lighting_overlay)) + if(!istype(O, /atom/movable/lighting_object)) O.color = initial(O.color) O.clean_blood() diff --git a/code/modules/ruins/ruin_areas.dm b/code/modules/ruins/ruin_areas.dm index fc51dcc0155..0304f36156e 100644 --- a/code/modules/ruins/ruin_areas.dm +++ b/code/modules/ruins/ruin_areas.dm @@ -3,18 +3,18 @@ /area/ruin/ name = "\improper Unexplored Location" icon_state = "away" - has_gravity = 1 - there_can_be_many = 1 - + has_gravity = TRUE + there_can_be_many = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/ruin/unpowered - always_unpowered = 0 + always_unpowered = FALSE /area/ruin/unpowered/no_grav - has_gravity = 0 + has_gravity = FALSE /area/ruin/powered - requires_power = 0 + requires_power = FALSE diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index c130ea1d447..67765ef8ac5 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -8,9 +8,6 @@ forceMove(T1) return 1 -/atom/movable/lighting_overlay/onShuttleMove() - return 0 - /obj/effect/landmark/shuttle_import/onShuttleMove() // Used for marking where to preview/load shuttles return 0 @@ -60,4 +57,5 @@ /obj/machinery/door/airlock/postDock(obj/docking_port/stationary/S1) . = ..() if(!S1.lock_shuttle_doors && id_tag == "s_docking_airlock") - INVOKE_ASYNC(src, .proc/unlock) \ No newline at end of file + INVOKE_ASYNC(src, .proc/unlock) + diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 5c6445b2927..5f96f90d027 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -382,8 +382,9 @@ var/list/L0 = return_ordered_turfs(x, y, z, dir, areaInstance) //remove area surrounding docking port + var/area/A0 if(areaInstance.contents.len) - var/area/A0 = locate("[area_type]") + A0 = locate("[area_type]") if(!A0) A0 = new area_type(null) for(var/turf/T0 in L0) @@ -393,6 +394,8 @@ var/turf/T0 = i if(!T0) continue + if(A0) + T0.change_area(T0.loc, A0) T0.empty(turf_type) qdel(src, force=TRUE) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index f48906fd1f3..28cb96b128b 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -58,7 +58,7 @@ var/contcount for(var/atom/A in T.contents) - if(istype(A,/atom/movable/lighting_overlay)) + if(istype(A,/atom/movable/lighting_object)) continue if(istype(A,/obj/machinery/light)) continue //hacky but whatever, shuttles need three spots each for this shit @@ -750,18 +750,6 @@ frequency.post_signal(src, status_signal) -/********** - MISC - **********/ -/area/supply/station - name = "Supply Shuttle" - icon_state = "shuttle3" - requires_power = 0 - -/area/supply/dock - name = "Supply Shuttle" - icon_state = "shuttle3" - requires_power = 0 #undef ORDER_SCREEN_WIDTH #undef ORDER_SCREEN_HEIGHT diff --git a/code/modules/tram/tram.dm b/code/modules/tram/tram.dm index 04a026141a5..fed50355dde 100644 --- a/code/modules/tram/tram.dm +++ b/code/modules/tram/tram.dm @@ -22,7 +22,7 @@ var/delay_timer = null - var/list/blacklist = list(/obj/tram/rail,/atom/movable/lighting_overlay) + var/list/blacklist = list(/obj/tram/rail,/atom/movable/lighting_object) var/list/ancwhitelist = list(/obj/tram, /obj/vehicle, /obj/structure/chair, /obj/structure/grille, /obj/structure/window) /obj/tram/tram_controller/New() diff --git a/paradise.dme b/paradise.dme index 92e9ebe1a3f..b1562c00706 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1247,7 +1247,6 @@ #include "code\modules\awaymissions\mission_code\blackmarketpackers.dm" #include "code\modules\awaymissions\mission_code\centcomAway.dm" #include "code\modules\awaymissions\mission_code\challenge.dm" -#include "code\modules\awaymissions\mission_code\clownplanet.dm" #include "code\modules\awaymissions\mission_code\evil_santa.dm" #include "code\modules\awaymissions\mission_code\spacebattle.dm" #include "code\modules\awaymissions\mission_code\spacehotel.dm" From bdfb4af5c20957a7e9a84bae1bfe96890d41e51c Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 4 May 2019 03:38:21 +0200 Subject: [PATCH 36/41] Starlight fixes --- code/controllers/configuration.dm | 3 +-- code/game/area/Space Station 13 areas.dm | 2 +- code/game/turfs/space/space.dm | 2 +- config/example/config.txt | 5 +++-- icons/turf/areas.dmi | Bin 34810 -> 34945 bytes 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 12b5b0fd1a5..90fa1a0ceac 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -605,8 +605,7 @@ config.event_delay_upper[EVENT_LEVEL_MAJOR] = MinutesToTicks(values[3]) if("starlight") - var/vvalue = text2num(value) - config.starlight = vvalue >= 0 ? vvalue : 0 + config.starlight = 1 if("player_reroute_cap") var/vvalue = text2num(value) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 82fe75b3cf7..c0456b67778 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -97,7 +97,7 @@ var/list/ghostteleportlocs = list() no_teleportlocs = TRUE requires_power = FALSE valid_territory = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_FORCED + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/shuttle/arrival name = "\improper Arrival Shuttle" diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 342c7f23ff1..cd1e0995b20 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -57,7 +57,7 @@ if(isspaceturf(t)) //let's NOT update this that much pls continue - set_light(config.starlight) + set_light(2) return set_light(0) diff --git a/config/example/config.txt b/config/example/config.txt index a0d733eacd1..6e54e2af1f6 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -317,8 +317,9 @@ EVENT_DELAY_UPPER 15;45;70 #EVENT_CUSTOM_START_MODERATE 30;45 EVENT_CUSTOM_START_MAJOR 80;100 -## Strength of ambient star light. Set to 0 or less to turn off. -STARLIGHT 2 +## Starlight for exterior walls and breaches. Uncomment for starlight! +## This is disabled by default to make testing quicker, should be enabled on production servers or testing servers messing with lighting +#STARLIGHT ## Player rerouting stuff ## If not 0, players can be rerouted to an overflow server after a certain cap is reached diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index cfce55cf6fbf4add4208415eaf15cdb1c194046f..87e919f1f0943dfa3daed5ed9561e7c3e861e91e 100755 GIT binary patch delta 6201 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 Date: Sat, 4 May 2019 04:22:45 +0200 Subject: [PATCH 37/41] Re-add starlight --- _maps/map_files/Delta/delta.dmm | 290 +++++----- .../MetaStation/MetaStation.v41A.II.dmm | 294 +++++----- _maps/map_files/MetaStation/z2.dmm | 547 +++++++++--------- _maps/map_files/MetaStation/z3.dmm | 70 +-- _maps/map_files/MetaStation/z4.dmm | 200 +++---- .../RandomRuins/SpaceRuins/abandonedzoo.dmm | 14 +- .../RandomRuins/SpaceRuins/derelict2.dmm | 8 +- .../RandomRuins/SpaceRuins/derelict3.dmm | 4 +- .../RandomRuins/SpaceRuins/derelict5.dmm | 4 +- .../RandomRuins/SpaceRuins/mechtransport.dmm | 8 +- .../RandomRuins/SpaceRuins/onehalf.dmm | 44 +- .../RandomRuins/SpaceRuins/spacebar.dmm | 4 +- .../SpaceRuins/turretedoutpost.dmm | 2 +- .../RandomRuins/SpaceRuins/wizardcrash.dmm | 2 +- _maps/map_files/RandomZLevels/academy.dmm | 27 +- .../RandomZLevels/blackmarketpackers.dmm | 98 ++-- _maps/map_files/RandomZLevels/centcomAway.dmm | 42 +- _maps/map_files/RandomZLevels/spacebattle.dmm | 34 +- _maps/map_files/RandomZLevels/spacehotel.dmm | 75 +-- .../RandomZLevels/stationCollision.dmm | 6 +- .../RandomZLevels/undergroundoutpost45.dmm | 27 +- _maps/map_files/RandomZLevels/wildwest.dmm | 44 +- _maps/map_files/cyberiad/cyberiad.dmm | 238 ++++---- _maps/map_files/cyberiad/z3.dmm | 128 ++-- _maps/map_files/cyberiad/z4.dmm | 36 +- _maps/map_files/cyberiad/z6.dmm | 146 ++--- _maps/map_files/generic/z5.dmm | 26 +- 27 files changed, 1177 insertions(+), 1241 deletions(-) diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index b7199a51f12..50a89115cac 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -451,11 +451,11 @@ "abi" = ( /obj/structure/grille, /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "abj" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "abk" = ( /turf/space, /turf/simulated/shuttle/wall{ @@ -1083,11 +1083,11 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "acF" = ( /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "acG" = ( /obj/structure/cable{ icon_state = "0-4"; @@ -1095,7 +1095,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "acH" = ( /obj/structure/chair/stool, /turf/simulated/shuttle/floor{ @@ -5619,7 +5619,7 @@ /obj/structure/lattice, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "alX" = ( /obj/structure/cable{ d1 = 1; @@ -5694,7 +5694,7 @@ /area/maintenance/fsmaint) "ami" = ( /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "amj" = ( /obj/machinery/door/poddoor/shutters{ density = 0; @@ -12161,7 +12161,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "ayH" = ( /obj/machinery/conveyor{ dir = 4; @@ -12728,7 +12728,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "azS" = ( /obj/effect/decal/warning_stripes/southeast, /obj/effect/decal/warning_stripes/northwestcorner, @@ -12860,7 +12860,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aAf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/unary/heat_reservoir/heater{ @@ -12909,7 +12909,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aAj" = ( /obj/structure/cable{ d1 = 1; @@ -13824,7 +13824,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aBW" = ( /obj/structure/cable{ d1 = 1; @@ -14710,7 +14710,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aDD" = ( /obj/structure/cable{ d1 = 2; @@ -14991,7 +14991,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aEb" = ( /obj/structure/cable{ icon_state = "0-2"; @@ -15123,7 +15123,7 @@ /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/space, -/area/space) +/area/space/nearstation) "aEq" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, @@ -15774,7 +15774,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aFA" = ( /turf/simulated/wall, /area/crew_quarters/bar) @@ -16598,7 +16598,7 @@ icon_state = "brokengrille" }, /turf/space, -/area/space) +/area/space/nearstation) "aGX" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -17778,7 +17778,7 @@ dir = 6 }, /turf/space, -/area/space) +/area/space/nearstation) "aIU" = ( /obj/structure/cable{ d1 = 1; @@ -18105,12 +18105,12 @@ /obj/machinery/atmospherics/pipe/simple/heat_exchanging, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aJz" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aJA" = ( /obj/structure/cable{ d1 = 4; @@ -19496,7 +19496,7 @@ /obj/item/wrench, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aLU" = ( /turf/simulated/wall, /area/crew_quarters/bar/atrium) @@ -20753,7 +20753,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "aOp" = ( /obj/structure/table/wood, /obj/item/clothing/glasses/sunglasses, @@ -21053,7 +21053,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aOV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4; @@ -21067,7 +21067,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aOX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4; @@ -23876,7 +23876,7 @@ icon_state = "pipe-c" }, /turf/space, -/area/space) +/area/space/nearstation) "aTT" = ( /obj/structure/cable{ d1 = 1; @@ -23899,7 +23899,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "aTV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5; @@ -27687,7 +27687,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aZZ" = ( /obj/item/radio/intercom{ dir = 4; @@ -27709,7 +27709,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bab" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -28097,7 +28097,7 @@ req_access_txt = "67" }, /turf/space, -/area/space) +/area/space/nearstation) "baP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -33395,12 +33395,12 @@ "bkt" = ( /obj/structure/window/reinforced, /turf/space, -/area/space) +/area/space/nearstation) "bku" = ( /obj/structure/lattice, /obj/structure/window/reinforced, /turf/space, -/area/space) +/area/space/nearstation) "bkv" = ( /obj/machinery/light/small{ dir = 8 @@ -34368,7 +34368,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bmp" = ( /obj/structure/window/reinforced{ dir = 1; @@ -34409,7 +34409,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "bmt" = ( /obj/machinery/atmospherics/unary/outlet_injector/on{ dir = 4; @@ -35184,7 +35184,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bnN" = ( /obj/structure/window/reinforced{ dir = 8 @@ -35229,7 +35229,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "bnS" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ @@ -36084,7 +36084,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bpn" = ( /obj/structure/window/reinforced{ dir = 1; @@ -36156,7 +36156,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "bpv" = ( /turf/simulated/floor/engine/insulated/vacuum, /area/atmos) @@ -36944,7 +36944,7 @@ pixel_y = 0 }, /turf/space, -/area/space) +/area/space/nearstation) "bqJ" = ( /obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -37321,7 +37321,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "brr" = ( /obj/structure/lattice, /obj/structure/window/reinforced{ @@ -37329,14 +37329,14 @@ layer = 2.9 }, /turf/space, -/area/space) +/area/space/nearstation) "brs" = ( /obj/structure/window/reinforced{ dir = 1; layer = 2.9 }, /turf/space, -/area/space) +/area/space/nearstation) "brt" = ( /obj/structure/lattice, /obj/structure/window/reinforced{ @@ -37345,7 +37345,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/space, -/area/space) +/area/space/nearstation) "bru" = ( /obj/machinery/atmospherics/unary/vent_scrubber{ dir = 4; @@ -37362,7 +37362,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/space, -/area/space) +/area/space/nearstation) "brw" = ( /obj/structure/lattice, /obj/structure/window/reinforced{ @@ -37373,7 +37373,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "brx" = ( /obj/machinery/light/small{ dir = 8 @@ -38788,12 +38788,12 @@ /obj/structure/closet/emcloset, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, -/area/space) +/area/space/nearstation) "btJ" = ( /obj/structure/closet/firecloset, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, -/area/space) +/area/space/nearstation) "btK" = ( /obj/structure/cable{ d1 = 1; @@ -39582,7 +39582,7 @@ /obj/structure/lattice, /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "bvi" = ( /obj/machinery/door/airlock/external{ name = "Labor Shuttle Airlock"; @@ -44212,7 +44212,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bCJ" = ( /turf/simulated/wall, /area/security/prisonershuttle) @@ -49717,7 +49717,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "bLN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5; @@ -49769,7 +49769,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bLS" = ( /obj/structure/window/reinforced{ dir = 1; @@ -49779,7 +49779,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bLT" = ( /obj/structure/window/reinforced{ dir = 8 @@ -49810,7 +49810,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/space) +/area/space/nearstation) "bLV" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -49836,7 +49836,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/space) +/area/space/nearstation) "bLW" = ( /obj/structure/cable{ d1 = 4; @@ -51873,7 +51873,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "bPD" = ( /obj/structure/cable{ d1 = 4; @@ -52078,10 +52078,10 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bPS" = ( /turf/simulated/wall, -/area/space) +/area/space/nearstation) "bPT" = ( /obj/structure/lattice, /obj/structure/window/reinforced, @@ -52090,7 +52090,7 @@ icon_state = "D-SE" }, /turf/space, -/area/space) +/area/space/nearstation) "bPU" = ( /obj/structure/lattice, /obj/structure/transit_tube{ @@ -52098,12 +52098,12 @@ icon_state = "E-SW" }, /turf/space, -/area/space) +/area/space/nearstation) "bPV" = ( /obj/structure/lattice, /obj/structure/transit_tube, /turf/space, -/area/space) +/area/space/nearstation) "bPW" = ( /obj/structure/lattice, /obj/structure/transit_tube{ @@ -52111,7 +52111,7 @@ icon_state = "W-SE" }, /turf/space, -/area/space) +/area/space/nearstation) "bPX" = ( /obj/structure/lattice, /obj/structure/transit_tube{ @@ -52119,7 +52119,7 @@ icon_state = "D-SW" }, /turf/space, -/area/space) +/area/space/nearstation) "bPY" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, @@ -52899,7 +52899,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bRn" = ( /obj/structure/rack, /obj/item/ammo_box/shotgun/rubbershot, @@ -53136,7 +53136,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bRH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4; @@ -53241,28 +53241,28 @@ icon_state = "D-NW" }, /turf/space, -/area/space) +/area/space/nearstation) "bRP" = ( /obj/structure/transit_tube{ tag = "icon-D-NE"; icon_state = "D-NE" }, /turf/space, -/area/space) +/area/space/nearstation) "bRQ" = ( /obj/structure/lattice, /obj/structure/transit_tube{ icon_state = "NW-SE" }, /turf/space, -/area/space) +/area/space/nearstation) "bRR" = ( /obj/structure/transit_tube{ tag = "icon-D-SW"; icon_state = "D-SW" }, /turf/space, -/area/space) +/area/space/nearstation) "bRS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light/small{ @@ -54806,7 +54806,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bUc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -55200,7 +55200,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bUK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/navbeacon{ @@ -55458,7 +55458,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bVg" = ( /obj/structure/cable{ d1 = 4; @@ -55675,7 +55675,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bVt" = ( /obj/structure/sign/vacuum{ pixel_x = -32; @@ -56126,28 +56126,28 @@ icon_state = "D-SW" }, /turf/space, -/area/space) +/area/space/nearstation) "bWa" = ( /obj/structure/transit_tube{ tag = "icon-D-SE"; icon_state = "D-SE" }, /turf/space, -/area/space) +/area/space/nearstation) "bWb" = ( /obj/structure/lattice, /obj/structure/transit_tube{ icon_state = "NE-SW" }, /turf/space, -/area/space) +/area/space/nearstation) "bWc" = ( /obj/structure/transit_tube{ tag = "icon-D-NW"; icon_state = "D-NW" }, /turf/space, -/area/space) +/area/space/nearstation) "bWd" = ( /obj/structure/lattice, /obj/structure/transit_tube{ @@ -56155,7 +56155,7 @@ icon_state = "D-NE" }, /turf/space, -/area/space) +/area/space/nearstation) "bWe" = ( /obj/structure/cable{ d1 = 4; @@ -56502,7 +56502,7 @@ pixel_y = -22 }, /turf/space, -/area/space) +/area/space/nearstation) "bWD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -57190,7 +57190,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bXG" = ( /obj/structure/cable{ d1 = 1; @@ -57200,7 +57200,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bXH" = ( /obj/item/twohanded/required/kirbyplants, /obj/machinery/light, @@ -57308,7 +57308,7 @@ icon_state = "D-NE" }, /turf/space, -/area/space) +/area/space/nearstation) "bXR" = ( /obj/structure/lattice, /obj/structure/transit_tube{ @@ -57316,7 +57316,7 @@ icon_state = "E-NW" }, /turf/space, -/area/space) +/area/space/nearstation) "bXS" = ( /obj/structure/lattice, /obj/structure/transit_tube{ @@ -57324,7 +57324,7 @@ icon_state = "W-NE" }, /turf/space, -/area/space) +/area/space/nearstation) "bXT" = ( /obj/structure/lattice, /obj/structure/transit_tube{ @@ -57332,7 +57332,7 @@ icon_state = "D-NW" }, /turf/space, -/area/space) +/area/space/nearstation) "bXU" = ( /turf/simulated/wall/r_wall, /area/engine/engineering) @@ -57393,7 +57393,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bYb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/sign/securearea{ @@ -57476,7 +57476,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bYm" = ( /obj/structure/cable{ d1 = 4; @@ -57490,7 +57490,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bYn" = ( /obj/structure/sign/directions/evac{ pixel_y = -8 @@ -57699,7 +57699,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bYK" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -57920,7 +57920,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bZg" = ( /obj/structure/table/reinforced, /obj/structure/reagent_dispensers/peppertank{ @@ -58095,7 +58095,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bZx" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -58980,7 +58980,7 @@ /obj/effect/decal/warning_stripes/west, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cbb" = ( /turf/simulated/floor/plating/airless, /area/engine/engineering) @@ -62781,7 +62781,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "chx" = ( /obj/structure/cable{ d1 = 4; @@ -63157,10 +63157,10 @@ /obj/effect/decal/warning_stripes/east, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cif" = ( /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cig" = ( /obj/structure/table/reinforced, /obj/item/book/manual/engineering_guide{ @@ -63832,7 +63832,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cjm" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance{ @@ -64010,11 +64010,11 @@ "cjH" = ( /obj/effect/decal/warning_stripes/northwestcorner, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cjI" = ( /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cjJ" = ( /obj/machinery/power/tesla_coil{ anchored = 1 @@ -64022,7 +64022,7 @@ /obj/structure/cable/yellow, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cjK" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -64031,7 +64031,7 @@ }, /obj/effect/decal/warning_stripes/northeastcorner, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cjL" = ( /obj/machinery/door/poddoor{ density = 0; @@ -65079,7 +65079,7 @@ "clp" = ( /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "clq" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'RADIOACTIVE AREA'"; @@ -66345,7 +66345,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cnI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/item/twohanded/required/kirbyplants, @@ -66468,7 +66468,7 @@ /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/space, -/area/space) +/area/space/nearstation) "cnW" = ( /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, @@ -66478,7 +66478,7 @@ /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/space, -/area/space) +/area/space/nearstation) "cnY" = ( /obj/structure/lattice, /obj/structure/window/reinforced, @@ -66486,7 +66486,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "cnZ" = ( /obj/machinery/field/generator{ anchored = 1; @@ -66494,7 +66494,7 @@ }, /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "coa" = ( /obj/machinery/field/generator{ anchored = 1; @@ -66502,7 +66502,7 @@ }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cob" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -66511,7 +66511,7 @@ }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "coc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ @@ -66568,7 +66568,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "coj" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -67042,7 +67042,7 @@ "cpg" = ( /obj/item/wrench, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cph" = ( /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, @@ -68035,11 +68035,11 @@ }, /obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cqO" = ( /obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cqP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -68051,7 +68051,7 @@ "cqQ" = ( /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cqR" = ( /obj/structure/particle_accelerator/particle_emitter/right{ dir = 8 @@ -69035,7 +69035,7 @@ /obj/structure/transit_tube, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "css" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, @@ -69096,7 +69096,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "csz" = ( /obj/structure/closet/crate{ name = "solar pack crate" @@ -69743,7 +69743,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "ctJ" = ( /obj/structure/transit_tube{ tag = "icon-E-NW"; @@ -69754,7 +69754,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "ctK" = ( /obj/structure/table/wood, /obj/item/storage/fancy/crayons, @@ -69903,7 +69903,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "ctZ" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -70407,7 +70407,7 @@ }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cuP" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -70421,7 +70421,7 @@ }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cuQ" = ( /obj/machinery/field/generator{ anchored = 1; @@ -70429,7 +70429,7 @@ }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cuR" = ( /obj/machinery/pipedispenser, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -71280,15 +71280,15 @@ "cwt" = ( /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cwu" = ( /obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cwv" = ( /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cww" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -72854,7 +72854,7 @@ }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "czj" = ( /obj/structure/closet/secure_closet/engineering_welding, /obj/machinery/light_switch{ @@ -73002,7 +73002,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "czx" = ( /obj/structure/cable{ d1 = 1; @@ -74444,7 +74444,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cBV" = ( /obj/structure/chair/office/dark, /obj/machinery/newscaster{ @@ -77537,7 +77537,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cHu" = ( /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt, @@ -78384,7 +78384,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cJf" = ( /obj/structure/sign/directions/evac{ pixel_y = -8 @@ -78831,7 +78831,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cKk" = ( /obj/structure/cable{ d1 = 4; @@ -78846,7 +78846,7 @@ /obj/structure/window/reinforced, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cKm" = ( /obj/structure/cable{ d1 = 2; @@ -80282,7 +80282,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cNo" = ( /obj/structure/cable{ d1 = 1; @@ -80751,7 +80751,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cOa" = ( /obj/structure/table/reinforced, /obj/item/book/manual/security_space_law, @@ -80927,7 +80927,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cOn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9; @@ -81686,7 +81686,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cPL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -81854,7 +81854,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cPY" = ( /obj/machinery/access_button{ command = "cycle_exterior"; @@ -81867,7 +81867,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cPZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/wall, @@ -99561,7 +99561,7 @@ "dvU" = ( /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dvV" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -104257,7 +104257,7 @@ }, /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dEy" = ( /obj/structure/cable{ d1 = 1; @@ -110940,7 +110940,7 @@ }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dQD" = ( /obj/machinery/field/generator{ anchored = 1; @@ -110948,11 +110948,11 @@ }, /obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dQE" = ( /obj/effect/decal/warning_stripes/southwestcorner, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dQF" = ( /obj/structure/table, /obj/item/storage/firstaid/regular, @@ -112707,7 +112707,7 @@ width = 11 }, /turf/space, -/area/space) +/area/space/nearstation) "dTV" = ( /obj/machinery/power/solar{ name = "Aft Starboard Solar Panel" @@ -113083,7 +113083,7 @@ }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dUF" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -113092,7 +113092,7 @@ }, /obj/effect/decal/warning_stripes/southeastcorner, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dUG" = ( /obj/structure/grille, /obj/structure/cable/yellow{ @@ -115003,7 +115003,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "dXY" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/iv_bag/blood/random, @@ -115461,7 +115461,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "dYR" = ( /obj/structure/cable{ d2 = 2; diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 0e64cefc7aa..fd4abd040cc 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -13,7 +13,7 @@ width = 18 }, /turf/space, -/area/space) +/area/space/nearstation) "aac" = ( /obj/machinery/porta_turret/syndicate, /turf/space, @@ -549,17 +549,17 @@ "abd" = ( /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "abe" = ( /obj/structure/grille/broken, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "abf" = ( /obj/structure/grille, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "abg" = ( /obj/machinery/recharge_station/upgraded, /turf/simulated/shuttle/floor{ @@ -654,7 +654,7 @@ "abq" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "abr" = ( /obj/machinery/door/window{ dir = 4; @@ -1324,7 +1324,7 @@ dir = 8; icon_state = "diagonalWall3" }, -/area/space) +/area/space/nearstation) "acH" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall3"; @@ -1352,7 +1352,7 @@ dir = 1; icon_state = "diagonalWall3" }, -/area/space) +/area/space/nearstation) "acK" = ( /obj/item/beach_ball/holoball, /obj/structure/holohoop{ @@ -2123,7 +2123,7 @@ "aef" = ( /turf/simulated/floor/plating/airless/catwalk, /turf/space, -/area/space) +/area/space/nearstation) "aeg" = ( /obj/structure/cable{ d1 = 1; @@ -9928,12 +9928,12 @@ /area/shuttle/vox) "arA" = ( /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "arB" = ( /obj/structure/lattice, /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "arC" = ( /obj/structure/cable{ d1 = 1; @@ -10885,7 +10885,7 @@ "ata" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "atb" = ( /obj/item/flashlight/lamp, /obj/structure/extinguisher_cabinet{ @@ -11587,7 +11587,7 @@ /obj/structure/lattice, /obj/structure/grille/broken, /turf/space, -/area/space) +/area/space/nearstation) "auq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -13911,7 +13911,7 @@ opened = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ayz" = ( /obj/structure/cable{ d1 = 1; @@ -14600,7 +14600,7 @@ pixel_y = 2 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "azJ" = ( /obj/machinery/door/airlock/external, /turf/simulated/floor/plating, @@ -16074,7 +16074,7 @@ }, /obj/item/stack/rods, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aCo" = ( /turf/simulated/shuttle/wall{ icon_state = "swall3"; @@ -16673,11 +16673,11 @@ "aDo" = ( /obj/structure/grille, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aDp" = ( /obj/item/stack/cable_coil, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aDq" = ( /turf/simulated/shuttle/floor, /area/shuttle/mining) @@ -18331,7 +18331,7 @@ network = list("Singulo") }, /turf/space, -/area/space) +/area/space/nearstation) "aGa" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable/yellow{ @@ -20306,7 +20306,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aJu" = ( /obj/machinery/door/airlock/maintenance{ name = "Law Office Maintenance"; @@ -20345,7 +20345,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aJy" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -20493,7 +20493,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aJK" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -20632,7 +20632,7 @@ state = 2 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aJX" = ( /turf/simulated/floor/wood, /area/lawoffice) @@ -20663,7 +20663,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aKb" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -21569,7 +21569,7 @@ /obj/item/wirecutters, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "aLy" = ( /obj/machinery/computer/guestpass{ pixel_x = 30 @@ -21688,7 +21688,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aLO" = ( /obj/machinery/power/grounding_rod{ anchored = 1 @@ -22185,7 +22185,7 @@ anchored = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aMJ" = ( /obj/machinery/door/window{ dir = 1; @@ -23083,7 +23083,7 @@ "aOj" = ( /obj/item/crowbar, /turf/space, -/area/space) +/area/space/nearstation) "aOk" = ( /obj/machinery/alarm{ dir = 4; @@ -23102,7 +23102,7 @@ "aOm" = ( /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aOn" = ( /obj/machinery/light/spot{ tag = "icon-tube1 (WEST)"; @@ -23131,7 +23131,7 @@ "aOq" = ( /obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aOr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -23518,7 +23518,7 @@ }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aPe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/warning_stripes/west, @@ -23545,7 +23545,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aPh" = ( /obj/structure/table, /obj/item/hatchet, @@ -23712,7 +23712,7 @@ }, /obj/structure/cable, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aPz" = ( /obj/item/seeds/apple, /obj/item/seeds/banana, @@ -24085,7 +24085,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "aQg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -24167,7 +24167,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "aQo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -24580,7 +24580,7 @@ "aRe" = ( /obj/item/weldingtool, /turf/space, -/area/space) +/area/space/nearstation) "aRf" = ( /obj/item/wirecutters, /obj/structure/cable{ @@ -24608,7 +24608,7 @@ "aRh" = ( /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aRi" = ( /obj/machinery/pipedispenser, /turf/simulated/floor/plating, @@ -25199,7 +25199,7 @@ "aSk" = ( /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aSl" = ( /obj/machinery/navbeacon{ codes_txt = "delivery"; @@ -25233,7 +25233,7 @@ "aSp" = ( /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aSq" = ( /turf/space, /turf/simulated/shuttle/wall{ @@ -25990,7 +25990,7 @@ "aTG" = ( /obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aTH" = ( /obj/machinery/power/apc{ dir = 4; @@ -26024,7 +26024,7 @@ }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aTJ" = ( /obj/structure/cable{ d1 = 1; @@ -26059,7 +26059,7 @@ d2 = 4 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aTN" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall3"; @@ -26646,7 +26646,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aUN" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -26724,12 +26724,12 @@ "aUU" = ( /obj/structure/window/reinforced, /turf/space, -/area/space) +/area/space/nearstation) "aUV" = ( /obj/structure/window/reinforced, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "aUW" = ( /obj/structure/chair{ dir = 1 @@ -27657,7 +27657,7 @@ "aWw" = ( /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aWx" = ( /obj/machinery/door/airlock/maintenance{ name = "Storage Room"; @@ -27712,7 +27712,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "aWD" = ( /turf/simulated/wall, /area/hallway/secondary/entry{ @@ -28311,7 +28311,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "aXI" = ( /obj/structure/window/reinforced{ dir = 1; @@ -28369,13 +28369,13 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "aXO" = ( /obj/structure/window/reinforced{ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "aXP" = ( /obj/item/crowbar, /turf/simulated/floor/plating, @@ -29805,7 +29805,7 @@ icon_state = "1-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "baq" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -32575,7 +32575,7 @@ anchored = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bfa" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5; @@ -33702,7 +33702,7 @@ }, /obj/structure/window/reinforced, /turf/space, -/area/space) +/area/space/nearstation) "bgN" = ( /obj/structure/lattice, /turf/space, @@ -33807,7 +33807,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "bgV" = ( /obj/machinery/conveyor_switch/oneway{ id = "packageSort2"; @@ -38279,7 +38279,7 @@ name = "EXTERNAL AIRLOCK" }, /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "bop" = ( /obj/machinery/computer/med_data, /turf/simulated/floor/plasteel{ @@ -38945,7 +38945,7 @@ /obj/structure/lattice, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bps" = ( /obj/structure/window/reinforced{ dir = 1 @@ -39972,7 +39972,7 @@ icon_state = "D-SE" }, /turf/space, -/area/space) +/area/space/nearstation) "bqZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -40029,10 +40029,10 @@ }, /obj/structure/window/reinforced, /turf/space, -/area/space) +/area/space/nearstation) "bre" = ( /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "brf" = ( /obj/structure/window/reinforced{ dir = 8 @@ -40618,7 +40618,7 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "bse" = ( /obj/structure/window/reinforced{ dir = 1 @@ -40627,7 +40627,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bsf" = ( /obj/structure/window/reinforced{ dir = 4 @@ -40971,12 +40971,12 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bsJ" = ( /obj/structure/transit_tube, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bsK" = ( /obj/structure/transit_tube{ tag = "icon-W-SE"; @@ -40984,14 +40984,14 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bsL" = ( /obj/structure/transit_tube{ tag = "icon-D-SW"; icon_state = "D-SW" }, /turf/space, -/area/space) +/area/space/nearstation) "bsM" = ( /turf/simulated/wall/r_wall, /area/turret_protected/tcomfoyer{ @@ -41003,7 +41003,7 @@ icon_state = "D-NW" }, /turf/space, -/area/space) +/area/space/nearstation) "bsO" = ( /obj/structure/table/reinforced, /obj/structure/cable/yellow{ @@ -41041,7 +41041,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bsQ" = ( /obj/structure/transit_tube{ icon_state = "E-W-Pass" @@ -41049,7 +41049,7 @@ /obj/structure/lattice, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bsR" = ( /obj/structure/transit_tube{ icon_state = "E-SW"; @@ -41057,13 +41057,13 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bsS" = ( /obj/structure/transit_tube{ icon_state = "W-SE" }, /turf/space, -/area/space) +/area/space/nearstation) "bsT" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -41842,7 +41842,7 @@ icon_state = "NE-SW" }, /turf/space, -/area/space) +/area/space/nearstation) "bue" = ( /obj/structure/sign/double/map/left{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -42205,14 +42205,14 @@ tag = "icon-D-SW" }, /turf/space, -/area/space) +/area/space/nearstation) "buM" = ( /obj/structure/transit_tube{ icon_state = "D-NW"; tag = "icon-D-NE" }, /turf/space, -/area/space) +/area/space/nearstation) "buN" = ( /obj/structure/transit_tube{ icon_state = "S-NW" @@ -42239,7 +42239,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "buP" = ( /obj/structure/window/reinforced{ dir = 1 @@ -42760,7 +42760,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/space) +/area/space/nearstation) "bvw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -43601,7 +43601,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bwM" = ( /obj/structure/transit_tube{ tag = "icon-S-NE"; @@ -43622,7 +43622,7 @@ icon_state = "vault"; dir = 8 }, -/area/space) +/area/space/nearstation) "bwN" = ( /obj/item/assembly/prox_sensor, /obj/structure/cable/yellow{ @@ -43729,7 +43729,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bwV" = ( /obj/machinery/vending/coffee, /turf/simulated/floor/plasteel{ @@ -43752,7 +43752,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bwX" = ( /obj/structure/transit_tube{ tag = "icon-D-SE"; @@ -43771,7 +43771,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bwY" = ( /obj/structure/transit_tube, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -43783,7 +43783,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bwZ" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -43909,7 +43909,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bxj" = ( /obj/structure/transit_tube{ tag = "icon-S-NE"; @@ -43917,14 +43917,14 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bxk" = ( /obj/structure/transit_tube{ tag = "icon-D-NE"; icon_state = "D-NE" }, /turf/space, -/area/space) +/area/space/nearstation) "bxl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -43936,7 +43936,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bxm" = ( /obj/structure/transit_tube{ icon_state = "W-NE-SE" @@ -43952,7 +43952,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bxn" = ( /obj/structure/transit_tube{ tag = "icon-D-SW"; @@ -43973,7 +43973,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bxo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4; @@ -43986,7 +43986,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bxp" = ( /obj/structure/transit_tube/station{ icon_state = "closed"; @@ -44027,7 +44027,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "bxr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ req_access_txt = 1 @@ -45168,7 +45168,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bzd" = ( /obj/structure/transit_tube{ tag = "icon-N-SW"; @@ -45176,7 +45176,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bze" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/ai_slipper{ @@ -45403,7 +45403,7 @@ icon_state = "NW-SE" }, /turf/space, -/area/space) +/area/space/nearstation) "bzu" = ( /obj/structure/transit_tube{ icon_state = "N-SW" @@ -45963,7 +45963,7 @@ icon_state = "vault"; dir = 8 }, -/area/space) +/area/space/nearstation) "bAu" = ( /obj/machinery/vending/boozeomat, /turf/simulated/wall, @@ -46292,7 +46292,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bAY" = ( /obj/structure/transit_tube{ tag = "icon-W-NE"; @@ -46300,7 +46300,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bAZ" = ( /obj/structure/lattice, /obj/structure/transit_tube{ @@ -46308,14 +46308,14 @@ icon_state = "D-NW" }, /turf/space, -/area/space) +/area/space/nearstation) "bBa" = ( /obj/structure/transit_tube{ tag = "icon-E-NW"; icon_state = "E-NW" }, /turf/space, -/area/space) +/area/space/nearstation) "bBb" = ( /obj/structure/transit_tube{ icon_state = "D-SE"; @@ -46325,7 +46325,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bBc" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -47212,7 +47212,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/space) +/area/space/nearstation) "bCx" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -47502,7 +47502,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/space) +/area/space/nearstation) "bCZ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -48824,12 +48824,12 @@ /obj/structure/lattice, /obj/structure/grille, /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "bFc" = ( /obj/structure/grille, /obj/structure/lattice, /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "bFd" = ( /obj/machinery/computer/security/telescreen{ dir = 8; @@ -48932,7 +48932,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bFl" = ( /turf/simulated/floor/plasteel{ icon_state = "grimy" @@ -49802,13 +49802,13 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "bGN" = ( /obj/structure/transit_tube{ icon_state = "W-NE" }, /turf/space, -/area/space) +/area/space/nearstation) "bGO" = ( /obj/structure/window/reinforced{ dir = 1 @@ -50623,7 +50623,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bIv" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -51768,7 +51768,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/insulated, /turf/space, -/area/space) +/area/space/nearstation) "bKy" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 1 @@ -53038,7 +53038,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bMk" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible/green{ @@ -53087,7 +53087,7 @@ }, /obj/structure/window/reinforced, /turf/space, -/area/space) +/area/space/nearstation) "bMo" = ( /obj/machinery/telecomms/processor/preset_one, /turf/simulated/floor/bluegrid{ @@ -54076,7 +54076,7 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "bNZ" = ( /obj/machinery/telecomms/bus/preset_one, /turf/simulated/floor/bluegrid{ @@ -54973,20 +54973,20 @@ /obj/structure/lattice, /obj/structure/lattice, /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "bPG" = ( /obj/structure/lattice, /obj/structure/grille, /obj/structure/lattice, /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "bPH" = ( /obj/structure/window/reinforced{ dir = 1 }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bPI" = ( /obj/machinery/light/small{ dir = 8 @@ -55794,7 +55794,7 @@ /obj/structure/lattice, /obj/structure/lattice, /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "bRn" = ( /obj/machinery/message_server, /turf/simulated/floor/bluegrid{ @@ -55829,7 +55829,7 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "bRq" = ( /obj/machinery/door/airlock/hatch{ name = "Telecoms Server Room" @@ -59662,7 +59662,7 @@ dir = 5 }, /turf/space, -/area/space) +/area/space/nearstation) "bXP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/extinguisher_cabinet{ @@ -63185,7 +63185,7 @@ }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/engine/vacuum, -/area/space) +/area/space/nearstation) "cdS" = ( /obj/machinery/camera{ c_tag = "Atmospherics Tank - CO2"; @@ -67010,7 +67010,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "ckp" = ( /obj/structure/window/reinforced{ dir = 4 @@ -67020,7 +67020,7 @@ layer = 2.9 }, /turf/space, -/area/space) +/area/space/nearstation) "ckq" = ( /obj/structure/window/reinforced{ dir = 1; @@ -67030,7 +67030,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "ckr" = ( /obj/structure/cable{ icon_state = "0-2"; @@ -67942,7 +67942,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "clI" = ( /obj/machinery/requests_console{ announcementConsole = 0; @@ -68501,31 +68501,31 @@ /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/green, /turf/space, -/area/space) +/area/space/nearstation) "cmL" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/space, -/area/space) +/area/space/nearstation) "cmM" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "cmN" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 9 }, /turf/space, -/area/space) +/area/space/nearstation) "cmO" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/cyan, /turf/space, -/area/space) +/area/space/nearstation) "cmP" = ( /obj/structure/window/reinforced{ dir = 1 @@ -71960,11 +71960,11 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/binary/pump/on, /turf/space, -/area/space) +/area/space/nearstation) "csp" = ( /obj/item/wrench, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "csq" = ( /obj/machinery/light/small, /turf/simulated/floor/engine{ @@ -72780,7 +72780,7 @@ icon_state = "pipe-c" }, /turf/space, -/area/space) +/area/space/nearstation) "ctt" = ( /obj/structure/disposaloutlet{ dir = 2 @@ -72789,7 +72789,7 @@ dir = 8 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ctu" = ( /turf/simulated/wall/r_wall/coated, /area/maintenance/incinerator) @@ -75747,7 +75747,7 @@ dir = 8 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cyo" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters{ @@ -76392,7 +76392,7 @@ "czm" = ( /obj/structure/grille/broken, /turf/space, -/area/space) +/area/space/nearstation) "czn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4; @@ -78499,7 +78499,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cCA" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -78816,7 +78816,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cDa" = ( /obj/machinery/door/airlock/maintenance{ name = "airlock access"; @@ -78950,7 +78950,7 @@ "cDn" = ( /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/engine/vacuum, -/area/space) +/area/space/nearstation) "cDo" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -81330,7 +81330,7 @@ "cHf" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/space) +/area/space/nearstation) "cHg" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -83393,7 +83393,7 @@ /area/medical/surgery2) "cKI" = ( /turf/simulated/wall, -/area/space) +/area/space/nearstation) "cKJ" = ( /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plating/airless, @@ -86874,7 +86874,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cPV" = ( /obj/structure/closet/wardrobe/robotics_black{ pixel_x = 2 @@ -88571,13 +88571,13 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cSA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cSB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -89153,7 +89153,7 @@ dir = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cTy" = ( /obj/structure/morgue, /turf/simulated/floor/plasteel{ @@ -95292,14 +95292,14 @@ "ddO" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ddP" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, /obj/structure/disposaloutlet, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ddQ" = ( /obj/docking_port/stationary{ dheight = 9; @@ -95445,7 +95445,7 @@ d2 = 2 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dea" = ( /obj/structure/cable{ d1 = 1; @@ -95453,7 +95453,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "deb" = ( /obj/machinery/vending/wallmed1{ name = "Emergency NanoMed"; @@ -95472,7 +95472,7 @@ icon_state = "1-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ded" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -95673,7 +95673,7 @@ dir = 6 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dex" = ( /obj/structure/rack{ dir = 1 @@ -95692,7 +95692,7 @@ dir = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dez" = ( /obj/structure/disposalpipe/segment{ dir = 8; diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm index e306ba87c95..199577ece74 100644 --- a/_maps/map_files/MetaStation/z2.dmm +++ b/_maps/map_files/MetaStation/z2.dmm @@ -10,9 +10,6 @@ dir = 8 }, /area/space) -"ad" = ( -/turf/space/transit, -/area/space) "ae" = ( /turf/unsimulated/wall{ tag = "icon-iron6"; @@ -14886,15 +14883,15 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -15137,21 +15134,21 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -15394,21 +15391,21 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -15651,21 +15648,21 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -15901,28 +15898,28 @@ aa aa aa aa -ad -ad -ad -ad -ad aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -16158,25 +16155,25 @@ aa aa aa aa -ad -ad -ad -ad -ad aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -16415,27 +16412,27 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -16672,27 +16669,27 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -16929,27 +16926,27 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -17186,27 +17183,27 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -17443,27 +17440,27 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -17700,25 +17697,25 @@ aa aa aa aa -ad -ad -ad -ad -ad aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -17957,28 +17954,28 @@ aa aa aa aa -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa aa aa aa aa dx -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -18223,19 +18220,19 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -18480,19 +18477,19 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -18741,15 +18738,15 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -18998,15 +18995,15 @@ aa aa aa aa -ad -ad -ad -ad -ad -ad -ad -ad -ad +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa diff --git a/_maps/map_files/MetaStation/z3.dmm b/_maps/map_files/MetaStation/z3.dmm index c1e20ddacaa..3773dcf937e 100644 --- a/_maps/map_files/MetaStation/z3.dmm +++ b/_maps/map_files/MetaStation/z3.dmm @@ -1,7 +1,7 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /turf/space, -/area/space) +/area/space/nearstation) "ab" = ( /obj/docking_port/stationary{ dheight = 9; @@ -145,7 +145,7 @@ "ay" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "az" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless{ @@ -156,31 +156,31 @@ "be" = ( /obj/item/trash/cheesie, /turf/space, -/area/space) +/area/space/nearstation) "bj" = ( /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bk" = ( /obj/structure/lattice, /obj/structure/grille/broken, /turf/space, -/area/space) +/area/space/nearstation) "bl" = ( /obj/structure/lattice, /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "bm" = ( /obj/structure/grille, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bn" = ( /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "bo" = ( /obj/structure/girder, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bp" = ( /turf/simulated/wall/r_wall, /area/tcommsat/chamber) @@ -198,7 +198,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bt" = ( /obj/structure/window/reinforced{ dir = 8 @@ -258,7 +258,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bE" = ( /obj/structure/cable{ d1 = 1; @@ -285,7 +285,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "bI" = ( /turf/simulated/floor/plating/airless, /area/tcommsat/chamber) @@ -355,7 +355,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "bV" = ( /obj/item/folder/yellow, /turf/simulated/floor/plating/airless, @@ -372,7 +372,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bY" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -383,7 +383,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bZ" = ( /obj/structure/window/reinforced{ dir = 8 @@ -399,18 +399,18 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "cb" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "cc" = ( /obj/structure/window/reinforced, /turf/space, -/area/space) +/area/space/nearstation) "cd" = ( /obj/structure/sign/securearea, /turf/simulated/wall/r_wall, @@ -520,20 +520,20 @@ dir = 4 }, /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "cv" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/grille/broken, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cx" = ( /obj/structure/disposaloutlet{ dir = 4 @@ -542,7 +542,7 @@ dir = 8 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cy" = ( /obj/structure/window/reinforced{ dir = 8 @@ -562,20 +562,20 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "cA" = ( /obj/structure/window/reinforced{ dir = 1 }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "cB" = ( /obj/structure/window/reinforced{ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "cC" = ( /obj/structure/table, /obj/item/radio/off, @@ -606,14 +606,14 @@ /turf/simulated/floor/plasteel{ icon_state = "solarpanel" }, -/area/space) +/area/space/nearstation) "cI" = ( /obj/structure/window/reinforced{ dir = 4 }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "cJ" = ( /obj/structure/window/reinforced{ dir = 8 @@ -679,7 +679,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "cQ" = ( /obj/structure/window/reinforced{ dir = 4 @@ -846,19 +846,19 @@ }, /obj/structure/window/reinforced, /turf/space, -/area/space) +/area/space/nearstation) "du" = ( /obj/structure/window/reinforced, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "dz" = ( /obj/structure/window/reinforced{ dir = 4 }, /obj/structure/window/reinforced, /turf/space, -/area/space) +/area/space/nearstation) "dA" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -886,7 +886,7 @@ icon_state = "medium" }, /turf/space, -/area/space) +/area/space/nearstation) "dJ" = ( /obj/structure/lattice, /obj/item/stack/rods, @@ -894,7 +894,7 @@ icon_state = "medium" }, /turf/space, -/area/space) +/area/space/nearstation) "dK" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -906,7 +906,7 @@ "dM" = ( /obj/structure/grille/broken, /turf/space, -/area/space) +/area/space/nearstation) "dO" = ( /obj/machinery/door/airlock/hatch, /turf/simulated/floor/plasteel, @@ -943,7 +943,7 @@ "ed" = ( /obj/item/crowbar, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ej" = ( /obj/structure/computerframe, /turf/simulated/floor/plating, diff --git a/_maps/map_files/MetaStation/z4.dmm b/_maps/map_files/MetaStation/z4.dmm index 95277b92bf9..65848fd6092 100644 --- a/_maps/map_files/MetaStation/z4.dmm +++ b/_maps/map_files/MetaStation/z4.dmm @@ -1,11 +1,11 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /turf/space, -/area/space) +/area/space/nearstation) "ab" = ( /obj/structure/grille, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ac" = ( /obj/machinery/power/solar/fake, /turf/simulated/floor/plating/airless{ @@ -18,7 +18,7 @@ "ae" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "af" = ( /turf/simulated/wall, /area/djstation) @@ -350,7 +350,7 @@ "aY" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aZ" = ( /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" @@ -460,7 +460,7 @@ }, /obj/structure/disposaloutlet, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bl" = ( /turf/simulated/floor/plating/airless{ tag = "icon-platingdmg2"; @@ -646,7 +646,7 @@ /area/derelict/bridge/ai_upload) "bE" = ( /turf/simulated/floor/plating, -/area/space) +/area/space/nearstation) "bF" = ( /turf/simulated/floor/plasteel, /area/derelict/solar_control) @@ -843,7 +843,7 @@ /area/derelict/solar_control) "ce" = ( /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "cf" = ( /obj/machinery/porta_turret, /turf/simulated/floor/plasteel, @@ -877,7 +877,7 @@ "cj" = ( /obj/structure/grille/broken, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ck" = ( /obj/machinery/light/small, /turf/simulated/floor/plasteel, @@ -908,7 +908,7 @@ "co" = ( /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "cp" = ( /obj/structure/grille, /turf/simulated/floor/plating/airless, @@ -1019,7 +1019,7 @@ "cH" = ( /obj/structure/closet/crate, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cI" = ( /turf/simulated/floor/plating/airless{ icon_state = "damaged4" @@ -1115,7 +1115,7 @@ /turf/simulated/floor/plating/airless{ icon_state = "damaged4" }, -/area/space) +/area/space/nearstation) "cZ" = ( /obj/structure/cable{ d1 = 1; @@ -1167,7 +1167,7 @@ /area/derelict/bridge/ai_upload) "df" = ( /turf/simulated/wall, -/area/space) +/area/space/nearstation) "dg" = ( /obj/structure/cable{ d1 = 1; @@ -1197,7 +1197,7 @@ /obj/item/stack/ore/iron, /obj/item/stack/ore/iron, /turf/space, -/area/space) +/area/space/nearstation) "dl" = ( /turf/simulated/floor/plating/airless{ icon_state = "damaged2" @@ -1309,7 +1309,7 @@ "dE" = ( /obj/item/stack/ore/slag, /turf/space, -/area/space) +/area/space/nearstation) "dF" = ( /obj/structure/cable{ d1 = 1; @@ -1490,7 +1490,7 @@ /turf/simulated/floor/plating/airless{ icon_state = "solarpanel" }, -/area/space) +/area/space/nearstation) "eb" = ( /obj/structure/cable{ d1 = 4; @@ -1536,7 +1536,7 @@ "ef" = ( /obj/item/stack/cable_coil/cut, /turf/space, -/area/space) +/area/space/nearstation) "eg" = ( /obj/machinery/light/small{ dir = 8 @@ -1893,7 +1893,7 @@ "fk" = ( /obj/item/stack/rods, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "fl" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -2088,7 +2088,7 @@ "fK" = ( /obj/item/stack/rods, /turf/space, -/area/space) +/area/space/nearstation) "fL" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -2283,7 +2283,7 @@ /area/derelict/bridge/access) "gp" = ( /turf/simulated/wall/mineral/bananium, -/area/space) +/area/space/nearstation) "gq" = ( /obj/structure/window/reinforced{ dir = 4 @@ -2460,7 +2460,7 @@ "gO" = ( /obj/machinery/door/airlock/bananium, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "gP" = ( /obj/structure/cable{ d1 = 2; @@ -2513,28 +2513,28 @@ "gX" = ( /obj/item/flag/clown, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "gY" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "gZ" = ( /obj/effect/landmark/burnturf, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ha" = ( /obj/effect/mob_spawn/human/corpse/clownmili{ name = "Clown Pilot" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "hb" = ( /obj/effect/mob_spawn/human/corpse/clownmili, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "hc" = ( /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "hd" = ( /obj/machinery/light/small{ dir = 4 @@ -2627,7 +2627,7 @@ /turf/simulated/floor/plating/airless{ icon_state = "floorscorched2" }, -/area/space) +/area/space/nearstation) "hp" = ( /obj/structure/computerframe, /obj/effect/landmark/damageturf, @@ -2648,7 +2648,7 @@ name = "Clown Pilot" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "hs" = ( /obj/structure/closet, /obj/structure/window/reinforced{ @@ -2707,7 +2707,7 @@ "hB" = ( /obj/item/shard, /turf/space, -/area/space) +/area/space/nearstation) "hC" = ( /obj/structure/window/reinforced, /turf/simulated/floor/plating/airless, @@ -2738,7 +2738,7 @@ dir = 5 }, /turf/space, -/area/space) +/area/space/nearstation) "hG" = ( /turf/simulated/wall/r_wall, /area/derelict/arrival) @@ -2769,7 +2769,7 @@ /obj/structure/lattice, /obj/structure/window/basic, /turf/space, -/area/space) +/area/space/nearstation) "hN" = ( /obj/structure/table, /turf/simulated/floor/plasteel, @@ -2901,7 +2901,7 @@ name = "External Engineering" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "il" = ( /obj/machinery/light{ icon_state = "tube1"; @@ -2970,7 +2970,7 @@ icon_state = "medium" }, /turf/space, -/area/space) +/area/space/nearstation) "iv" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -2996,7 +2996,7 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "iz" = ( /obj/structure/lattice, /obj/structure/lattice, @@ -3004,7 +3004,7 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "iA" = ( /turf/simulated/floor/plating, /area/derelict/arrival) @@ -3014,7 +3014,7 @@ }, /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "iC" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -3106,7 +3106,7 @@ "iN" = ( /obj/item/stack/cable_coil/cut, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "iO" = ( /obj/structure/table, /obj/structure/window/reinforced{ @@ -3204,7 +3204,7 @@ "jb" = ( /obj/structure/window/reinforced, /turf/space, -/area/space) +/area/space/nearstation) "jc" = ( /obj/structure/window/reinforced{ dir = 4 @@ -3212,7 +3212,7 @@ /obj/structure/window/reinforced, /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "jd" = ( /obj/structure/window/reinforced{ dir = 1 @@ -3283,13 +3283,13 @@ "jl" = ( /obj/item/shard, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "jm" = ( /obj/structure/window/reinforced, /turf/simulated/floor/plating/airless{ icon_state = "white" }, -/area/space) +/area/space/nearstation) "jn" = ( /obj/structure/cable{ d1 = 4; @@ -3337,7 +3337,7 @@ icon_state = "medium" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "jt" = ( /obj/structure/cable{ d1 = 4; @@ -3380,13 +3380,13 @@ "jw" = ( /obj/structure/closet/l3closet, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "jx" = ( /obj/structure/window/reinforced{ dir = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "jy" = ( /obj/item/pen, /turf/simulated/floor/plasteel, @@ -3396,7 +3396,7 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "jA" = ( /obj/structure/window/reinforced{ dir = 4 @@ -3406,7 +3406,7 @@ }, /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "jB" = ( /obj/structure/cable{ d1 = 2; @@ -3453,7 +3453,7 @@ "jG" = ( /obj/item/cigbutt, /turf/space, -/area/space) +/area/space/nearstation) "jH" = ( /obj/structure/table, /obj/item/stock_parts/cell, @@ -3496,7 +3496,7 @@ /turf/simulated/floor/plating/airless{ icon_state = "white" }, -/area/space) +/area/space/nearstation) "jN" = ( /obj/machinery/light{ icon_state = "tube1"; @@ -3554,7 +3554,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "jT" = ( /obj/structure/cable{ d1 = 2; @@ -3562,7 +3562,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "jU" = ( /obj/structure/closet/wardrobe/genetics_white, /turf/simulated/floor/plating/airless{ @@ -3577,7 +3577,7 @@ dir = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "jW" = ( /obj/machinery/light/small{ dir = 4 @@ -3593,12 +3593,12 @@ icon_state = "medium" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "jY" = ( /turf/simulated/floor/plating/airless{ icon_state = "white" }, -/area/space) +/area/space/nearstation) "jZ" = ( /obj/structure/cable{ d1 = 1; @@ -3606,7 +3606,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ka" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -3615,7 +3615,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "kb" = ( /obj/machinery/light/small{ dir = 4 @@ -3629,7 +3629,7 @@ icon_state = "medium" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "kd" = ( /obj/structure/window/basic{ dir = 1 @@ -3640,7 +3640,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ke" = ( /obj/machinery/door/window{ dir = 8 @@ -3652,7 +3652,7 @@ icon_state = "small" }, /turf/space, -/area/space) +/area/space/nearstation) "kg" = ( /obj/machinery/light/small{ dir = 1 @@ -3667,7 +3667,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ki" = ( /obj/structure/cable{ d1 = 4; @@ -3728,13 +3728,13 @@ "kp" = ( /obj/structure/window/basic, /turf/space, -/area/space) +/area/space/nearstation) "kq" = ( /obj/structure/window/basic{ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "kr" = ( /obj/structure/cable{ d1 = 4; @@ -3827,12 +3827,12 @@ }, /obj/structure/window/basic, /turf/space, -/area/space) +/area/space/nearstation) "kE" = ( /obj/structure/lattice, /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "kF" = ( /obj/machinery/door/airlock/external{ name = "Arrivals Docking Bay 1" @@ -3972,7 +3972,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "kV" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospherics Access"; @@ -4017,7 +4017,7 @@ }, /obj/structure/window/reinforced, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ld" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ tag = "icon-manifold-b-f (EAST)"; @@ -4038,26 +4038,26 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "lg" = ( /obj/structure/window/basic{ dir = 5 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "lh" = ( /obj/structure/grille, /obj/structure/window/basic{ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "li" = ( /obj/structure/window/basic{ dir = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "lj" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospherics Access"; @@ -4114,7 +4114,7 @@ icon_state = "4-8" }, /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "lt" = ( /obj/structure/cable{ d1 = 4; @@ -4130,14 +4130,14 @@ "lv" = ( /obj/structure/girder, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "lw" = ( /obj/structure/lattice, /obj/structure/window/basic{ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "lx" = ( /obj/structure/girder, /obj/structure/window/basic, @@ -4191,13 +4191,13 @@ "lD" = ( /obj/machinery/door/window, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "lE" = ( /obj/item/shard{ icon_state = "small" }, /turf/simulated/floor/plating/airless/asteroid, -/area/space) +/area/space/nearstation) "lF" = ( /obj/structure/window/basic{ dir = 1 @@ -4223,7 +4223,7 @@ dir = 8 }, /turf/simulated/floor/plating/airless/asteroid, -/area/space) +/area/space/nearstation) "lJ" = ( /obj/machinery/vending/sovietsoda, /turf/simulated/floor/plating/airless, @@ -4235,24 +4235,24 @@ "lL" = ( /obj/structure/table, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "lM" = ( /obj/structure/window/reinforced{ dir = 8 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "lN" = ( /obj/item/paper{ info = "The call has gone out! Our ancestral home has been rediscovered! Not a small patch of land, but a true clown nation, a true Clown Planet! We're on our way home at last!" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "lO" = ( /obj/structure/lattice, /obj/item/stack/cable_coil/cut, /turf/space, -/area/space) +/area/space/nearstation) "lP" = ( /obj/structure/girder, /turf/simulated/floor/plating, @@ -4273,13 +4273,13 @@ "lS" = ( /obj/structure/closet/wardrobe/orange, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "lT" = ( /obj/structure/window/basic{ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "lU" = ( /obj/structure/grille, /turf/simulated/floor/plating, @@ -4328,7 +4328,7 @@ dir = 8 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "me" = ( /turf/simulated/wall/r_wall, /area/derelict/atmospherics) @@ -4343,7 +4343,7 @@ "mg" = ( /obj/structure/window/reinforced, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "mh" = ( /obj/structure/grille, /obj/structure/grille, @@ -4354,11 +4354,11 @@ dir = 8 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "mi" = ( /obj/structure/bed, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "mj" = ( /turf/simulated/floor/plating/airless{ icon_state = "floorgrime" @@ -4403,7 +4403,7 @@ dir = 8 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "mr" = ( /obj/structure/closet/wardrobe/mixed, /turf/simulated/floor/plasteel, @@ -4411,7 +4411,7 @@ "ms" = ( /obj/item/pickaxe, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "mt" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 @@ -4458,7 +4458,7 @@ dir = 8 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "my" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -4515,7 +4515,7 @@ dir = 4 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "mH" = ( /obj/machinery/light/small{ dir = 1 @@ -4601,7 +4601,7 @@ dir = 5 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "mP" = ( /obj/structure/window/reinforced, /turf/simulated/floor/plasteel, @@ -4782,7 +4782,7 @@ icon_state = "right" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "nl" = ( /obj/machinery/door/window{ base_state = "right"; @@ -5039,7 +5039,7 @@ /obj/item/stack/cable_coil/cut, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "nM" = ( /turf/simulated/floor/plating/airless{ icon_state = "derelict1" @@ -5173,7 +5173,7 @@ "oi" = ( /obj/structure/girder/reinforced, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "oj" = ( /obj/structure/cable{ d1 = 1; @@ -5238,7 +5238,7 @@ req_access_txt = "46" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "os" = ( /obj/structure/table, /obj/item/stack/sheet/metal{ @@ -5264,7 +5264,7 @@ opened = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ou" = ( /obj/structure/shuttle/engine/propulsion{ color = "#FFFF00"; @@ -5272,7 +5272,7 @@ icon_state = "propulsion_l" }, /turf/space, -/area/space) +/area/space/nearstation) "ov" = ( /obj/machinery/atmospherics/unary/vent_pump{ on = 1 @@ -5292,7 +5292,7 @@ /turf/simulated/floor/plating/airless{ color = "#FFFF00" }, -/area/space) +/area/space/nearstation) "ox" = ( /turf/simulated/floor/plating/airless, /area/derelict/se_solar) @@ -5314,7 +5314,7 @@ /turf/simulated/floor/plating/airless{ color = "#FFFF00" }, -/area/space) +/area/space/nearstation) "oB" = ( /obj/machinery/light/small{ dir = 4 @@ -5373,10 +5373,10 @@ /area/derelict/teleporter) "pr" = ( /turf/simulated/mineral/random, -/area/space) +/area/space/nearstation) "ps" = ( /turf/simulated/floor/plating/airless/asteroid, -/area/space) +/area/space/nearstation) (1,1,1) = {" aa diff --git a/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm b/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm index 7411218a3f0..5d578d212b5 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm @@ -315,7 +315,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "aL" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -356,7 +356,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "aR" = ( /obj/machinery/light/small{ dir = 4 @@ -754,7 +754,7 @@ "bK" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, -/area/space) +/area/space/nearstation) "bL" = ( /obj/machinery/light/small{ dir = 8 @@ -781,7 +781,7 @@ "bP" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bQ" = ( /obj/machinery/shieldwallgen{ active = 2; @@ -803,7 +803,7 @@ }, /obj/structure/disposaloutlet, /turf/simulated/floor/plating, -/area/space) +/area/space/nearstation) "bS" = ( /obj/structure/cable{ d1 = 1; @@ -828,11 +828,11 @@ "bV" = ( /obj/machinery/shieldwallgen, /turf/space, -/area/space) +/area/space/nearstation) "bW" = ( /obj/item/shard, /turf/space, -/area/space) +/area/space/nearstation) (1,1,1) = {" aa diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict2.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict2.dmm index dbe0bc5d16c..95ad761e62c 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/derelict2.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict2.dmm @@ -9,7 +9,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "c" = ( /obj/machinery/door/airlock/external, /turf/simulated/floor/plating, @@ -21,7 +21,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "e" = ( /obj/structure/window/reinforced{ tag = "icon-rwindow (EAST)"; @@ -65,7 +65,7 @@ "k" = ( /obj/structure/window/reinforced, /turf/space, -/area/space) +/area/space/nearstation) "l" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -113,7 +113,7 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "q" = ( /obj/machinery/light/small{ tag = "icon-bulb1 (WEST)"; diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict3.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict3.dmm index 78054b180c1..be313cd7770 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/derelict3.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict3.dmm @@ -11,12 +11,12 @@ "d" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "e" = ( /obj/structure/lattice, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) (1,1,1) = {" a diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm index c7fc01bccd8..adbb913421a 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm @@ -7,7 +7,7 @@ /area/ruin/unpowered) "c" = ( /turf/simulated/mineral, -/area/space) +/area/space/nearstation) "d" = ( /turf/simulated/floor/plating/airless/asteroid, /area/ruin/unpowered) @@ -66,7 +66,7 @@ /area/ruin/unpowered) "r" = ( /turf/simulated/floor/plating/airless/asteroid, -/area/space) +/area/space/nearstation) (1,1,1) = {" a diff --git a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm index bd53ea5a0f1..02ee81bf42d 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm @@ -171,7 +171,7 @@ "D" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "E" = ( /obj/item/stack/rods, /turf/simulated/floor/plating/airless, @@ -205,7 +205,7 @@ "K" = ( /obj/item/stack/sheet/metal, /turf/space, -/area/space) +/area/space/nearstation) "L" = ( /obj/effect/decal/mecha_wreckage/gygax, /turf/simulated/shuttle/floor{ @@ -215,7 +215,7 @@ /area/ruin/powered) "M" = ( /turf/unsimulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "N" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall14"; @@ -231,7 +231,7 @@ "P" = ( /obj/item/stack/rods, /turf/space, -/area/space) +/area/space/nearstation) "Q" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall15"; diff --git a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm index 9a43faaf8ed..8f19d1cc390 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm @@ -11,7 +11,7 @@ tag = "" }, /turf/space, -/area/space) +/area/space/nearstation) "ac" = ( /obj/structure/lattice, /obj/structure/cable{ @@ -21,7 +21,7 @@ tag = "" }, /turf/space, -/area/space) +/area/space/nearstation) "ad" = ( /obj/structure/lattice, /obj/structure/cable{ @@ -30,7 +30,7 @@ icon_state = "2-8" }, /turf/space, -/area/space) +/area/space/nearstation) "ae" = ( /obj/structure/lattice, /obj/item/stack/cable_coil/cut{ @@ -39,7 +39,7 @@ icon_state = "coil_red2" }, /turf/space, -/area/space) +/area/space/nearstation) "af" = ( /obj/structure/lattice, /obj/structure/cable{ @@ -49,7 +49,7 @@ tag = "" }, /turf/space, -/area/space) +/area/space/nearstation) "ag" = ( /turf/simulated/wall, /area/ruin/onehalf/dorms_med) @@ -66,7 +66,7 @@ icon_state = "1-2" }, /turf/space, -/area/space) +/area/space/nearstation) "aj" = ( /turf/unsimulated/floor/plating/airless, /area/ruin/onehalf/hallway) @@ -155,7 +155,7 @@ "aw" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "ax" = ( /obj/structure/lattice, /turf/space, @@ -806,7 +806,7 @@ "bU" = ( /obj/item/stack/sheet/metal, /turf/space, -/area/space) +/area/space/nearstation) "bV" = ( /obj/structure/disposalpipe/segment, /obj/item/stack/rods, @@ -903,11 +903,11 @@ "ck" = ( /obj/structure/girder/reinforced, /turf/unsimulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cl" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, -/area/space) +/area/space/nearstation) "cm" = ( /obj/structure/lattice, /obj/structure/disposalpipe/segment{ @@ -926,7 +926,7 @@ icon_state = "small" }, /turf/space, -/area/space) +/area/space/nearstation) "co" = ( /obj/structure/grille, /obj/structure/window/full/reinforced, @@ -1009,15 +1009,15 @@ "cv" = ( /obj/item/stack/rods, /turf/space, -/area/space) +/area/space/nearstation) "cw" = ( /turf/unsimulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cx" = ( /obj/structure/lattice, /obj/item/stack/sheet/plasteel, /turf/space, -/area/space) +/area/space/nearstation) "cy" = ( /obj/structure/lattice, /obj/item/shard{ @@ -1072,7 +1072,7 @@ "cE" = ( /obj/item/stack/tile/wood, /turf/space, -/area/space) +/area/space/nearstation) "cF" = ( /turf/space, /area/ruin/onehalf/hallway) @@ -1162,7 +1162,7 @@ "cR" = ( /obj/item/stack/sheet/plasteel, /turf/space, -/area/space) +/area/space/nearstation) "cS" = ( /obj/structure/lattice, /obj/structure/cable{ @@ -1223,7 +1223,7 @@ icon_state = "2-8" }, /turf/space, -/area/space) +/area/space/nearstation) "db" = ( /obj/structure/table, /obj/item/flashlight, @@ -1258,12 +1258,12 @@ icon_state = "1-2" }, /turf/space, -/area/space) +/area/space/nearstation) "dg" = ( /obj/structure/girder/reinforced, /obj/item/stack/sheet/plasteel, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dj" = ( /obj/structure/grille, /obj/item/shard, @@ -1352,7 +1352,7 @@ icon_state = "medium" }, /turf/space, -/area/space) +/area/space/nearstation) "dp" = ( /obj/structure/lattice, /obj/structure/cable{ @@ -1368,7 +1368,7 @@ }, /obj/item/stack/rods, /turf/space, -/area/space) +/area/space/nearstation) "dq" = ( /obj/structure/lattice, /obj/structure/cable{ @@ -1384,7 +1384,7 @@ tag = "" }, /turf/space, -/area/space) +/area/space/nearstation) (1,1,1) = {" aa diff --git a/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm b/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm index 54e511a4373..c376fc59361 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm @@ -4,10 +4,10 @@ /area/space) "ab" = ( /turf/simulated/mineral, -/area/space) +/area/space/nearstation) "ac" = ( /turf/simulated/floor/plating/airless/asteroid, -/area/space) +/area/space/nearstation) "ad" = ( /obj/structure/grille, /obj/structure/window/full/reinforced, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm index dd00d8bd38d..96e43773146 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm @@ -5,7 +5,7 @@ "b" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "c" = ( /obj/structure/grille, /turf/simulated/floor/plating, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm index 28df12718e6..016c4cbf447 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm @@ -502,7 +502,7 @@ /area/ruin/unpowered) "bH" = ( /turf/simulated/wall/mineral/titanium, -/area/space) +/area/space/nearstation) "bI" = ( /obj/structure/window/reinforced, /turf/simulated/floor/mineral/plasma, diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm index 37406781007..5dd4050d567 100644 --- a/_maps/map_files/RandomZLevels/academy.dmm +++ b/_maps/map_files/RandomZLevels/academy.dmm @@ -264,7 +264,7 @@ "aP" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "aQ" = ( /obj/machinery/door/airlock/gold{ locked = 1 @@ -1517,7 +1517,7 @@ "et" = ( /obj/singularity/academy, /turf/space, -/area/space) +/area/space/nearstation) "eu" = ( /obj/structure/window/reinforced{ dir = 8 @@ -3716,7 +3716,7 @@ icon_state = "medium" }, /turf/space, -/area/space) +/area/space/nearstation) "jz" = ( /obj/machinery/igniter, /turf/simulated/floor/plating, @@ -4490,12 +4490,7 @@ /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, -/area/space) -"lu" = ( -/turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" - }, -/area/space) +/area/awaymission/academy/academyaft) "lv" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5; @@ -4504,7 +4499,7 @@ /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, -/area/space) +/area/awaymission/academy/academyaft) "lw" = ( /obj/machinery/door/poddoor/shutters{ dir = 2; @@ -15432,10 +15427,10 @@ hM lp hp hp -lu -lu -lu -lu +hp +hp +hp +hp hp hp gZ @@ -15564,8 +15559,8 @@ lq lr lt lv -lu -lu +hp +hp hp hp gZ diff --git a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm index 8f9d8ce8133..2a6fedbbdc7 100644 --- a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm +++ b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm @@ -16,7 +16,7 @@ /obj/item/circular_saw, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "af" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall12"; @@ -46,7 +46,7 @@ "aj" = ( /mob/living/simple_animal/hostile/carp, /turf/space, -/area/space) +/area/space/nearstation) "ak" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall12"; @@ -97,7 +97,7 @@ "as" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "at" = ( /turf/space, /turf/simulated/shuttle/wall{ @@ -2626,14 +2626,6 @@ }, /turf/simulated/floor/engine, /area/awaymission/BMPship/Aft) -"gy" = ( -/turf/space, -/turf/simulated/shuttle/wall{ - tag = "icon-swall_f5"; - icon_state = "swall_f5"; - dir = 2 - }, -/area/space) "gz" = ( /obj/item/shard, /obj/effect/landmark/damageturf, @@ -3273,7 +3265,7 @@ icon_state = "medium" }, /turf/space, -/area/space) +/area/space/nearstation) "ip" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall13"; @@ -3522,12 +3514,6 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/simulated/floor/plating, /area/awaymission) -"jf" = ( -/turf/space, -/area/crew_quarters/bar) -"jg" = ( -/turf/space, -/area/exploration/methlab) "jh" = ( /obj/machinery/door_control{ id = "packerMed"; @@ -9820,7 +9806,7 @@ eW fF ee aW -gy +gg aa aa gP @@ -13998,7 +13984,7 @@ aa aa aa aa -jf +aa aa aa aa @@ -14389,11 +14375,11 @@ aa aa aa aa -jg -jg -jg -jg -jg +aa +aa +aa +aa +aa aa aa aa @@ -14518,12 +14504,12 @@ aa aa aa aa -jg -jg -jg -jg -jg -jg +aa +aa +aa +aa +aa +aa aa aa aa @@ -14648,13 +14634,13 @@ aa aa aa aa -jg -jg -jg -jg -jg -jg -jg +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -14779,9 +14765,9 @@ aa aa aa aa -jg -jg -jg +aa +aa +aa aa aa aa @@ -14908,8 +14894,8 @@ aa aa aa aa -jg -jg +aa +aa aa aa aa @@ -15038,12 +15024,12 @@ aa aa aa aa -jg -jg -jg -jg -jg -jg +aa +aa +aa +aa +aa +aa aa aa aa @@ -15168,12 +15154,12 @@ aa aa aa aa -jg -jg -jg -jg -jg -jg +aa +aa +aa +aa +aa +aa aa aa aa @@ -15300,7 +15286,7 @@ aa aa aa aa -jg +aa aa aa aa diff --git a/_maps/map_files/RandomZLevels/centcomAway.dmm b/_maps/map_files/RandomZLevels/centcomAway.dmm index bd6b40c51de..3fa3d569c09 100644 --- a/_maps/map_files/RandomZLevels/centcomAway.dmm +++ b/_maps/map_files/RandomZLevels/centcomAway.dmm @@ -483,7 +483,7 @@ "bm" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bn" = ( /turf/simulated/floor/plasteel{ icon_state = "vault"; @@ -1264,7 +1264,7 @@ pixel_y = 0 }, /turf/simulated/floor/plating, -/area/space) +/area/awaymission/centcomAway/maint) "dl" = ( /turf/simulated/shuttle/wall{ icon_state = "swallc1"; @@ -1887,12 +1887,6 @@ icon_state = "floor" }, /area/awaymission/centcomAway/general) -"eP" = ( -/turf/space, -/area/awaycontent/a2{ - has_gravity = 1; - name = "MO19 Research" - }) "eQ" = ( /turf/simulated/shuttle/wall{ icon_state = "swall2"; @@ -3595,20 +3589,6 @@ dir = 4 }, /area/awaymission/centcomAway/general) -"iZ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/space) "ja" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -5805,8 +5785,8 @@ icon_state = "propulsion_r"; dir = 1 }, -/turf/space, -/area/space) +/turf/simulated/shuttle/plating, +/area/awaymission/centcomAway/thunderdome) "nV" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ @@ -5818,15 +5798,15 @@ icon_state = "propulsion_l"; dir = 1 }, -/turf/space, -/area/space) +/turf/simulated/shuttle/plating, +/area/awaymission/centcomAway/thunderdome) "nX" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion"; dir = 1 }, -/turf/space, -/area/space) +/turf/simulated/shuttle/plating, +/area/awaymission/centcomAway/thunderdome) "nY" = ( /obj/structure/computerframe, /turf/simulated/floor/plasteel{ @@ -16520,7 +16500,7 @@ eO oa lb eF -iZ +fg eF lV mc @@ -20660,7 +20640,7 @@ cc aa aa aa -eP +aa aa aa aa @@ -20790,7 +20770,7 @@ cc aa aa aa -eP +aa aa aa aa diff --git a/_maps/map_files/RandomZLevels/spacebattle.dmm b/_maps/map_files/RandomZLevels/spacebattle.dmm index 674c8099882..85763845c2b 100644 --- a/_maps/map_files/RandomZLevels/spacebattle.dmm +++ b/_maps/map_files/RandomZLevels/spacebattle.dmm @@ -1,7 +1,7 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /turf/simulated/mineral/random, -/area/space) +/area/space/nearstation) "ab" = ( /turf/space, /area/space) @@ -2617,23 +2617,23 @@ "iq" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "ir" = ( /obj/effect/mob_spawn/human/corpse/syndicatesoldier, /turf/space, -/area/space) +/area/space/nearstation) "is" = ( /turf/simulated/shuttle/wall{ icon_state = "wall3" }, -/area/space) +/area/space/nearstation) "it" = ( /turf/space, /turf/simulated/shuttle/wall{ dir = 1; icon_state = "diagonalWall3" }, -/area/space) +/area/space/nearstation) "iu" = ( /obj/machinery/sleeper, /turf/simulated/floor/plasteel/airless{ @@ -2641,14 +2641,14 @@ icon_state = "floor4"; dir = 10 }, -/area/space) +/area/space/nearstation) "iv" = ( /turf/simulated/floor/plasteel/airless{ tag = "icon-floor4 (SOUTHWEST)"; icon_state = "floor4"; dir = 10 }, -/area/space) +/area/space/nearstation) "iw" = ( /obj/effect/mob_spawn/human/corpse/syndicatesoldier, /turf/simulated/floor/plasteel/airless{ @@ -2656,7 +2656,7 @@ icon_state = "floor4"; dir = 10 }, -/area/space) +/area/space/nearstation) "ix" = ( /obj/machinery/door/airlock/external, /turf/simulated/floor/plasteel/airless{ @@ -2664,7 +2664,7 @@ icon_state = "floor4"; dir = 10 }, -/area/space) +/area/space/nearstation) "iy" = ( /obj/item/stack/rods, /turf/simulated/floor/plasteel/airless{ @@ -2672,7 +2672,7 @@ icon_state = "floor4"; dir = 10 }, -/area/space) +/area/space/nearstation) "iz" = ( /turf/space, /turf/simulated/shuttle/wall{ @@ -2695,7 +2695,7 @@ "iC" = ( /obj/machinery/sleeper, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "iD" = ( /turf/simulated/shuttle/floor{ icon_state = "floor4" @@ -2712,14 +2712,14 @@ /turf/simulated/shuttle/wall{ icon_state = "diagonalWall3" }, -/area/space) +/area/space/nearstation) "iG" = ( /turf/space, /turf/simulated/shuttle/wall{ dir = 4; icon_state = "diagonalWall3" }, -/area/space) +/area/space/nearstation) "iH" = ( /obj/machinery/sleeper, /turf/simulated/shuttle/floor{ @@ -2741,11 +2741,11 @@ dir = 1 }, /turf/simulated/shuttle/plating, -/area/space) +/area/space/nearstation) "iK" = ( /obj/structure/shuttle/engine/propulsion, /turf/simulated/shuttle/plating, -/area/space) +/area/space/nearstation) "iL" = ( /obj/machinery/door/airlock/external, /turf/simulated/shuttle/floor{ @@ -2853,7 +2853,7 @@ /area/awaymission/spacebattle/syndicate6) "jc" = ( /turf/simulated/floor/plating/airless/asteroid, -/area/space) +/area/space/nearstation) "jd" = ( /turf/simulated/wall/mineral/plasma, /area/awaymission/spacebattle/secret) @@ -2898,7 +2898,7 @@ tag = "icon-propulsion_l (WEST)" }, /turf/simulated/shuttle/plating, -/area/space) +/area/space/nearstation) "Jj" = ( /obj/structure/shuttle/engine/propulsion{ tag = "icon-propulsion_l (NORTH)"; diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm index 56df786fab5..add5efa4d1c 100644 --- a/_maps/map_files/RandomZLevels/spacehotel.dmm +++ b/_maps/map_files/RandomZLevels/spacehotel.dmm @@ -2113,30 +2113,30 @@ id = "turbinespace" }, /turf/space, -/area/space) +/area/space/nearstation) "dQ" = ( /turf/unsimulated/wall, -/area/space) +/area/space/nearstation) "dR" = ( /turf/unsimulated/wall/fakeglass{ dir = 8; icon_state = "fakewindows"; opacity = 0 }, -/area/space) +/area/space/nearstation) "dS" = ( /turf/unsimulated/wall/fakeglass{ icon_state = "fakewindows2"; dir = 8 }, -/area/space) +/area/space/nearstation) "dT" = ( /turf/unsimulated/wall/fakeglass{ dir = 4; icon_state = "fakewindows"; opacity = 0 }, -/area/space) +/area/space/nearstation) "dU" = ( /turf/unsimulated/wall/fakeglass{ dir = 8; @@ -2409,7 +2409,7 @@ icon_state = "fakewindows"; dir = 1 }, -/area/space) +/area/space/nearstation) "eC" = ( /obj/machinery/light{ dir = 1 @@ -2425,7 +2425,7 @@ icon_state = "fakewindows2"; dir = 1 }, -/area/space) +/area/space/nearstation) "eF" = ( /obj/structure/closet/crate/can, /turf/unsimulated/floor/carpet, @@ -2463,7 +2463,7 @@ /area/awaymission/spacehotel) "eL" = ( /turf/unsimulated/wall/fakeglass, -/area/space) +/area/space/nearstation) "eM" = ( /turf/unsimulated/floor{ dir = 2; @@ -2684,7 +2684,7 @@ /turf/unsimulated/wall/fakeglass{ icon_state = "fakewindows3" }, -/area/space) +/area/space/nearstation) "fv" = ( /obj/effect/landmark/map_loader/hotel_room{ dir = 1 @@ -3124,11 +3124,6 @@ icon_state = "cafeteria" }, /area/awaymission/spacehotel/kitchen) -"gE" = ( -/turf/unsimulated/floor{ - icon_state = "cafeteria" - }, -/area/awaymission/spacehotel/kitchen) "gF" = ( /obj/machinery/camera{ c_tag = "Room 201"; @@ -3276,11 +3271,6 @@ icon_state = "whiteyellowfull" }, /area/awaymission/spacehotel) -"ha" = ( -/turf/unsimulated/floor{ - icon_state = "whiteyellowfull" - }, -/area/awaymission/spacehotel) "hb" = ( /turf/unsimulated/wall/fakeglass, /area/awaymission/spacehotel) @@ -3683,7 +3673,7 @@ dir = 1; icon_state = "fakewindows2" }, -/area/space) +/area/space/nearstation) "if" = ( /obj/effect/view_portal{ id = "hotel_13" @@ -4132,9 +4122,6 @@ }, /turf/unsimulated/floor/carpet, /area/awaymission/spacehotel) -"jm" = ( -/turf/unsimulated/floor/carpet, -/area/awaymission/spacehotel) "jn" = ( /obj/structure{ desc = "It appears to be similar to a SMES."; @@ -4506,12 +4493,6 @@ /obj/structure/table/reinforced, /turf/unsimulated/floor/carpet, /area/awaymission/spacehotel/reception) -"kn" = ( -/obj/structure/chair{ - dir = 8 - }, -/turf/unsimulated/floor/carpet, -/area/awaymission/spacehotel/reception) "ko" = ( /obj/structure/filingcabinet/filingcabinet, /obj/machinery/light{ @@ -4571,14 +4552,14 @@ dir = 10; icon_state = "fakewindows" }, -/area/space) +/area/space/nearstation) "ky" = ( /turf/unsimulated/wall/fakeglass{ dir = 4; icon_state = "fakewindows"; opacity = 1 }, -/area/space) +/area/space/nearstation) "kz" = ( /obj/machinery/door/airlock/external{ name = "Arrival Airlock" @@ -4590,13 +4571,13 @@ icon_state = "fakewindows"; dir = 8 }, -/area/space) +/area/space/nearstation) "kB" = ( /turf/unsimulated/wall/fakeglass{ icon_state = "fakewindows"; dir = 6 }, -/area/space) +/area/space/nearstation) "kC" = ( /turf/simulated/shuttle/wall{ icon_state = "swall_s6"; @@ -4650,19 +4631,19 @@ icon_state = "swall_s6"; dir = 2 }, -/area/space) +/area/space/nearstation) "kL" = ( /turf/simulated/shuttle/wall{ icon_state = "swall12"; dir = 2 }, -/area/space) +/area/space/nearstation) "kM" = ( /turf/simulated/shuttle/wall{ icon_state = "swall_s10"; dir = 2 }, -/area/space) +/area/space/nearstation) "kN" = ( /turf/unsimulated/wall/fakeglass{ icon_state = "fakewindows3" @@ -4720,22 +4701,22 @@ icon_state = "swallc4"; dir = 2 }, -/area/space) +/area/space/nearstation) "kX" = ( /turf/simulated/shuttle/wall/interior, -/area/space) +/area/space/nearstation) "kY" = ( /turf/simulated/shuttle/wall{ icon_state = "swall3" }, -/area/space) +/area/space/nearstation) "kZ" = ( /obj/structure/shuttle/engine/propulsion{ dir = 4; icon_state = "propulsion" }, /turf/simulated/shuttle/plating, -/area/space) +/area/space/nearstation) "la" = ( /obj/structure/chair{ dir = 8 @@ -4787,13 +4768,13 @@ icon_state = "swall_s5"; dir = 2 }, -/area/space) +/area/space/nearstation) "li" = ( /turf/simulated/shuttle/wall{ icon_state = "swallc1"; dir = 2 }, -/area/space) +/area/space/nearstation) "lj" = ( /turf/simulated/shuttle/wall{ icon_state = "swall_s9"; @@ -4805,7 +4786,7 @@ icon_state = "swall_s9"; dir = 2 }, -/area/space) +/area/space/nearstation) "ll" = ( /obj/machinery/shower{ dir = 8 @@ -9756,7 +9737,7 @@ cl jF jT kj -kn +kj jT kv dS @@ -10649,7 +10630,7 @@ gh eb gp gw -gE +gD gN gT gD @@ -11052,7 +11033,7 @@ cl iw iI eG -jm +eb jH jV cl @@ -18972,7 +18953,7 @@ dX gI gP gX -ha +gX hq cl hB diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm index cc1767248cf..2f225fea612 100644 --- a/_maps/map_files/RandomZLevels/stationCollision.dmm +++ b/_maps/map_files/RandomZLevels/stationCollision.dmm @@ -41,7 +41,7 @@ "ak" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "al" = ( /obj/machinery/door/window/westright, /turf/simulated/floor/plasteel/airless, @@ -256,10 +256,10 @@ /turf/simulated/shuttle/wall{ icon_state = "wall3" }, -/area/space) +/area/space/nearstation) "ba" = ( /turf/simulated/wall, -/area/space) +/area/space/nearstation) "bb" = ( /obj/machinery/door/airlock/engineering, /turf/simulated/floor/plasteel/airless, diff --git a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm index 9a7b73800c2..6a59267ed05 100644 --- a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm @@ -13,12 +13,6 @@ power_light = 0; poweralm = 0 }) -"ab" = ( -/turf/unsimulated/wall{ - icon_state = "rock"; - name = "rock" - }, -/area/space) "ac" = ( /turf/simulated/mineral/random/labormineral, /area/awaycontent/a7{ @@ -6998,7 +6992,10 @@ dir = 9; icon_state = "warnwhite" }, -/area/space) +/area/awaycontent/a5{ + has_gravity = 1; + name = "UO45 Research" + }) "lc" = ( /obj/structure/sink{ pixel_y = 25 @@ -27794,10 +27791,10 @@ aa aa "} (72,1,1) = {" -ab -ab -ab -ab +aa +aa +aa +aa aa aa aa @@ -27944,10 +27941,10 @@ aa aa "} (73,1,1) = {" -ab -ab -ab -ab +aa +aa +aa +aa aa aa aa diff --git a/_maps/map_files/RandomZLevels/wildwest.dmm b/_maps/map_files/RandomZLevels/wildwest.dmm index a60988466a1..f5f7d96e4ea 100644 --- a/_maps/map_files/RandomZLevels/wildwest.dmm +++ b/_maps/map_files/RandomZLevels/wildwest.dmm @@ -204,7 +204,7 @@ /area/awaymission/wwvaultdoors) "aG" = ( /turf/simulated/mineral, -/area/space) +/area/space/nearstation) "aH" = ( /obj/structure/cable{ d2 = 8; @@ -268,7 +268,7 @@ name = "Blocker" }, /turf/space, -/area/space) +/area/space/nearstation) "aQ" = ( /obj/effect/forcefield{ desc = "You can't get in. Heh."; @@ -276,7 +276,7 @@ name = "Blocker" }, /turf/simulated/mineral, -/area/space) +/area/space/nearstation) "aR" = ( /obj/effect/forcefield{ desc = "You can't get in. Heh."; @@ -349,7 +349,7 @@ /area/awaymission/wwmines) "be" = ( /turf/simulated/wall/mineral/sandstone, -/area/space) +/area/space/nearstation) "bf" = ( /obj/structure/largecrate, /turf/simulated/floor/plating, @@ -393,7 +393,7 @@ "bp" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bq" = ( /obj/effect/mine/dnascramble, /obj/item/ammo_box/c10mm, @@ -431,14 +431,14 @@ icon_state = "fwindow" }, /turf/space, -/area/space) +/area/space/nearstation) "bx" = ( /obj/structure/window/reinforced{ tag = "icon-fwindow"; icon_state = "fwindow" }, /turf/space, -/area/space) +/area/space/nearstation) "by" = ( /obj/structure/closet/secure_closet/freezer/fridge, /turf/simulated/floor/plasteel{ @@ -605,7 +605,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bV" = ( /obj/structure/window/reinforced{ tag = "icon-fwindow (NORTH)"; @@ -668,7 +668,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "cb" = ( /obj/machinery/light/small{ tag = "icon-bulb1 (WEST)"; @@ -736,7 +736,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "ck" = ( /turf/simulated/floor/wood, /area/awaymission/wwgov) @@ -810,7 +810,7 @@ /obj/structure/lattice, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "cs" = ( /obj/effect/decal/cleanable/blood/splatter, /turf/simulated/floor/carpet, @@ -981,7 +981,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "cT" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -1075,7 +1075,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "dg" = ( /obj/machinery/light/small{ tag = "icon-bulb1 (WEST)"; @@ -1701,7 +1701,7 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "eM" = ( /obj/structure/lattice, /obj/structure/window/reinforced{ @@ -1710,7 +1710,7 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "eN" = ( /obj/structure/window/reinforced{ tag = "icon-fwindow (EAST)"; @@ -1739,7 +1739,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "eP" = ( /obj/structure/window/reinforced{ tag = "icon-fwindow (NORTH)"; @@ -1752,7 +1752,7 @@ dir = 8 }, /turf/space, -/area/space) +/area/space/nearstation) "eQ" = ( /obj/structure/window/reinforced{ tag = "icon-fwindow (EAST)"; @@ -2080,7 +2080,7 @@ /area/awaymission/wwrefine) "fI" = ( /turf/simulated/floor/plasteel, -/area/space) +/area/space/nearstation) "fJ" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/chair/office/dark{ @@ -2329,7 +2329,7 @@ icon_state = "fwindow" }, /turf/space, -/area/space) +/area/space/nearstation) "gp" = ( /obj/structure/window/reinforced{ tag = "icon-fwindow (WEST)"; @@ -2341,7 +2341,7 @@ icon_state = "fwindow" }, /turf/space, -/area/space) +/area/space/nearstation) "gq" = ( /obj/item/paper{ info = "The syndicate have invaded. Their ships appeared out of nowhere and now they likely intend to kill us all and take everything. On the off-chance that the Vault may grant us sanctuary, many of us have decided to force our way inside and bolt the door, taking as many provisions with us as we can carry. In case you find this, send for help immediately and open the Vault. Find us inside."; @@ -2422,7 +2422,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "gC" = ( /obj/item/gun/projectile/shotgun, /turf/simulated/floor/wood, @@ -2473,7 +2473,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/space) +/area/space/nearstation) "gK" = ( /obj/item/gun/projectile/revolver/russian, /turf/simulated/floor/wood, diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 7d2cc96b6fe..7596727d426 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -5,7 +5,7 @@ "aab" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "aac" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall12"; @@ -696,7 +696,7 @@ "abM" = ( /obj/structure/lattice, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "abN" = ( /turf/simulated/wall/r_wall, /area/security/permabrig) @@ -714,7 +714,7 @@ }, /obj/structure/lattice, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "abQ" = ( /turf/simulated/shuttle/wall{ dir = 4; @@ -2670,7 +2670,7 @@ pixel_x = -30 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "afn" = ( /obj/structure/chair{ dir = 8 @@ -2937,7 +2937,7 @@ /area/security/podbay) "afO" = ( /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "afP" = ( /obj/machinery/door/window{ dir = 4; @@ -3037,7 +3037,7 @@ "afX" = ( /obj/structure/grille, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "afY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -6541,11 +6541,11 @@ /obj/structure/grille, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "alw" = ( /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "alx" = ( /obj/item/broken_bottle, /turf/simulated/shuttle/floor4/vox, @@ -6955,7 +6955,7 @@ /obj/structure/grille/broken, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "ami" = ( /obj/structure/chair{ dir = 4 @@ -7402,7 +7402,7 @@ /obj/structure/lattice, /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "amX" = ( /obj/structure/reagent_dispensers/watertank, /obj/item/reagent_containers/glass/bucket, @@ -8851,7 +8851,7 @@ "apo" = ( /obj/structure/grille/broken, /turf/space, -/area/space) +/area/space/nearstation) "app" = ( /obj/structure/cable{ icon_state = "0-4"; @@ -9371,7 +9371,7 @@ icon_state = "brokengrille" }, /turf/space, -/area/space) +/area/space/nearstation) "aqq" = ( /obj/item/soap, /turf/simulated/floor/plating, @@ -13088,7 +13088,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "avN" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -13973,7 +13973,7 @@ /obj/structure/lattice, /obj/item/stack/cable_coil, /turf/space, -/area/space) +/area/space/nearstation) "axo" = ( /obj/structure/chair{ dir = 4 @@ -14544,7 +14544,7 @@ /obj/structure/lattice, /obj/structure/grille/broken, /turf/space, -/area/space) +/area/space/nearstation) "ayj" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -15172,7 +15172,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "azc" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable, @@ -15296,7 +15296,7 @@ "azo" = ( /obj/item/clothing/mask/gas/clown_hat, /turf/space, -/area/space) +/area/space/nearstation) "azp" = ( /obj/machinery/door/airlock{ name = "Bathroom"; @@ -16451,7 +16451,7 @@ "aBm" = ( /obj/item/stack/rods, /turf/space, -/area/space) +/area/space/nearstation) "aBn" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -16538,11 +16538,11 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aBy" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "aBz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -16741,7 +16741,7 @@ /obj/item/paper/crumpled, /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "aBU" = ( /obj/machinery/light_construct/small{ dir = 8 @@ -16788,7 +16788,7 @@ "aBZ" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "aCa" = ( /obj/machinery/ai_status_display{ pixel_x = 32 @@ -18256,7 +18256,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "aEN" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plating, @@ -21774,7 +21774,7 @@ /area/maintenance/electrical) "aMr" = ( /turf/simulated/wall, -/area/space) +/area/space/nearstation) "aMs" = ( /turf/simulated/wall, /area/hallway/secondary/entry) @@ -22951,7 +22951,7 @@ /obj/structure/lattice, /obj/structure/closet, /turf/space, -/area/space) +/area/space/nearstation) "aOY" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -29941,7 +29941,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bco" = ( /obj/structure/filingcabinet, /turf/simulated/floor/wood, @@ -32674,7 +32674,7 @@ amount = 10 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bho" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -34583,7 +34583,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "bkJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9; @@ -58222,7 +58222,7 @@ pixel_y = 32 }, /turf/space, -/area/space) +/area/space/nearstation) "cbH" = ( /obj/machinery/power/apc{ dir = 1; @@ -68333,7 +68333,7 @@ "csj" = ( /obj/structure/girder, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "csk" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, @@ -71808,7 +71808,7 @@ dir = 4 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cxZ" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/cobweb, @@ -72715,7 +72715,7 @@ dir = 8 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "czF" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -74205,7 +74205,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cCt" = ( /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel{ @@ -80476,7 +80476,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cNF" = ( /obj/structure/cable{ icon_state = "0-4"; @@ -81482,7 +81482,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cPx" = ( /obj/structure/cable, /turf/space, @@ -81908,7 +81908,7 @@ level = 2 }, /turf/space, -/area/space) +/area/space/nearstation) "cQq" = ( /obj/structure/cable{ icon_state = "0-2"; @@ -83363,7 +83363,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cSF" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -83371,7 +83371,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cSG" = ( /obj/structure/table/reinforced, /obj/machinery/photocopier/faxmachine{ @@ -83402,7 +83402,7 @@ icon_state = "1-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cSJ" = ( /obj/structure/cable{ d1 = 1; @@ -83431,7 +83431,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cSN" = ( /obj/structure/chair/stool, /obj/structure/cable/yellow{ @@ -83854,7 +83854,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cTy" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -83925,7 +83925,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cTE" = ( /obj/machinery/power/tesla_coil{ anchored = 1 @@ -83936,7 +83936,7 @@ icon_state = "0-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cTF" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -83949,7 +83949,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cTG" = ( /obj/machinery/door/airlock/maintenance{ name = "Engineering Shuttle"; @@ -84100,7 +84100,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cTS" = ( /obj/effect/landmark/burnturf, /turf/simulated/floor/plating, @@ -84369,7 +84369,7 @@ icon_state = "0-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cUm" = ( /obj/structure/reagent_dispensers/fueltank, /obj/structure/cable{ @@ -84660,7 +84660,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cUN" = ( /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4; @@ -84685,7 +84685,7 @@ icon_state = "1-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cUP" = ( /obj/structure/window/reinforced{ dir = 8 @@ -84714,7 +84714,7 @@ icon_state = "1-8" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cUR" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -84753,7 +84753,7 @@ level = 2 }, /turf/space, -/area/space) +/area/space/nearstation) "cUW" = ( /obj/machinery/atmospherics/unary/outlet_injector{ dir = 8; @@ -86757,7 +86757,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "cYA" = ( /obj/structure/cable{ icon_state = "0-4"; @@ -87133,7 +87133,7 @@ level = 2 }, /turf/space, -/area/space) +/area/space/nearstation) "cZi" = ( /obj/machinery/atmospherics/unary/outlet_injector{ dir = 8; @@ -87624,7 +87624,7 @@ dir = 10 }, /turf/space, -/area/space) +/area/space/nearstation) "dae" = ( /obj/structure/door_assembly/door_assembly_mai, /turf/simulated/floor/plating, @@ -88087,7 +88087,7 @@ }, /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, /turf/space, -/area/space) +/area/space/nearstation) "dbb" = ( /turf/simulated/floor/engine{ carbon_dioxide = 0; @@ -88434,7 +88434,7 @@ /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/heat_exchanging, /turf/space, -/area/space) +/area/space/nearstation) "dbJ" = ( /obj/structure/cable{ d1 = 1; @@ -88509,7 +88509,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "dbQ" = ( /obj/machinery/power/emitter{ anchored = 1; @@ -88554,7 +88554,7 @@ /obj/structure/grille, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "dbU" = ( /obj/structure/rack, /obj/item/clothing/suit/fire/firefighter, @@ -88588,7 +88588,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "dbY" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -88611,13 +88611,13 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "dca" = ( /obj/machinery/atmospherics/unary/passive_vent{ dir = 8 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dcb" = ( /turf/simulated/floor/plasteel{ icon_state = "blue"; @@ -88667,7 +88667,7 @@ d2 = 2 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dcg" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -89007,7 +89007,7 @@ }, /obj/machinery/atmospherics/pipe/simple/heat_exchanging, /turf/space, -/area/space) +/area/space/nearstation) "dcT" = ( /obj/machinery/atmospherics/unary/outlet_injector{ dir = 8; @@ -89342,12 +89342,12 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "ddD" = ( /obj/item/wrench, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "ddE" = ( /obj/structure/cable{ d1 = 1; @@ -89364,7 +89364,7 @@ pixel_y = 32 }, /turf/space, -/area/space) +/area/space/nearstation) "ddG" = ( /obj/machinery/field/generator, /turf/simulated/floor/plating, @@ -89421,7 +89421,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "ddN" = ( /obj/structure/cable, /turf/space, @@ -89434,7 +89434,7 @@ }, /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "ddP" = ( /obj/structure/cable{ d1 = 2; @@ -89559,7 +89559,7 @@ tag = "icon-catwalk0"; icon_state = "catwalk0" }, -/area/space) +/area/space/nearstation) "ddY" = ( /obj/structure/shuttle/engine/propulsion/burst{ dir = 8 @@ -89705,7 +89705,7 @@ }, /obj/machinery/atmospherics/pipe/simple/heat_exchanging, /turf/space, -/area/space) +/area/space/nearstation) "dem" = ( /turf/simulated/floor/engine{ carbon_dioxide = 50000; @@ -90803,7 +90803,7 @@ anchored = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dgF" = ( /turf/simulated/shuttle/wall{ icon_state = "swall1"; @@ -90848,7 +90848,7 @@ pixel_y = 32 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dgK" = ( /obj/effect/spawner/lootdrop/trade_sol/sec, /obj/structure/closet, @@ -90992,7 +90992,7 @@ /obj/structure/lattice, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "dhd" = ( /obj/machinery/computer/shuttle/engineering, /turf/simulated/shuttle/floor{ @@ -91661,7 +91661,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "div" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -91961,21 +91961,21 @@ level = 2 }, /turf/space, -/area/space) +/area/space/nearstation) "diV" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ level = 2 }, /turf/space, -/area/space) +/area/space/nearstation) "diW" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, /turf/space, -/area/space) +/area/space/nearstation) "diX" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/green{ @@ -91985,14 +91985,14 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "diY" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "diZ" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -92002,7 +92002,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "dja" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ @@ -92012,26 +92012,26 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "djb" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 4 }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "djc" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "djd" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "dje" = ( /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ @@ -92170,7 +92170,7 @@ state = 2 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "djr" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plating, @@ -92237,7 +92237,7 @@ /obj/structure/lattice, /obj/item/wirecutters, /turf/space, -/area/space) +/area/space/nearstation) "djz" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -92304,7 +92304,7 @@ /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/space, -/area/space) +/area/space/nearstation) "djF" = ( /obj/structure/cable{ d1 = 1; @@ -92463,7 +92463,7 @@ /obj/structure/lattice, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "djU" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/structure/grille, @@ -92843,19 +92843,19 @@ "dkz" = ( /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dkA" = ( /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dkB" = ( /obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dkC" = ( /obj/item/crowbar, /turf/space, -/area/space) +/area/space/nearstation) "dkD" = ( /obj/machinery/newscaster{ pixel_y = 32 @@ -93262,18 +93262,18 @@ }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dlf" = ( /obj/item/wrench, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dlg" = ( /obj/machinery/the_singularitygen/tesla{ anchored = 1 }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dlh" = ( /obj/machinery/door/airlock/external{ frequency = 1450; @@ -93504,19 +93504,19 @@ "dlE" = ( /obj/item/weldingtool, /turf/space, -/area/space) +/area/space/nearstation) "dlF" = ( /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dlG" = ( /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dlH" = ( /obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dlI" = ( /obj/structure/lattice, /obj/machinery/atmospherics/binary/pump/on, @@ -93676,7 +93676,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/purple, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "dlZ" = ( /obj/structure/chair{ dir = 8 @@ -93821,7 +93821,7 @@ "dmo" = ( /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "dmp" = ( /obj/structure/table, /obj/item/weldingtool, @@ -93960,7 +93960,7 @@ /area/turret_protected/aisat_interior) "dmD" = ( /turf/simulated/wall/r_wall/coated, -/area/space) +/area/space/nearstation) "dmE" = ( /obj/machinery/door/poddoor{ id_tag = "auxiliaryturbinevent"; @@ -93972,7 +93972,7 @@ /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/purple, /turf/space, -/area/space) +/area/space/nearstation) "dmG" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -94054,7 +94054,7 @@ "dmN" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dmO" = ( /obj/structure/cable{ d2 = 2; @@ -94193,14 +94193,14 @@ "dmW" = ( /obj/structure/transit_tube, /turf/space, -/area/space) +/area/space/nearstation) "dmX" = ( /obj/structure/transit_tube{ icon_state = "E-W-Pass" }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "dmY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ @@ -94246,7 +94246,7 @@ dir = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dne" = ( /obj/structure/cable, /obj/machinery/power/turbine, @@ -94384,7 +94384,7 @@ }, /obj/structure/disposaloutlet, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dnq" = ( /obj/structure/cable{ d1 = 1; @@ -95152,7 +95152,7 @@ tag = "icon-catwalk0"; icon_state = "catwalk0" }, -/area/space) +/area/space/nearstation) "doF" = ( /turf/simulated/floor/plating, /area/toxins/launch{ @@ -96444,7 +96444,7 @@ dir = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "gMZ" = ( /obj/machinery/atmospherics/pipe/simple/insulated{ dir = 6 @@ -96495,7 +96495,7 @@ dir = 1 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "iJf" = ( /obj/machinery/atmospherics/pipe/simple/insulated, /obj/machinery/door/poddoor{ @@ -96558,13 +96558,13 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "nMi" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 }, /turf/space, -/area/space) +/area/space/nearstation) "oZV" = ( /obj/machinery/door/airlock/centcom{ id_tag = "adminshuttle"; @@ -96592,7 +96592,7 @@ dir = 10 }, /turf/space, -/area/space) +/area/space/nearstation) "qgG" = ( /obj/machinery/door/airlock/external{ id_tag = "s_docking_airlock"; @@ -96607,7 +96607,7 @@ "qUv" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging, /turf/space, -/area/space) +/area/space/nearstation) "rEw" = ( /obj/machinery/computer/shuttle/admin{ name = "NTV Argos shuttle console" @@ -96640,7 +96640,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "uBM" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8; @@ -96656,21 +96656,21 @@ dir = 5 }, /turf/space, -/area/space) +/area/space/nearstation) "vup" = ( /obj/machinery/atmospherics/pipe/simple/insulated{ dir = 10 }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "xAw" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 8 }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "xWg" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ tag = "icon-intact (SOUTHEAST)"; @@ -96678,7 +96678,7 @@ dir = 6 }, /turf/space, -/area/space) +/area/space/nearstation) "yeP" = ( /obj/machinery/door_control{ id = "adminshuttleblast"; diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index 3d298fc02eb..4dd47bcb4be 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -5,7 +5,7 @@ "ab" = ( /obj/item/trash/cheesie, /turf/space, -/area/space) +/area/space/nearstation) "ac" = ( /obj/docking_port/stationary{ dir = 8; @@ -412,7 +412,7 @@ "aT" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "aU" = ( /obj/structure/reagent_dispensers/watertank/high, /turf/simulated/floor/plating, @@ -457,28 +457,28 @@ icon_state = "swall_s6"; dir = 2 }, -/area/space) +/area/space/nearstation) "bb" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall14"; icon_state = "swall14"; dir = 2 }, -/area/space) +/area/space/nearstation) "bc" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall12"; icon_state = "swall12"; dir = 2 }, -/area/space) +/area/space/nearstation) "bd" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2 }, -/area/space) +/area/space/nearstation) "be" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall14"; @@ -503,7 +503,7 @@ icon_state = "swall7"; dir = 2 }, -/area/space) +/area/space/nearstation) "bj" = ( /turf/simulated/shuttle/floor{ icon_state = "floor3" @@ -513,12 +513,12 @@ icon_state = "swall_f9"; dir = 2 }, -/area/space) +/area/space/nearstation) "bk" = ( /turf/simulated/shuttle/floor{ icon_state = "floor3" }, -/area/space) +/area/space/nearstation) "bl" = ( /turf/simulated/shuttle/floor{ icon_state = "floor3" @@ -528,14 +528,14 @@ icon_state = "swall_f5"; dir = 2 }, -/area/space) +/area/space/nearstation) "bm" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall11"; icon_state = "swall11"; dir = 2 }, -/area/space) +/area/space/nearstation) "bn" = ( /obj/machinery/vending/hydroseeds, /turf/simulated/floor/mineral/titanium/purple, @@ -549,7 +549,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor3" }, -/area/space) +/area/space/nearstation) "bq" = ( /turf/simulated/floor/mineral/titanium/purple, /area/shuttle/freegolem) @@ -572,7 +572,7 @@ icon_state = "swall_f10"; dir = 2 }, -/area/space) +/area/space/nearstation) "bt" = ( /obj/machinery/light{ dir = 1; @@ -589,7 +589,7 @@ icon_state = "swall_f6"; dir = 2 }, -/area/space) +/area/space/nearstation) "bv" = ( /obj/machinery/light{ dir = 1; @@ -608,21 +608,21 @@ icon_state = "swall_s5"; dir = 2 }, -/area/space) +/area/space/nearstation) "by" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall13"; icon_state = "swall13"; dir = 2 }, -/area/space) +/area/space/nearstation) "bz" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2 }, -/area/space) +/area/space/nearstation) "bA" = ( /obj/machinery/vending/coffee/free, /turf/simulated/floor/mineral/titanium/purple, @@ -793,7 +793,7 @@ /obj/structure/lattice, /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "bX" = ( /obj/machinery/power/solar, /obj/structure/cable{ @@ -803,7 +803,7 @@ /turf/simulated/floor/plasteel/airless{ icon_state = "solarpanel" }, -/area/space) +/area/space/nearstation) "bY" = ( /obj/structure/cable{ d1 = 2; @@ -817,7 +817,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bZ" = ( /obj/machinery/power/solar, /obj/structure/cable{ @@ -827,7 +827,7 @@ /turf/simulated/floor/plasteel/airless{ icon_state = "solarpanel" }, -/area/space) +/area/space/nearstation) "ca" = ( /obj/structure/cable{ d1 = 2; @@ -846,12 +846,12 @@ icon_state = "1-2" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cb" = ( /obj/structure/lattice, /obj/structure/grille/broken, /turf/space, -/area/space) +/area/space/nearstation) "cc" = ( /obj/machinery/camera{ c_tag = "Telecomms North Solars"; @@ -859,7 +859,7 @@ network = list("Telecomms") }, /turf/space, -/area/space) +/area/space/nearstation) "cd" = ( /obj/structure/cable{ d1 = 1; @@ -868,7 +868,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ce" = ( /obj/structure/cable{ d1 = 4; @@ -878,7 +878,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cf" = ( /obj/structure/cable{ d1 = 2; @@ -892,7 +892,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cg" = ( /obj/structure/cable{ d1 = 1; @@ -901,7 +901,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ch" = ( /obj/structure/cable{ d1 = 1; @@ -909,7 +909,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ci" = ( /obj/structure/lattice, /obj/structure/grille, @@ -919,7 +919,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cj" = ( /obj/structure/lattice, /obj/structure/grille, @@ -931,7 +931,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ck" = ( /obj/structure/grille, /obj/structure/cable{ @@ -954,7 +954,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cl" = ( /obj/structure/lattice, /obj/structure/grille, @@ -965,7 +965,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cm" = ( /obj/structure/lattice, /obj/structure/grille, @@ -976,10 +976,10 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cn" = ( /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "co" = ( /obj/structure/lattice, /obj/structure/grille, @@ -990,7 +990,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cp" = ( /turf/simulated/wall/r_wall, /area/turret_protected/tcomsat) @@ -1006,7 +1006,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "cs" = ( /obj/structure/lattice, /turf/space, @@ -1619,7 +1619,7 @@ dir = 4 }, /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "dP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -1631,13 +1631,13 @@ icon_state = "1-2" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dR" = ( /obj/structure/disposaloutlet{ dir = 4 @@ -1646,7 +1646,7 @@ dir = 8 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "dS" = ( /obj/structure/window/reinforced{ dir = 8 @@ -1704,7 +1704,7 @@ /turf/simulated/floor/plasteel/airless{ icon_state = "solarpanel" }, -/area/space) +/area/space/nearstation) "dY" = ( /obj/structure/cable{ d1 = 1; @@ -1720,7 +1720,7 @@ /turf/simulated/floor/plasteel/airless{ icon_state = "solarpanel" }, -/area/space) +/area/space/nearstation) "ea" = ( /obj/machinery/door/window/brigdoor{ dir = 8; @@ -2043,7 +2043,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "eE" = ( /obj/structure/cable{ d1 = 1; @@ -2064,7 +2064,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "eF" = ( /obj/structure/cable{ d1 = 2; @@ -2073,7 +2073,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "eG" = ( /obj/structure/window/reinforced{ dir = 8 @@ -2151,7 +2151,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "eO" = ( /obj/structure/cable{ d1 = 2; @@ -2173,7 +2173,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "eP" = ( /obj/structure/cable{ d1 = 1; @@ -2188,7 +2188,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "eQ" = ( /obj/structure/table/wood, /obj/item/storage/firstaid/brute, @@ -2334,7 +2334,7 @@ network = list("Telecomms") }, /turf/space, -/area/space) +/area/space/nearstation) "fd" = ( /obj/structure/window/reinforced{ dir = 4 @@ -2450,7 +2450,7 @@ network = list("Telecomms") }, /turf/space, -/area/space) +/area/space/nearstation) "fo" = ( /obj/structure/cable{ d1 = 2; @@ -2464,7 +2464,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "fp" = ( /obj/structure/table/wood, /obj/item/storage/firstaid/adv, @@ -2491,7 +2491,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "fr" = ( /obj/structure/window/reinforced{ dir = 8 @@ -2717,7 +2717,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "fJ" = ( /obj/machinery/telecomms/bus/preset_one, /turf/simulated/floor/plasteel{ @@ -3481,7 +3481,7 @@ }, /obj/structure/grille, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "hC" = ( /obj/structure/cable{ d1 = 1; @@ -3790,7 +3790,7 @@ /area/tcommsat/entrance) "ii" = ( /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "ij" = ( /obj/structure/cable, /obj/machinery/power/terminal{ @@ -3845,7 +3845,7 @@ }, /obj/machinery/power/tracker, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "iu" = ( /obj/structure/cable{ d1 = 1; @@ -3860,7 +3860,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "iv" = ( /obj/structure/cable{ d1 = 4; @@ -3871,7 +3871,7 @@ }, /obj/structure/grille, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "iw" = ( /obj/machinery/computer/teleporter, /turf/simulated/floor/plating, @@ -3895,7 +3895,7 @@ }, /obj/structure/grille, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "iA" = ( /obj/structure/grille, /obj/structure/cable{ @@ -3917,7 +3917,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "iB" = ( /obj/structure/cable{ d1 = 1; @@ -3932,7 +3932,7 @@ tag = "" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "iC" = ( /obj/structure/cable{ d1 = 1; @@ -3952,7 +3952,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "iD" = ( /obj/machinery/camera{ c_tag = "Telecomms South Solars"; @@ -3960,7 +3960,7 @@ network = list("Telecomms") }, /turf/space, -/area/space) +/area/space/nearstation) "iF" = ( /turf/simulated/wall/r_wall, /area/AIsattele) diff --git a/_maps/map_files/cyberiad/z4.dmm b/_maps/map_files/cyberiad/z4.dmm index e533422b39a..7e2b21f0e3a 100644 --- a/_maps/map_files/cyberiad/z4.dmm +++ b/_maps/map_files/cyberiad/z4.dmm @@ -5,7 +5,7 @@ "ab" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "ac" = ( /turf/simulated/wall, /area/constructionsite/hallway/port) @@ -554,10 +554,10 @@ /area/constructionsite/hallway/starboard) "bC" = ( /turf/simulated/wall, -/area/space) +/area/space/nearstation) "bD" = ( /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "bE" = ( /obj/machinery/light{ dir = 1; @@ -850,14 +850,14 @@ tag = "icon-catwalk6"; icon_state = "catwalk6" }, -/area/space) +/area/space/nearstation) "cm" = ( /turf/simulated/floor/plating/airless, /turf/simulated/floor/plating/airless/catwalk{ tag = "icon-catwalk12"; icon_state = "catwalk12" }, -/area/space) +/area/space/nearstation) "cn" = ( /turf/simulated/floor/plating/airless, /turf/simulated/floor/plating/airless/catwalk{ @@ -878,7 +878,7 @@ tag = "icon-catwalk10"; icon_state = "catwalk10" }, -/area/space) +/area/space/nearstation) "cq" = ( /obj/structure/inflatable/door, /turf/simulated/floor/plasteel/airless, @@ -889,7 +889,7 @@ tag = "icon-catwalk3"; icon_state = "catwalk3" }, -/area/space) +/area/space/nearstation) "cs" = ( /turf/simulated/floor/plating/airless, /turf/simulated/floor/plating/airless/catwalk{ @@ -1164,7 +1164,7 @@ tag = "icon-catwalk1"; icon_state = "catwalk1" }, -/area/space) +/area/space/nearstation) "cU" = ( /obj/structure/lattice, /turf/space, @@ -1208,7 +1208,7 @@ /area/engiestation) "dc" = ( /turf/simulated/wall/r_wall, -/area/space) +/area/space/nearstation) "dd" = ( /obj/machinery/power/solar, /obj/structure/cable{ @@ -2024,7 +2024,7 @@ tag = "icon-catwalk9"; icon_state = "catwalk9" }, -/area/space) +/area/space/nearstation) "et" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "0"; @@ -2336,7 +2336,7 @@ tag = "icon-catwalk2"; icon_state = "catwalk2" }, -/area/space) +/area/space/nearstation) "fj" = ( /obj/machinery/vending/cola, /turf/simulated/floor/plasteel{ @@ -2640,7 +2640,7 @@ tag = "icon-catwalk5"; icon_state = "catwalk5" }, -/area/space) +/area/space/nearstation) "fR" = ( /obj/item/lighter/zippo, /turf/simulated/floor/plating/airless, @@ -2648,7 +2648,7 @@ tag = "icon-catwalk8"; icon_state = "catwalk8" }, -/area/space) +/area/space/nearstation) "fS" = ( /obj/machinery/shower{ dir = 4; @@ -2746,7 +2746,7 @@ tag = "icon-catwalk4"; icon_state = "catwalk4" }, -/area/space) +/area/space/nearstation) "gd" = ( /obj/structure/lattice, /obj/structure/disposaloutlet{ @@ -2756,18 +2756,18 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "ge" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" }, /turf/space, -/area/space) +/area/space/nearstation) "gf" = ( /obj/structure/grille, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "gg" = ( /obj/item/radio/intercom{ dir = 1; @@ -4077,7 +4077,7 @@ /area/constructionsite/engineering) "jh" = ( /turf/simulated/mineral, -/area/space) +/area/space/nearstation) "ji" = ( /obj/structure/cable{ d1 = 1; diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm index a75ca9403e0..59389f18e75 100644 --- a/_maps/map_files/cyberiad/z6.dmm +++ b/_maps/map_files/cyberiad/z6.dmm @@ -7,7 +7,7 @@ amount = 2 }, /turf/space, -/area/space) +/area/space/nearstation) "ac" = ( /obj/machinery/power/solar/fake, /turf/simulated/floor/plasteel/airless{ @@ -17,17 +17,17 @@ "ad" = ( /turf/space, /turf/simulated/floor/plating/airless/catwalk, -/area/space) +/area/space/nearstation) "ae" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "af" = ( /obj/machinery/power/solar/fake, /turf/simulated/floor/plasteel/airless{ icon_state = "solarpanel" }, -/area/space) +/area/space/nearstation) "ag" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -41,7 +41,7 @@ icon_state = "brokengrille" }, /turf/space, -/area/space) +/area/space/nearstation) "aj" = ( /obj/machinery/power/terminal, /turf/simulated/floor/plating, @@ -55,7 +55,7 @@ amount = 1 }, /turf/space, -/area/space) +/area/space/nearstation) "am" = ( /obj/item/extinguisher, /turf/simulated/floor/plating, @@ -86,7 +86,7 @@ }, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "ap" = ( /obj/structure/cable{ d1 = 1; @@ -135,12 +135,12 @@ icon_state = "brokengrille" }, /turf/space, -/area/space) +/area/space/nearstation) "au" = ( /obj/structure/lattice, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "av" = ( /obj/structure/grille, /obj/structure/window/full/shuttle, @@ -174,7 +174,7 @@ /area/djstation) "az" = ( /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "aA" = ( /obj/structure/grille, /obj/structure/window/full/shuttle, @@ -511,7 +511,7 @@ "bj" = ( /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "bk" = ( /obj/structure/table/reinforced, /obj/item/ashtray/bronze, @@ -577,7 +577,7 @@ /obj/structure/lattice, /obj/structure/grille, /turf/space, -/area/space) +/area/space/nearstation) "bt" = ( /turf/simulated/wall/mineral/titanium/nodecon, /area/derelict/arrival) @@ -1257,7 +1257,7 @@ /turf/simulated/floor/plasteel/airless{ icon_state = "solarpanel" }, -/area/space) +/area/space/nearstation) "cJ" = ( /obj/structure/sign/securearea, /turf/simulated/wall/mineral/titanium/nodecon/nodiagonal, @@ -1836,7 +1836,7 @@ "ed" = ( /obj/item/stack/rods, /turf/space, -/area/space) +/area/space/nearstation) "ee" = ( /obj/structure/grille, /obj/structure/window/full/shuttle, @@ -2282,7 +2282,7 @@ "fa" = ( /mob/living/simple_animal/hostile/carp, /turf/space, -/area/space) +/area/space/nearstation) "fb" = ( /obj/structure/grille, /obj/structure/window/full/shuttle, @@ -2510,7 +2510,7 @@ /area/derelict/crew_quarters) "fC" = ( /turf/simulated/wall/mineral/titanium/nodecon, -/area/space) +/area/space/nearstation) "fD" = ( /obj/machinery/light_switch{ pixel_x = 32; @@ -2708,7 +2708,7 @@ "fZ" = ( /obj/item/shard, /turf/space, -/area/space) +/area/space/nearstation) "ga" = ( /obj/structure/toilet{ dir = 8 @@ -3086,7 +3086,7 @@ icon_state = "medium" }, /turf/space, -/area/space) +/area/space/nearstation) "gV" = ( /obj/structure/coatrack, /turf/simulated/floor/plasteel{ @@ -3382,7 +3382,7 @@ "hw" = ( /obj/machinery/atmospherics/unary/passive_vent, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "hx" = ( /obj/structure/chair/wood/normal, /turf/simulated/floor/wood{ @@ -4417,7 +4417,7 @@ icon_state = "small" }, /turf/space, -/area/space) +/area/space/nearstation) "ju" = ( /obj/structure/chair{ dir = 4 @@ -4876,7 +4876,7 @@ "kp" = ( /obj/item/stack/ore/uranium, /turf/space, -/area/space) +/area/space/nearstation) "kq" = ( /obj/structure/table/reinforced, /obj/item/paper/djstation{ @@ -5221,7 +5221,7 @@ "kZ" = ( /obj/item/stack/ore/iron, /turf/space, -/area/space) +/area/space/nearstation) "la" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -5392,7 +5392,7 @@ dir = 1 }, /turf/simulated/shuttle/plating, -/area/space) +/area/space/nearstation) "lu" = ( /turf/space, /turf/simulated/shuttle/wall{ @@ -5400,7 +5400,7 @@ icon_state = "swall_f6"; tag = "icon-swall_f6" }, -/area/space) +/area/space/nearstation) "lv" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, @@ -5415,7 +5415,7 @@ }, /obj/structure/window/reinforced, /turf/simulated/shuttle/plating, -/area/space) +/area/space/nearstation) "lx" = ( /turf/space, /turf/simulated/shuttle/wall{ @@ -5423,11 +5423,11 @@ icon_state = "swall_f10"; dir = 2 }, -/area/space) +/area/space/nearstation) "ly" = ( /obj/item/stack/tile, /turf/space, -/area/space) +/area/space/nearstation) "lz" = ( /obj/machinery/light{ dir = 1; @@ -5454,13 +5454,13 @@ icon_state = "swall11"; dir = 2 }, -/area/space) +/area/space/nearstation) "lC" = ( /turf/simulated/shuttle/wall{ icon_state = "swall7"; dir = 2 }, -/area/space) +/area/space/nearstation) "lD" = ( /turf/space, /area/derelict/eva{ @@ -5472,7 +5472,7 @@ icon_state = "swall_f5"; dir = 2 }, -/area/space) +/area/space/nearstation) "lF" = ( /turf/space, /area/syndicate_depot/perimeter) @@ -5533,13 +5533,13 @@ icon_state = "swall_f9"; dir = 2 }, -/area/space) +/area/space/nearstation) "lP" = ( /turf/simulated/shuttle/wall{ icon_state = "swall3"; dir = 2 }, -/area/space) +/area/space/nearstation) "lQ" = ( /obj/structure/cable{ d1 = 1; @@ -5710,19 +5710,19 @@ /obj/item/shard, /obj/effect/mob_spawn/human/mime/corpse, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mp" = ( /obj/item/broken_bottle, /obj/effect/mob_spawn/human/mime/corpse, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mq" = ( /obj/item/shard{ icon_state = "medium" }, /obj/effect/mob_spawn/human/mime/corpse, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mr" = ( /obj/structure/falsewall, /turf/simulated/floor/plasteel{ @@ -5774,7 +5774,7 @@ icon_state = "swall12"; dir = 2 }, -/area/space) +/area/space/nearstation) "my" = ( /turf/simulated/floor/plating/airless/asteroid, /turf/simulated/shuttle/wall{ @@ -5782,7 +5782,7 @@ icon_state = "swall_f9"; dir = 2 }, -/area/space) +/area/space/nearstation) "mz" = ( /obj/structure/closet/crate{ icon_state = "crateopen"; @@ -5791,7 +5791,7 @@ /obj/item/stack/ore/bananium, /obj/item/grenade/bananade, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mA" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -5814,7 +5814,7 @@ icon_state = "medium" }, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mE" = ( /obj/structure/cable{ d1 = 1; @@ -5840,7 +5840,7 @@ tag = "icon-burst_r (WEST)" }, /turf/simulated/shuttle/plating, -/area/space) +/area/space/nearstation) "mG" = ( /obj/structure/shuttle/engine/heater{ tag = "icon-heater (EAST)"; @@ -5851,13 +5851,13 @@ dir = 8 }, /turf/simulated/shuttle/plating, -/area/space) +/area/space/nearstation) "mH" = ( /turf/simulated/mineral, -/area/space) +/area/space/nearstation) "mI" = ( /turf/simulated/floor/plating/airless/asteroid, -/area/space) +/area/space/nearstation) "mJ" = ( /obj/effect/decal/cleanable/blood, /turf/simulated/floor/plasteel{ @@ -5871,7 +5871,7 @@ "mL" = ( /obj/machinery/door/unpowered/shuttle, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mM" = ( /obj/effect/spawner/random_spawners/syndicate/loot, /turf/simulated/floor/plasteel{ @@ -5900,7 +5900,7 @@ /obj/item/stack/ore/tranquillite, /obj/item/stack/ore/tranquillite, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mQ" = ( /obj/structure/closet/crate, /obj/item/stack/ore/tranquillite, @@ -5911,7 +5911,7 @@ /obj/item/stack/ore/tranquillite, /obj/item/stack/ore/tranquillite, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mR" = ( /obj/machinery/light{ dir = 1; @@ -5935,7 +5935,7 @@ "mT" = ( /obj/item/shard, /turf/simulated/floor/plating/airless/asteroid, -/area/space) +/area/space/nearstation) "mU" = ( /obj/structure/closet/crate, /obj/item/stack/ore/bananium, @@ -5944,25 +5944,25 @@ /obj/item/stack/ore/bananium, /obj/item/stack/ore/bananium, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mV" = ( /obj/effect/mob_spawn/human/mime/corpse{ name = "Mime Pilot" }, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mW" = ( /obj/structure/computerframe/HONKputer, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mX" = ( /obj/effect/mob_spawn/human/corpse/clownmili, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mY" = ( /obj/effect/mob_spawn/human/corpse/clownoff, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "mZ" = ( /obj/effect/spawner/random_spawners/syndicate/turret/external, /turf/simulated/floor/plasteel{ @@ -5979,17 +5979,17 @@ dir = 4 }, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "nb" = ( /obj/item/shard{ icon_state = "small" }, /turf/simulated/floor/plating/airless/asteroid, -/area/space) +/area/space/nearstation) "nc" = ( /obj/item/stack/ore/bananium, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "nd" = ( /obj/item/stack/sheet/metal{ layer = 4.1 @@ -6005,7 +6005,7 @@ tag = "icon-propulsion_l (WEST)" }, /turf/simulated/shuttle/plating, -/area/space) +/area/space/nearstation) "nf" = ( /obj/effect/spawner/random_spawners/syndicate/trap/mine, /obj/item/stack/sheet/metal{ @@ -6018,14 +6018,14 @@ "ng" = ( /obj/item/paper/clownship, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "nh" = ( /obj/item/shard, /obj/structure/chair{ dir = 8 }, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "ni" = ( /obj/machinery/light{ dir = 4; @@ -6039,7 +6039,7 @@ "nj" = ( /obj/effect/mob_spawn/human/clown/corpse, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "nk" = ( /obj/machinery/computer/syndicate_depot/teleporter, /turf/simulated/floor/plasteel{ @@ -6049,7 +6049,7 @@ "nl" = ( /obj/item/pickaxe, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "nm" = ( /obj/structure/closet/crate, /obj/item/stack/ore/bananium, @@ -6057,7 +6057,7 @@ /obj/item/stack/ore/bananium, /obj/item/stack/ore/bananium, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "nn" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -6080,7 +6080,7 @@ icon_state = "swall_f10"; dir = 2 }, -/area/space) +/area/space/nearstation) "nq" = ( /obj/structure/shuttle/engine/propulsion{ dir = 4; @@ -6093,7 +6093,7 @@ tag = "icon-propulsion_l (WEST)" }, /turf/simulated/shuttle/plating, -/area/space) +/area/space/nearstation) "nr" = ( /obj/effect/decal/warning_stripes/red, /obj/structure/window/plasmareinforced{ @@ -6267,13 +6267,13 @@ dir = 8 }, /turf/simulated/floor/plating/airless/asteroid, -/area/space) +/area/space/nearstation) "nO" = ( /obj/effect/mob_spawn/human/clown/corpse{ name = "Clown Pilot" }, /turf/simulated/floor/plasteel/airless, -/area/space) +/area/space/nearstation) "nP" = ( /obj/structure/dispenser, /turf/simulated/floor/plasteel{ @@ -7454,7 +7454,7 @@ /obj/effect/landmark/burnturf, /obj/structure/grille/broken, /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "qI" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -8047,7 +8047,7 @@ /turf/simulated/wall/mineral/titanium/nodecon/nosmooth{ icon_state = "swall_f10" }, -/area/space) +/area/space/nearstation) "rM" = ( /turf/simulated/floor/plasteel/airless{ dir = 5; @@ -8965,7 +8965,7 @@ icon_state = "medium" }, /turf/space, -/area/space) +/area/space/nearstation) "tA" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -10583,7 +10583,7 @@ "wz" = ( /obj/item/stack/sheet/metal, /turf/space, -/area/space) +/area/space/nearstation) "wC" = ( /obj/effect/landmark/burnturf, /obj/machinery/light/small{ @@ -11119,7 +11119,7 @@ name = "I PISS ON YOU!" }, /turf/space, -/area/space) +/area/space/nearstation) "yo" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -11325,7 +11325,7 @@ max_amount = 30 }, /turf/space, -/area/space) +/area/space/nearstation) "yS" = ( /obj/machinery/door/airlock/external{ frequency = 1501; @@ -11489,7 +11489,7 @@ icon_state = "small" }, /turf/space, -/area/space) +/area/space/nearstation) "zt" = ( /turf/simulated/wall, /area/derelict/teleporter) @@ -11647,7 +11647,7 @@ icon_state = "swall_f5"; dir = 2 }, -/area/space) +/area/space/nearstation) "zR" = ( /obj/machinery/portable_atmospherics/canister/toxins, /obj/machinery/light/small{ diff --git a/_maps/map_files/generic/z5.dmm b/_maps/map_files/generic/z5.dmm index a679318ca71..1ee940615a5 100644 --- a/_maps/map_files/generic/z5.dmm +++ b/_maps/map_files/generic/z5.dmm @@ -39,7 +39,7 @@ "ag" = ( /obj/spacepod/random, /turf/space, -/area/space) +/area/space/nearstation) "ah" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -57,7 +57,7 @@ "aj" = ( /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "ak" = ( /turf/simulated/mineral/random/high_chance, /area/mine/dangerous/unexplored) @@ -236,7 +236,7 @@ icon_state = "medium" }, /turf/space, -/area/space) +/area/space/nearstation) "aJ" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -305,7 +305,7 @@ /obj/item/stack/rods, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "aS" = ( /obj/item/shard, /obj/item/stack/rods, @@ -411,7 +411,7 @@ /obj/item/shard, /obj/structure/lattice, /turf/space, -/area/space) +/area/space/nearstation) "bj" = ( /obj/machinery/power/terminal{ dir = 4 @@ -1564,13 +1564,13 @@ /area/mine/abandoned) "eg" = ( /turf/simulated/mineral/random/labormineral, -/area/space) +/area/space/nearstation) "eh" = ( /turf/simulated/wall/r_wall, /area/mine/dangerous/explored) "ei" = ( /turf/simulated/mineral/random, -/area/space) +/area/space/nearstation) "ej" = ( /obj/structure/girder/displaced, /turf/simulated/floor/plating/airless{ @@ -2494,7 +2494,7 @@ d2 = 4 }, /turf/simulated/floor/plating, -/area/space) +/area/space/nearstation) "gb" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -2526,7 +2526,7 @@ icon_state = "0-8" }, /turf/simulated/floor/plating, -/area/space) +/area/space/nearstation) "ge" = ( /obj/machinery/computer/shuttle/labor/one_way, /obj/structure/cable{ @@ -3099,10 +3099,10 @@ /area/mine/west_outpost) "hu" = ( /turf/simulated/floor/plating/airless, -/area/space) +/area/space/nearstation) "hv" = ( /turf/simulated/mineral, -/area/space) +/area/space/nearstation) "hw" = ( /obj/machinery/computer/mech_bay_power_console, /obj/structure/window/reinforced{ @@ -4768,7 +4768,7 @@ /area/mine/living_quarters) "ll" = ( /turf/simulated/floor/plating/airless/asteroid, -/area/space) +/area/space/nearstation) "lm" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/firedoor, @@ -6690,7 +6690,7 @@ dir = 4 }, /turf/space, -/area/space) +/area/space/nearstation) "pj" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/decal/warning_stripes/blue/hollow, From b5c322e00a2449b441ffb573f4c50135d0842e60 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 4 May 2019 04:30:13 +0200 Subject: [PATCH 38/41] Starlight/shuttle lighting fix --- _maps/map_files/MetaStation/z3.dmm | 2 +- _maps/map_files/MetaStation/z4.dmm | 2 +- code/modules/shuttle/shuttle.dm | 5 +---- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/_maps/map_files/MetaStation/z3.dmm b/_maps/map_files/MetaStation/z3.dmm index 3773dcf937e..6784ca8ceca 100644 --- a/_maps/map_files/MetaStation/z3.dmm +++ b/_maps/map_files/MetaStation/z3.dmm @@ -1,7 +1,7 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /turf/space, -/area/space/nearstation) +/area/space) "ab" = ( /obj/docking_port/stationary{ dheight = 9; diff --git a/_maps/map_files/MetaStation/z4.dmm b/_maps/map_files/MetaStation/z4.dmm index 65848fd6092..526fd945efd 100644 --- a/_maps/map_files/MetaStation/z4.dmm +++ b/_maps/map_files/MetaStation/z4.dmm @@ -1,7 +1,7 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /turf/space, -/area/space/nearstation) +/area/space) "ab" = ( /obj/structure/grille, /turf/simulated/floor/plating/airless, diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index f38c724ae41..9a4f948307d 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -382,9 +382,8 @@ var/list/L0 = return_ordered_turfs(x, y, z, dir, areaInstance) //remove area surrounding docking port - var/area/A0 if(areaInstance.contents.len) - A0 = locate("[area_type]") + var/area/A0 = locate("[area_type]") if(!A0) A0 = new area_type(null) for(var/turf/T0 in L0) @@ -394,8 +393,6 @@ var/turf/T0 = i if(!T0) continue - if(A0) - T0.change_area(T0.loc, A0) T0.empty(turf_type) qdel(src, force=TRUE) From 6d8ec8273338b03d10c1bf9e5d5007f8f67c5f30 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 4 May 2019 05:51:13 +0200 Subject: [PATCH 39/41] Fix dynamic lighting on shuttles --- code/game/area/Space Station 13 areas.dm | 2 +- code/game/jobs/access.dm | 2 +- code/game/turfs/turf.dm | 10 +++++++--- code/modules/lighting/lighting_object.dm | 1 + code/modules/shuttle/shuttle.dm | 11 +++-------- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index c0456b67778..82fe75b3cf7 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -97,7 +97,7 @@ var/list/ghostteleportlocs = list() no_teleportlocs = TRUE requires_power = FALSE valid_territory = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/shuttle/arrival name = "\improper Arrival Shuttle" diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 7e3013658c8..394fe3d0908 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -126,7 +126,7 @@ var/const/access_free_golems = 300 var/acc = M.get_access() //see mob.dm - if(acc == IGNORE_ACCESS) + if(acc == IGNORE_ACCESS || M.can_admin_interact()) return 1 //Mob ignores access else diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index dc7de45f695..44b4c1fa9cf 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -186,6 +186,7 @@ return if(!use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed return src + set_light(0) var/old_opacity = opacity var/old_dynamic_lighting = dynamic_lighting @@ -209,13 +210,14 @@ if(SSlighting.initialized) recalc_atom_opacity() lighting_object = old_lighting_object + affecting_lights = old_affecting_lights corners = old_corners - if (old_opacity != opacity || dynamic_lighting != old_dynamic_lighting) + if(old_opacity != opacity || dynamic_lighting != old_dynamic_lighting) reconsider_lights() - if (dynamic_lighting != old_dynamic_lighting) - if (IS_DYNAMIC_LIGHTING(src)) + if(dynamic_lighting != old_dynamic_lighting) + if(IS_DYNAMIC_LIGHTING(src)) lighting_build_overlay() else lighting_clear_overlay() @@ -485,6 +487,8 @@ continue if(istype(A, /obj/docking_port)) continue + if(istype(A, /atom/movable/lighting_object)) + continue if(!A.simulated) continue qdel(A, force=TRUE) diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index 2e549a3b68d..930e953d5eb 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -10,6 +10,7 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT layer = LIGHTING_LAYER invisibility = INVISIBILITY_LIGHTING + simulated = FALSE var/needs_update = FALSE var/turf/myturf diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 9a4f948307d..c72b0896893 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -442,11 +442,6 @@ if(canMove()) return -1 - -// //rotate transit docking ports, so we don't need zillions of variants -// if(istype(S1, /obj/docking_port/stationary/transit)) -// S1.dir = turn(NORTH, -travelDir) - var/obj/docking_port/stationary/S0 = get_docked() var/turf_type = /turf/space var/area_type = /area/space @@ -467,8 +462,6 @@ rotation += (rotation % 90) //diagonal rotations not allowed, round up rotation = SimplifyDegrees(rotation) - - //remove area surrounding docking port if(areaInstance.contents.len) var/area/A0 = locate("[area_type]") @@ -506,10 +499,12 @@ if(rotation) T1.shuttleRotate(rotation) - //lighting stuff + //atmos and lighting stuff SSair.remove_from_active(T1) T1.CalculateAdjacentTurfs() SSair.add_to_active(T1,1) + + T1.lighting_build_overlay() T0.ChangeTurf(turf_type) From 7fb7cdc57ff1a18738473339c0363149a7913b60 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 6 May 2019 03:52:01 +0200 Subject: [PATCH 40/41] Chair plane fix (and maybe fixes the disappearing humans, too) --- code/datums/mutable_appearance.dm | 3 ++- code/game/objects/structures/stool_bed_chair_nest/chairs.dm | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm index d8b893caaf9..2b0c3e1a44c 100644 --- a/code/datums/mutable_appearance.dm +++ b/code/datums/mutable_appearance.dm @@ -5,11 +5,12 @@ // Mutable appearances are children of images, just so you know. // Helper similar to image() -/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER) +/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER, plane = FLOAT_PLANE) var/mutable_appearance/MA = new() MA.icon = icon MA.icon_state = icon_state MA.layer = layer + MA.plane = plane return MA /mutable_appearance/clean diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 98da892a00f..903ee22c683 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -80,7 +80,7 @@ /obj/structure/chair/proc/handle_layer() if(buckled_mob && dir == NORTH) - layer = FLY_LAYER + layer = ABOVE_MOB_LAYER else layer = OBJ_LAYER From 79d761063aa71ce3c35dbeb6bf10b866f981f05f Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 6 May 2019 04:06:54 +0200 Subject: [PATCH 41/41] Rename ghost darkness images --- code/modules/mob/dead/observer/logout.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/dead/observer/logout.dm b/code/modules/mob/dead/observer/logout.dm index aa72e364aa0..93094d5ff30 100644 --- a/code/modules/mob/dead/observer/logout.dm +++ b/code/modules/mob/dead/observer/logout.dm @@ -1,6 +1,6 @@ /mob/dead/observer/Logout() if(client) - client.images -= ghost_darkness_images + client.images -= ghost_images ..() spawn(0) if(src && !key) //we've transferred to another mob. This ghost should be deleted. diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index dc5972085f0..3bc9d279eb9 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -1,7 +1,7 @@ #define GHOST_CAN_REENTER 1 #define GHOST_IS_OBSERVER 2 -var/list/image/ghost_darkness_images = list() //this is a list of images for things ghosts should still be able to see when they toggle darkness +var/list/image/ghost_images = list() GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) @@ -74,7 +74,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) ghostimage.appearance_flags |= KEEP_TOGETHER ghostimage.alpha = alpha appearance_flags |= KEEP_TOGETHER - ghost_darkness_images |= ghostimage + ghost_images |= ghostimage updateallghostimages() if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position forceMove(T) @@ -90,7 +90,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) M.following_mobs -= src following = null if(ghostimage) - ghost_darkness_images -= ghostimage + ghost_images -= ghostimage QDEL_NULL(ghostimage) updateallghostimages() return ..() @@ -720,11 +720,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/proc/updateghostimages() if(!client) return - if(seedarkness || !ghostvision) - client.images -= ghost_darkness_images + if(!ghostvision) + client.images -= ghost_images else //add images for the 60inv things ghosts can normally see when darkness is enabled so they can see them now - client.images |= ghost_darkness_images + client.images |= ghost_images if(ghostimage) client.images -= ghostimage //remove ourself