From f03007d693abeaa60e390a717caa5392e032d8eb Mon Sep 17 00:00:00 2001 From: BeeSting12 Date: Wed, 19 Apr 2017 00:29:44 -0400 Subject: [PATCH 01/73] removes flashbang's space --- config/sillytips.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/sillytips.txt b/config/sillytips.txt index 2652414eced..a3d619ec7c4 100644 --- a/config/sillytips.txt +++ b/config/sillytips.txt @@ -25,6 +25,6 @@ Plenty of things that aren't traditionally considered weapons can still be used DEATH IS IMMINENT! This game is older than most of the people playing it. Do not go gentle into that good night. -Flash bangs can weaken blob tiles, allowing for you and the crew to easily destroy them. +Flashbangs can weaken blob tiles, allowing for you and the crew to easily destroy them. Just the tip? Some people are unable to read text on a game where half of it is based on text. \ No newline at end of file From 7db57a9f25c9d43998e44e3fd046ec4a723bae86 Mon Sep 17 00:00:00 2001 From: c0 Date: Thu, 20 Apr 2017 15:42:26 +0300 Subject: [PATCH 02/73] Fixes bugs with pipes on shuttles breaking, acting weird and losing gas --- .../atmospherics/machinery/atmosmachinery.dm | 69 ++++++++++++++++--- .../binary_devices/binary_devices.dm | 8 +-- .../trinary_devices/trinary_devices.dm | 5 +- .../machinery/pipes/heat_exchange/junction.dm | 8 +-- code/modules/shuttle/on_move.dm | 11 +-- code/modules/shuttle/shuttle.dm | 9 ++- 6 files changed, 79 insertions(+), 31 deletions(-) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 1eb9480a0d3..c003c1b1021 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -60,19 +60,24 @@ Pipelines + Other Objects -> Pipe network N.disconnect(src) NODE_I = null +/obj/machinery/atmospherics/proc/getNodeConnects() + var/list/node_connects = list() + node_connects.len = device_type + + for(DEVICE_TYPE_LOOP) + for(var/D in GLOB.cardinal) + if(D & GetInitDirections()) + if(D in node_connects) + continue + node_connects[I] = D + break + return node_connects + + //this is called just after the air controller sets up turfs /obj/machinery/atmospherics/proc/atmosinit(var/list/node_connects) if(!node_connects) //for pipes where order of nodes doesn't matter - node_connects = list() - node_connects.len = device_type - - for(DEVICE_TYPE_LOOP) - for(var/D in GLOB.cardinal) - if(D & GetInitDirections()) - if(D in node_connects) - continue - node_connects[I] = D - break + node_connects = getNodeConnects() for(DEVICE_TYPE_LOOP) for(var/obj/machinery/atmospherics/target in get_step(src,node_connects[I])) @@ -288,3 +293,47 @@ Pipelines + Other Objects -> Pipe network //Used for certain children of obj/machinery/atmospherics to not show pipe vision when mob is inside it. /obj/machinery/atmospherics/proc/can_see_pipes() return 1 + +//Properly updates pipes on shuttle movement +/obj/machinery/atmospherics/shuttleRotate(rotation) + var/list/real_node_connect = getNodeConnects() + for(DEVICE_TYPE_LOOP) + real_node_connect[I] = angle2dir(rotation+dir2angle(real_node_connect[I])) + + ..() + SetInitDirections() + var/list/supposed_node_connect = getNodeConnects() + var/list/nodes_copy = nodes.Copy() + + for(DEVICE_TYPE_LOOP) + var/new_pos = supposed_node_connect.Find(real_node_connect[I]) + nodes[new_pos] = nodes_copy[I] + +/obj/machinery/atmospherics/afterShuttleMove() + ..() + var/missing_nodes = FALSE + for(DEVICE_TYPE_LOOP) + if(src.nodes[I]) + var/obj/machinery/atmospherics/node = src.nodes[I] + var/connected = FALSE + for(var/D in GLOB.cardinal) + if(node in get_step(src, D)) + connected = TRUE + break + + if(!connected) + nullifyNode(I) + + if(!src.nodes[I]) + missing_nodes = TRUE + + if(missing_nodes) + atmosinit() + for(var/obj/machinery/atmospherics/A in pipeline_expansion()) + A.atmosinit() + if(A.returnPipenet()) + A.addMember(src) + build_network() + else + // atmosinit() calls update_icon(), so we don't need to call it + update_icon() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm index e4858d432e6..96d88e0356f 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm @@ -26,9 +26,5 @@ Iconnery Housekeeping and pipe network stuff */ -/obj/machinery/atmospherics/components/binary/atmosinit() - var/node2_connect = dir - var/node1_connect = turn(dir, 180) - - var/list/node_connects = list(node1_connect, node2_connect) - ..(node_connects) \ No newline at end of file +/obj/machinery/atmospherics/components/binary/getNodeConnects() + return list(turn(dir, 180), dir) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm index d2c37ec30e0..7319c9ccf6e 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm @@ -22,7 +22,7 @@ Housekeeping and pipe network stuff */ -/obj/machinery/atmospherics/components/trinary/atmosinit() +/obj/machinery/atmospherics/components/trinary/getNodeConnects() //Mixer: //1 and 2 is input @@ -43,5 +43,4 @@ Housekeeping and pipe network stuff node1_connect = turn(node1_connect, 180) node3_connect = turn(node3_connect, 180) - var/list/node_connects = list(node1_connect, node2_connect, node3_connect) - ..(node_connects) \ No newline at end of file + return list(node1_connect, node2_connect, node3_connect) \ No newline at end of file diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm index 0cba512ec63..49c911b8589 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm @@ -29,12 +29,8 @@ initialize_directions = EAST initialize_directions_he = WEST -/obj/machinery/atmospherics/pipe/heat_exchanging/junction/atmosinit() - var/node2_connect = dir - var/node1_connect = turn(dir, 180) - var/list/node_connects = list(node1_connect, node2_connect) - - ..(node_connects) +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/getNodeConnects() + return list(turn(dir, 180), dir) /obj/machinery/atmospherics/pipe/heat_exchanging/junction/can_be_node(obj/machinery/atmospherics/target, iteration) var/init_dir diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 1cf42135d69..eadf2503e75 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -1,3 +1,4 @@ +// Called when shuttle attempts to move an atom. /atom/movable/proc/onShuttleMove(turf/T1, rotation) if(rotation) shuttleRotate(rotation) @@ -6,16 +7,16 @@ update_parallax_contents() return 1 +// Called after all of the atoms on shuttle are moved. +/atom/movable/proc/afterShuttleMove() + return + + /obj/onShuttleMove() if(invisibility >= INVISIBILITY_ABSTRACT) return 0 . = ..() -/obj/machinery/atmospherics/onShuttleMove() - . = ..() - for(DEVICE_TYPE_LOOP) - if(get_area(nodes[I]) != get_area(src)) - nullifyNode(I) #define DIR_CHECK_TURF_AREA(X) (get_area(get_ranged_target_turf(src, X, 1)) != A) /obj/structure/cable/onShuttleMove() diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index a271ddfe417..fb4afc8c830 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -481,6 +481,8 @@ //move or squish anything in the way ship at destination roadkill(L0, L1, S1.dir) + var/list/moved_atoms = list() + for(var/i in 1 to L0.len) var/turf/T0 = L0[i] if(!T0) @@ -502,7 +504,8 @@ //move mobile to new location for(var/atom/movable/AM in T0) - AM.onShuttleMove(T1, rotation) + if(AM.onShuttleMove(T1, rotation)) + moved_atoms += AM if(rotation) T1.shuttleRotate(rotation) @@ -517,6 +520,10 @@ T0.CalculateAdjacentTurfs() SSair.add_to_active(T0,1) + for(var/am in moved_atoms) + var/atom/movable/AM = am + AM.afterShuttleMove() + check_poddoors() S1.last_dock_time = world.time From 34a1b30a4235ccec0c15ff38abe2e2b76ed9ea1a Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Thu, 20 Apr 2017 15:21:45 -0400 Subject: [PATCH 03/73] Fix current_ticket.initiator not being set when a client relogs --- code/modules/admin/verbs/adminhelp.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 629f6400568..976912ca77d 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -90,6 +90,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) C.current_ticket = CKey2ActiveTicket(C.ckey) if(C.current_ticket) C.current_ticket.AddInteraction("Client reconnected.") + C.current_ticket.initiator = C //Dissasociate ticket /datum/admin_help_tickets/proc/ClientLogout(client/C) From 681f5e10c8cccc535672fc4813879e6d544e8c70 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Thu, 20 Apr 2017 16:28:47 -0400 Subject: [PATCH 04/73] Copies the loaded titelscreen into the rsc --- code/controllers/subsystem/title.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm index 30784297109..d9f4ef99386 100644 --- a/code/controllers/subsystem/title.dm +++ b/code/controllers/subsystem/title.dm @@ -36,7 +36,8 @@ SUBSYSTEM_DEF(title) break file_path = "config/title_screens/images/[pick(title_screens)]" - icon = new(file_path) + + icon = new(fcopy_rsc(file_path)) if(splash_turf) splash_turf.icon = icon From 3b0b9636095f3b13e5d86d83a67d9467e63f2d7e Mon Sep 17 00:00:00 2001 From: c0 Date: Fri, 21 Apr 2017 11:20:00 +0300 Subject: [PATCH 05/73] Fixes wires breaking on shuttle movement/rotation --- code/game/mecha/equipment/tools/work_tools.dm | 4 +- code/modules/power/cable.dm | 63 +++++++++++++++++-- code/modules/shuttle/on_move.dm | 13 ++-- code/modules/shuttle/shuttle.dm | 13 ++++ 4 files changed, 77 insertions(+), 16 deletions(-) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index e7e83790953..8a78bad45ae 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -409,13 +409,13 @@ NC.cableColor("red") NC.d1 = 0 NC.d2 = fdirn - NC.updateicon() + NC.update_icon() var/datum/powernet/PN if(last_piece && last_piece.d2 != chassis.dir) last_piece.d1 = min(last_piece.d2, chassis.dir) last_piece.d2 = max(last_piece.d2, chassis.dir) - last_piece.updateicon() + last_piece.update_icon() PN = last_piece.powernet if(!PN) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index cbb520b6800..a4c9420ce8a 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -108,9 +108,9 @@ By design, d1 is the smallest direction and d2 is the highest if(level == 1 && isturf(loc)) invisibility = i ? INVISIBILITY_MAXIMUM : 0 - updateicon() + update_icon() -/obj/structure/cable/proc/updateicon() +/obj/structure/cable/update_icon() if(invisibility) icon_state = "[d1]-[d2]-f" else @@ -429,6 +429,59 @@ By design, d1 is the smallest direction and d2 is the highest if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to P.disconnect_from_network() //remove from current network +// Ugly procs that ensure proper separation and reconnection of wires on shuttle movement/rotation +/obj/structure/cable/beforeShuttleMove(turf/T1, rotation) + var/on_edge = FALSE + var/A = get_area(src) + + for(var/D in GLOB.alldirs) + if(A != get_area(get_step(src, D))) + on_edge = TRUE + break + + if(on_edge && powernet) + var/tmp_loc = loc + cut_cable_from_powernet() + loc = tmp_loc + +/obj/structure/cable/afterShuttleMove() + var/on_edge = FALSE + var/A = get_area(src) + + for(var/D in GLOB.alldirs) + if(A != get_area(get_step(src, D))) + on_edge = TRUE + break + + if(on_edge) + var/datum/powernet/PN = new() + PN.add_cable(src) + + mergeConnectedNetworks(d1) //merge the powernet with adjacents powernets + mergeConnectedNetworks(d2) + mergeConnectedNetworksOnTurf() //merge the powernet with on turf powernets + + if(d1 & (d1 - 1))// if the cable is layed diagonally, check the others 2 possible directions + mergeDiagonalsNetworks(d1) + if(d2 & (d2 - 1)) + mergeDiagonalsNetworks(d2) + +/obj/structure/cable/shuttleRotate(rotation) + //..() is not called because wires are not supposed to have a non-default direction + //Rotate connections + if(d1) + d1 = angle2dir(rotation+dir2angle(d1)) + if(d2) + d2 = angle2dir(rotation+dir2angle(d2)) + + //d1 should be less than d2 for cable icons to work + if(d1 > d2) + var/temp = d1 + d1 = d2 + d2 = temp + update_icon() + + /////////////////////////////////////////////// // The cable coil object, used for laying cable /////////////////////////////////////////////// @@ -584,7 +637,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai C.d1 = 0 //it's a O-X node cable C.d2 = dirn C.add_fingerprint(user) - C.updateicon() + C.update_icon() //create a new powernet with the cable, if needed it will be merged later var/datum/powernet/PN = new() @@ -650,7 +703,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai NC.d1 = 0 NC.d2 = fdirn NC.add_fingerprint() - NC.updateicon() + NC.update_icon() //create a new powernet with the cable, if needed it will be merged later var/datum/powernet/newPN = new() @@ -699,7 +752,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai C.update_stored(2, item_color) C.add_fingerprint() - C.updateicon() + C.update_icon() C.mergeConnectedNetworks(C.d1) //merge the powernets... diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index eadf2503e75..7cf6e37a774 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -1,3 +1,7 @@ +// Called before shuttle starts moving atoms. +/atom/movable/proc/beforeShuttleMove(turf/T1, rotation) + return + // Called when shuttle attempts to move an atom. /atom/movable/proc/onShuttleMove(turf/T1, rotation) if(rotation) @@ -18,15 +22,6 @@ . = ..() -#define DIR_CHECK_TURF_AREA(X) (get_area(get_ranged_target_turf(src, X, 1)) != A) -/obj/structure/cable/onShuttleMove() - . = ..() - var/A = get_area(src) - //cut cables on the edge - if(DIR_CHECK_TURF_AREA(NORTH) || DIR_CHECK_TURF_AREA(SOUTH) || DIR_CHECK_TURF_AREA(EAST) || DIR_CHECK_TURF_AREA(WEST)) - cut_cable_from_powernet() -#undef DIR_CHECK_TURF_AREA - /atom/movable/light/onShuttleMove() return 0 diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index fb4afc8c830..94d10392ccd 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -481,6 +481,19 @@ //move or squish anything in the way ship at destination roadkill(L0, L1, S1.dir) + + for(var/i in 1 to L0.len) + var/turf/T0 = L0[i] + if(!T0) + continue + var/turf/T1 = L1[i] + if(!T1) + continue + if(T0.type == T0.baseturf) + continue + for(var/atom/movable/AM in T0) + AM.beforeShuttleMove(T1, rotation) + var/list/moved_atoms = list() for(var/i in 1 to L0.len) From 4a6653ba4ba3c434607607953446041e46d03573 Mon Sep 17 00:00:00 2001 From: c0 Date: Fri, 21 Apr 2017 11:20:39 +0300 Subject: [PATCH 06/73] Fixes disposals breaking on shuttle rotation --- code/modules/recycling/disposal-structures.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/modules/recycling/disposal-structures.dm b/code/modules/recycling/disposal-structures.dm index a823b4a62e1..531af922389 100644 --- a/code/modules/recycling/disposal-structures.dm +++ b/code/modules/recycling/disposal-structures.dm @@ -340,6 +340,16 @@ if(current_size >= STAGE_FIVE) deconstruct() +//Fixes dpdir on shuttle rotation +/obj/structure/disposalpipe/shuttleRotate(rotation) + ..() + var/new_dpdir = 0 + for(var/D in GLOB.cardinal) + if(dpdir & D) + new_dpdir = new_dpdir | angle2dir(rotation+dir2angle(D)) + dpdir = new_dpdir + + // *** TEST verb //client/verb/dispstop() // for(var/obj/structure/disposalholder/H in world) From d48dc50007b58730cfa8ca124865091fe402b92e Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Fri, 21 Apr 2017 17:59:39 -0400 Subject: [PATCH 07/73] Fixes #25029 --- .../objects/items/weapons/cigs_lighters.dm | 31 +++++++++++------- icons/obj/cigarettes.dmi | Bin 7830 -> 7829 bytes 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 6f297617840..d4e19865029 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -475,27 +475,36 @@ CIGARETTE PACKETS ARE IN FANCY.DM heat = 1500 resistance_flags = FIRE_PROOF +/obj/item/weapon/lighter/update_icon() + if(lit) + icon_state = "[initial(icon_state)]_on" + else + icon_state = "[initial(icon_state)]" + +/obj/item/weapon/lighter/ignition_effect(atom/A, mob/user) + . = "With a single flick of their wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool." + /obj/item/weapon/lighter/greyscale name = "cheap lighter" desc = "A cheap-as-free lighter." icon_state = "lighter" -/obj/item/weapon/lighter/greyscale/New() - ..() - var/image/I = image(icon,"lighter-overlay") - var/newcolor = color2hex(randomColor(1)) - add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) +/obj/item/weapon/lighter/greyscale/Initialize() + . = ..() + add_atom_colour(color2hex(randomColor(1)), FIXED_COLOUR_PRIORITY) + update_icon() + +/obj/item/weapon/lighter/greyscale/update_icon() + cut_overlays() + var/image/I = image(icon,"[initial(icon_state)]_base") + I.appearance_flags = RESET_COLOR //the edging doesn't change color + if(lit) + I.icon_state = "[initial(icon_state)]_on" add_overlay(I) /obj/item/weapon/lighter/greyscale/ignition_effect(atom/A, mob/user) . = "After some fiddling, [user] manages to light [A] with [src]." -/obj/item/weapon/lighter/ignition_effect(atom/A, mob/user) - . = "With a single flick of their wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool." - -/obj/item/weapon/lighter/update_icon() - icon_state = lit ? "[icon_state]_on" : "[initial(icon_state)]" - /obj/item/weapon/lighter/attack_self(mob/living/user) if(user.is_holding(src)) if(!lit) diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi index 6a6c59da390d03ff2035c87b9f38d83218187fbe..76ac7bd0a8e40288d1a940d156fb0ab408a29dd2 100644 GIT binary patch delta 400 zcmV;B0dM}6J(WF>Bms?)B_V&KsnBXWahY08J+!ZY0!hJJLZT#WV^6;WbnUvKxHphK zl#qf%n42frO*7xj1{68_dd-j0(zo@a{uI8RNok86Qt<%_$XU+v+rqw^E&bD^>Rm^)mH8yYk}GX|IQ2@=YvPA} z^LX;;OUtb!O=py)<@FnVv#yFr{DdkH;wWs|AYEBe_VA2Ne7PqYbzf+$p{d!no6D|d uEMpn_Co;w(k4@&`5_ZQeY!CbN8}qfMk3-G{X8-^k!%0LzRCu$*0n!{!3(JrI delta 400 zcmV;B0dM}5J(fL?Bms_*B_V&asnBUVahY08J+!ZYQj&tVghWZ`#-4r$*xGeNF*lGt z#&!~H5v-cf`G3Rvf9(nzeEFx>dSgMdMgNML42fs(t>^4T{68_eIeS3;UsPCgS8-1q@(+(n>!ij`LxnYW zwCBc0%tO_b3MW3Lb(((&sdx_s|9H Date: Sat, 22 Apr 2017 12:02:41 +0100 Subject: [PATCH 08/73] Revert "Revert "Ghosts call Moved() after Move() (#26183)"" --- code/modules/mob/dead/observer/observer.dm | 29 +++++++++++----------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 4175f75744f..8f98589ced9 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -272,25 +272,24 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/Move(NewLoc, direct) if(updatedir) - setDir(direct )//only update dir if we actually need it, so overlays won't spin on base sprites that don't have directions of their own + setDir(direct)//only update dir if we actually need it, so overlays won't spin on base sprites that don't have directions of their own + var/oldloc = loc + if(NewLoc) loc = NewLoc - for(var/obj/effect/step_trigger/S in NewLoc) - S.Crossed(src) update_parallax_contents() - return - loc = get_turf(src) //Get out of closets and such as a ghost - if((direct & NORTH) && y < world.maxy) - y++ - else if((direct & SOUTH) && y > 1) - y-- - if((direct & EAST) && x < world.maxx) - x++ - else if((direct & WEST) && x > 1) - x-- + else + loc = get_turf(src) //Get out of closets and such as a ghost + if((direct & NORTH) && y < world.maxy) + y++ + else if((direct & SOUTH) && y > 1) + y-- + if((direct & EAST) && x < world.maxx) + x++ + else if((direct & WEST) && x > 1) + x-- - for(var/obj/effect/step_trigger/S in locate(x, y, z)) //<-- this is dumb - S.Crossed(src) + Moved(oldloc, direct) /mob/dead/observer/is_active() return 0 From f36168b8542cab117297cb05c4495000f3738aac Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 22 Apr 2017 12:43:49 +0100 Subject: [PATCH 09/73] Fixes swarmers speaking common :cl: coiax fix: Swarmers now only speak their own language, rather than swarmer and common. /:cl: - Also removes a bunch of unneeded `grant_language` procs in various mob Initializes, this is done by the `initial_languages` var. --- code/modules/mob/living/carbon/human/human.dm | 5 +++-- code/modules/mob/living/simple_animal/bot/bot.dm | 3 --- .../living/simple_animal/friendly/drone/extra_drone_types.dm | 2 -- code/modules/mob/living/simple_animal/simple_animal.dm | 5 +++-- code/modules/mob/living/simple_animal/slime/slime.dm | 2 +- code/modules/shuttle/special.dm | 2 +- 6 files changed, 8 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 7b604bc3699..8b11644f803 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -5,6 +5,9 @@ icon = 'icons/mob/human.dmi' icon_state = "caucasian_m" + // ME TARZAN, YOU JANEBOT + initial_languages = list(/datum/language/common) + /mob/living/carbon/human/dummy @@ -42,8 +45,6 @@ handcrafting = new() - grant_language(/datum/language/common) // ME TARZAN, YOU JANEBOT - ..() /mob/living/carbon/human/create_internal_organs() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index b09a3ef9416..62575dd69c5 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -141,9 +141,6 @@ //Gives a HUD view to player bots that use a HUD. activate_data_hud() - grant_language(/datum/language/common) - grant_language(/datum/language/machine) - /mob/living/simple_animal/bot/update_canmove() . = ..() diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index 6a57e50aada..7cd6567ecb0 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -139,8 +139,6 @@ verbs -= /mob/living/simple_animal/drone/verb/toggle_light verbs -= /mob/living/simple_animal/drone/verb/drone_ping - grant_language(/datum/language/ratvar) - /mob/living/simple_animal/drone/cogscarab/Login() ..() add_servant_of_ratvar(src, TRUE) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 2e153e99c13..d87573edd3f 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -7,6 +7,9 @@ status_flags = CANPUSH + // goats bray, cows go moo, and the fox says Geckers + initial_languages = list(/datum/language/common) + var/icon_living = "" var/icon_dead = "" //icon when the animal is dead. Don't use animated icons for this. var/icon_gib = null //We only try to show a gibbing animation if this exists. @@ -96,8 +99,6 @@ if(!loc) stack_trace("Simple animal being instantiated in nullspace") - // goats bray, cows go moo, and the fox says Geckers - grant_language(/datum/language/common) /mob/living/simple_animal/Login() if(src && src.client) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 1fc6ff2e78b..4ff8904625f 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -18,6 +18,7 @@ emote_see = list("jiggles", "bounces in place") speak_emote = list("telepathically chirps") bubble_icon = "slime" + initial_languages = list(/datum/language/common, /datum/language/slime) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) @@ -91,7 +92,6 @@ E.Grant(src) create_reagents(100) set_colour(new_colour) - grant_language(/datum/language/slime) ..() /mob/living/simple_animal/slime/proc/set_colour(new_colour) diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 9e1cde78577..b78d0efd846 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -60,6 +60,7 @@ obj_integrity = 1000 max_integrity = 1000 verb_say = "chants" + initial_languages = list(/datum/language/common) var/obj/machinery/power/emitter/energycannon/magical/our_statue var/list/mob/living/sleepers = list() var/never_spoken = TRUE @@ -68,7 +69,6 @@ /obj/structure/table/abductor/wabbajack/Initialize(mapload) . = ..() START_PROCESSING(SSobj, src) - grant_language(/datum/language/common) /obj/structure/table/abductor/wabbajack/Destroy() STOP_PROCESSING(SSobj, src) From 1c5b6507732c44699bbac2fb4e23cad6f733cbe7 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sat, 22 Apr 2017 10:36:32 -0400 Subject: [PATCH 10/73] Heinious spawn (#26332) --- code/game/machinery/telecomms/broadcasting.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index 84321a17604..d6c6cdc151d 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -60,6 +60,8 @@ var/data, var/compression, var/list/level, var/freq, var/list/spans, var/verb_say, var/verb_ask, var/verb_exclaim, var/verb_yell, var/datum/language/language) + set waitfor = FALSE + message = copytext(message, 1, MAX_BROADCAST_LEN) if(!message) @@ -167,7 +169,8 @@ else GLOB.blackbox.messages += blackbox_msg - spawn(50) + sleep(50) + if(!QDELETED(virt)) //It could happen to YOU qdel(virt) //Use this to test if an obj can communicate with a Telecommunications Network From ae8b22c49ed1a398bc475579435b866d6cb37cba Mon Sep 17 00:00:00 2001 From: coiax Date: Sat, 22 Apr 2017 17:52:34 +0100 Subject: [PATCH 11/73] Fixes runtime when carbon mobs have no earwear (#26442) My bad. --- code/modules/surgery/organs/ears.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm index c35cf5c6706..c91cb219afd 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -22,7 +22,7 @@ if(C.disabilities & DEAF) deaf = max(deaf, 1) else - if(HAS_SECONDARY_FLAG(C.ears, HEALS_EARS)) + if(C.ears && HAS_SECONDARY_FLAG(C.ears, HEALS_EARS)) deaf = max(deaf - 1, 1) ear_damage = max(ear_damage - 0.10, 0) // if higher than UNHEALING_EAR_DAMAGE, no natural healing occurs. From 086d14d2918ecd881e771ee24a59d654d9b2f821 Mon Sep 17 00:00:00 2001 From: WJohn Date: Sat, 22 Apr 2017 13:05:19 -0400 Subject: [PATCH 12/73] Skeleton hitboxes --- icons/mob/human.dmi | Bin 15696 -> 16148 bytes icons/mob/human_parts.dmi | Bin 13169 -> 31791 bytes icons/mob/human_parts_greyscale.dmi | Bin 29081 -> 29492 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index ab69241cdeae15b93937d982f2aa49db19359d13..5b526ab99d8603a9643f0e4a3a4516f9863de39e 100644 GIT binary patch literal 16148 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 U)SQyRe{+Z2(K6Jm(y$BvUs0hym;e9( literal 15696 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:>)r$sDQEPK_i>HA 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 MiKb$uyhZT;2V(@uiU0rr diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index e23288dedb93a0ed69d4cb900346c0b1eb85013b..caf9de716f572406e0faff3be05572e6fbecafdd 100644 GIT binary patch delta 8832 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 Xlc^hkul|t^2L2u?sUu4ijNbnb9`RNH delta 8439 zcmZvBWn5Lw8|^`q5b%JYl(Zs9cSs!I&?QJqBO%=l8>NwMrKGzA1Zimn>F$&+rSr~t z|Mz!4T|Tk*%$|AXiM7@T%_J(B#SSCXr&+fI4FLOP(L2dUnga*!c$Q->nGxC}|Iyvq`go;FZnPT?3`f z{I6-YDLaf_jSb3iY%F>%6hf=-R2lU&`r(4lQ|l>hdEe32?0SkQvTBSLiO#bijvbJZ}~6TH$2N?W|en1~6|t#W=gOG$H5mpjfzRkM}}a3!5v7eOo9+wsGnS+6Xlt zKkFT0&YX$4eU^-qHcqzGgK$o!84}^2u7Pf`>L*G_vLXI?o-bnl@AGVklRq1Md>>JW zHeqx0@I;aHUj$R|ktdFF`!6(w-z7nixrt@PSW08SZg|; z4$bb~d@@g==)YVdUL+RiO>-o1WbcQ;s9~~5v8qBevRBZae|FKHh#$0XJMYdBK=Bic z(4r!GG#tw%97~ZyJx=wxWv)N}ay6Ov9U2yrhnep)v0#;)8-PGP@ia=G@Pgf-Bwj^{-Z+i;5W; zWllDFRFx6J0s{k$hq5Fm8{F8^z5mKS;kRFWWBLT@Ip$7bTltGau=#WQcv)KXg5c&T zU({%!*=MrWj*1exa%emre}gZM>yAE)kd&09A;Dd)?51o-hYP`KXCl5ktsDRNaPQ#U z`@plQz6%cQ=CvVPUS78UyDB^DwcljlFb4)JbV@T{ng~luOSfCrw5|X9vFo}r@3r6g z6N-CIKujF`ZX|D05U0XvU5Qz@4*%bu-x5+%QWm_{d$ZrqrUrZ;>m&|-{A|&m_L6uc zPf^0afJ#+WmECS$=;-)(bN=SpvuAC)t|s%19+|5WHqggT+R|&5$MOZ&W1I!1FBlm) z{*bUH8HC6vi)6qx%XERgI0qvcH{9HG%g~|w!C^NQ9WSrO#93u!Wk^_9+vZ5V#HEO* zmzTrE(L47h{kbGVAxgL|tEL5A(Qh*e6BD`se3F;0CDmvaJCl|8;$JE&IjV_Pk3E+h zzdNS|g5&Z#{lT4wZhekUPL|7|YbNly$kliR-{! zXrj7hU_Ea5#=!Ud8JPR0?-M%k?e*m;9SJV2h={(U<{CIOnajMN$CMmP z(UvsX9Y1FN&U@I7>&xMh5tPBsuCB|AKm5U*2mR^7#g`Nt1uEJ0Gd8tLampfM#>TXb z`fQO@qLFMZR}VFcA@x&X7-bZuemQXxn?YANDVHJ0th1FUli50lg2KX~$!`13RF#D3&dk%J$BVjsP=}`i6$3W6z<9iQunaIjtuv#A?L`_fJjwQw1z+Y$Vx9I(pe!O78lL zrHc5Fd3bo#55SPp(sXQWa1IWRvu@EFG@84>fDb>YK?JieDWi91YMFp%qeLzkE-o(Y zZ?8|Y%gf;_-BA-hC(m_tb)R%WQB;s3DW%Vm3P?0-P<4pia*!sk@{KLot~w&L^}XFz zdk8p8f5oT0&Qpld$UE?atxg0E9olI;ZtBhKx>)|mhAVn#>P${TaC>oDLiFenBj3fG zeMGrVlV^?l&H4Hvs52UTENWif$HkiEiPOZz#l^rM@5d}VK|(;GqBn<8s_E}lw6qwA zB*paf(j1Ey@Fvb+6>on&BxqhY2YE1A=a4;ma{JrPmyT7x5o>X)PmLPCb-TPpWRdeg z>@C?M_Lmr7A>*vGjUPGQ9w&x(RflFF`n8_h+_RU?J;&I}E-p3kb$o(rnWsPDT%DNg z1@HB(be;+6et>9bX=yi;{VZC08jR=?MgR1t6+aR2cJFBR8?>&X+CfJWg(myq6A;8W zDP{dHfZV5zVD@RNfED;S$c4Ca=KCqI3ioj2^Io&lBK-6-o&Wfn(aZb zOBjJT%o(_a(&xT2A>1dkL^xwxFavAQ(Ep=kP*= zgoId}8Qu{`B9X&*o^TmS$v}X3SQ!3i$K?>q^-x7ZLPDEyB{e?Qmz*4==hec^NiBF@ z{FMMPRcJATI*ZW>T3$9Lz{TJ&>mvaf#%L#w+kHYcwX2NeR`dUiR#;GgkBZdL<^1`BKJ4!7oi6l!W}G7%XmDNMZ9lYV*)u9?lvlw4+g2*3i> zoJ5ZwhmmrbeF5(pTzA`o@W`W6QXnQ4ks0W1ttdgvV~kWk>*;FQoSd9i%bMjhxB2%A z`_hh%oZqacXxDJ;dlOlf%Nq9DDBNb>UtD;Glk+`bWMrJIeis*ic7A?te7ZMhVQJac z`H{HNW`qb(3eMOF2KMDPO|4i19g2NZ47HCBhKamrgFST<8%B|(u;m~=--KCeH$}(gGB0(9XKIecP436U%x)|r@Decmop3Y3qGeyJu!3}8yg5; z-{w8?B{DLyjuP!EcH3EghOiGC8y3#a&aIoy#+$>r_1)0*@kAhCGH-7oD3MjK$QFSF zP5=m1Vff>YUT=lnf(RgG%$9{Hkdq)80n4F-*nQ|-Ym0p*?;J7ke?66ewvVP=?_B8k zr;pTo-)lhvB+FjQt?xU3IBa!&or#5o#eF&SIbala=*Bx$z)9-YB05Yyky%CX<;zS4 z&Gx2i=wt@wx7M3PM^7(xdIn%rtJ(XUr}B}cn7Mg={Ey&W(XTTZAu>$f54Wg60! z#*Bc9N#-=Y&ucRskiew5tl4sr5RYa!^UWp;q&8dA(ZlAmWt^S)Ch}s9(zd^Ay#g@V z)|2P7WPC+X^MC8x1oTlv<9U%m2+jeTehEdR%5Ts#(rL(JN0T#3MX zKUS=1MM1lqChYY%H#hgQ@RN$HEb;in#AQIhI=Z%#+D)E30r&u7>g<<3>^&!_;oXp~ zBpf<;9^i+62Pi@FGzf%u>(Fa-q#U#Y5Q{p1ObBi45p^VqGK=+HFqx!1Bl<$#T4jtJQZ0{%mSWFV3p zGDS@I3y7br{$QoAMRwZ;cZ zv**{Z4+HBXMIr4gtl>=H~uVUCm8?ET{^Lr0JiX*; z`i2kP$yZ7fx3gnIsg@=sODikI1&r;9a$*op03;-i*O%A6PoF*o1`~nTeAniftFyTtjx@6 z09e2y5P{abDR~pnt@2*;rETFMhRI4-1Q0_V$s8s@LL~QT*Z~nerKdLrugMZ#8GN1T zF{}EqecZO@h;mXz1$$N=0x9l)8F?)U(l~9bQ4N z6XyR3GCD_thZzBKNIrE{RoW5_CVh{!gplu5It{L+piwF)C>U()1DZ}eO*=G4FlN)O zxBGaerv9)e~J zcIUmHnVrAce=34c?bR#lL}u*|Cnv7%LX<~GM~k!Hoj&WPU}K>yeFX~ib4rTCQrkT+ z3Mk3yWYSFpI{~bjvqG;H_rp*jF2hg~l7uzPv4V097+R})R6E161TAtAJ_O`P#jwdb*=!_}EXrNfGpiiQS#QE_oDuL6*IAjJvE`D}@x?kFl^AUb(V zOaL8xq2zYT0=thuq_P1&pL z8@+AY7NMg<=Zu4*cXq6EYib^`CgE^yQIMoVw-QPSP?R8yGyw>9k|$eh7Zm^I+!iFw z%;?kIm$53y2l^VorM;vu&n*liY$i7 z7DyEJN{hKmF`abo#;?+65peym@o{%3;qx3g)FJhhYGQkHlcN#WZ}w)<@w>v%?daVv z`T5-koIQJ&W(BwQ66cpxe;H^4TJtk}@0U+7?aK3mo(~_Zb^RZWprFo$p+%(@J_Q9H zpb`W%HOparj3Il7+q?&6T3Qv2XdGOIN&|Pupnuh80;TR>4`<^P*l2L4(cCPe2brL{JSHX_Sy|bj{tFV|Ar7C`HOI`-Qao6W65m4DXQH=n-!2|3 zwW}JR937Deo)y~|Vpxh=SXqr+D_w#2uV$v1ua!;JQVL|F!voy;Z%~$jR_V-J`MS=~wlfy==N6XUCv4M6d@iXv^8Pq^?pfJf?CF$*Vn+S7>>rk{r^$&85%jgRM9 zWrPH@+`bPZvs?r*=hvc(zOD$g=U+gd=L$6lt5IfS z(b#W|GNuZ7JY4Tj8{rvGGVl!rNe@U6%V_qr43+g0nDmOD0|El>GRjk4KeLkUSaV$J zf4R@ynREbT_`A=aqN}T`2dPW=xR`wct*orL)H4QOijmubeC{V1J>Eyhd_WEEWj6CO z#(m!2$M8p80dd&PLqZ*0U0J}{fJ{`SI);Z;!7+k>%;`(vgTqCyDl)mKL3;`pIiofk zNRODYYoS1OwWI!?b5m93D?c!)0w%V{=oDH=rcjYXG!@Iq$PDuI8y2n&J4qoHFYp$o?&#j+*#kH*XUk(wo^4=ST)7&bKzWFTWbPl*6%mf zC9JN#1*lZyN=KR z41&gdczAelbTsEp>W{6>O)+I?RO*KR&MJRBFOFnMxol!lX%!g%r^ zcrz9b0|Ifl^rrnXV|v_-AU%Np$%FQb&Og6XT;AL#>jyE=|8RKjeKyf@a}QJraBn!3 zD5Z*uL^HI*a?fAP`*=+A>|e$$Zp#9yQ2_D{h!4G$yxiQS!AuE$-z$ElbfM6K0)~!` z4$!4*Ow`pn-duS!UThUlFo%M*^hZd5#DV+dn&b8|xBGG*-_ zI$gE_?nDc;1}=*{<39rG*vLC$a0Q$d8~Gp0$aeonb2%e!wG2b-)wYL%F(QX4zcnJA z9+W^%P1TA-&7WyhuoW7qvaLk4p>@H%NpTA4h5EOfch%i+|<9Iz168$zXI=3Rq3F>|!F zpBqo(V=TzqbaCmM5E{}KAjj&BH#`X>qYR8|Ej`benA@K>6gj4(8W)Zvozk(Yi*Qh1Kzl zBn!Z_Sejk>s%_H9vPF~hjB*Cwz z#P0;9WffG)OmG%tXzue%&=iO3bS*u^B~TIFb=d0y%g6!y{;F-!u8yuU#7#V9^h#~W z?R2Y8O>U%@bx3tG{QLQ7=cc2$#+7~HH#G(QxSRsnPYPgTV=(Y+EV0O|1UPc!IaMp) z+Uwrp;OSYNOw%;3|BTL8CC+SuiX;jQ{{HU#odqlsN~o8S^FHov0sj|pQ7^S5{oHg6 z!gzUHriHP1beXAOvl`Uu`BkkKI*jNTY`{f#LZ=WId4jYDTNJ)h7>56Kg3y#v?H3*_t3$N?Z!@5c7TfL}-@zy-vI8 z8QXvEeC~pQoI{V*Nqu3alzi_K7xfkbzZtWmfE3>a9^SWJ0UXy?^7)Y^deidwpYbrT zpQPU2(6f*S)5U^FutQd&L9dlE@Wq$=pMRIxgYXq(jFRFXpEGUw;)3M_cm#e?uG{kW z3siJN-^sz_usH&J8=!55IGXl1MylpNEA1^m;b1wvX8+GsSzTF!X=|WPh{MP}60zjx zU_KP}F|I#4TN)Ln-g-y$$zjZgpL4lLc_xC$GeL9LN=H8q6zCAF!2h}*x=V3N zDTcRl8ApAn-!Tay#c#sU<@r&61I@{s`7XH>z)rHjJ z!NO)KZ!NF$9cdpl0}z2|kNfxP1bYPZ`Ul_POmR`Sj@8@Or!II3WG9ZE;*mOxy0e3m zbb#Z{ZFOuq(vBsD0q?$Z91i-QJ?N@uEnfqu+FeqeNL+C>uc1DWHyf2xhZ>`%498sC z>bF}vzxuGN#H;ko+;+Ti(&h95g!|{}Pq6#J6`w4xhhpr*o6(_dX#9tl4hAg) z3?@u?7wBsk5I152$b8W@LVUWJ1*k_vhI^RwIA>7COPq0T@(UF*??IiEYFt!V8SAXi z>0D3(>N-4G*y~%o7SO2Al~NI^su*$wjzvO-)V7X=)Pt*-eYPUX72BTO}GoAt4NoxQu8V z?Q`WrfT>}A-@ftAVYasi!|8xPCM6}!tfQm2q$W^#OQw3qcy*`!hd*XabhIDX`javH z9^euytKvO}KF4mm+L_KA*|=yh_+y7|Sp19`mw-SrQEVTLqZeU;v1O)3>QA$O))L_p z6T(=$3b*+Rw|L=0TqDvZHHLJA;^ zG(Tq-7bEb?50LZ-50CHFPjea@bx}VC7!T*j!u%2wAGh;m-a&wymH)9ex3V}ml0E;E z%ukQGaO+UVm+u|RUsC+cjcwO>7!*ARhrs$39{7^G1IU(QP=?xBQGpp!lLKl zZI|h!TmAr*>|ViX>1b)mia@`Y{Skq&++YYuR0eg+ghW220JRopW5*J=Z-@cSRmdSM zovb8nY)e_$kR$)5V6L{Zm-Y*M5B0|dkXz4n6I468kTHILO0Ezx&_+jJ_!N$ zgD*p-gR}LW+sKO!XT`{YB6%gDFfWrOc{a`yh?|%XhwEFQb}z)E+EWC5tNO;t#TCJN zhm_&h#+?nL>y&Mt%MXi5ze|74J8$u?BOW-u4cZ~DO0>#}R=>42r`^Tvea+78-Pzq` zGPmrKH-$T=JIg%IqW^r^WCbsjMY!N+PZ?BoESg9=L@0QrOfzM}j1j|G4;pegY+=Ts+) z3--no6$8F6&G{QZkIhk~<~OGT-jVbSB8@%@-2}1*)`@jY$g(Zw^Oe)y<)q#E+71k7 ux*7hogcdDZL|vQj#l_^9%aC>5z`q`ASR6$YT*JVhtfUh1Zkf2@hyMee9eG9o From 2ce542c706b4b8508aebaa898434507ded4a4a0d Mon Sep 17 00:00:00 2001 From: MMMiracles Date: Sat, 22 Apr 2017 13:21:17 -0400 Subject: [PATCH 13/73] t a g s --- _maps/map_files/Cerestation/cerestation.dmm | 427 +++++++++++++------- 1 file changed, 280 insertions(+), 147 deletions(-) diff --git a/_maps/map_files/Cerestation/cerestation.dmm b/_maps/map_files/Cerestation/cerestation.dmm index dfd7bb4e1d3..6b93d1247c2 100644 --- a/_maps/map_files/Cerestation/cerestation.dmm +++ b/_maps/map_files/Cerestation/cerestation.dmm @@ -1862,7 +1862,7 @@ c_tag = "AI Hallway"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -3630,6 +3630,11 @@ network = list("SS13") }, /obj/item/device/radio/beacon, +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -4278,6 +4283,11 @@ "aiv" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/light, +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -5145,9 +5155,7 @@ /obj/structure/disposaloutlet{ dir = 8 }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, +/obj/structure/disposalpipe/trunk, /turf/open/floor/plating/airless, /area/quartermaster/sorting) "akd" = ( @@ -5603,10 +5611,6 @@ }, /area/quartermaster/sorting) "akW" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/machinery/mineral/stacking_unit_console{ dir = 2; machinedir = 8 @@ -6486,7 +6490,7 @@ dir = 9; icon_state = "camera"; network = list("SS13"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /obj/item/weapon/bedsheet, /turf/open/floor/plasteel/floorgrime{ @@ -7154,8 +7158,8 @@ /area/space) "anT" = ( /obj/structure/disposalpipe/junction{ - icon_state = "pipe-j2"; - dir = 8 + icon_state = "pipe-j1"; + dir = 1 }, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -12310,7 +12314,7 @@ pixel_x = 0 }, /obj/structure/window/reinforced, -/obj/machinery/computer/robotics, +/obj/machinery/computer/cargo/request, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -12747,7 +12751,7 @@ dir = 9; icon_state = "camera"; network = list("SS13"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /obj/item/weapon/bedsheet, /turf/open/floor/plasteel/floorgrime{ @@ -16027,7 +16031,7 @@ dir = 8; icon_state = "camera"; network = list("SS13","QM"); - tag = "icon-camera (WEST)" + tag = "" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -19700,7 +19704,7 @@ dir = 8; icon_state = "camera"; network = list("SS13","QM"); - tag = "icon-camera (WEST)" + tag = "" }, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -20686,7 +20690,7 @@ dir = 8; icon_state = "camera"; network = list("SS13","QM"); - tag = "icon-camera (WEST)" + tag = "" }, /obj/machinery/airalarm{ dir = 8; @@ -21048,7 +21052,7 @@ c_tag = "Courtroom Jury East"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -21108,7 +21112,7 @@ c_tag = "Dorm Lockers"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -22638,7 +22642,7 @@ dir = 8; icon_state = "camera"; network = list("SS13","QM"); - tag = "icon-camera (WEST)" + tag = "" }, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/brown/corner{ @@ -25839,7 +25843,7 @@ c_tag = "Vault Airlock"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /obj/machinery/holopad, /turf/open/floor/plasteel/black, @@ -26354,7 +26358,7 @@ c_tag = "Command Atmospherics Checkpoint"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -26416,7 +26420,7 @@ c_tag = "Cargo Atmospherics Checkpoint"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -26774,7 +26778,7 @@ c_tag = "Custodials"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /obj/item/key/janitor, /turf/open/floor/plasteel{ @@ -26909,7 +26913,7 @@ c_tag = "Command Asteroid Hall 10"; dir = 8; icon_state = "camera"; - tag = "icon-camera (WEST)" + tag = "" }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -27884,7 +27888,7 @@ c_tag = "Vault"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) @@ -30632,7 +30636,7 @@ c_tag = "Bar Backroom"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -31688,7 +31692,7 @@ dir = 8; icon_state = "camera"; network = list("SS13","QM"); - tag = "icon-camera (WEST)" + tag = "" }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -34131,7 +34135,7 @@ c_tag = "Bar"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32 @@ -34414,7 +34418,7 @@ c_tag = "EVA Storage"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/blue/side{ tag = "icon-blue (EAST)"; @@ -35178,7 +35182,7 @@ c_tag = "Service Atmospherics Checkpoint"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -37181,7 +37185,7 @@ c_tag = "Surgery Observation"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -37607,7 +37611,7 @@ c_tag = "Engineering Asteroid Hallway 2"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -38183,7 +38187,7 @@ dir = 5; icon_state = "camera"; network = list("SS13","CMO"); - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -38259,7 +38263,7 @@ c_tag = "Primary Tool Storage North"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -39515,7 +39519,7 @@ dir = 8; icon_state = "camera"; network = list("SS13","QM"); - tag = "icon-camera (WEST)" + tag = "" }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -39849,7 +39853,7 @@ dir = 5; icon_state = "camera"; network = list("SS13","CMO"); - tag = "icon-camera (NORTHEAST)" + tag = "" }, /obj/machinery/requests_console{ department = "Virology"; @@ -41591,7 +41595,7 @@ dir = 5; icon_state = "camera"; network = list("SS13","CMO"); - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plasteel/whitegreen/side{ tag = "icon-whitegreen (WEST)"; @@ -42133,7 +42137,7 @@ dir = 9; icon_state = "camera"; network = list("SS13","CE"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -44021,7 +44025,7 @@ c_tag = "Medbay Atmospherics Checkpoint"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -44136,7 +44140,7 @@ c_tag = "Medbay East"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /obj/structure/noticeboard{ dir = 8; @@ -44188,7 +44192,7 @@ c_tag = "Cyrotubes"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -44975,7 +44979,7 @@ c_tag = "Primary Tool Storage South"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -45581,7 +45585,7 @@ c_tag = "Hydroponics Backroom"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /obj/structure/cable/orange{ d1 = 1; @@ -47161,7 +47165,7 @@ c_tag = "Hydroponics East"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /obj/structure/sink{ dir = 4; @@ -47486,7 +47490,7 @@ c_tag = "Engineering Security Checkpoint"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -48155,7 +48159,7 @@ dir = 8; icon_state = "camera"; network = list("SS13","QM"); - tag = "icon-camera (WEST)" + tag = "" }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -52097,7 +52101,7 @@ dir = 9; icon_state = "camera"; network = list("SS13","CE"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; @@ -52523,7 +52527,7 @@ dir = 9; icon_state = "camera"; network = list("SS13","CE"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -53269,7 +53273,7 @@ dir = 5; icon_state = "camera"; network = list("SS13","CE"); - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -53933,7 +53937,7 @@ dir = 10; icon_state = "camera"; network = list("SS13","CMO"); - tag = "icon-camera (SOUTHWEST)" + tag = "" }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -54175,7 +54179,7 @@ c_tag = "Library East"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -54318,7 +54322,7 @@ }, /obj/machinery/button/door{ id = "engineeringlockdown"; - name = "Engineering SMES Blast Door Control"; + name = "Engineering Emergency Lockdown Control"; pixel_x = -24; pixel_y = 8; req_access_txt = "10;11" @@ -56202,7 +56206,7 @@ dir = 5; icon_state = "camera"; network = list("SS13","CE"); - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57030,7 +57034,7 @@ dir = 8; icon_state = "camera"; network = list("SS13","QM"); - tag = "icon-camera (WEST)" + tag = "" }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57628,7 +57632,7 @@ c_tag = "Library Explicits"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -58074,7 +58078,7 @@ dir = 9; icon_state = "camera"; network = list("SS13","CE"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -59355,7 +59359,7 @@ c_tag = "Chapel West"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plasteel/chapel{ tag = "icon-chapel (NORTH)"; @@ -59877,7 +59881,7 @@ c_tag = "Chapel East"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61346,7 +61350,7 @@ c_tag = "Chapel Office"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61759,7 +61763,7 @@ c_tag = "Chapel Coffins"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62415,7 +62419,7 @@ c_tag = "Crematorium"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -63045,7 +63049,7 @@ c_tag = "Docking Atmospherics Checkpoint"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -63245,7 +63249,7 @@ c_tag = "Service-Research Bridge"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /obj/structure/disposalpipe/segment, /turf/open/floor/engine{ @@ -65728,7 +65732,7 @@ c_tag = "Research Asteroid Hallway 1"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -66358,7 +66362,7 @@ c_tag = "Research Atmospherics Checkpoint"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67539,7 +67543,7 @@ dir = 8; icon_state = "camera"; network = list("SS13","QM"); - tag = "icon-camera (WEST)" + tag = "" }, /obj/machinery/airalarm{ dir = 8; @@ -71759,7 +71763,7 @@ dir = 8; icon_state = "camera"; network = list("SS13","QM"); - tag = "icon-camera (WEST)" + tag = "" }, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -73312,7 +73316,7 @@ dir = 9; icon_state = "camera"; network = list("SS13","RD"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (EAST)"; @@ -75081,7 +75085,7 @@ c_tag = "Docking Asteroid Hall 13"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -75151,7 +75155,7 @@ c_tag = "Docking Asteroid Hall 9"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -75889,7 +75893,7 @@ dir = 9; icon_state = "camera"; network = list("SS13","RD"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -77743,7 +77747,7 @@ /obj/machinery/light_switch{ pixel_y = -23 }, -/obj/item/weapon/twohanded/required/kirbyplants/dead, +/obj/machinery/computer/robotics, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -78187,7 +78191,7 @@ c_tag = "Docking Asteroid Hall 12"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78230,7 +78234,7 @@ c_tag = "Docking Asteroid Hall 8"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78310,7 +78314,7 @@ dir = 9; icon_state = "camera"; network = list("SS13","RD"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78591,7 +78595,7 @@ dir = 9; icon_state = "camera"; network = list("SS13","RD"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -85929,7 +85933,7 @@ c_tag = "Genetics Monkey Dome"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -93606,7 +93610,7 @@ dir = 9; icon_state = "camera"; network = list("SS13","RD"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -94367,6 +94371,135 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) +"dnz" = ( +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"dnA" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) +"dnB" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 8 + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) +"dnC" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) +"dnD" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"dnE" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"dnF" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/door/window/eastright{ + name = "Mail Chute"; + req_access_txt = "31" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"dnG" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"dnH" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"dnI" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"dnJ" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dnK" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dnL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/weapon/twohanded/required/kirbyplants/dead, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor) (1,1,1) = {" aaa @@ -110512,7 +110645,7 @@ czu cAn cBj cBY -cCP +dnL cCP dmB cES @@ -136544,7 +136677,7 @@ aca aax acv aax -aaw +dnz aal adh adx @@ -142984,9 +143117,9 @@ aaa aaa ajj akc +anQ +dnE ajn -alx -alx aez afS afV @@ -143240,9 +143373,9 @@ aaa aaa aaa ajk +alE akd -ajn -ajn +dnF ajn ajn aUW @@ -145554,7 +145687,7 @@ aaa aaa ajn akj -ajl +ajn alD aml anj @@ -145811,12 +145944,12 @@ aaa aaa aaa aaa -ajm -alE -alE -alE -anQ -aoX +ajn +ajn +ajn +ajn +ajn +aoU aoU aoY arI @@ -146072,7 +146205,7 @@ aaa akR akR akR -anR +anV aoY aoY aoY @@ -146329,7 +146462,7 @@ aaa aaa aaa abC -anS +arw aoZ aoZ aoZ @@ -146586,7 +146719,7 @@ aaa aaa aaa abC -anS +arw aoZ apR apR @@ -146843,7 +146976,7 @@ aaa aaa aaa abC -anS +arw aoZ apR apR @@ -147100,7 +147233,7 @@ aaa aaa aaa abC -anS +arw aoZ apR apR @@ -147357,7 +147490,7 @@ aaa aaa aaa abC -anS +arw aoZ apR apR @@ -147614,7 +147747,7 @@ aaa aaa aaa abC -anS +arw aoZ apR apR @@ -147871,7 +148004,7 @@ aaa aaa aaa abC -anS +arw aoZ aoZ aoZ @@ -148123,12 +148256,12 @@ aaa aaa aaa aaa -aaa +dnA aaa akR akR akR -anR +anV aoY aoY aoY @@ -148380,11 +148513,11 @@ aaa aaa aaa aaa -aaa -akR -akR -akR -alx +dnB +dnD +dnG +dnH +dnI anT aoX aoU @@ -148637,10 +148770,10 @@ aaa aaa aaa aaa -aaa +dnC +akR +akR akR -alx -alx alx anU apa @@ -148896,7 +149029,7 @@ aaa aaa aaa akR -alx +akR alx alx anV @@ -153858,9 +153991,9 @@ bjZ bjZ bjZ bqA +dnJ bjZ -bjZ -bjZ +dnK bjZ byf bjZ @@ -154113,12 +154246,12 @@ bgs deO bhd bhd -bhd -bqC -blS -dfM -bva -bhd +dfA +dfI +bgs +btp +bgs +bgs bhd bhd blS @@ -154370,11 +154503,11 @@ bgq bgr bgq bgq -dfA -dfI -bgs -btp -bgs +bpu +bqD +brZ +btq +bvb bgr bgq bgq @@ -154627,11 +154760,11 @@ bbo bbq bbq bgp -bpu -bqD -brZ -btq -bvb +dfB +bgr +bgs +btr +bgs bgr bgp bbq @@ -154884,11 +155017,11 @@ bbo bbq bbq bbq -dfB -bgr -bgs -btr +bpv bgs +bsa +bts +bsa bww bbq bbq @@ -155141,11 +155274,11 @@ aaa bbo bbo bbo -bpv +bpw bgs -bsa -bts -bsa +bsb +btt +bsb bgs bbq bbo @@ -155398,10 +155531,10 @@ aaa aaa aaa bbo -bpw +aaa bgs bsb -btt +btu bsb bgs bbq @@ -155658,7 +155791,7 @@ aaa aaa bgs bsb -btu +btv bsb bgs aaa @@ -155914,9 +156047,9 @@ aaa aaa aaa aaa -bsb -btv -bsb +aaa +btw +aaa aaa aaa aaa @@ -156169,11 +156302,11 @@ cKF cKF aaa aaa -aaa -aaa -aaa -btw -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa From ec5d5f37567087e3844bedb99213980698ad63bf Mon Sep 17 00:00:00 2001 From: XDTM Date: Sat, 22 Apr 2017 19:30:15 +0200 Subject: [PATCH 14/73] Fixes objects being used on backpacks if they don't fit --- code/game/objects/items/weapons/storage/storage.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 9be3ea8dbc3..8c4edf19bfc 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -405,6 +405,9 @@ if(iscyborg(user)) return //Robots can't interact with storage items. + if(contents.len >= storage_slots) //don't use items on the backpack if they don't fit + return 1 + if(!can_be_inserted(W, 0 , user)) return 0 From 53f0db39b929d666515e268ae65f8061edabbb48 Mon Sep 17 00:00:00 2001 From: Kyle Spier-Swenson Date: Sat, 22 Apr 2017 11:45:57 -0700 Subject: [PATCH 15/73] Merge conflict tags aren't touched if github doesn't calculate them in time --- tools/github_webhook_processor.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/github_webhook_processor.php b/tools/github_webhook_processor.php index 07d2d4c23c8..c2f888603ad 100644 --- a/tools/github_webhook_processor.php +++ b/tools/github_webhook_processor.php @@ -141,9 +141,9 @@ function tag_pr($payload, $opened) { $remove = array(); $mergeable = $payload['pull_request']['mergeable']; - if($mergeable == null || $mergeable) //only look for the false value + if($mergeable === TRUE) //only look for the false value $remove[] = 'Merge Conflict'; - else + else if ($mergable === FALSE) $tags[] = 'Merge Conflict'; if(has_tree_been_edited($payload, '_maps')) From 47a26dab13f7599a7b488643868566182669507e Mon Sep 17 00:00:00 2001 From: XDTM Date: Sat, 22 Apr 2017 21:20:01 +0200 Subject: [PATCH 16/73] Fixes some facehugger bugs --- .../living/carbon/alien/special/facehugger.dm | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 3a039d84dd6..d0e5bd03ce4 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -49,14 +49,14 @@ /obj/item/clothing/mask/facehugger/attack_hand(mob/user) if((stat == CONSCIOUS && !sterile) && !isalien(user)) - if(Attach(user)) + if(Leap(user)) return ..() /obj/item/clothing/mask/facehugger/attack(mob/living/M, mob/user) ..() - if(user.temporarilyRemoveItemFromInventory(src)) - Attach(M) + if(user.transferItemToLoc(src, get_turf(M))) + Leap(M) /obj/item/clothing/mask/facehugger/examine(mob/user) ..() @@ -98,7 +98,7 @@ /obj/item/clothing/mask/facehugger/HasProximity(atom/movable/AM as mob|obj) if(CanHug(AM) && Adjacent(AM)) - return Attach(AM) + return Leap(AM) return 0 /obj/item/clothing/mask/facehugger/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) @@ -116,7 +116,7 @@ ..() if(stat == CONSCIOUS) icon_state = "[initial(icon_state)]" - Attach(hit_atom) + Leap(hit_atom) /obj/item/clothing/mask/facehugger/proc/valid_to_attach(mob/living/M) // valid targets: corgis, carbons except aliens and devils @@ -144,9 +144,13 @@ // corgi: valid return TRUE -/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M) +/obj/item/clothing/mask/facehugger/proc/Leap(mob/living/M) if(!valid_to_attach(M)) return FALSE + if(iscarbon(M)) + var/mob/living/carbon/target = M + if(target.wear_mask && istype(target.wear_mask, /obj/item/clothing/mask/facehugger)) + return FALSE // passed initial checks - time to leap! M.visible_message("[src] leaps at [M]'s face!", \ "[src] leaps at [M]'s face!") @@ -165,11 +169,15 @@ if(target.wear_mask) var/obj/item/clothing/W = target.wear_mask - if(!istype(W,/obj/item/clothing/mask/facehugger) && target.dropItemToGround(W)) + if(target.dropItemToGround(W)) target.visible_message("[src] tears [W] off of [target]'s face!", \ "[src] tears [W] off of [target]'s face!") - forceMove(target) target.equip_to_slot_if_possible(src, slot_wear_mask, 0, 1, 1) + return TRUE // time for a smoke + +/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M) + if(!valid_to_attach(M)) + return // early returns and validity checks done: attach. attached++ //ensure we detach once we no longer need to be attached @@ -189,8 +197,6 @@ addtimer(CALLBACK(src, .proc/Impregnate, M), rand(MIN_IMPREGNATION_TIME, MAX_IMPREGNATION_TIME)) - return TRUE // time for a smoke - /obj/item/clothing/mask/facehugger/proc/detach() attached = 0 From b4219adbbfe6f4a2557be39eb6e35c88b95a62ff Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Thu, 20 Apr 2017 22:24:07 +0100 Subject: [PATCH 17/73] Ghosts no longer drift in space Fixes #26359. Closes #26412. :cl: coiax fix: Ghosts no longer drift in space. /:cl: --- code/modules/mob/dead/observer/observer.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 8f98589ced9..7a77aab7cdf 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -808,6 +808,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!invisibility) to_chat(user, "It seems extremely obvious.") +// Ghosts have no momentum, being massless ectoplasm +/mob/dead/observer/Process_Spacemove(movement_dir) + return 1 + /proc/set_observer_default_invisibility(amount, message=null) for(var/mob/dead/observer/G in GLOB.player_list) G.invisibility = amount From e996dbda9c4e05be88e530c2059051749d1ab1cf Mon Sep 17 00:00:00 2001 From: XDTM Date: Sat, 22 Apr 2017 22:13:59 +0200 Subject: [PATCH 18/73] Damage for huggers --- .../living/carbon/alien/special/facehugger.dm | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index d0e5bd03ce4..cfea7039c00 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -20,6 +20,8 @@ tint = 3 flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH layer = MOB_LAYER + obj_integrity = 100 + max_integrity = 100 var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case @@ -43,6 +45,11 @@ item_state = "facehugger_impregnated" stat = DEAD +/obj/item/clothing/mask/facehugger/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + ..() + if(integrity < 90) + Die() + /obj/item/clothing/mask/facehugger/attack_alien(mob/user) //can be picked up by aliens attack_hand(user) return @@ -70,19 +77,10 @@ if (sterile) to_chat(user, "It looks like the proboscis has been removed.") -/obj/item/clothing/mask/facehugger/attackby(obj/item/O,mob/m, params) - if(O.force) - Die() - return - -/obj/item/clothing/mask/facehugger/bullet_act(obj/item/projectile/P) - if(P.damage) - Die() /obj/item/clothing/mask/facehugger/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) Die() - return /obj/item/clothing/mask/facehugger/equipped(mob/M) Attach(M) From 7daa26a74877cec357bc38deac4f9b34a1c90624 Mon Sep 17 00:00:00 2001 From: XDTM Date: Sat, 22 Apr 2017 22:34:00 +0200 Subject: [PATCH 19/73] hurt them --- code/modules/mob/living/carbon/alien/special/facehugger.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index cfea7039c00..25f43685d8a 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -47,9 +47,12 @@ /obj/item/clothing/mask/facehugger/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) ..() - if(integrity < 90) + if(obj_integrity < 90) Die() +/obj/item/clothing/mask/facehugger/attackby(obj/item/O,mob/m, params) + return O.attack_obj(src, user) + /obj/item/clothing/mask/facehugger/attack_alien(mob/user) //can be picked up by aliens attack_hand(user) return From afbb0a45e8ce92ae63d6340a7794ddc36efadfe1 Mon Sep 17 00:00:00 2001 From: XDTM Date: Sat, 22 Apr 2017 22:41:06 +0200 Subject: [PATCH 20/73] ree --- code/modules/mob/living/carbon/alien/special/facehugger.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 25f43685d8a..af6bc971114 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -50,7 +50,7 @@ if(obj_integrity < 90) Die() -/obj/item/clothing/mask/facehugger/attackby(obj/item/O,mob/m, params) +/obj/item/clothing/mask/facehugger/attackby(obj/item/O, mob/user, params) return O.attack_obj(src, user) /obj/item/clothing/mask/facehugger/attack_alien(mob/user) //can be picked up by aliens From 4fe95d0459f4f59545d604a808f3066430ad288c Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Thu, 20 Apr 2017 13:50:36 +0100 Subject: [PATCH 21/73] Fixes easter eggs spawning during non-easter So I changed lootspawners to Initialize, which caused some code in easter.dm to start working and added eggs and baskets to maint loot table. - The maintenance loot table is now a global list - The easter event now modifies that global list. - Maintenance loot spawners now run on roundstart --- code/_globalvars/lists/maintenance_loot.dm | 108 ++++++++++++++++ .../game/objects/effects/spawners/lootdrop.dm | 117 ++---------------- code/modules/holiday/easter.dm | 4 - code/modules/holiday/holidays.dm | 6 + tgstation.dme | 1 + 5 files changed, 125 insertions(+), 111 deletions(-) create mode 100644 code/_globalvars/lists/maintenance_loot.dm diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm new file mode 100644 index 00000000000..050e3d8f42c --- /dev/null +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -0,0 +1,108 @@ +//How to balance this table +//------------------------- +//The total added weight of all the entries should be (roughly) equal to the total number of lootdrops +//(take in account those that spawn more than one object!) +// +//While this is random, probabilities tells us that item distribution will have a tendency to look like +//the content of the weighted table that created them. +//The less lootdrops, the less even the distribution. +// +//If you want to give items a weight <1 you can multiply all the weights by 10 +// +//the "" entry will spawn nothing, if you increase this value, +//ensure that you balance it with more spawn points + +//table data: +//----------- +//aft maintenance: 24 items, 18 spots 2 extra (28/08/2014) +//asmaint: 16 items, 11 spots 0 extra (08/08/2014) +//asmaint2: 36 items, 26 spots 2 extra (28/08/2014) +//fpmaint: 5 items, 4 spots 0 extra (08/08/2014) +//fpmaint2: 12 items, 11 spots 2 extra (28/08/2014) +//fsmaint: 0 items, 0 spots 0 extra (08/08/2014) +//fsmaint2: 40 items, 27 spots 5 extra (28/08/2014) +//maintcentral: 2 items, 2 spots 0 extra (08/08/2014) +//port: 5 items, 5 spots 0 extra (08/08/2014) + +GLOBAL_LIST_INIT(maintenance_loot, list( + /obj/item/bodybag = 1, + /obj/item/clothing/glasses/meson = 2, + /obj/item/clothing/glasses/sunglasses = 1, + /obj/item/clothing/gloves/color/fyellow = 1, + /obj/item/clothing/head/hardhat = 1, + /obj/item/clothing/head/hardhat/red = 1, + /obj/item/clothing/head/that = 1, + /obj/item/clothing/head/ushanka = 1, + /obj/item/clothing/head/welding = 1, + /obj/item/clothing/mask/gas = 15, + /obj/item/clothing/suit/hazardvest = 1, + /obj/item/clothing/under/rank/vice = 1, + /obj/item/device/assembly/prox_sensor = 4, + /obj/item/device/assembly/timer = 3, + /obj/item/device/flashlight = 4, + /obj/item/device/flashlight/pen = 1, + /obj/item/device/flashlight/glowstick/random = 4, + /obj/item/device/multitool = 2, + /obj/item/device/radio/off = 2, + /obj/item/device/t_scanner = 5, + /obj/item/weapon/airlock_painter = 1, + /obj/item/stack/cable_coil/random = 4, + /obj/item/stack/cable_coil/random{amount = 5} = 6, + /obj/item/stack/medical/bruise_pack = 1, + /obj/item/stack/rods{amount = 10} = 9, + /obj/item/stack/rods{amount = 23} = 1, + /obj/item/stack/rods{amount = 50} = 1, + /obj/item/stack/sheet/cardboard = 2, + /obj/item/stack/sheet/metal{amount = 20} = 1, + /obj/item/stack/sheet/mineral/plasma = 1, + /obj/item/stack/sheet/rglass = 1, + /obj/item/weapon/book/manual/wiki/engineering_construction = 1, + /obj/item/weapon/book/manual/wiki/engineering_hacking = 1, + /obj/item/clothing/head/cone = 1, + /obj/item/weapon/coin/silver = 1, + /obj/item/weapon/coin/twoheaded = 1, + /obj/item/weapon/poster/random_contraband = 1, + /obj/item/weapon/poster/random_official = 1, + /obj/item/weapon/crowbar = 1, + /obj/item/weapon/crowbar/red = 1, + /obj/item/weapon/extinguisher = 11, + //obj/item/weapon/gun/ballistic/revolver/russian = 1, //disabled until lootdrop is a proper world proc. + /obj/item/weapon/hand_labeler = 1, + /obj/item/weapon/paper/crumpled = 1, + /obj/item/weapon/pen = 1, + /obj/item/weapon/reagent_containers/spray/pestspray = 1, + /obj/item/weapon/reagent_containers/glass/rag = 3, + /obj/item/weapon/stock_parts/cell = 3, + /obj/item/weapon/storage/belt/utility = 2, + /obj/item/weapon/storage/box = 2, + /obj/item/weapon/storage/box/cups = 1, + /obj/item/weapon/storage/box/donkpockets = 1, + /obj/item/weapon/storage/box/lights/mixed = 3, + /obj/item/weapon/storage/box/hug/medical = 1, + /obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 1, + /obj/item/weapon/storage/toolbox/mechanical = 1, + /obj/item/weapon/screwdriver = 3, + /obj/item/weapon/tank/internals/emergency_oxygen = 2, + /obj/item/weapon/vending_refill/cola = 1, + /obj/item/weapon/weldingtool = 3, + /obj/item/weapon/wirecutters = 1, + /obj/item/weapon/wrench = 4, + /obj/item/weapon/relic = 3, + /obj/item/weaponcrafting/receiver = 2, + /obj/item/clothing/head/cone = 2, + /obj/item/weapon/grenade/smokebomb = 2, + /obj/item/device/geiger_counter = 3, + /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange = 1, + /obj/item/device/radio/headset = 1, + /obj/item/device/assembly/infra = 1, + /obj/item/device/assembly/igniter = 2, + /obj/item/device/assembly/signaler = 2, + /obj/item/device/assembly/mousetrap = 2, + /obj/item/weapon/reagent_containers/syringe = 2, + /obj/item/clothing/gloves/color/random = 8, + /obj/item/clothing/shoes/laceup = 1, + /obj/item/weapon/storage/secure/briefcase = 3, + /obj/item/weapon/storage/toolbox/artistic = 2, + /obj/item/toy/eightball = 1, + "" = 3 + )) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 518dc4a7fe7..05d465af90b 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -8,7 +8,13 @@ /obj/effect/spawner/lootdrop/Initialize(mapload) ..() + if(mapload) + // the delay gives holidays chance to modify maint loot + SSticker.OnRoundstart(CALLBACK(src, ./proc/lootdrop)) + else + lootdrop() +/obj/effect/spawner/lootdrop/proc/lootdrop() if(loot && loot.len) var/turf/T = get_turf(src) while(lootcount && loot.len) @@ -57,114 +63,11 @@ /obj/effect/spawner/lootdrop/maintenance name = "maintenance loot spawner" + // see code/_globalvars/lists/maintenance_loot.dm for loot table - //How to balance this table - //------------------------- - //The total added weight of all the entries should be (roughly) equal to the total number of lootdrops - //(take in account those that spawn more than one object!) - // - //While this is random, probabilities tells us that item distribution will have a tendency to look like - //the content of the weighted table that created them. - //The less lootdrops, the less even the distribution. - // - //If you want to give items a weight <1 you can multiply all the weights by 10 - // - //the "" entry will spawn nothing, if you increase this value, - //ensure that you balance it with more spawn points - - //table data: - //----------- - //aft maintenance: 24 items, 18 spots 2 extra (28/08/2014) - //asmaint: 16 items, 11 spots 0 extra (08/08/2014) - //asmaint2: 36 items, 26 spots 2 extra (28/08/2014) - //fpmaint: 5 items, 4 spots 0 extra (08/08/2014) - //fpmaint2: 12 items, 11 spots 2 extra (28/08/2014) - //fsmaint: 0 items, 0 spots 0 extra (08/08/2014) - //fsmaint2: 40 items, 27 spots 5 extra (28/08/2014) - //maintcentral: 2 items, 2 spots 0 extra (08/08/2014) - //port: 5 items, 5 spots 0 extra (08/08/2014) - loot = list( - /obj/item/bodybag = 1, - /obj/item/clothing/glasses/meson = 2, - /obj/item/clothing/glasses/sunglasses = 1, - /obj/item/clothing/gloves/color/fyellow = 1, - /obj/item/clothing/head/hardhat = 1, - /obj/item/clothing/head/hardhat/red = 1, - /obj/item/clothing/head/that = 1, - /obj/item/clothing/head/ushanka = 1, - /obj/item/clothing/head/welding = 1, - /obj/item/clothing/mask/gas = 15, - /obj/item/clothing/suit/hazardvest = 1, - /obj/item/clothing/under/rank/vice = 1, - /obj/item/device/assembly/prox_sensor = 4, - /obj/item/device/assembly/timer = 3, - /obj/item/device/flashlight = 4, - /obj/item/device/flashlight/pen = 1, - /obj/item/device/flashlight/glowstick/random = 4, - /obj/item/device/multitool = 2, - /obj/item/device/radio/off = 2, - /obj/item/device/t_scanner = 5, - /obj/item/weapon/airlock_painter = 1, - /obj/item/stack/cable_coil/random = 4, - /obj/item/stack/cable_coil/random{amount = 5} = 6, - /obj/item/stack/medical/bruise_pack = 1, - /obj/item/stack/rods{amount = 10} = 9, - /obj/item/stack/rods{amount = 23} = 1, - /obj/item/stack/rods{amount = 50} = 1, - /obj/item/stack/sheet/cardboard = 2, - /obj/item/stack/sheet/metal{amount = 20} = 1, - /obj/item/stack/sheet/mineral/plasma = 1, - /obj/item/stack/sheet/rglass = 1, - /obj/item/weapon/book/manual/wiki/engineering_construction = 1, - /obj/item/weapon/book/manual/wiki/engineering_hacking = 1, - /obj/item/clothing/head/cone = 1, - /obj/item/weapon/coin/silver = 1, - /obj/item/weapon/coin/twoheaded = 1, - /obj/item/weapon/poster/random_contraband = 1, - /obj/item/weapon/poster/random_official = 1, - /obj/item/weapon/crowbar = 1, - /obj/item/weapon/crowbar/red = 1, - /obj/item/weapon/extinguisher = 11, - //obj/item/weapon/gun/ballistic/revolver/russian = 1, //disabled until lootdrop is a proper world proc. - /obj/item/weapon/hand_labeler = 1, - /obj/item/weapon/paper/crumpled = 1, - /obj/item/weapon/pen = 1, - /obj/item/weapon/reagent_containers/spray/pestspray = 1, - /obj/item/weapon/reagent_containers/glass/rag = 3, - /obj/item/weapon/stock_parts/cell = 3, - /obj/item/weapon/storage/belt/utility = 2, - /obj/item/weapon/storage/box = 2, - /obj/item/weapon/storage/box/cups = 1, - /obj/item/weapon/storage/box/donkpockets = 1, - /obj/item/weapon/storage/box/lights/mixed = 3, - /obj/item/weapon/storage/box/hug/medical = 1, - /obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 1, - /obj/item/weapon/storage/toolbox/mechanical = 1, - /obj/item/weapon/screwdriver = 3, - /obj/item/weapon/tank/internals/emergency_oxygen = 2, - /obj/item/weapon/vending_refill/cola = 1, - /obj/item/weapon/weldingtool = 3, - /obj/item/weapon/wirecutters = 1, - /obj/item/weapon/wrench = 4, - /obj/item/weapon/relic = 3, - /obj/item/weaponcrafting/receiver = 2, - /obj/item/clothing/head/cone = 2, - /obj/item/weapon/grenade/smokebomb = 2, - /obj/item/device/geiger_counter = 3, - /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange = 1, - /obj/item/device/radio/headset = 1, - /obj/item/device/assembly/infra = 1, - /obj/item/device/assembly/igniter = 2, - /obj/item/device/assembly/signaler = 2, - /obj/item/device/assembly/mousetrap = 2, - /obj/item/weapon/reagent_containers/syringe = 2, - /obj/item/clothing/gloves/color/random = 8, - /obj/item/clothing/shoes/laceup = 1, - /obj/item/weapon/storage/secure/briefcase = 3, - /obj/item/weapon/storage/toolbox/artistic = 2, - /obj/item/toy/eightball = 1, - "" = 3 - ) +/obj/effect/spawner/lootdrop/maintenance/lootdrop() + loot = GLOB.maintenance_loot + ..() /obj/effect/spawner/lootdrop/crate_spawner name = "lootcrate spawner" //USE PROMO CODE "SELLOUT" FOR 20% OFF! diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 29172c9b68f..067162be8ca 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -140,10 +140,6 @@ containsPrize = FALSE qdel(src) -/obj/effect/spawner/lootdrop/maintenance/New() - ..() - loot += list(/obj/item/weapon/reagent_containers/food/snacks/egg/loaded = 15, /obj/item/weapon/storage/bag/easterbasket = 15) - //Easter Recipes + food /obj/item/weapon/reagent_containers/food/snacks/hotcrossbun bitesize = 2 diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 29d5fd7c280..89892655137 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -422,3 +422,9 @@ // to_chat(world, "Easter calculates to be on [begin_day] of [begin_month] ([days_early] early) to [end_day] of [end_month] ([days_extra] extra) for 20[yy]") return ..() + +/datum/holiday/easter/celebrate() + ..() + GLOB.maintenance_loot += list( + /obj/item/weapon/reagent_containers/food/snacks/egg/loaded = 15, + /obj/item/weapon/storage/bag/easterbasket = 15) diff --git a/tgstation.dme b/tgstation.dme index 001cfdb6415..5d2c8cc7fa3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -102,6 +102,7 @@ #include "code\_globalvars\misc.dm" #include "code\_globalvars\sensitive.dm" #include "code\_globalvars\lists\flavor_misc.dm" +#include "code\_globalvars\lists\maintenance_loot.dm" #include "code\_globalvars\lists\mapping.dm" #include "code\_globalvars\lists\mobs.dm" #include "code\_globalvars\lists\names.dm" From 133173c67c802f009d707f82305eb0475cf397a7 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Thu, 20 Apr 2017 14:25:44 +0100 Subject: [PATCH 22/73] Removes adhoc types --- code/_globalvars/lists/maintenance_loot.dm | 10 +++++----- code/game/objects/effects/spawners/lootdrop.dm | 2 +- code/game/objects/items/stacks/rods.dm | 9 +++++++++ code/game/objects/items/stacks/sheets/sheet_types.dm | 3 +++ code/modules/power/cable.dm | 3 +++ 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 050e3d8f42c..849c5248a05 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -47,13 +47,13 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/device/t_scanner = 5, /obj/item/weapon/airlock_painter = 1, /obj/item/stack/cable_coil/random = 4, - /obj/item/stack/cable_coil/random{amount = 5} = 6, + /obj/item/stack/cable_coil/random/five = 6, /obj/item/stack/medical/bruise_pack = 1, - /obj/item/stack/rods{amount = 10} = 9, - /obj/item/stack/rods{amount = 23} = 1, - /obj/item/stack/rods{amount = 50} = 1, + /obj/item/stack/rods/ten = 9, + /obj/item/stack/rods/twentyfive = 1, + /obj/item/stack/rods/fifty = 1, /obj/item/stack/sheet/cardboard = 2, - /obj/item/stack/sheet/metal{amount = 20} = 1, + /obj/item/stack/sheet/metal/twenty = 1, /obj/item/stack/sheet/mineral/plasma = 1, /obj/item/stack/sheet/rglass = 1, /obj/item/weapon/book/manual/wiki/engineering_construction = 1, diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 05d465af90b..a84843b0b24 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -10,7 +10,7 @@ ..() if(mapload) // the delay gives holidays chance to modify maint loot - SSticker.OnRoundstart(CALLBACK(src, ./proc/lootdrop)) + SSticker.OnRoundstart(CALLBACK(src, .proc/lootdrop)) else lootdrop() diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 169d8eeb2b7..2037c719184 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -73,3 +73,12 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ /obj/item/stack/rods/cyborg/update_icon() return + +/obj/item/stack/rods/ten + amount = 10 + +/obj/item/stack/rods/twentyfive + amount = 25 + +/obj/item/stack/rods/fifty + amount = 50 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 6ab9493f4f4..a007dd45455 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -78,6 +78,9 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ /obj/item/stack/sheet/metal/fifty amount = 50 +/obj/item/stack/sheet/metal/twenty + amount = 20 + /obj/item/stack/sheet/metal/five amount = 5 diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index cbb520b6800..fded49f58a2 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -773,3 +773,6 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai item_color = pick("red","orange","yellow","green","cyan","blue","pink","white") icon_state = "coil_[item_color]" ..() + +/obj/item/stack/cable_coil/random/five + amount = 5 From a76d4374c145df47036984a80b4c8371370d70ee Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Thu, 20 Apr 2017 17:31:06 +0100 Subject: [PATCH 23/73] Moves `init_order` to defines, moves SSevents above ticker. --- code/__DEFINES/subsystems.dm | 23 +++++++++++++++++++ code/controllers/subsystem.dm | 4 ++-- code/controllers/subsystem/air.dm | 2 +- code/controllers/subsystem/assets.dm | 4 ++-- code/controllers/subsystem/atoms.dm | 2 +- code/controllers/subsystem/events.dm | 2 +- code/controllers/subsystem/icon_smooth.dm | 4 ++-- code/controllers/subsystem/ipintel.dm | 2 +- code/controllers/subsystem/job.dm | 2 +- code/controllers/subsystem/lighting.dm | 2 +- code/controllers/subsystem/machines.dm | 4 ++-- code/controllers/subsystem/mapping.dm | 2 +- code/controllers/subsystem/minimap.dm | 2 +- code/controllers/subsystem/mobs.dm | 3 +-- code/controllers/subsystem/npcpool.dm | 2 +- code/controllers/subsystem/persistence.dm | 2 +- .../subsystem/processing/overlays.dm | 2 +- code/controllers/subsystem/radio.dm | 3 +-- code/controllers/subsystem/religion.dm | 3 +-- code/controllers/subsystem/shuttle.dm | 4 ++-- code/controllers/subsystem/squeak.dm | 2 +- code/controllers/subsystem/stickyban.dm | 2 +- code/controllers/subsystem/sun.dm | 1 - code/controllers/subsystem/tgui.dm | 1 - code/controllers/subsystem/ticker.dm | 2 +- code/controllers/subsystem/timer.dm | 2 +- code/game/atoms_movable.dm | 5 ++-- 27 files changed, 54 insertions(+), 35 deletions(-) diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 20b3f887453..4596c79ef1e 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -19,3 +19,26 @@ //For servers that can't do with any additional lag, set this to none in flightpacks.dm in subsystem/processing. #define FLIGHTSUIT_PROCESSING_NONE 0 #define FLIGHTSUIT_PROCESSING_FULL 1 + +// Subsystem init_order, from highest priority to lowest priority +// The numbers just define the ordering, they are meaningless otherwise. + +#define INIT_ORDER_JOBS 15 +#define INIT_ORDER_EVENTS 14 +#define INIT_ORDER_TICKER 13 +#define INIT_ORDER_MAPPING 12 +#define INIT_ORDER_ATOMS 11 +#define INIT_ORDER_MACHINES 9 +#define INIT_ORDER_SHUTTLE 3 +#define INIT_ORDER_TIMER 1 +#define INIT_ORDER_DEFAULT 0 +#define INIT_ORDER_AIR -1 +#define INIT_ORDER_MINIMAP -2 +#define INIT_ORDER_ASSETS -3 +#define INIT_ORDER_ICON_SMOOTHING -5 +#define INIT_ORDER_OVERLAY -6 +#define INIT_ORDER_XKEYSCORE -10 +#define INIT_ORDER_STICKY_BAN -10 +#define INIT_ORDER_LIGHTING -20 +#define INIT_ORDER_SQUEAK -40 +#define INIT_ORDER_PERSISTENCE -100 diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index e4dc9f833e0..97e3efaf4ad 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -2,7 +2,7 @@ /datum/controller/subsystem // Metadata; you should define these. name = "fire coderbus" //name of the subsystem - var/init_order = 0 //order of initialization. Higher numbers are initialized first, lower numbers later. Can be decimal and negative values. + var/init_order = INIT_ORDER_DEFAULT //order of initialization. Higher numbers are initialized first, lower numbers later. Use defines in __DEFINES/subsystems.dm for easy understanding of order. var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. var/priority = 50 //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep @@ -208,4 +208,4 @@ next_fire = world.time + wait if ("queued_priority") //editing this breaks things. return 0 - . = ..() \ No newline at end of file + . = ..() diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 852e28077de..919b4cfce92 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -8,7 +8,7 @@ SUBSYSTEM_DEF(air) name = "Air" - init_order = -1 + init_order = INIT_ORDER_AIR priority = 20 wait = 5 flags = SS_BACKGROUND diff --git a/code/controllers/subsystem/assets.dm b/code/controllers/subsystem/assets.dm index ac8f51de0ed..607b142c59b 100644 --- a/code/controllers/subsystem/assets.dm +++ b/code/controllers/subsystem/assets.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(assets) name = "Assets" - init_order = -3 + init_order = INIT_ORDER_ASSETS flags = SS_NO_FIRE var/list/cache = list() @@ -11,4 +11,4 @@ SUBSYSTEM_DEF(assets) for(var/client/C in GLOB.clients) addtimer(CALLBACK(GLOBAL_PROC, .proc/getFilesSlow, C, cache, FALSE), 10) - ..() \ No newline at end of file + ..() diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index 7f1ee2634b4..4ca35e434d2 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(atoms) name = "Atoms" - init_order = 11 + init_order = INIT_ORDER_ATOMS flags = SS_NO_FIRE var/initialized = INITIALIZATION_INSSATOMS diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index cae880485c9..411d6f0b14e 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(events) name = "Events" - init_order = 6 + init_order = INIT_ORDER_EVENTS var/list/control = list() //list of all datum/round_event_control. Used for selecting events based on weight and occurrences. var/list/running = list() //list of all existing /datum/round_event diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index 83c58950185..84df089973f 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(icon_smooth) name = "Icon Smoothing" - init_order = -5 + init_order = INIT_ORDER_ICON_SMOOTHING wait = 1 priority = 35 flags = SS_TICKER @@ -29,4 +29,4 @@ SUBSYSTEM_DEF(icon_smooth) smooth_icon(A) CHECK_TICK - ..() \ No newline at end of file + ..() diff --git a/code/controllers/subsystem/ipintel.dm b/code/controllers/subsystem/ipintel.dm index 0f351c84631..fca394924d9 100644 --- a/code/controllers/subsystem/ipintel.dm +++ b/code/controllers/subsystem/ipintel.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(ipintel) name = "XKeyScore" - init_order = -10 + init_order = INIT_ORDER_XKEYSCORE flags = SS_NO_FIRE var/enabled = 0 //disable at round start to avoid checking reconnects var/throttle = 0 diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 517c72512cb..68e27c9900d 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(job) name = "Jobs" - init_order = 14 + init_order = INIT_ORDER_JOBS flags = SS_NO_FIRE var/list/occupations = list() //List of all jobs diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 39147714ba3..eb61e5ef394 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -5,7 +5,7 @@ GLOBAL_LIST_EMPTY(lighting_update_objects) // List of lighting objects queued fo SUBSYSTEM_DEF(lighting) name = "Lighting" wait = 2 - init_order = -20 + init_order = INIT_ORDER_LIGHTING flags = SS_TICKER var/initialized = FALSE diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index 98527520817..ab941eb1c6b 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(machines) name = "Machines" - init_order = 9 + init_order = INIT_ORDER_MACHINES flags = SS_KEEP_TIMING var/list/processing = list() var/list/currentrun = list() @@ -61,4 +61,4 @@ SUBSYSTEM_DEF(machines) if (istype(SSmachines.processing)) processing = SSmachines.processing if (istype(SSmachines.powernets)) - powernets = SSmachines.powernets \ No newline at end of file + powernets = SSmachines.powernets diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index bae759ac3aa..1499bc5029f 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(mapping) name = "Mapping" - init_order = 12 + init_order = INIT_ORDER_MAPPING flags = SS_NO_FIRE var/list/nuke_tiles = list() diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index 6c3ce67dc23..10c6f8e5c46 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(minimap) name = "Minimap" - init_order = -2 + init_order = INIT_ORDER_MINIMAP flags = SS_NO_FIRE var/const/MINIMAP_SIZE = 2048 var/const/TILE_SIZE = 8 diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index d9b78a77adf..f87b94bac48 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -1,6 +1,5 @@ SUBSYSTEM_DEF(mobs) name = "Mobs" - init_order = 4 priority = 100 flags = SS_KEEP_TIMING|SS_NO_INIT @@ -26,4 +25,4 @@ SUBSYSTEM_DEF(mobs) else GLOB.mob_list.Remove(M) if (MC_TICK_CHECK) - return \ No newline at end of file + return diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index 11d819d0678..abdeb0e9d35 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -11,7 +11,7 @@ SUBSYSTEM_DEF(npcpool) var/list/canBeUsed = list() var/list/needsDelegate = list() var/list/needsAssistant = list() - + var/list/processing = list() var/list/currentrun = list() var/stage diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 80517d1e3a1..e1cf992e8b5 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(persistence) name = "Persistence" - init_order = -100 + init_order = INIT_ORDER_PERSISTENCE flags = SS_NO_FIRE var/savefile/secret_satchels var/list/satchel_blacklist = list() //this is a typecache diff --git a/code/controllers/subsystem/processing/overlays.dm b/code/controllers/subsystem/processing/overlays.dm index c28dc245fae..1a42944bb5f 100644 --- a/code/controllers/subsystem/processing/overlays.dm +++ b/code/controllers/subsystem/processing/overlays.dm @@ -3,7 +3,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays) flags = SS_TICKER|SS_FIRE_IN_LOBBY wait = 1 priority = 500 - init_order = -6 + init_order = INIT_ORDER_OVERLAY stat_tag = "Ov" currentrun = null diff --git a/code/controllers/subsystem/radio.dm b/code/controllers/subsystem/radio.dm index d69575f60f1..de605cb5548 100644 --- a/code/controllers/subsystem/radio.dm +++ b/code/controllers/subsystem/radio.dm @@ -1,6 +1,5 @@ SUBSYSTEM_DEF(radio) name = "Radio" - init_order = 18 flags = SS_NO_FIRE|SS_NO_INIT var/list/datum/radio_frequency/frequencies = list() @@ -39,4 +38,4 @@ SUBSYSTEM_DEF(radio) frequency.frequency = new_frequency frequencies[f_text] = frequency - return frequency \ No newline at end of file + return frequency diff --git a/code/controllers/subsystem/religion.dm b/code/controllers/subsystem/religion.dm index df772925d40..bba7dd082e0 100644 --- a/code/controllers/subsystem/religion.dm +++ b/code/controllers/subsystem/religion.dm @@ -1,6 +1,5 @@ SUBSYSTEM_DEF(religion) name = "Religion" - init_order = 19 flags = SS_NO_FIRE|SS_NO_INIT var/religion @@ -8,4 +7,4 @@ SUBSYSTEM_DEF(religion) var/bible_name var/bible_icon_state var/bible_item_state - var/holy_weapon_type \ No newline at end of file + var/holy_weapon_type diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 4270ff7851f..bc8c14a74d1 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -3,7 +3,7 @@ SUBSYSTEM_DEF(shuttle) name = "Shuttle" wait = 10 - init_order = 3 + init_order = INIT_ORDER_SHUTTLE flags = SS_KEEP_TIMING|SS_NO_TICK_CHECK var/list/mobile = list() @@ -505,4 +505,4 @@ SUBSYSTEM_DEF(shuttle) centcom_message = SSshuttle.centcom_message ordernum = SSshuttle.ordernum - points = SSshuttle.points \ No newline at end of file + points = SSshuttle.points diff --git a/code/controllers/subsystem/squeak.dm b/code/controllers/subsystem/squeak.dm index a4f0d6e52dd..d94efd0a4ac 100644 --- a/code/controllers/subsystem/squeak.dm +++ b/code/controllers/subsystem/squeak.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(squeak) name = "Squeak" - priority = 40 + init_order = INIT_ORDER_SQUEAK flags = SS_NO_FIRE var/list/exposed_wires = list() diff --git a/code/controllers/subsystem/stickyban.dm b/code/controllers/subsystem/stickyban.dm index b5702455b87..371cf22b3bf 100644 --- a/code/controllers/subsystem/stickyban.dm +++ b/code/controllers/subsystem/stickyban.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(stickyban) name = "Sticky Ban" - init_order = -10 + init_order = INIT_ORDER_STICKY_BAN flags = SS_NO_FIRE var/list/cache = list() diff --git a/code/controllers/subsystem/sun.dm b/code/controllers/subsystem/sun.dm index 7f443aadc05..7a3528cc3d9 100644 --- a/code/controllers/subsystem/sun.dm +++ b/code/controllers/subsystem/sun.dm @@ -1,7 +1,6 @@ SUBSYSTEM_DEF(sun) name = "Sun" wait = 600 - init_order = 2 flags = SS_NO_TICK_CHECK|SS_NO_INIT var/angle var/dx diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index edec49bcbbb..862dfb0f98d 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -1,7 +1,6 @@ SUBSYSTEM_DEF(tgui) name = "tgui" wait = 9 - init_order = 16 flags = SS_NO_INIT|SS_FIRE_IN_LOBBY priority = 110 diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 5d572f8a07a..0e75f5e681f 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(ticker) name = "Ticker" - init_order = 13 + init_order = INIT_ORDER_TICKER priority = 200 flags = SS_FIRE_IN_LOBBY|SS_KEEP_TIMING diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 6a63f090e56..55ebbfa3524 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(timer) name = "Timer" wait = 1 //SS_TICKER subsystem, so wait is in ticks - init_order = 1 + init_order = INIT_ORDER_TIMER flags = SS_FIRE_IN_LOBBY|SS_TICKER|SS_NO_INIT diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 9c12f5d6712..f96d6eb8a23 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -125,6 +125,7 @@ var/datum/proximity_monitor/proximity_monitor = src.proximity_monitor if(proximity_monitor) proximity_monitor.HandleMove() + return 1 /atom/movable/proc/clean_on_move() @@ -175,7 +176,7 @@ if(stationloving && force) STOP_PROCESSING(SSinbounds, src) - + QDEL_NULL(proximity_monitor) . = ..() @@ -627,4 +628,4 @@ /atom/movable/proc/ConveyorMove(movedir) set waitfor = FALSE if(!anchored && has_gravity()) - step(src, movedir) \ No newline at end of file + step(src, movedir) From 73eaed4cfd159ef97fb44eee262fbcd674d25238 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Thu, 20 Apr 2017 17:52:03 +0100 Subject: [PATCH 24/73] No roundstart stuff needed anymore --- code/game/objects/effects/spawners/lootdrop.dm | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index a84843b0b24..fde0fabd20e 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -8,13 +8,6 @@ /obj/effect/spawner/lootdrop/Initialize(mapload) ..() - if(mapload) - // the delay gives holidays chance to modify maint loot - SSticker.OnRoundstart(CALLBACK(src, .proc/lootdrop)) - else - lootdrop() - -/obj/effect/spawner/lootdrop/proc/lootdrop() if(loot && loot.len) var/turf/T = get_turf(src) while(lootcount && loot.len) @@ -65,7 +58,7 @@ name = "maintenance loot spawner" // see code/_globalvars/lists/maintenance_loot.dm for loot table -/obj/effect/spawner/lootdrop/maintenance/lootdrop() +/obj/effect/spawner/lootdrop/maintenance/Initialize(mapload) loot = GLOB.maintenance_loot ..() From 5d5f99e062292c222fcc6235e0d2e82dd4513106 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Thu, 20 Apr 2017 19:38:47 +0100 Subject: [PATCH 25/73] While we're here, regenerate station names on holidays --- code/__HELPERS/names.dm | 26 ++++++++++++-------------- code/controllers/subsystem/events.dm | 4 ++++ code/game/objects/items/charter.dm | 4 ++-- code/modules/admin/secrets.dm | 4 ++-- code/modules/events/holiday/xmas.dm | 6 ++++++ code/modules/holiday/holidays.dm | 28 ++++++++++++++-------------- 6 files changed, 40 insertions(+), 32 deletions(-) diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index e95a61cec32..49be0a12c3b 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -55,20 +55,25 @@ GLOBAL_VAR(command_name) return capitalize(name) /proc/station_name() - if(GLOB.station_name) - return GLOB.station_name + if(!GLOB.station_name) + var/newname + if(config && config.station_name) + newname = config.station_name + else + newname = new_station_name() - if(config && config.station_name) - GLOB.station_name = config.station_name - else - GLOB.station_name = new_station_name() + set_station_name(newname) + + return GLOB.station_name + +/proc/set_station_name(newname) + GLOB.station_name = newname if(config && config.server_name) world.name = "[config.server_name][config.server_name==GLOB.station_name ? "" : ": [GLOB.station_name]"]" else world.name = GLOB.station_name - return GLOB.station_name /proc/new_station_name() var/random = rand(1,5) @@ -235,10 +240,3 @@ GLOBAL_VAR(syndicate_code_response) //Code response for traitors. code_phrase += ", " return code_phrase - -/proc/change_station_name(designation) - if(config && config.server_name) - world.name = "[config.server_name]: [designation]" - else - world.name = designation - GLOB.station_name = designation diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index 411d6f0b14e..b99b71ed336 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -179,9 +179,13 @@ SUBSYSTEM_DEF(events) if(!holidays) holidays = list() holidays[holiday.name] = holiday + else + qdel(holiday) if(holidays) holidays = shuffle(holidays) + // regenerate station name because holiday prefixes. + set_station_name(new_station_name()) world.update_status() /datum/controller/subsystem/events/proc/toggleWizardmode() diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm index 98e03ef18ca..41a793df301 100644 --- a/code/game/objects/items/charter.dm +++ b/code/game/objects/items/charter.dm @@ -54,7 +54,7 @@ if(standard_station_regex.Find(new_name)) to_chat(user, "Your name has been automatically approved.") - rename_station(new_name, user) + rename_station(new_name, user.name, user.real_name, key_name(user)) return to_chat(user, "Your name has been sent to your employers for approval.") @@ -79,7 +79,7 @@ response_timer_id = null /obj/item/station_charter/proc/rename_station(designation, uname, ureal_name, ukey) - change_station_name(designation) + set_station_name(designation) minor_announce("[ureal_name] has designated your station as [station_name()]", "Captain's Charter", 0) log_game("[ukey] has renamed the station as [station_name()].") diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 74e024472bc..7f0479eac91 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -157,7 +157,7 @@ var/new_name = input(usr, "Please input a new name for the station.", "What?", "") as text|null if(!new_name) return - change_station_name(new_name) + set_station_name(new_name) log_admin("[key_name(usr)] renamed the station to \"[new_name]\".") message_admins("[key_name_admin(usr)] renamed the station to: [new_name].") priority_announce("[command_name()] has renamed the station to \"[new_name]\".") @@ -166,7 +166,7 @@ if(!check_rights(R_ADMIN)) return var/new_name = new_station_name() - change_station_name(new_name) + set_station_name(new_name) log_admin("[key_name(usr)] reset the station name.") message_admins("[key_name_admin(usr)] reset the station name.") priority_announce("[command_name()] has renamed the station to \"[new_name]\".") diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index c5f74ed68e6..e29888f888d 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -84,6 +84,12 @@ name = "christmas tree spawner" var/tree = /obj/structure/flora/tree/pine/xmas +/obj/effect/landmark/xmastree/Initialize(mapload) + ..() + if(FESTIVE_SEASON in SSevents.holidays) + new tree(get_turf(src)) + qdel(src) + /obj/effect/landmark/xmastree/rdrod name = "festivus pole spawner" tree = /obj/structure/festivus diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 89892655137..a73b9efa539 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -7,6 +7,8 @@ var/end_day = 0 // Default of 0 means the holiday lasts a single day var/end_month = 0 + var/always_celebrate = FALSE // for christmas neverending, or testing. + // This proc gets run before the game starts when the holiday is activated. Do festive shit here. /datum/holiday/proc/celebrate() @@ -22,6 +24,9 @@ // Return 1 if this holidy should be celebrated today /datum/holiday/proc/shouldCelebrate(dd, mm, yy) + if(always_celebrate) + return TRUE + if(!end_day) end_day = begin_day if(!end_month) @@ -30,26 +35,26 @@ if(end_month > begin_month) //holiday spans multiple months in one year if(mm == end_month) //in final month if(dd <= end_day) - return 1 + return TRUE else if(mm == begin_month)//in first month if(dd >= begin_day) - return 1 + return TRUE else if(mm in begin_month to end_month) //holiday spans 3+ months and we're in the middle, day doesn't matter at all - return 1 + return TRUE else if(end_month == begin_month) // starts and stops in same month, simplest case if(mm == begin_month && (dd in begin_day to end_day)) - return 1 + return TRUE else // starts in one year, ends in the next if(mm >= begin_month && dd >= begin_day) // Holiday ends next year - return 1 + return TRUE if(mm <= end_month && dd <= end_day) // Holiday started last year - return 1 + return TRUE - return 0 + return FALSE // The actual holidays @@ -329,11 +334,6 @@ begin_month = DECEMBER end_day = 31 -/datum/holiday/festive_season/celebrate() - for(var/obj/effect/landmark/xmastree/XT in GLOB.landmarks_list) - new XT.tree(get_turf(XT)) - qdel(XT) - /datum/holiday/festive_season/greet() return "Have a nice festive season!" @@ -348,8 +348,8 @@ /datum/holiday/friday_thirteenth/shouldCelebrate(dd, mm, yy) if(dd == 13) if(time2text(world.timeofday, "DDD") == "Fri") - return 1 - return 0 + return TRUE + return FALSE /datum/holiday/friday_thirteenth/getStationPrefix() return pick("Mike","Friday","Evil","Myers","Murder","Deathly","Stabby") From 899a69e32de00b52fbccd6e276085ba69df14ad5 Mon Sep 17 00:00:00 2001 From: militaires Date: Sun, 23 Apr 2017 00:40:54 +0300 Subject: [PATCH 26/73] fixes people with no skin/golems dropping skin when gibbed. --- code/modules/food_and_drinks/kitchen_machinery/gibber.dm | 7 +++---- code/modules/mob/living/carbon/human/species.dm | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 9784a03a20d..13442c40320 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -186,10 +186,9 @@ var/mob/living/carbon/human/gibee = occupant if(gibee.dna && gibee.dna.species) typeofmeat = gibee.dna.species.meat - typeofskin = gibee.dna.species.skinned_type - else - typeofmeat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human - typeofskin = /obj/item/stack/sheet/animalhide/human + if(gibee.dna.species.skinned_type) + typeofskin = gibee.dna.species.skinned_type + else if(iscarbon(occupant)) var/mob/living/carbon/C = occupant typeofmeat = C.type_of_meat diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index efee3652574..ac2fed005f8 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -28,7 +28,7 @@ var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id. var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc) var/meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing - var/skinned_type = /obj/item/stack/sheet/animalhide/generic + var/skinned_type = null var/list/no_equip = list() // slots the race can't equip stuff to var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids var/blacklisted = 0 //Flag to exclude from green slime core species. @@ -115,7 +115,7 @@ var/obj/item/thing = C.get_item_by_slot(slot_id) if(thing && (!thing.species_exception || !is_type_in_list(src,thing.species_exception))) C.dropItemToGround(thing) - + // this needs to be FIRST because qdel calls update_body which checks if we have DIGITIGRADE legs or not and if not then removes DIGITIGRADE from species_traits if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs") species_traits += DIGITIGRADE From b9c54f517f7d62516624befcb168cb2ddae3b070 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sat, 22 Apr 2017 17:52:47 -0400 Subject: [PATCH 27/73] Minor refactors (#26305) obj/on_log changed to atom/on_log. Boolean parameter in No admin irc message now checked in client/Del instead of mob/Logout Removed an empty New() 1 -> TRUE removed a potential crash in mob/Login --- code/game/atoms.dm | 4 ++++ code/game/objects/objs.dm | 8 ------- code/game/objects/structures/morgue.dm | 6 ++--- code/modules/client/client_procs.dm | 19 +++++++++++++++ code/modules/mob/living/login.dm | 2 +- code/modules/mob/living/silicon/login.dm | 2 +- code/modules/mob/login.dm | 10 ++++---- code/modules/mob/logout.dm | 30 +++--------------------- 8 files changed, 34 insertions(+), 47 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f34e532fb3e..a80b5a17817 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -500,6 +500,10 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) /atom/proc/mech_melee_attack(obj/mecha/M) return +//If a mob logouts/logins in side of an object you can use this proc +/atom/proc/on_log(login) + if(loc) + loc.on_log(login) /* diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 0a4c310e75f..4b20f12bf82 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -165,14 +165,6 @@ /obj/proc/hide(h) return -//If a mob logouts/logins in side of an object you can use this proc -/obj/proc/on_log() - ..() - if(isobj(loc)) - var/obj/Loc=loc - Loc.on_log() - - /obj/singularity_pull(S, current_size) if(!anchored || current_size >= STAGE_FIVE) step_towards(src,S) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index bdf83fc0cfe..3edb53a1ff4 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -24,9 +24,6 @@ var/locked = 0 var/opendir = SOUTH -/obj/structure/bodycontainer/New() - ..() - /obj/structure/bodycontainer/Destroy() open() if(connected) @@ -34,7 +31,8 @@ connected = null return ..() -/obj/structure/bodycontainer/on_log() +/obj/structure/bodycontainer/on_log(login) + ..() update_icon() /obj/structure/bodycontainer/update_icon() diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 5de492f7113..576e7baa869 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -340,6 +340,25 @@ GLOBAL_LIST(external_rsc_urls) adminGreet(1) holder.owner = null GLOB.admins -= src + + if (!GLOB.admins.len && SSticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. + if(!GLOB.admins.len) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. + var/cheesy_message = pick( + "I have no admins online!",\ + "I'm all alone :(",\ + "I'm feeling lonely :(",\ + "I'm so lonely :(",\ + "Why does nobody love me? :(",\ + "I want a man :(",\ + "Where has everyone gone?",\ + "I need a hug :(",\ + "Someone come hold me :(",\ + "I need someone on me :(",\ + "What happened? Where has everyone gone?",\ + "Forever alone :("\ + ) + + send2irc("Server", "[cheesy_message] (No admins online)") GLOB.ahelp_tickets.ClientLogout(src) GLOB.directory -= ckey diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index ea406eeb301..97ffa72aecb 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -5,7 +5,7 @@ mind.show_memory(src, 0) //Round specific stuff - if(SSticker && SSticker.mode) + if(SSticker.mode) switch(SSticker.mode.name) if("sandbox") CanBuild() diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm index e22e104f1dd..9474b787ead 100644 --- a/code/modules/mob/living/silicon/login.dm +++ b/code/modules/mob/living/silicon/login.dm @@ -1,5 +1,5 @@ /mob/living/silicon/Login() - if(mind && SSticker && SSticker.mode) + if(mind && SSticker.mode) SSticker.mode.remove_cultist(mind, 0, 0) SSticker.mode.remove_revolutionary(mind, 0) SSticker.mode.remove_gangster(mind, remove_bosses=1) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 754be994508..2e642ff6a7c 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -15,13 +15,11 @@ next_move = 1 ..() - if (key != client.key) - key = client.key + reset_perspective(loc) - if(isobj(loc)) - var/obj/Loc=loc - Loc.on_log() + if(loc) + loc.on_log(TRUE) //readd this mob's HUDs (antag, med, etc) reload_huds() @@ -47,4 +45,4 @@ if(client) client.click_intercept = null - client.view = world.view // Resets the client.view in case it was changed. \ No newline at end of file + client.view = world.view // Resets the client.view in case it was changed. \ No newline at end of file diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 0a6fcb00171..aadb7e6d588 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -2,34 +2,10 @@ SStgui.on_logout(src) unset_machine() GLOB.player_list -= src - if(GLOB.admin_datums[src.ckey]) - if (SSticker && SSticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. - var/admins_number = GLOB.admins.len - if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. - var/cheesy_message = pick( list( \ - "I have no admins online!",\ - "I'm all alone :(",\ - "I'm feeling lonely :(",\ - "I'm so lonely :(",\ - "Why does nobody love me? :(",\ - "I want a man :(",\ - "Where has everyone gone?",\ - "I need a hug :(",\ - "Someone come hold me :(",\ - "I need someone on me :(",\ - "What happened? Where has everyone gone?",\ - "Forever alone :("\ - ) ) - if(cheesy_message) - cheesy_message += " (No admins online)" - - - send2irc("Server", "[cheesy_message]") ..() - if(isobj(loc)) - var/obj/Loc=loc - Loc.on_log() + if(loc) + loc.on_log(FALSE) - return 1 \ No newline at end of file + return TRUE \ No newline at end of file From 7dfc3cfe13f9504ea72003261a58efd9addce0f1 Mon Sep 17 00:00:00 2001 From: Leo Date: Sat, 22 Apr 2017 18:54:33 -0300 Subject: [PATCH 28/73] Removes rogue bold tag --- code/modules/admin/admin.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index f9d7dd6ec66..c923acedfe8 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -43,7 +43,7 @@ body += "PM - " body += "SM - " body += "FLW - " - body += "LOGS\]
" + body += "LOGS\]
" body += "Mob type = [M.type]

" From 750ab086abb255b63ebc058c1e914e1cb8964381 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 22 Apr 2017 23:05:28 +0100 Subject: [PATCH 29/73] Doors crushing people makes a visible message :cl: coiax fix: When you are crushed by a door, it prints a visible message, instead of, in some cases, silently damaging you. /:cl: Not all things damaged by doors would scream or even be stunned. --- code/game/machinery/doors/door.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index c57c210855a..807d4c9aca9 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -285,6 +285,7 @@ /obj/machinery/door/proc/crush() for(var/mob/living/L in get_turf(src)) + L.visible_message("[src] closes on [L], crushing them!", "[src] closes on you and crushes you!") if(isalien(L)) //For xenos L.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 1.5) //Xenos go into crit after aproximately the same amount of crushes as humans. L.emote("roar") From 62d9ad7319600e280f9089d7502f52d31562ee90 Mon Sep 17 00:00:00 2001 From: MMMiracles Date: Sat, 22 Apr 2017 20:35:01 -0400 Subject: [PATCH 30/73] more fix tweaks --- _maps/map_files/Cerestation/cerestation.dmm | 1318 ++++++++++++------- 1 file changed, 850 insertions(+), 468 deletions(-) diff --git a/_maps/map_files/Cerestation/cerestation.dmm b/_maps/map_files/Cerestation/cerestation.dmm index 6b93d1247c2..0368ad7326e 100644 --- a/_maps/map_files/Cerestation/cerestation.dmm +++ b/_maps/map_files/Cerestation/cerestation.dmm @@ -16030,8 +16030,7 @@ c_tag = "Cargo Hall East"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "" + network = list("SS13","QM") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -19703,8 +19702,7 @@ c_tag = "Cargo Security Checkpoint"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "" + network = list("SS13","QM") }, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -20689,8 +20687,7 @@ c_tag = "Docking Quantum Pad"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "" + network = list("SS13","QM") }, /obj/machinery/airalarm{ dir = 8; @@ -21051,8 +21048,7 @@ /obj/machinery/camera{ c_tag = "Courtroom Jury East"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -21111,8 +21107,7 @@ /obj/machinery/camera{ c_tag = "Dorm Lockers"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -22641,8 +22636,7 @@ c_tag = "Cargo Lobby"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "" + network = list("SS13","QM") }, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/brown/corner{ @@ -23585,8 +23579,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -24113,8 +24106,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; @@ -25566,8 +25558,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 1 @@ -25842,8 +25833,7 @@ /obj/machinery/camera{ c_tag = "Vault Airlock"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /obj/machinery/holopad, /turf/open/floor/plasteel/black, @@ -26357,8 +26347,7 @@ /obj/machinery/camera{ c_tag = "Command Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -26419,8 +26408,7 @@ /obj/machinery/camera{ c_tag = "Cargo Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -26777,8 +26765,7 @@ /obj/machinery/camera{ c_tag = "Custodials"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /obj/item/key/janitor, /turf/open/floor/plasteel{ @@ -26912,8 +26899,7 @@ /obj/machinery/camera{ c_tag = "Command Asteroid Hall 10"; dir = 8; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -27010,8 +26996,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 1 @@ -27798,8 +27783,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -27840,8 +27824,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/girder, /obj/structure/grille, @@ -27887,8 +27870,7 @@ /obj/machinery/camera{ c_tag = "Vault"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) @@ -28390,8 +28372,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -28407,8 +28388,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -29158,8 +29138,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -29532,8 +29511,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -30069,8 +30047,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -30190,8 +30167,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 1 @@ -30635,8 +30611,7 @@ /obj/machinery/camera{ c_tag = "Bar Backroom"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -31181,8 +31156,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -31691,8 +31665,7 @@ c_tag = "Medbay Asteroid Hallway 6"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "" + network = list("SS13","QM") }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -31718,8 +31691,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -33025,8 +32997,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; @@ -33842,8 +33813,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -34134,8 +34104,7 @@ /obj/machinery/camera{ c_tag = "Bar"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32 @@ -34417,8 +34386,7 @@ /obj/machinery/camera{ c_tag = "EVA Storage"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/blue/side{ tag = "icon-blue (EAST)"; @@ -34457,8 +34425,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -34653,11 +34620,6 @@ /area/crew_quarters/bar) "bjs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/button/door{ - id = "kitchen"; - name = "Privacy Shutters"; - pixel_x = -24 - }, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -35181,8 +35143,7 @@ /obj/machinery/camera{ c_tag = "Service Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -36317,9 +36278,6 @@ }, /area/engine/supermatter) "bmt" = ( -/obj/machinery/power/emitter{ - state = 2 - }, /obj/structure/cable{ icon_state = "0-2"; pixel_y = 1; @@ -36330,6 +36288,10 @@ d2 = 4; icon_state = "2-4" }, +/obj/machinery/power/emitter{ + anchored = 1; + state = 2 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -36346,9 +36308,6 @@ }, /area/engine/supermatter) "bmv" = ( -/obj/machinery/power/emitter{ - state = 2 - }, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -36359,18 +36318,23 @@ icon_state = "4-8"; pixel_x = 0 }, +/obj/machinery/power/emitter{ + anchored = 1; + state = 2 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) "bmw" = ( -/obj/machinery/power/emitter{ - state = 2 - }, /obj/structure/cable{ d2 = 8; icon_state = "0-8" }, +/obj/machinery/power/emitter{ + anchored = 1; + state = 2 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -36728,8 +36692,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -36948,8 +36911,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 4 @@ -37077,8 +37039,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -37095,8 +37056,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/disposalpipe/segment{ dir = 2; @@ -37184,8 +37144,7 @@ /obj/machinery/camera{ c_tag = "Surgery Observation"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -37361,17 +37320,17 @@ /area/crew_quarters/bar) "boe" = ( /obj/machinery/vending/cola, -/obj/structure/sign/poster/random{ - name = "random official poster"; - pixel_x = 32; - random_basetype = /obj/structure/sign/poster/official - }, /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -28 }, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -37381,6 +37340,11 @@ /obj/machinery/light_switch{ pixel_x = -25 }, +/obj/machinery/button/door{ + id = "kitchen"; + name = "Privacy Shutters"; + pixel_x = -24 + }, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -37500,8 +37464,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -37610,8 +37573,7 @@ /obj/machinery/camera{ c_tag = "Engineering Asteroid Hallway 2"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -37781,8 +37743,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -38186,8 +38147,7 @@ c_tag = "Virology Breakroom"; dir = 5; icon_state = "camera"; - network = list("SS13","CMO"); - tag = "" + network = list("SS13","CMO") }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -38262,8 +38222,7 @@ /obj/machinery/camera{ c_tag = "Primary Tool Storage North"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -39518,8 +39477,7 @@ c_tag = "Medbay Asteroid Hallway 3"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "" + network = list("SS13","QM") }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -39827,8 +39785,7 @@ c_tag = "Virology 2"; dir = 5; icon_state = "camera"; - network = list("SS13","CMO"); - tag = "" + network = list("SS13","CMO") }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -39852,8 +39809,7 @@ c_tag = "Virology"; dir = 5; icon_state = "camera"; - network = list("SS13","CMO"); - tag = "" + network = list("SS13","CMO") }, /obj/machinery/requests_console{ department = "Virology"; @@ -41322,8 +41278,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -41594,8 +41549,7 @@ c_tag = "Virology Airlocks"; dir = 5; icon_state = "camera"; - network = list("SS13","CMO"); - tag = "" + network = list("SS13","CMO") }, /turf/open/floor/plasteel/whitegreen/side{ tag = "icon-whitegreen (WEST)"; @@ -42136,8 +42090,7 @@ c_tag = "SM East"; dir = 9; icon_state = "camera"; - network = list("SS13","CE"); - tag = "" + network = list("SS13","CE") }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -43494,8 +43447,7 @@ "bxY" = ( /obj/machinery/atmospherics/components/unary/cryo_cell{ dir = 8; - icon_state = "cell-off"; - tag = "" + icon_state = "cell-off" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -44024,8 +43976,7 @@ /obj/machinery/camera{ c_tag = "Medbay Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -44139,8 +44090,7 @@ /obj/machinery/camera{ c_tag = "Medbay East"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /obj/structure/noticeboard{ dir = 8; @@ -44191,8 +44141,7 @@ /obj/machinery/camera{ c_tag = "Cyrotubes"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -44552,8 +44501,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 4; @@ -44729,8 +44677,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/open/floor/plasteel/yellow/corner{ tag = "icon-yellowcorner (NORTH)"; @@ -44978,8 +44925,7 @@ /obj/machinery/camera{ c_tag = "Primary Tool Storage South"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -45033,6 +44979,11 @@ /area/hydroponics) "bAG" = ( /obj/machinery/vending/hydronutrients, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, /turf/open/floor/plasteel/green/side{ tag = "icon-green (NORTH)"; icon_state = "green"; @@ -45436,8 +45387,7 @@ c_tag = "Medbay West"; dir = 5; icon_state = "camera"; - network = list("SS13"); - tag = "" + network = list("SS13") }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -45572,6 +45522,11 @@ /obj/machinery/light{ dir = 4 }, +/obj/machinery/camera{ + c_tag = "Hydroponics East"; + dir = 9; + icon_state = "camera" + }, /turf/open/floor/plasteel/darkgreen/side{ tag = "icon-darkgreen (NORTHEAST)"; icon_state = "darkgreen"; @@ -45584,8 +45539,7 @@ /obj/machinery/camera{ c_tag = "Hydroponics Backroom"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /obj/structure/cable/orange{ d1 = 1; @@ -46259,7 +46213,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/closed/wall{ +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) @@ -46497,8 +46453,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/engine{ @@ -46622,8 +46577,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -46766,8 +46720,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/firedoor, /turf/open/floor/plating/airless, @@ -47374,8 +47327,7 @@ /obj/structure/cable/yellow{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -47489,8 +47441,7 @@ /obj/machinery/camera{ c_tag = "Engineering Security Checkpoint"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -48158,8 +48109,7 @@ c_tag = "Medbay Asteroid Hallway 2"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "" + network = list("SS13","QM") }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -48639,6 +48589,7 @@ /obj/machinery/light{ dir = 1 }, +/obj/structure/closet/secure_closet/engineering_electrical, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -49470,6 +49421,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/closet/secure_closet/engineering_electrical, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; icon_state = "yellow"; @@ -50341,8 +50293,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ @@ -50410,8 +50361,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; @@ -50601,8 +50551,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; @@ -51195,8 +51144,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -51216,8 +51164,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -52023,6 +51970,7 @@ icon_state = "1-2"; pixel_y = 0 }, +/obj/item/clothing/gloves/color/yellow, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -52100,8 +52048,7 @@ c_tag = "Engineering East"; dir = 9; icon_state = "camera"; - network = list("SS13","CE"); - tag = "" + network = list("SS13","CE") }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; @@ -52526,8 +52473,7 @@ c_tag = "Atmospherics North"; dir = 9; icon_state = "camera"; - network = list("SS13","CE"); - tag = "" + network = list("SS13","CE") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -53272,8 +53218,7 @@ c_tag = "Atmospherics Airlock"; dir = 5; icon_state = "camera"; - network = list("SS13","CE"); - tag = "" + network = list("SS13","CE") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -53726,8 +53671,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -53748,8 +53692,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -53765,8 +53708,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -53936,8 +53878,7 @@ c_tag = "Medbay Storage"; dir = 10; icon_state = "camera"; - network = list("SS13","CMO"); - tag = "" + network = list("SS13","CMO") }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -54178,8 +54119,7 @@ /obj/machinery/camera{ c_tag = "Library East"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -54422,8 +54362,7 @@ /obj/structure/cable/yellow{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /obj/structure/disposalpipe/segment, /turf/open/floor/plating{ @@ -56205,8 +56144,7 @@ c_tag = "Atmospheric Tanks 2"; dir = 5; icon_state = "camera"; - network = list("SS13","CE"); - tag = "" + network = list("SS13","CE") }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57033,8 +56971,7 @@ c_tag = "Medbay Asteroid Hallway 1"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "" + network = list("SS13","QM") }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57631,8 +57568,7 @@ /obj/machinery/camera{ c_tag = "Library Explicits"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -58077,8 +58013,7 @@ c_tag = "Atmospherics Distro"; dir = 9; icon_state = "camera"; - network = list("SS13","CE"); - tag = "" + network = list("SS13","CE") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -59358,8 +59293,7 @@ /obj/machinery/camera{ c_tag = "Chapel West"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/chapel{ tag = "icon-chapel (NORTH)"; @@ -59880,8 +59814,7 @@ /obj/machinery/camera{ c_tag = "Chapel East"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61349,8 +61282,7 @@ /obj/machinery/camera{ c_tag = "Chapel Office"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61509,8 +61441,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61528,8 +61459,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/structure/disposalpipe/segment, /turf/open/floor/plating{ @@ -61543,8 +61473,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 1 @@ -61762,8 +61691,7 @@ /obj/machinery/camera{ c_tag = "Chapel Coffins"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62418,8 +62346,7 @@ /obj/machinery/camera{ c_tag = "Crematorium"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -62766,8 +62693,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -63048,8 +62974,7 @@ /obj/machinery/camera{ c_tag = "Docking Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -63248,8 +63173,7 @@ /obj/machinery/camera{ c_tag = "Service-Research Bridge"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /obj/structure/disposalpipe/segment, /turf/open/floor/engine{ @@ -63482,8 +63406,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -63494,8 +63417,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -63513,8 +63435,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -63704,8 +63625,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; @@ -63720,8 +63640,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ icon_state = "0-2"; @@ -64205,8 +64124,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plating/airless/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -64221,8 +64139,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/open/floor/plating/airless/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -64295,8 +64212,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; @@ -65731,8 +65647,7 @@ /obj/machinery/camera{ c_tag = "Research Asteroid Hallway 1"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -65890,8 +65805,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -65903,8 +65817,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/floorgrime{ @@ -66361,8 +66274,7 @@ /obj/machinery/camera{ c_tag = "Research Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67223,8 +67135,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/door/airlock/atmos{ name = "Research Atmospherics Checkpoint"; @@ -67330,8 +67241,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67345,8 +67255,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67542,8 +67451,7 @@ c_tag = "Docking Quantum Pad"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "" + network = list("SS13","QM") }, /obj/machinery/airalarm{ dir = 8; @@ -69048,8 +68956,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -69080,8 +68987,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -69098,8 +69004,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/structure/sign/map/left/ceres{ pixel_y = 32 @@ -69119,8 +69024,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/camera{ c_tag = "Research Asteroid Hallway 2" @@ -69140,8 +69044,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -69165,8 +69068,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -69188,8 +69090,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -69206,8 +69107,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/light{ dir = 1 @@ -69227,8 +69127,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ @@ -69248,8 +69147,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/neutral/corner{ @@ -69267,8 +69165,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/camera{ c_tag = "Research Asteroid Hallway 3" @@ -69285,8 +69182,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -69305,8 +69201,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 4; @@ -71762,8 +71657,7 @@ c_tag = "Science SMES"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "" + network = list("SS13","QM") }, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -73315,8 +73209,7 @@ c_tag = "Toxins Mixing"; dir = 9; icon_state = "camera"; - network = list("SS13","RD"); - tag = "" + network = list("SS13","RD") }, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (EAST)"; @@ -75084,8 +74977,7 @@ /obj/machinery/camera{ c_tag = "Docking Asteroid Hall 13"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -75154,8 +75046,7 @@ /obj/machinery/camera{ c_tag = "Docking Asteroid Hall 9"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -75892,8 +75783,7 @@ c_tag = "Research Xenobiology-Testing Airlock"; dir = 9; icon_state = "camera"; - network = list("SS13","RD"); - tag = "" + network = list("SS13","RD") }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78190,8 +78080,7 @@ /obj/machinery/camera{ c_tag = "Docking Asteroid Hall 12"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78233,8 +78122,7 @@ /obj/machinery/camera{ c_tag = "Docking Asteroid Hall 8"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78313,8 +78201,7 @@ c_tag = "Testing Lab"; dir = 9; icon_state = "camera"; - network = list("SS13","RD"); - tag = "" + network = list("SS13","RD") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78594,8 +78481,7 @@ c_tag = "Research Testing Containment"; dir = 9; icon_state = "camera"; - network = list("SS13","RD"); - tag = "" + network = list("SS13","RD") }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -81760,8 +81646,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -85064,8 +84949,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral/corner{ @@ -85932,8 +85816,7 @@ /obj/machinery/camera{ c_tag = "Genetics Monkey Dome"; dir = 9; - icon_state = "camera"; - tag = "" + icon_state = "camera" }, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -89770,8 +89653,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -91373,8 +91255,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/airlock/glass_engineering{ name = "Chief Engineer's Office"; @@ -93609,8 +93490,7 @@ c_tag = "Toxins Storage"; dir = 9; icon_state = "camera"; - network = list("SS13","RD"); - tag = "" + network = list("SS13","RD") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -94500,6 +94380,508 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) +"dnM" = ( +/turf/closed/mineral, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnN" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnO" = ( +/turf/closed/mineral, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnP" = ( +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnQ" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnR" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnS" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnT" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnU" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnV" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnW" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnX" = ( +/obj/structure/closet, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnY" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnZ" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/barricade/wooden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doa" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dob" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/barricade/wooden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doc" = ( +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dod" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doe" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dof" = ( +/turf/closed/mineral, +/area/derelict/secret{ + valid_territory = 0 + }) +"dog" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doh" = ( +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doi" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doj" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-20"; + light_color = "#E1E17D"; + light_range = 5; + luminosity = 2; + tag = "icon-plant-20" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dok" = ( +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dol" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dom" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"don" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doo" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dop" = ( +/obj/structure/bed, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doq" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dor" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dos" = ( +/obj/structure/sign/map/left/ceres{ + pixel_x = 32 + }, +/obj/structure/closet/crate/bin, +/obj/item/weapon/paper/crumpled{ + info = "...SOMETHING IN THE ROCKS, IT WATCHES US ALL..." + }, +/obj/item/weapon/paper/crumpled{ + info = "...THEY SENT US HERE FOR A REASON...TERRIBLE..." + }, +/obj/item/weapon/paper/crumpled{ + info = "...EMPTY HALLS...USELESS SPACE..." + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dot" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dou" = ( +/turf/closed/mineral/random/low_chance, +/area/derelict/secret{ + valid_territory = 0 + }) +"dov" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/weapon/paper/crumpled{ + info = "I can't be here for much longer, this station is too empty for its own good. Something is wrong..." + }, +/obj/item/weapon/paper{ + info = "
2XXX - 2nd Trimestor


I hide in here, away from the masses, not like it matters much considering how fucking huge this place is. "; + name = "Journal Log" + }, +/obj/item/weapon/paper{ + info = "
2XXX - 3rd Trimestor


I hear strange whispers from the halls, longing for blood. Something isn't right here. Why did they transfer us here to work in the first place? "; + name = "Journal Log 2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dow" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dox" = ( +/obj/item/weapon/paper/crumpled/bloody{ + info = "...THE HOPLINE CALLS...IT THIRSTS FOR BLOOD...I MUST GO..." + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doy" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doz" = ( +/obj/structure/table, +/obj/item/weapon/pen, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doA" = ( +/turf/closed/mineral, +/area/derelict/secret{ + valid_territory = 0 + }) +"doB" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doC" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doD" = ( +/obj/structure/sign/map/left{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doE" = ( +/obj/structure/table, +/obj/structure/sign/map/right{ + pixel_y = -32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doF" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doG" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doH" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doI" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doJ" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doK" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doL" = ( +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doM" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doN" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doO" = ( +/obj/machinery/smartfridge/food, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"doP" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/northleft{ + name = "Kitchen Pick-Up"; + req_access_txt = "28" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"doQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/machinery/door/window/southleft{ + name = "Hydroponics Pick-Up"; + req_access_txt = "35" + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"doR" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"doS" = ( +/obj/machinery/plantgenes, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"doT" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"doU" = ( +/obj/machinery/recharge_station, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) (1,1,1) = {" aaa @@ -98692,12 +99074,12 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aab +aab +aab +aab +aad aaa aaa aaa @@ -98947,16 +99329,16 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aab +aab +aab +aab +aab +aab +aad +aab +aab aaa aaa aaa @@ -99204,17 +99586,17 @@ aaa aag aaa aaa -aaa -aaa +aab +aab +aab +aab aad -aaa -aaa -aaa -aaa -aaa aad -aaa -aaa +aad +aad +aab +aab +aad aaa aaa aaa @@ -99461,17 +99843,17 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aab +aab +aab +aab +aad +aad +aad +aad +aad +aad +aad aaa aaa aaa @@ -99717,19 +100099,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aab +aab +dnS +dnZ +dog +don +dou +doB +aac +aac +aac +aad aaa aaa aaa @@ -99974,19 +100356,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +aab aad -aaa -aaa -aaa -aaa -aaa -aaa +dnM +dnT +doa +doh +doo +dov +doC +doI aac +aac +aad aad aab aaa @@ -100232,19 +100614,19 @@ aaa aaa aad aad -aab -aab -aab -aaa -aaa -aaa -aaa -aaa +aad +dnN +dnU +dob +doi +dop +dow +doD +doJ aac -aab -aab -aab aac +aad +aad aab aaa aaa @@ -100489,21 +100871,21 @@ aaa aac aac aad -aab -aab -aab -aab -aab -aaa -aad aad +dnO +dnV +doc +doj +doq +dox +doE +doK aac -aab -aab -aab aad aad -aaa +aad +aab +aab aaa aaa aaa @@ -100747,21 +101129,21 @@ aac aac aad aad +dnP +dnW +dod +dok +dor +doy +doF +doL aac -aac -aac +aad aab +aad +aad +aad aab -aac -aac -aac -aab -aab -aab -aac -aac -aaa -aaa aad aaa aaa @@ -101004,22 +101386,22 @@ aaa aad aac aac +dnQ +dnX +doe +dol +dos +doz +doG +doM aac -aac -aac -aab +aad aab aac -aac -aac +aad +aad +aad aab -aab -aab -aac -aac -aaa -aaa -aaa aaa aaa aaa @@ -101261,24 +101643,24 @@ aaa aad aac aac -aac -aaa -aaa -aaa -aaa -aac -aac -aac +dnR +dnY +dof +dom +dot +doA +doH +doN aad aad aab +aac +aac +aac +aad +aad aad aad -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -101517,26 +101899,26 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +aac +aac aad +aad +aac +aac +aac aac aad aad aad +aab +aac +aac +aac aad aab aab aad -aaa -aaa -aaa -aaa -aaa -aaa +aad aaa aaa abC @@ -101777,23 +102159,23 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aab -aab -aab +aad +aac +aac +aac +aac +aad aab +aad +aad +aad +aad +aad aab aab aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aad aaa aaa abC @@ -102034,19 +102416,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa +aad +aad +aad +aad +aad +aad +aab +aad +aad +aad aab aab aab -aab -aab -aab -aaa -aaa -aaa aaa aaa aaa @@ -102293,13 +102675,13 @@ aaa aaa aaa aaa -aaa +aad aaa aab aab aab aab -aaa +aab aaa aaa aad @@ -107808,7 +108190,7 @@ crg cqo cgN cta -cuY +doU cuY cwS cLE @@ -111341,7 +111723,7 @@ byr bCN bAI bFg -byr +doS bBL bJj bKP @@ -111836,7 +112218,7 @@ bfF bgy bhs biD -bjr +blh bkl blh bmk @@ -112093,7 +112475,7 @@ cKo bch bch biE -bch +doO bkm bli bli @@ -112870,18 +113252,18 @@ blj bml bjw bjw -bch +doP bqU bax btO -bBL -bwN +doQ +bAJ byt bzF bAJ bBI bCQ -bEg +bAJ bFi bGA bBL @@ -113138,9 +113520,9 @@ bzG bvm bvm bCR -bvm +doR bFj -bvm +doT bBL bJq bKT @@ -113908,7 +114290,7 @@ byw bzJ byw bBJ -bCU +byw bEh bFl bGC @@ -129809,8 +130191,8 @@ aaa aaa aaa aaa -aaa -aaa +cKF +cKF aaa aaa aZf @@ -130068,7 +130450,7 @@ aaa aaa aaa aaa -aaa +cKF aaa aZf aZt @@ -148515,9 +148897,9 @@ aaa aaa dnB dnD -dnG -dnH -dnI +dnD +dnD +dnD anT aoX aoU From 352752d029f9f7e3e07e2ec9ddf1c187b2623bca Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sat, 22 Apr 2017 21:26:07 -0400 Subject: [PATCH 31/73] Fixes Advanced Proc Call --- code/modules/admin/verbs/debug.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 66863503072..51a80223e0f 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -92,7 +92,7 @@ GLOBAL_PROTECT(AdminProcCall) UNTIL(!GLOB.AdminProcCall) to_chat(usr, "Running your proc") GLOB.AdminProcCall = usr.client.ckey //if this runtimes, too bad for you - world.WrapAdminProcCall(target, procname, arguments) + . = world.WrapAdminProcCall(target, procname, arguments) GLOB.AdminProcCall = null //adv proc call this, ya nerds @@ -100,7 +100,7 @@ GLOBAL_PROTECT(AdminProcCall) if(target == GLOBAL_PROC) return call(procname)(arglist(arguments)) else - return call(procname)(arglist(arguments)) + return call(target, procname)(arglist(arguments)) /proc/IsAdminAdvancedProcCall() return usr && usr.client && GLOB.AdminProcCall == usr.client.ckey From 36a571ecb8cd3d714da1b7029d26c632448622d8 Mon Sep 17 00:00:00 2001 From: BeeSting12 Date: Sat, 22 Apr 2017 21:33:32 -0400 Subject: [PATCH 32/73] fixes compile issues --- tgstation.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tgstation.dme b/tgstation.dme index ce31408553c..8985f09c2f3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -656,8 +656,8 @@ #include "code\game\objects\effects\mines.dm" #include "code\game\objects\effects\misc.dm" #include "code\game\objects\effects\overlays.dm" -#include "code\game\objects\effects\proximity.dm" #include "code\game\objects\effects\portals.dm" +#include "code\game\objects\effects\proximity.dm" #include "code\game\objects\effects\spiders.dm" #include "code\game\objects\effects\step_triggers.dm" #include "code\game\objects\effects\wanted_poster.dm" From b4c9caf253770fba53cdf4a1b494698c1d712d6a Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sat, 22 Apr 2017 21:54:04 -0400 Subject: [PATCH 33/73] Quite possibly the smallest microoptimization here (#26407) --- code/controllers/subsystem.dm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index e4dc9f833e0..dfa9984f388 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -145,10 +145,11 @@ /datum/controller/subsystem/proc/pause() . = 1 - if (state == SS_RUNNING) - state = SS_PAUSED - else if (state == SS_SLEEPING) - state = SS_PAUSING + switch(state) + if(SS_RUNNING) + state = SS_PAUSED + if(SS_SLEEPING) + state = SS_PAUSING //used to initialize the subsystem AFTER the map has loaded @@ -208,4 +209,4 @@ next_fire = world.time + wait if ("queued_priority") //editing this breaks things. return 0 - . = ..() \ No newline at end of file + . = ..() From e2e24371294fc507d9d2ef31948e47497387ee1d Mon Sep 17 00:00:00 2001 From: bagil Date: Sun, 23 Apr 2017 03:58:09 +0000 Subject: [PATCH 34/73] Automatic changelog compile, [ci skip] --- html/changelog.html | 40 ++++------------------ html/changelogs/.all_changelog.yml | 5 +++ html/changelogs/AutoChangeLog-pr-26044.yml | 7 ---- 3 files changed, 12 insertions(+), 40 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-26044.yml diff --git a/html/changelog.html b/html/changelog.html index 151ddacd984..25e46e97e11 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,13 @@ -->
+

23 April 2017

+

coiax updated:

+
    +
  • Centcom would like to inform all employees that they have ears.
  • +
  • Adds "ear" organs to all carbons. These organs store ear damage and deafness. A carbon without any ears is deaf. Genetic deafness functions as before.
  • +
+

22 April 2017

Cyberboss updated:

    @@ -1271,39 +1278,6 @@
    • Medipens are no longer reusable.
    - -

    19 February 2017

    -

    Basilman updated:

    -
      -
    • some toolboxes, very rarely, have more than one latch
    • -
    -

    Joan updated:

    -
      -
    • You can now put components, and deposit components from slabs, directly into the Ark of the Clockwork Justicar provided it actually requires components.
    • -
    • Taunting Tirade now leaves a confusing and weakening trail instead of confusing and weakening everyone in view.
    • -
    • Invoking Inath-neq/Nzcrentr is now 33% cheaper and has a 33% lower cooldown.
    • -
    -

    Tofa01 updated:

    -
      -
    • [Delta] Removes SSU From Mining Equipment Room
    • -
    • Changes centcomm ferry to require centcomm general access instead of admin permission.
    • -
    -

    coiax updated:

    -
      -
    • Nuke ops syndicate cyborgs have been split into two seperate uplink items. Medical cyborgs now cost 35 TC, assault cyborgs now cost 65 TC.
    • -
    -

    grimreaperx15 updated:

    -
      -
    • Blood Cult Pylons will now rapidly regenerate any nearby cultists blood, in addition to the normal healing they do.
    • -
    -

    ma44 updated:

    -
      -
    • Intercepted messages from a lavaland syndicate base reveals they have additional grenade and other miscellaneous equipment.
    • -
    -

    uraniummeltdown updated:

    -
      -
    • Shuttle engines have new sprites.
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index ced65e245df..bd0f91fdc75 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -10639,3 +10639,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Gold and Light Pink slime extracts no longer disappear before working. coiax: - bugfix: Fixed people understanding languages over the radio when they shouldn't. +2017-04-23: + coiax: + - rscadd: Centcom would like to inform all employees that they have ears. + - rscadd: Adds "ear" organs to all carbons. These organs store ear damage and deafness. + A carbon without any ears is deaf. Genetic deafness functions as before. diff --git a/html/changelogs/AutoChangeLog-pr-26044.yml b/html/changelogs/AutoChangeLog-pr-26044.yml deleted file mode 100644 index 97ce1414d9d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-26044.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "coiax" -delete-after: True -changes: - - rscadd: "Centcom would like to inform all employees that they have ears." - - rscadd: "Adds \"ear\" organs to all carbons. These organs store ear damage and -deafness. A carbon without any ears is deaf. Genetic -deafness functions as before." From c2c96f7b7fecdeeaa5ca10c36aabe677eb250092 Mon Sep 17 00:00:00 2001 From: blah Date: Sun, 23 Apr 2017 10:37:15 +0100 Subject: [PATCH 35/73] Removes a lavaland_surface_ww_vault.dmm because its just bad. --- _maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm | 1 + tgstation.dme | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm index 2890b4954b3..ab0173231e3 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm @@ -131,6 +131,7 @@ }, /turf/open/floor/engine/cult{ baseturf = /turf/open/floor/plating/lava/smooth; + }, /obj/structure/fans/tiny/invisible, /area/ruin/powered) diff --git a/tgstation.dme b/tgstation.dme index 078a9f053c0..c229ef57a0a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -657,8 +657,8 @@ #include "code\game\objects\effects\mines.dm" #include "code\game\objects\effects\misc.dm" #include "code\game\objects\effects\overlays.dm" -#include "code\game\objects\effects\proximity.dm" #include "code\game\objects\effects\portals.dm" +#include "code\game\objects\effects\proximity.dm" #include "code\game\objects\effects\spiders.dm" #include "code\game\objects\effects\step_triggers.dm" #include "code\game\objects\effects\wanted_poster.dm" From 21aaaa23eb4a33bfcf9263278c085b26ddb9259e Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Sun, 23 Apr 2017 03:40:56 -0700 Subject: [PATCH 36/73] Update carbon.dm --- code/modules/mob/living/carbon/carbon.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b040c59d0c9..4e654f7665d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -326,6 +326,7 @@ if (W) W.layer = initial(W.layer) W.plane = initial(W.plane) + changeNext_move(0) if (legcuffed) var/obj/item/weapon/W = legcuffed legcuffed = null @@ -338,6 +339,7 @@ if (W) W.layer = initial(W.layer) W.plane = initial(W.plane) + changeNext_move(0) /mob/living/carbon/proc/clear_cuffs(obj/item/I, cuff_break) if(!I.loc || buckled) From c26a37e473cee0ac91b9d042406d44e1d4fd8ebc Mon Sep 17 00:00:00 2001 From: blah Date: Sun, 23 Apr 2017 14:16:46 +0100 Subject: [PATCH 37/73] Fixes it --- .../LavaRuins/lavaland_surface_ww_vault.dmm | 10010 ---------------- code/datums/ruins/lavaland.dm | 7 - 2 files changed, 10017 deletions(-) delete mode 100644 _maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm deleted file mode 100644 index ab0173231e3..00000000000 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm +++ /dev/null @@ -1,10010 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/closed/indestructible, -/area/ruin/powered) -"c" = ( -/turf/open/floor/engine/cult, -/area/ruin/powered) -"d" = ( -/obj/structure/destructible/cult/pylon, -/turf/open/floor/engine/cult, -/area/ruin/powered) -"e" = ( -/turf/open/floor/plating{ - icon_state = "cultdamage5" - }, -/area/ruin/powered) -"f" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/open/floor/engine/cult, -/area/ruin/powered) -"g" = ( -/turf/open/floor/circuit/off, -/area/ruin/powered) -"h" = ( -/turf/closed/indestructible{ - desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick."; - icon = 'icons/turf/walls/cult_wall.dmi'; - icon_state = "cult" - }, -/area/ruin/powered) -"i" = ( -/turf/open/floor/plating{ - icon_state = "cultdamage3" - }, -/area/ruin/powered) -"j" = ( -/turf/open/floor/plating{ - icon_state = "cultdamage6" - }, -/area/ruin/powered) -"k" = ( -/obj/effect/gateway, -/turf/open/floor/engine/cult, -/area/ruin/powered) -"l" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/open/floor/circuit/off, -/area/ruin/powered) -"m" = ( -/obj/machinery/wish_granter_dark, -/turf/open/floor/circuit/green/off, -/area/ruin/powered) -"n" = ( -/turf/open/floor/circuit/green/off, -/area/ruin/powered) -"o" = ( -/obj/structure/destructible/cult/pylon, -/turf/open/floor/circuit/green/off, -/area/ruin/powered) -"p" = ( -/obj/structure/signpost, -/turf/open/floor/circuit/green/off, -/area/ruin/powered) -"q" = ( -/obj/effect/meatgrinder, -/turf/open/floor/circuit/green/off, -/area/ruin/powered) -"r" = ( -/obj/structure/destructible/cult/pylon, -/turf/open/floor/circuit/off, -/area/ruin/powered) -"s" = ( -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"t" = ( -/turf/open/floor/plating{ - icon_state = "cultdamage2" - }, -/area/ruin/powered) -"u" = ( -/turf/open/floor/carpet, -/area/ruin/powered) -"v" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/open/floor/carpet, -/area/ruin/powered) -"w" = ( -/obj/machinery/door/airlock/vault{ - locked = 1 - }, -/turf/open/floor/engine/cult, -/area/ruin/powered) -"x" = ( -/obj/structure/destructible/cult/pylon, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"y" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"z" = ( -/turf/template_noop, -/turf/closed/indestructible{ - desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick."; - icon = 'icons/turf/walls/cult_wall.dmi'; - icon_state = "cult" - }, -/area/ruin/powered) -"A" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/template_noop, -/area/template_noop) -"B" = ( -/obj/effect/mob_spawn/human/miner/rig, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"C" = ( -/obj/machinery/door/airlock/vault{ - locked = 1 - }, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - - }, -/obj/structure/fans/tiny/invisible, -/area/ruin/powered) -"D" = ( -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - initial_gas_mix = "o2=14;n2=23;TEMP=300" - }, -/area/template_noop) -"E" = ( -/turf/closed/indestructible, -/area/template_noop) -"F" = ( -/obj/item/weapon/paper{ - info = "meat grinder requires sacri" - }, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - initial_gas_mix = "o2=14;n2=23;TEMP=300" - }, -/area/template_noop) -"G" = ( -/obj/effect/mob_spawn/human/syndicatecommando, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - initial_gas_mix = "o2=14;n2=23;TEMP=300" - }, -/area/template_noop) -"H" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - initial_gas_mix = "o2=14;n2=23;TEMP=300" - }, -/area/template_noop) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -a -a -a -a -a -a -a -a -a -b -b -s -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -c -c -b -b -a -a -a -a -a -a -a -a -b -s -s -h -s -s -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -b -b -a -a -a -a -a -a -a -b -s -h -h -h -s -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -b -b -a -a -a -a -a -a -b -s -s -h -h -s -s -s -s -s -s -h -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -h -h -c -c -b -b -a -a -a -a -a -b -b -s -s -h -h -h -h -h -h -c -h -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -f -c -h -c -c -c -b -b -b -b -b -b -b -b -h -s -h -h -s -s -s -s -s -h -s -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -h -h -c -c -c -c -h -s -s -s -s -h -s -y -h -s -y -h -h -h -h -h -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -c -f -c -d -h -c -c -f -c -h -s -s -h -s -h -y -s -h -y -h -h -s -s -s -h -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -c -h -c -c -c -h -h -c -f -f -c -h -s -s -h -s -h -s -y -h -s -s -s -s -s -s -h -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -c -c -c -c -c -h -c -c -h -h -h -h -c -c -f -h -s -s -h -s -s -s -x -h -s -x -s -s -s -s -h -s -s -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -h -h -c -h -c -c -h -c -c -c -h -h -s -h -s -s -s -s -h -s -s -s -h -s -s -h -s -s -b -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -h -c -c -c -c -c -c -c -h -c -h -c -f -h -h -c -c -c -h -s -h -h -h -h -h -h -s -s -s -h -s -s -h -s -s -s -s -s -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -h -c -c -c -h -h -c -c -h -c -h -c -c -c -h -d -c -c -h -s -c -c -c -c -c -h -h -h -h -h -s -s -h -s -x -s -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -c -c -h -h -c -c -c -h -c -c -h -c -h -h -c -c -h -h -c -h -h -s -h -c -c -c -c -c -d -c -h -s -s -s -h -s -s -s -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -c -c -c -c -c -h -c -c -c -h -d -c -h -c -c -h -c -c -c -c -c -h -s -s -h -h -h -f -f -c -c -c -h -s -s -s -h -s -s -s -s -s -s -b -a -a -a -a -a -a -D -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -h -h -c -c -h -c -c -h -c -c -h -h -h -c -c -c -h -s -s -s -s -h -h -h -c -c -c -h -s -s -y -h -s -x -s -s -s -s -b -D -D -D -a -a -a -D -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -h -d -c -c -c -h -c -c -h -c -c -h -c -c -c -c -h -h -c -c -h -h -s -s -s -s -s -h -h -c -c -h -s -y -s -w -s -s -s -s -s -s -b -a -a -D -D -D -D -a -a -a -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -h -c -c -c -h -h -c -f -c -h -c -c -h -c -c -h -d -c -c -c -c -h -h -c -c -h -h -s -s -s -s -s -h -c -c -h -s -s -s -w -s -s -s -s -s -s -b -a -a -a -D -a -a -a -a -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -h -h -h -c -c -h -c -c -c -h -f -c -h -c -c -h -h -c -c -h -c -c -h -c -c -c -h -h -h -x -s -s -h -c -c -h -s -s -s -h -s -x -s -s -s -s -b -D -D -a -a -a -a -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -h -h -c -c -h -f -c -c -h -c -c -h -c -c -c -h -c -c -h -c -c -h -h -c -c -c -f -h -h -s -s -h -c -c -h -h -h -h -h -s -s -s -s -s -s -b -a -D -D -a -a -a -a -a -a -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -h -h -c -c -h -c -c -c -h -f -c -h -c -c -c -h -c -c -h -f -c -c -h -h -c -f -c -c -h -h -s -h -c -c -c -c -s -s -h -s -s -s -s -s -s -b -D -D -D -D -a -A -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -h -c -c -h -c -c -c -h -c -c -h -h -c -c -h -c -c -h -h -c -c -c -h -c -s -s -s -s -h -s -h -h -c -c -c -s -s -h -s -x -B -s -s -s -b -a -D -D -D -a -a -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -h -c -h -c -f -h -c -c -c -h -c -c -c -h -c -c -h -c -c -c -h -c -f -c -h -h -s -s -s -s -c -s -s -h -c -c -c -s -s -h -s -s -s -s -s -s -b -D -D -D -D -D -D -D -D -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -h -c -f -c -c -h -c -c -h -h -c -c -c -h -c -c -h -h -c -c -h -h -h -h -h -h -s -s -s -s -c -s -h -h -h -h -h -s -s -h -s -s -y -s -s -s -b -a -a -a -a -a -a -a -a -D -D -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -h -h -c -c -f -h -c -c -h -d -c -c -c -h -c -c -c -h -h -c -c -c -c -c -c -h -h -s -s -s -h -h -h -s -s -s -s -s -s -h -s -x -s -s -s -s -b -a -a -a -a -a -a -a -a -D -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -h -d -c -c -h -c -c -h -c -c -c -c -h -h -d -c -c -h -h -h -h -c -c -c -c -h -h -h -h -h -s -s -s -s -s -s -s -s -h -s -s -s -s -s -s -b -E -E -E -E -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -h -h -h -h -h -h -c -c -c -c -c -c -c -c -h -h -c -c -c -c -c -h -h -h -c -c -c -h -s -s -s -s -s -s -s -s -x -s -s -h -s -s -s -s -s -s -C -F -G -D -D -D -D -D -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -h -c -c -c -c -c -c -h -h -h -h -c -f -c -c -c -c -d -h -c -f -c -h -s -s -s -s -s -s -h -h -h -s -s -h -s -x -s -s -s -s -C -D -D -D -H -D -D -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -h -h -h -c -c -h -h -h -c -c -c -h -h -c -c -c -c -c -c -c -c -c -c -h -c -c -h -h -s -s -s -s -h -h -h -s -h -s -s -h -s -s -s -s -s -s -b -E -E -E -E -a -a -D -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -h -h -c -c -c -h -h -h -c -h -c -c -h -h -h -h -h -h -h -c -c -h -c -c -h -s -s -s -s -h -h -x -s -s -h -s -s -h -s -s -s -s -s -s -b -a -a -a -a -a -a -D -D -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -h -c -c -c -c -d -h -h -h -c -c -h -c -f -f -c -c -h -c -c -c -c -c -h -h -s -s -s -h -s -s -y -s -h -s -s -h -s -x -s -s -s -s -b -a -a -a -a -a -a -D -D -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -h -h -c -c -c -c -c -c -h -c -c -h -f -c -f -f -c -h -h -c -c -c -c -c -h -s -s -s -s -s -s -s -s -h -s -s -h -s -s -s -s -s -s -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -h -c -c -c -c -c -c -h -c -c -h -h -h -h -c -f -c -h -c -c -c -c -c -h -s -s -s -s -s -s -h -h -h -s -s -h -s -s -s -s -s -s -b -D -D -a -a -a -a -a -a -a -D -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -h -c -c -c -c -c -c -h -c -c -c -c -d -h -c -c -c -h -h -h -h -h -h -h -h -s -s -c -s -h -h -s -s -s -s -h -s -x -s -s -s -b -b -a -D -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -h -h -c -c -c -c -c -h -c -c -c -c -c -h -h -c -c -c -c -c -c -c -c -c -h -h -s -h -h -h -s -s -s -s -y -h -s -s -s -b -b -b -a -a -D -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -h -h -c -c -c -c -h -h -c -c -c -c -c -h -h -c -c -c -c -c -c -c -c -c -h -h -h -s -s -s -s -s -s -s -h -s -s -b -a -a -a -a -a -D -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -f -f -c -c -h -h -c -c -c -c -h -c -c -c -c -c -c -h -h -h -h -h -h -d -c -c -c -c -c -c -s -s -s -s -s -s -s -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(41,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -h -h -c -c -c -c -c -c -c -h -c -c -c -c -h -h -h -h -h -c -f -c -c -c -h -c -c -c -c -c -c -c -c -c -s -s -s -s -s -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(42,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -h -c -c -c -d -h -h -c -c -h -h -c -f -c -c -c -c -h -c -c -c -c -f -h -h -c -c -c -h -h -h -h -h -c -s -s -s -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(43,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -h -h -c -c -c -h -h -c -c -c -h -h -h -c -c -f -c -h -c -c -h -h -h -h -c -c -c -c -h -f -c -c -h -h -h -h -h -h -h -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(44,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -h -h -c -c -h -h -c -c -c -c -d -h -c -c -c -c -h -c -c -h -c -c -c -c -c -c -c -h -c -f -c -c -c -h -h -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(45,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -h -h -c -c -h -h -h -c -c -c -h -h -h -d -c -h -c -c -h -c -c -c -h -h -h -h -h -f -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(46,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -h -h -c -c -c -h -h -h -c -c -c -h -h -c -h -c -c -h -c -c -c -h -d -c -c -c -c -h -h -h -h -h -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(47,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -h -c -c -c -c -d -h -c -c -c -c -c -c -h -c -c -h -c -c -c -c -c -c -c -c -h -h -d -h -h -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(48,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -h -c -c -c -c -c -h -h -h -c -c -c -c -h -c -c -h -h -h -c -c -c -c -h -h -h -f -c -f -c -f -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(49,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -c -c -h -h -c -c -f -f -c -c -h -h -h -h -h -h -c -c -c -f -h -h -h -h -h -h -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(50,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -h -h -h -c -c -c -c -c -c -c -c -d -h -h -c -c -c -c -c -c -c -c -c -c -c -c -h -h -h -h -h -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(51,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -i -c -c -c -c -c -c -h -h -h -c -c -c -c -c -c -c -c -h -h -d -c -c -f -c -c -c -c -c -c -c -h -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(52,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -f -c -c -c -d -c -c -c -c -h -c -c -c -c -c -c -c -c -c -h -h -h -h -c -c -c -c -c -c -c -h -h -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(53,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -h -h -h -h -h -h -c -c -c -c -c -c -c -h -h -c -c -c -h -h -h -h -f -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(54,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -h -h -h -c -c -c -f -f -c -h -h -h -h -h -d -c -f -c -c -h -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(55,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -c -j -c -c -c -f -c -c -c -c -c -c -c -c -c -h -h -h -c -c -c -c -c -c -c -c -c -c -c -c -c -f -h -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(56,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -d -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -h -h -h -h -c -c -c -c -c -c -c -c -c -h -h -h -c -f -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(57,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -e -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -h -h -c -c -c -c -c -h -h -h -h -d -c -c -f -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(58,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -i -c -c -j -c -c -c -c -c -c -c -c -c -h -h -h -h -h -h -h -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(59,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -k -c -c -c -c -c -c -s -s -s -c -k -c -c -c -c -c -c -c -c -c -c -c -c -h -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(60,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -e -c -c -c -c -c -c -c -c -c -c -c -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -c -h -w -w -h -h -h -h -h -h -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(61,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -f -c -c -c -c -c -c -c -j -c -c -c -c -c -i -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(62,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -d -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -f -c -c -c -d -u -u -u -u -d -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(63,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -f -c -c -c -c -c -c -c -c -c -c -f -c -d -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -v -u -u -u -c -c -f -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(64,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -j -c -f -c -c -c -c -c -c -u -u -u -u -c -f -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(65,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -e -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -u -u -v -u -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(66,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -j -c -c -f -c -c -c -c -c -e -c -c -c -c -i -c -c -c -c -c -c -f -c -u -u -u -u -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(67,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -j -c -c -c -c -c -c -c -c -c -c -c -f -c -k -c -c -d -u -u -u -u -d -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(68,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(69,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -k -c -c -f -c -c -c -c -c -c -c -c -f -c -c -c -c -c -d -c -c -c -c -c -c -c -u -u -u -v -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(70,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -k -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(71,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -d -c -c -c -c -c -c -c -c -c -c -c -i -c -c -c -c -c -c -f -c -c -u -u -u -u -c -i -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(72,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -i -c -c -c -c -c -c -c -c -e -c -c -c -c -i -c -c -c -c -c -c -c -c -c -c -c -c -d -u -u -u -u -d -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(73,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -j -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(74,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -g -g -c -c -c -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -f -c -u -v -u -u -c -c -c -c -f -c -f -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(75,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -g -g -g -c -c -c -c -c -c -c -c -f -c -c -c -f -c -c -i -c -c -c -c -c -u -u -u -u -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(76,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -g -c -c -i -c -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(77,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -g -c -c -c -c -c -l -c -c -c -c -g -g -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -d -u -u -u -u -d -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(78,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -g -c -c -c -c -g -c -c -c -c -g -c -c -c -c -c -c -c -d -c -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -c -c -c -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(79,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -g -g -k -c -c -g -c -c -c -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -f -c -c -c -v -u -u -u -c -c -f -c -c -c -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(80,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -c -c -c -g -c -c -c -g -c -c -c -c -c -t -c -c -c -c -c -f -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(81,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -g -c -g -c -c -c -f -g -c -c -d -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(82,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -c -g -c -g -c -c -c -g -c -c -c -c -c -f -j -c -c -c -c -c -c -c -f -c -d -u -u -u -u -d -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(83,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -c -g -c -g -c -c -c -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(84,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -g -c -g -c -c -g -c -g -g -c -g -g -c -c -c -c -c -g -f -c -c -k -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(85,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -l -g -g -c -c -g -c -g -c -c -g -c -c -c -c -g -g -g -c -c -c -c -c -c -c -c -c -f -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(86,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -g -g -d -g -c -g -c -g -g -c -f -c -c -g -c -c -c -c -c -c -c -c -j -c -c -c -c -k -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(87,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -g -c -g -g -g -g -g -k -g -c -c -c -c -g -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(88,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -c -g -g -g -g -c -c -g -c -c -c -g -g -c -c -f -c -c -c -c -d -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(89,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -g -i -c -g -f -g -c -c -c -c -g -c -c -c -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(90,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -g -g -c -g -g -g -g -g -c -g -g -r -c -g -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(91,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -i -c -g -g -g -c -g -g -g -c -g -c -g -g -c -g -g -c -c -c -f -c -c -c -c -j -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(92,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -g -l -g -g -g -g -g -c -g -g -g -c -g -g -c -c -g -g -c -c -c -c -c -c -c -c -f -c -c -c -c -b -b -a -a -a -a -A -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(93,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -g -g -g -g -c -g -c -g -l -g -c -g -g -c -c -g -g -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(94,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -g -g -c -d -g -c -g -g -c -g -g -g -g -g -g -c -c -c -c -c -c -c -c -f -c -c -c -c -d -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(95,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -g -g -g -g -c -c -g -g -l -g -g -g -g -g -g -f -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(96,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -g -g -c -c -g -g -g -g -g -g -f -g -c -c -c -g -c -c -c -c -c -c -c -e -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(97,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -g -g -c -g -g -g -g -g -c -g -g -c -g -g -g -c -c -c -g -g -g -c -c -c -c -c -c -j -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(98,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -g -g -g -g -c -g -g -g -g -g -g -g -c -g -l -g -g -g -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(99,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -g -g -i -b -b -g -b -b -g -g -g -g -g -g -g -l -g -c -c -c -c -c -g -c -c -c -c -k -c -c -c -c -c -c -j -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(100,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -d -g -g -b -g -g -g -b -g -g -g -g -g -c -c -g -g -g -g -g -g -g -g -c -c -c -c -c -f -c -j -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(101,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -b -b -g -b -g -b -b -g -g -g -g -l -g -g -c -c -c -c -c -f -c -c -c -c -c -c -c -c -c -c -c -f -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(102,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -b -g -c -g -g -g -b -g -g -g -g -g -g -g -g -g -g -g -c -c -c -c -c -c -d -c -c -c -c -c -c -c -c -c -f -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(103,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -b -g -g -g -g -g -b -g -g -g -c -c -c -c -d -c -c -g -g -g -c -c -c -c -c -c -c -c -c -c -c -d -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(104,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -b -c -d -g -r -c -b -c -c -g -g -g -c -c -c -c -c -c -c -c -c -c -c -c -c -j -c -c -c -c -c -c -c -c -f -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(105,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -n -b -b -b -b -b -c -d -g -g -g -g -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(106,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -p -n -n -n -n -n -n -n -n -b -c -c -c -c -c -g -c -c -c -c -c -c -f -c -f -c -c -c -c -f -c -c -j -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(107,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -n -n -n -n -n -n -n -n -n -b -c -c -c -f -c -c -c -c -c -k -c -c -c -c -c -c -f -c -c -c -c -c -c -c -f -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(108,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -n -n -n -n -n -n -o -n -n -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -e -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(109,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -n -n -n -n -n -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(110,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -n -n -n -n -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -d -c -c -c -c -c -c -c -f -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(111,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -n -n -n -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -c -c -c -c -c -c -c -f -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(112,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -n -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -f -c -c -c -c -f -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(113,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -n -q -n -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(114,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -n -n -b -n -o -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(115,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -o -n -n -n -n -n -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(116,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -n -n -n -n -n -n -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(117,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -n -n -n -n -n -n -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -A -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(118,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -m -n -n -n -n -n -n -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(119,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -n -n -n -o -n -n -n -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(120,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 12df20891fb..3a54db4e0a9 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -129,13 +129,6 @@ suffix = "lavaland_surface_ufo_crash.dmm" cost = 5 -/datum/map_template/ruin/lavaland/ww_vault - name = "Wishgranter Vault" - id = "ww-vault" - description = "Scrawled on the large double doors is both a message and a warning: 'meat grinder requires sacri...'. You're not so sure about this anymore." - suffix = "lavaland_surface_ww_vault.dmm" - cost = 20 - /datum/map_template/ruin/lavaland/xeno_nest name = "Xenomorph Nest" id = "xeno-nest" From b8277faefc31e24d16dc35350917c7e624e06d23 Mon Sep 17 00:00:00 2001 From: MMMiracles Date: Sun, 23 Apr 2017 10:03:11 -0400 Subject: [PATCH 38/73] forum tweaks --- _maps/map_files/Cerestation/cerestation.dmm | 450 ++++++++++++++------ 1 file changed, 308 insertions(+), 142 deletions(-) diff --git a/_maps/map_files/Cerestation/cerestation.dmm b/_maps/map_files/Cerestation/cerestation.dmm index 0368ad7326e..d3ab701075a 100644 --- a/_maps/map_files/Cerestation/cerestation.dmm +++ b/_maps/map_files/Cerestation/cerestation.dmm @@ -4425,39 +4425,28 @@ }, /area/security/prison) "aiI" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d2 = 4; - icon_state = "0-4" +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/northright{ + name = "Armory Desk"; + req_access_txt = "3" + }, +/obj/machinery/door/window/brigdoor/southleft{ + name = "Armory Desk"; + req_one_access_txt = "38;2" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/security/prison) +/area/ai_monitored/security/armory) "aiJ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/orange{ - d2 = 2; - icon_state = "0-2" +/obj/machinery/door/poddoor/shutters{ + id = "armoryaccess"; + name = "Armory Shutters" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/security/prison) +/area/ai_monitored/security/armory) "aiK" = ( /obj/machinery/door/airlock/glass_security{ name = "Armory"; @@ -4889,11 +4878,6 @@ }, /area/security/prison) "ajD" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -5316,7 +5300,6 @@ }, /area/security/prison) "akv" = ( -/obj/structure/closet/secure_closet/brig, /obj/machinery/light{ dir = 8 }, @@ -5465,7 +5448,7 @@ }) "akL" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/disposalpipe/segment{ @@ -5534,7 +5517,7 @@ }) "akP" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/disposalpipe/segment{ @@ -6692,7 +6675,7 @@ "amY" = ( /obj/machinery/power/apc{ dir = 2; - name = "AI Asteroid APC"; + name = "AI Asteroid Maintenance APC"; pixel_y = -24 }, /obj/structure/cable{ @@ -9298,8 +9281,6 @@ }, /area/security/warden) "asa" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 1; @@ -9319,6 +9300,15 @@ id = "prisonbreak"; name = "emergency prisoner containment blast door" }, +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/westleft{ + name = "Secure Desk"; + req_access_txt = "3" + }, +/obj/machinery/door/window/eastleft{ + name = "Secure Desk"; + req_one_access_txt = "38;2" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -11808,7 +11798,16 @@ name = "Chief Medical Officer's Private Quarters" }) "awH" = ( -/obj/structure/closet/secure_closet/CMO, +/obj/structure/closet{ + icon_door = "blue"; + name = "Chief Medical Officer's Uniform" + }, +/obj/item/clothing/shoes/sneakers/brown/cmo, +/obj/item/clothing/under/rank/chief_medical_officer, +/obj/item/clothing/suit/toggle/labcoat/cmo, +/obj/item/clothing/gloves/color/latex/nitrile, +/obj/item/weapon/storage/belt/medical, +/obj/item/weapon/storage/backpack/medic, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -11953,7 +11952,14 @@ name = "Chief Engineer's Private Quarters" }) "awX" = ( -/obj/structure/closet/secure_closet/engineering_chief, +/obj/structure/closet{ + icon_door = "yellow"; + name = "Chief Engineer's Uniform" + }, +/obj/item/clothing/shoes/sneakers/brown/ce, +/obj/item/clothing/under/rank/chief_engineer, +/obj/item/weapon/storage/backpack/industrial, +/obj/item/clothing/gloves/color/black/ce, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -15146,7 +15152,16 @@ name = "Research Director's Private Quarters" }) "aCS" = ( -/obj/structure/closet/secure_closet/RD, +/obj/structure/closet{ + icon_door = "pink"; + name = "Research Director's Uniform" + }, +/obj/item/clothing/shoes/sneakers/brown/rd, +/obj/item/clothing/under/rank/research_director, +/obj/item/clothing/under/rank/research_director/turtleneck, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/suit/toggle/labcoat, +/obj/item/weapon/storage/backpack/science, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -18324,7 +18339,14 @@ name = "Quartermaster's Private Quarters" }) "aId" = ( -/obj/structure/closet/secure_closet/quartermaster, +/obj/structure/closet{ + icon_door = "orange"; + name = "Quartermaster's Uniform" + }, +/obj/item/clothing/shoes/sneakers/brown/qm, +/obj/item/clothing/under/rank/cargo, +/obj/item/weapon/storage/backpack, +/obj/item/clothing/gloves/color/black, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -22442,7 +22464,7 @@ /area/hallway/primary/fore) "aPk" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -22582,7 +22604,7 @@ }) "aPv" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/cable/orange{ @@ -22598,7 +22620,7 @@ }) "aPw" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ @@ -25230,7 +25252,7 @@ }, /obj/machinery/door/airlock/maintenance{ id_tag = "GulagCivExit3"; - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ @@ -25391,7 +25413,7 @@ pixel_y = 0 }, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -25402,7 +25424,7 @@ "aTB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plasteel{ @@ -27746,7 +27768,7 @@ /area/hallway/primary/fore) "aXx" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/cable{ @@ -31061,7 +31083,7 @@ /area/hallway/primary/central) "bdv" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/cable{ @@ -31118,7 +31140,7 @@ /area/hallway/primary/central) "bdz" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -32016,7 +32038,7 @@ pixel_y = 0 }, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -32246,7 +32268,7 @@ /area/hallway/primary/port) "bfv" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/cable{ @@ -33117,7 +33139,7 @@ /area/hallway/primary/starboard) "bgY" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -36659,7 +36681,7 @@ pixel_x = 0 }, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -36824,7 +36846,7 @@ pixel_x = 0 }, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -37001,7 +37023,7 @@ dir = 4 }, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ @@ -41853,7 +41875,7 @@ /area/space) "bvx" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -45583,7 +45605,7 @@ }) "bBO" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ @@ -52668,16 +52690,20 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bNV" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bNW" = ( /obj/machinery/light/small{ dir = 1 @@ -52911,7 +52937,7 @@ }) "bOq" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/disposalpipe/segment{ @@ -53628,7 +53654,7 @@ /area/hallway/primary/starboard) "bPv" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -53682,7 +53708,7 @@ /area/hallway/primary/starboard) "bPz" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -53700,7 +53726,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bPA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -53719,7 +53747,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bPB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53738,7 +53768,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bPD" = ( /obj/machinery/door/airlock/maintenance{ name = "External Maintenance Access"; @@ -55166,14 +55198,18 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bRS" = ( /obj/structure/table, /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bRT" = ( /obj/structure/cable/orange{ d1 = 1; @@ -55617,6 +55653,7 @@ /obj/machinery/keycard_auth{ pixel_y = -28 }, +/obj/structure/closet/secure_closet/engineering_chief, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -56447,7 +56484,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bUe" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -56990,7 +57029,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bVf" = ( /obj/structure/cable/orange{ d1 = 2; @@ -61449,7 +61490,7 @@ /area/hallway/primary/port) "cdJ" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -63428,7 +63469,7 @@ /area/hallway/primary/starboard) "chv" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/cable{ @@ -67090,7 +67131,7 @@ /area/hallway/primary/aft) "cob" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -77659,6 +77700,7 @@ dir = 10 }, /obj/machinery/light, +/obj/effect/landmark/xmastree/rdrod, /turf/open/floor/plasteel/white, /area/crew_quarters/hor) "cFl" = ( @@ -90004,6 +90046,14 @@ /area/hallway/primary/starboard) "dfg" = ( /obj/machinery/computer/card/minor/cmo, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Chief Medical Officer's Desk"; + departmentType = 5; + name = "Chief Medical Officer RC"; + pixel_x = -30; + pixel_y = 0 + }, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -93876,7 +93926,6 @@ }, /area/crew_quarters/hor) "dmN" = ( -/obj/effect/landmark/xmastree/rdrod, /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -93885,6 +93934,7 @@ /obj/machinery/keycard_auth{ pixel_y = -28 }, +/obj/structure/closet/secure_closet/RD, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -94882,6 +94932,122 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) +"doV" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"doW" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"doX" = ( +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"doY" = ( +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"doZ" = ( +/obj/machinery/button/door{ + id = "armoryaccess"; + name = "Armory Shutter Access"; + pixel_x = -28 + }, +/obj/structure/chair/office/light, +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"dpa" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"dpb" = ( +/obj/structure/closet/secure_closet/CMO, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo) +"dpc" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dpd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dpe" = ( +/obj/structure/table, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dpf" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dpg" = ( +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dph" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) (1,1,1) = {" aaa @@ -100104,10 +100270,10 @@ aab aab dnS dnZ -dog -don +dnN +dnS dou -doB +dnN aac aac aac @@ -100359,13 +100525,13 @@ aaa aab aad dnM -dnT +dnS +doa +dnP doa -doh -doo dov -doC -doI +dnN +dnN aac aac aad @@ -100616,13 +100782,13 @@ aad aad aad dnN -dnU -dob -doi +dnS +dnZ +dnV dop -dow +doa doD -doJ +dnS aac aac aad @@ -100872,14 +101038,14 @@ aac aac aad aad -dnO +dnM dnV -doc +dnP doj -doq +dnV dox doE -doK +dnS aac aad aad @@ -101130,13 +101296,13 @@ aac aad aad dnP -dnW -dod -dok -dor +dnV +dnV +dnP +doa doy doF -doL +dnP aac aad aab @@ -101386,14 +101552,14 @@ aaa aad aac aac -dnQ +dnN dnX -doe -dol +dnV +dnV dos doz doG -doM +dnN aac aad aab @@ -101643,14 +101809,14 @@ aaa aad aac aac -dnR -dnY -dof -dom -dot -doA -doH -doN +dnN +dnN +dnM +dnS +dnS +dnM +dnN +dnS aad aad aab @@ -107838,10 +108004,10 @@ aYP aYT aYT aYT -aZm -aZm +aZY +aZY bdQ -aZm +aZY dch bgu bgu @@ -110084,7 +110250,7 @@ acO acO acO acO -acO +doW acO acO afr @@ -110342,10 +110508,10 @@ aeB aeB aeB agr -acO -aia +doX +doZ aiI -ajB +akw akv ajB afr @@ -110599,12 +110765,12 @@ aeY afs afM ags -ahn -aib +doY +dpa aiJ -ajC akw akw +ajB afr ams anr @@ -111897,7 +112063,7 @@ cJv aog aqf arc -arW +arX asU aub aog @@ -112391,7 +112557,7 @@ abW abW acO acO -acO +doV acO acO acO @@ -113522,7 +113688,7 @@ bvm bCR doR bFj -doT +doR bBL bJq bKT @@ -142568,11 +142734,11 @@ bIu bKa bLC bEK -bNT +dpc bPA -bex +dpd bRR -bbR +dph bUd bVe bVV @@ -142825,13 +142991,13 @@ bIv bHh bLD bEK -bey -bPB -bey -bdG -baS -baS -baS +dhy +bIO +dhy +dpf +bgs +bgs +bgs aaa aaa aaa @@ -143082,11 +143248,11 @@ bIw bHh bLE bEK -bey -bPB -bey -ber -baS +dhy +bIO +dhy +dpg +bgs bbo bbo aaa @@ -143341,9 +143507,9 @@ bLF bEK bNU bPC -bQL +dpe bRS -baS +bgs bbo bbo bbo @@ -143597,10 +143763,10 @@ bKb bLG bEK bNV -bPD -baS -baS -baS +bOq +bgs +bgs +bgs bbo bbo bbo @@ -144603,7 +144769,7 @@ bja bjS deo blC -deY +dpb bnC deY dfC From 9b36a65730ddc60b76e236fe103e93b0218f379d Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sun, 23 Apr 2017 10:09:08 -0400 Subject: [PATCH 39/73] Renames some incorrect terminology --- code/modules/admin/admin.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index c923acedfe8..dc6c7332f0f 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -410,7 +410,7 @@ /datum/admins/proc/restart() set category = "Server" - set name = "Hard Restart" + set name = "Reboot World" set desc="Restarts the world immediately" if (!usr.client.holder) return @@ -419,7 +419,7 @@ return if(confirm == "Yes") SSticker.delay_end = 0 - feedback_add_details("admin_verb","Hard Restart") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Reboot World") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", 10) /datum/admins/proc/end_round() From 885181d64c0237e71097b0507bc2b4735637e313 Mon Sep 17 00:00:00 2001 From: Kyle Spier-Swenson Date: Sun, 23 Apr 2017 08:22:05 -0700 Subject: [PATCH 40/73] fixes the server (#26489) --- code/modules/client/client_procs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 576e7baa869..f1e0f73afc2 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -197,7 +197,7 @@ GLOBAL_LIST(external_rsc_urls) var/alert_mob_dupe_login = FALSE if(config.log_access) for(var/I in GLOB.clients) - if(I == src) + if(!I || I == src) continue var/client/C = I if(C.key && (C.key != key) ) From 5bd06b88c2054140efd7c04df1462a71eee0f8c2 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 23 Apr 2017 16:28:41 +0100 Subject: [PATCH 41/73] Fixes turfs on Omegastation :cl: coiax fix: The vent in the Escape Coridoor on Omega Station has been fixed. /:cl: - Added some warning lines - Fixed some of the bad turfs from the decals refactor - Removed all roundstart active turfs on Omegastation. --- _maps/map_files/OmegaStation/OmegaStation.dmm | 415 ++++++++++++------ 1 file changed, 292 insertions(+), 123 deletions(-) diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index cf8c406eb5e..1d6e417a5d1 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -2398,10 +2398,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aea" = ( /obj/machinery/conveyor{ @@ -2415,10 +2412,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aeb" = ( /obj/machinery/conveyor{ @@ -2429,10 +2423,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aec" = ( /obj/machinery/conveyor{ @@ -2448,10 +2439,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aed" = ( /obj/machinery/conveyor{ @@ -2461,10 +2449,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aee" = ( /obj/machinery/conveyor{ @@ -2483,10 +2468,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aef" = ( /obj/machinery/conveyor{ @@ -4519,9 +4501,10 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/end{ - dir = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plating{ tag = "icon-plating_warn_end (WEST)"; icon_state = "plating_warn_end" @@ -4537,10 +4520,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "ahp" = ( /obj/machinery/conveyor{ @@ -4551,10 +4534,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "ahq" = ( /obj/machinery/conveyor{ @@ -4569,6 +4552,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plating{ tag = "icon-plating_warn_side (EAST)"; icon_state = "plating_warn_side" @@ -4584,6 +4570,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plating{ tag = "icon-plating_warn_side (EAST)"; icon_state = "plating_warn_side" @@ -4606,6 +4595,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plating{ tag = "icon-plating_warn_side (EAST)"; icon_state = "plating_warn_side" @@ -5036,6 +5028,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plating, /area/quartermaster/storage) "aif" = ( @@ -11429,9 +11424,7 @@ dir = 4 }, /turf/open/floor/plasteel/green/side{ - dir = 5; - initial_gas_mix = "n2=100;TEMP=80"; - tag = "SERVER" + dir = 5 }, /area/atmos) "arz" = ( @@ -12047,7 +12040,7 @@ layer = 2.9 }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/mining) "asv" = ( /turf/open/floor/engine/n2, @@ -26169,7 +26162,7 @@ }, /obj/structure/shuttle/engine/heater, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/escape) "aPF" = ( /obj/structure/window/reinforced{ @@ -26178,7 +26171,7 @@ /obj/structure/shuttle/engine/heater, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/escape) "aPG" = ( /obj/structure/grille, @@ -26758,7 +26751,7 @@ "aQE" = ( /obj/structure/shuttle/engine/propulsion, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/escape) "aQF" = ( /obj/machinery/light{ @@ -27771,10 +27764,7 @@ /obj/effect/turf_decal/stripes/end{ dir = 8 }, -/turf/open/floor/plasteel/white{ - tag = "icon-white_warn_end (WEST)"; - icon_state = "white_warn_end" - }, +/turf/open/floor/plasteel, /area/medical/research{ name = "Research Division" }) @@ -27788,10 +27778,7 @@ /obj/effect/turf_decal/stripes/end{ dir = 4 }, -/turf/open/floor/plasteel/white{ - tag = "icon-white_warn_end (EAST)"; - icon_state = "white_warn_end" - }, +/turf/open/floor/plasteel, /area/medical/research{ name = "Research Division" }) @@ -29350,7 +29337,8 @@ }) "aVC" = ( /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 8; + initial_gas_mix = "n2=100;TEMP=80" }, /area/medical/research{ name = "Research Division" @@ -29802,7 +29790,8 @@ dir = 4 }, /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 8; + initial_gas_mix = "n2=100;TEMP=80" }, /area/medical/research{ name = "Research Division" @@ -37061,10 +37050,7 @@ /obj/effect/turf_decal/stripes/end{ dir = 8 }, -/turf/open/floor/plasteel/white{ - tag = "icon-white_warn_end (WEST)"; - icon_state = "white_warn_end" - }, +/turf/open/floor/plasteel, /area/toxins/xenobiology) "biD" = ( /obj/machinery/shower{ @@ -37080,10 +37066,7 @@ /obj/effect/turf_decal/stripes/end{ dir = 4 }, -/turf/open/floor/plasteel/white{ - tag = "icon-white_warn_end (EAST)"; - icon_state = "white_warn_end" - }, +/turf/open/floor/plasteel, /area/toxins/xenobiology) "biE" = ( /obj/structure/sign/xenobio, @@ -37583,7 +37566,8 @@ "bjw" = ( /obj/machinery/atmospherics/pipe/manifold/general/hidden, /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 8; + initial_gas_mix = "n2=100;TEMP=80" }, /area/toxins/xenobiology) "bjx" = ( @@ -37593,7 +37577,8 @@ dir = 9 }, /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 8; + initial_gas_mix = "n2=100;TEMP=80" }, /area/toxins/xenobiology) "bjy" = ( @@ -37757,7 +37742,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "bjO" = ( /turf/closed/wall/mineral/plastitanium, @@ -37914,7 +37899,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "bjX" = ( /obj/structure/grille, @@ -38933,14 +38918,7 @@ "bmh" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; - external_pressure_bound = 0; - frequency = 1441; - id_tag = "o2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - on = 1; - pressure_checks = 2; - pump_direction = 0 + on = 1 }, /turf/open/floor/plasteel, /area/hallway/secondary/exit{ @@ -41743,6 +41721,197 @@ "bvf" = ( /turf/closed/wall/r_wall, /area/engine/supermatter) +"bvg" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvh" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvi" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvk" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvl" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvm" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvn" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvo" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvp" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvq" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvr" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvt" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvu" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvv" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvx" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvy" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvA" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvB" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvC" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvD" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvF" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvG" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvH" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvI" = ( +/obj/item/weapon/pickaxe/emergency, +/turf/open/floor/plating/asteroid/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvJ" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvK" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvL" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvM" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvN" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) (1,1,1) = {" aaa @@ -71389,7 +71558,7 @@ aad aad aad aad -aac +abj aaW aad aad @@ -71646,7 +71815,7 @@ aad aad aad abi -aac +abj abi abi aad @@ -71683,9 +71852,9 @@ aJp aRF aSP aEt -abi +bvo aad -abi +bvr aad abi aad @@ -71903,8 +72072,8 @@ aad abi aik aaW -aac -aac +abj +abj abu abP aad @@ -72158,11 +72327,11 @@ aac aad aad aad -aac -aac +abj +abj abS -aac -aac +abj +abj acD aad abi @@ -72201,11 +72370,11 @@ aUR aVL aUR aUQ -abi +bvu ahu aad aac -acD +bvI aad aac aad @@ -72415,9 +72584,9 @@ aac aad aad aaW -aac +abj abu -ajP +aaV aad abS aad @@ -72445,11 +72614,11 @@ aHl aIi aJs aKz -buX +buW aMR buZ -bva -bvb +buZ +buW aQL aRI aSS @@ -72458,10 +72627,10 @@ aUS aUU aWz aVL -abi +bvv ahu -abP -abu +bvG +bvH aad aad aad @@ -72676,7 +72845,7 @@ abu abu aad aad -aac +abj abi anx anx @@ -72706,7 +72875,7 @@ aLP aMS aMS aOC -bvc +buW aQM aRJ aST @@ -72715,8 +72884,8 @@ aUR aUU aWz aUQ -abP -abi +bvw +bvD aad aad aad @@ -72930,9 +73099,9 @@ aad aad aad abu -aac +abj aad -ajP +aaV abP amG anx @@ -72972,8 +73141,8 @@ aUS aUU aWz aVL -abu -abP +bvx +bvE aad aad aad @@ -73229,8 +73398,8 @@ aUT aUU aUU aUQ -abu -abi +bvy +bvF aad aad aad @@ -73486,7 +73655,7 @@ aUS aUU aWz aVL -abP +bvz aad aad aad @@ -73734,7 +73903,7 @@ aLT aMW aMW aOD -bve +buW aQQ aRN aSX @@ -73743,7 +73912,7 @@ aUR aUU aWz aUQ -abi +bvA aad aad aad @@ -73987,11 +74156,11 @@ aHr aIo aJw aKE -buY +buW aMX aMX aMX -bvf +buW aQR aRO aSY @@ -74000,7 +74169,7 @@ aUS aUU aWz aVL -abi +bvB aOH aZo baj @@ -74767,11 +74936,11 @@ aQT aRR aTa aEt -abi -abu -abP -abi -abi +bvp +bvq +bvs +bvt +bvC aOH aZr bam @@ -88596,9 +88765,9 @@ aaa aad aad aad -abu -abP -abP +bvg +bvh +bvj adn aec aeS @@ -88665,7 +88834,7 @@ bhj bhT aRz aad -abu +bvN aac aad aad @@ -88854,7 +89023,7 @@ aaa aac aac aac -abu +bvi aad adn aed @@ -88921,7 +89090,7 @@ bgv bhk bhU aRy -abu +bvJ aac aaa aaa @@ -89178,7 +89347,7 @@ bgw bhl bhV aRy -abu +bvK aaa aaa aaa @@ -89387,9 +89556,9 @@ acv aph aqp abt -abP -abP -abu +bvk +bvl +bvn aac aac aae @@ -89645,7 +89814,7 @@ api amD amC amC -abu +bvm aac aae aae @@ -89692,7 +89861,7 @@ bgy bhk bhX aRy -abu +bvL aaa aaa aaa @@ -89949,7 +90118,7 @@ bgz bhk bgw aRy -abu +bvM aac aaa aaa From df0814c66aa4767c0f9174e347b4531b201aa234 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sun, 23 Apr 2017 12:21:56 -0400 Subject: [PATCH 42/73] Fixes some areas having no lighting (#26495) * Fixes some areas having no lighting * FUCK --- code/modules/lighting/lighting_setup.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index 236f873aa83..fe9bdb56098 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -1,7 +1,5 @@ /proc/create_all_lighting_objects() - for(var/I in GLOB.sortedAreas) - var/area/A = I - + for(var/area/A in world) if(!IS_DYNAMIC_LIGHTING(A)) continue From bee69ddcd95609fb9d42fc5c0e0ec224e5bbb0ed Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 23 Apr 2017 17:45:20 +0100 Subject: [PATCH 43/73] Removes active turfs from Pubby, Box and Crashed Ship ruin --- _maps/RandomRuins/SpaceRuins/crashedship.dmm | 3 +- _maps/map_files/PubbyStation/PubbyStation.dmm | 129 +++++++++++------- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 18 +-- 3 files changed, 88 insertions(+), 62 deletions(-) diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm index 192657641fd..b4d65c7bd9b 100644 --- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm +++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm @@ -2184,7 +2184,8 @@ /turf/open/floor/plating/airless, /area/awaymission/BMPship/Fore) "ge" = ( -/turf/closed/mineral/random, +/obj/machinery/door/airlock/silver, +/turf/open/floor/plating, /area/awaymission/BMPship/Midship) "gf" = ( /obj/machinery/light{ diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 631433a5a73..e0e721840d8 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -29590,9 +29590,7 @@ pixel_x = -32 }, /turf/open/floor/plasteel/whiteblue/side{ - dir = 9; - initial_gas_mix = "n2=100;TEMP=80"; - tag = "icon-whiteblue (NORTHWEST)" + dir = 9 }, /area/medical/medbay3) "bhO" = ( @@ -29631,9 +29629,7 @@ pixel_x = -32 }, /turf/open/floor/plasteel/whiteblue/side{ - dir = 9; - initial_gas_mix = "n2=100;TEMP=80"; - tag = "icon-whiteblue (NORTHWEST)" + dir = 9 }, /area/medical/medbay) "bhS" = ( @@ -48652,17 +48648,23 @@ pixel_y = 24 }, /obj/structure/cable, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTt" = ( /obj/machinery/power/terminal{ icon_state = "term"; dir = 1 }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTu" = ( -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTv" = ( /obj/machinery/telecomms/bus/preset_three, @@ -48726,20 +48728,28 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/darkred/side, +/turf/open/floor/plasteel/darkred/side{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTD" = ( -/turf/open/floor/plasteel/darkpurple/side, +/turf/open/floor/plasteel/darkpurple/side{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTE" = ( -/turf/open/floor/plasteel/darkgreen/side, +/turf/open/floor/plasteel/darkgreen/side{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTF" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" }, -/turf/open/floor/plasteel/darkgreen/side, +/turf/open/floor/plasteel/darkgreen/side{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTG" = ( /turf/closed/indestructible{ @@ -48826,17 +48836,20 @@ dir = 8 }, /turf/open/floor/plasteel/darkblue/side{ - dir = 1 + dir = 1; + initial_gas_mix = "n2=100;TEMP=80" }, /area/tcommsat/server) "bTS" = ( /turf/open/floor/plasteel/darkblue/side{ - dir = 1 + dir = 1; + initial_gas_mix = "n2=100;TEMP=80" }, /area/tcommsat/server) "bTT" = ( /turf/open/floor/plasteel/darkyellow/side{ - dir = 1 + dir = 1; + initial_gas_mix = "n2=100;TEMP=80" }, /area/tcommsat/server) "bTU" = ( @@ -48845,7 +48858,8 @@ icon_state = "tube1" }, /turf/open/floor/plasteel/darkyellow/side{ - dir = 1 + dir = 1; + initial_gas_mix = "n2=100;TEMP=80" }, /area/tcommsat/server) "bTV" = ( @@ -48896,7 +48910,9 @@ /obj/item/weapon/stock_parts/subspace/amplifier, /obj/item/weapon/stock_parts/subspace/analyzer, /obj/item/weapon/stock_parts/subspace/analyzer, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUc" = ( /obj/structure/table, @@ -48904,7 +48920,9 @@ /obj/item/weapon/stock_parts/subspace/ansible, /obj/item/weapon/stock_parts/subspace/crystal, /obj/item/weapon/stock_parts/subspace/crystal, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUd" = ( /obj/structure/table, @@ -48912,7 +48930,9 @@ /obj/item/weapon/stock_parts/subspace/filter, /obj/item/weapon/stock_parts/subspace/transmitter, /obj/item/weapon/stock_parts/subspace/transmitter, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUe" = ( /obj/machinery/camera/motion{ @@ -48921,7 +48941,6 @@ network = list("SS13","Telecoms") }, /turf/open/floor/plasteel/black{ - name = "Mainframe Floor"; initial_gas_mix = "n2=100;TEMP=80" }, /area/tcommsat/server) @@ -48931,7 +48950,9 @@ /obj/item/weapon/stock_parts/subspace/treatment, /obj/item/weapon/stock_parts/manipulator, /obj/item/weapon/stock_parts/manipulator, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUg" = ( /obj/structure/table, @@ -48939,13 +48960,17 @@ /obj/item/weapon/stock_parts/console_screen, /obj/item/weapon/stock_parts/micro_laser, /obj/item/weapon/stock_parts/micro_laser, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUh" = ( /obj/structure/table, /obj/item/weapon/stock_parts/scanning_module, /obj/item/weapon/stock_parts/scanning_module, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUi" = ( /obj/machinery/camera/motion{ @@ -83827,33 +83852,33 @@ bQl bQC bQN bQZ -bRg -bRg -bRg -bRE -bRg -bRg -bRg -bRg -bRE -bRg -bRg -bRg -bRg -bRE -bRg -bRg -bRg -bRg -bRE -bRg -bRg -bRg -bRg -bRE -bRg -bRg -bRg +aeZ +aeZ +aeZ +afy +aeZ +aeZ +aeZ +aeZ +afy +aeZ +aeZ +aeZ +aeZ +afy +aeZ +aeZ +aeZ +aeZ +afy +aeZ +aeZ +aeZ +aeZ +afy +aeZ +aeZ +aeZ bSp bSu bSC @@ -97895,7 +97920,7 @@ aaa aaa aGT aOx -cii +aPw aKE aPw aSs diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index c390a0cf06b..aa5e44a5210 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -13925,7 +13925,7 @@ dir = 4; icon_state = "burst_r" }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "aEy" = ( /obj/structure/shuttle/engine/heater{ @@ -13935,7 +13935,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "aEz" = ( /obj/machinery/power/apc{ @@ -14460,7 +14460,7 @@ dir = 4; icon_state = "propulsion" }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "aFG" = ( /turf/open/floor/plasteel/arrival{ @@ -16630,7 +16630,7 @@ dir = 4; icon_state = "burst_l" }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "aKj" = ( /obj/machinery/door/firedoor, @@ -58780,7 +58780,7 @@ dir = 8; icon_state = "propulsion_l" }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/transport) "cxu" = ( /turf/closed/wall/mineral/titanium, @@ -58816,7 +58816,7 @@ dir = 8 }, /obj/structure/window/reinforced, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/transport) "cxz" = ( /obj/machinery/computer/shuttle/ferry/request, @@ -58844,7 +58844,7 @@ dir = 4; pixel_x = 0 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/transport) "cxE" = ( /obj/machinery/door/airlock/titanium, @@ -60967,7 +60967,7 @@ dir = 1; pixel_y = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/transport) "cCz" = ( /obj/machinery/door/airlock/external, @@ -63393,7 +63393,7 @@ name = "arrivals"; width = 7 }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "cIh" = ( /obj/machinery/door/airlock/external{ From f0a8ca68db00c274fc74f1d3d6fb562c2098d323 Mon Sep 17 00:00:00 2001 From: Cruix Date: Sun, 23 Apr 2017 13:25:52 -0500 Subject: [PATCH 44/73] Changed alternate appearances to /datum/atom_hud s (#26289) * Changed alternate appearances to /datum/hud s * Added hashset behavior to the /datum/data_hud/var/hudusers list --- code/datums/hud.dm | 12 +- code/game/alternate_appearance.dm | 246 +++++++----------- code/game/atoms.dm | 13 +- code/game/gamemodes/antag_hud.dm | 2 +- code/game/gamemodes/blob/theblob.dm | 2 +- code/game/objects/structures/flora.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 2 +- code/modules/clothing/suits/miscellaneous.dm | 2 +- .../mob/living/carbon/alien/humanoid/queen.dm | 2 +- code/modules/mob/login.dm | 6 - code/modules/mob/mob.dm | 3 + 11 files changed, 115 insertions(+), 177 deletions(-) diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 309006d0dfc..d1cbb90c27a 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -38,10 +38,11 @@ GLOBAL_LIST_INIT(huds, list( /datum/atom_hud/proc/remove_from_hud(atom/A) if(!A) - return + return FALSE for(var/mob/M in hudusers) remove_from_single_hud(M, A) hudatoms -= A + return TRUE /datum/atom_hud/proc/remove_from_single_hud(mob/M, atom/A) //unsafe, no sanity apart from client if(!M || !M.client || !A) @@ -52,16 +53,17 @@ GLOBAL_LIST_INIT(huds, list( /datum/atom_hud/proc/add_hud_to(mob/M) if(!M) return - hudusers |= M + hudusers[M] = TRUE for(var/atom/A in hudatoms) add_to_single_hud(M, A) /datum/atom_hud/proc/add_to_hud(atom/A) if(!A) - return + return FALSE hudatoms |= A for(var/mob/M in hudusers) add_to_single_hud(M, A) + return TRUE /datum/atom_hud/proc/add_to_single_hud(mob/M, atom/A) //unsafe, no sanity apart from client if(!M || !M.client || !A) @@ -77,8 +79,8 @@ GLOBAL_LIST_INIT(huds, list( for(var/datum/gang/G in SSticker.mode.gangs) gang_huds += G.ganghud - for(var/datum/atom_hud/hud in (GLOB.huds|gang_huds)) - if(src in hud.hudusers) + for(var/datum/atom_hud/hud in (GLOB.huds|gang_huds|GLOB.active_alternate_appearances)) + if(hud.hudusers[src]) hud.add_hud_to(src) /mob/dead/new_player/reload_huds() diff --git a/code/game/alternate_appearance.dm b/code/game/alternate_appearance.dm index 8722789d77a..ac23d61e7fa 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/alternate_appearance.dm @@ -1,164 +1,108 @@ -/* - Alternate Appearances! By RemieRichards - A framework for replacing an atom (and it's overlays) with an override = 1 image, that's less shit! - Example uses: - * hallucinating all mobs looking like skeletons - * people wearing cardborg suits appearing as Standard Cyborgs to the other Silicons - * !!use your imagination!! - -*/ - - -//This datum is built on-the-fly by some of the procs below -//no need to instantiate it -/datum/alternate_appearance - var/key = "" - var/image/img - var/list/viewers = list() - var/atom/owner = null - - -/* - Displays the alternate_appearance - displayTo - a list of MOBS to show this appearance to -*/ -/datum/alternate_appearance/proc/display_to(list/displayTo) - if(!displayTo || !displayTo.len) - return - for(var/m in displayTo) - var/mob/M = m - if(!M.viewing_alternate_appearances) - M.viewing_alternate_appearances = list() - viewers |= M - var/list/AAsiblings = M.viewing_alternate_appearances[key] - if(!AAsiblings) - AAsiblings = list() - M.viewing_alternate_appearances[key] = AAsiblings - AAsiblings |= src - if(M.client) - M.client.images |= img - -/* - Hides the alternate_appearance - hideFrom - optional list of MOBS to hide it from the list's mobs specifically -*/ -/datum/alternate_appearance/proc/hide(list/hideFrom) - var/list/hiding = viewers - if(hideFrom) - hiding = hideFrom - - for(var/m in hiding) - var/mob/M = m - if(M.client) - M.client.images -= img - if(M.viewing_alternate_appearances && M.viewing_alternate_appearances.len) - var/list/AAsiblings = M.viewing_alternate_appearances[key] - if(AAsiblings) - AAsiblings -= src - if(!AAsiblings.len) - M.viewing_alternate_appearances -= key - if(!M.viewing_alternate_appearances.len) - M.viewing_alternate_appearances = null - viewers -= M - - -/* - Removes the alternate_appearance from its owner's alternate_appearances list, hiding it also -*/ -/datum/alternate_appearance/proc/remove() - hide() - if(owner && owner.alternate_appearances) - owner.alternate_appearances -= key - if(!owner.alternate_appearances.len) - owner.alternate_appearances = null - - -/datum/alternate_appearance/Destroy() - remove() - return ..() - +GLOBAL_LIST_EMPTY(active_alternate_appearances) /atom - var/list/alternate_appearances //the alternate appearances we own - var/list/viewing_alternate_appearances //this is an assoc list of lists, the keys being the AA's key - //inside these lists are the AAs themselves, this is to allow the atom to see multiple of the same type of AA - //eg: two (or more) people disguised as cardborgs, or two (or more) people disguised as plants + var/list/alternate_appearances -/* - Builds an alternate_appearance datum for the supplied args, optionally displaying it straight away - key - the key to the assoc list of key = /datum/alternate_appearances - img - the image file to be the "alternate appearance" - WORKS BEST IF: - * it has override = 1 set - * the image's loc is the atom that will use the appearance (otherwise... it's not exactly an alt appearance of this atom is it?) - displayTo - optional list of MOBS to display to immediately - - Example: - var/image/I = image(icon = 'disguise.dmi', icon_state = "disguise", loc = src) - I.override = 1 - add_alt_appearance("super_secret_disguise", I, players) - -*/ -/atom/proc/add_alt_appearance(key, img, list/displayTo = list()) - if(!key || !img) - return - if(!alternate_appearances) - alternate_appearances = list() - - var/datum/alternate_appearance/AA = new() - AA.img = img - AA.key = key - AA.owner = src - - alternate_appearances[key] = AA - if(displayTo && displayTo.len) - display_alt_appearance(key, displayTo) - - -////////////// -// WRAPPERS // -////////////// - -/* - Removes an alternate_appearance from src's alternate_appearances list - Wrapper for: alternate_appearance/remove() - key - the key to the assoc list of key = /datum/alternate_appearance -*/ /atom/proc/remove_alt_appearance(key) if(alternate_appearances) - if(alternate_appearances[key]) - var/datum/alternate_appearance/AA = alternate_appearances[key] - qdel(AA) + for(var/K in alternate_appearances) + var/datum/atom_hud/alternate_appearance/AA = alternate_appearances[K] + if(AA.appearance_key == key) + AA.remove_from_hud(src) - -/* - Displays an alternate appearance from src's alternate_appearances list - Wrapper for: alternate_appearance/display_to() - key - the key to the assoc list of key = /datum/alternate_appearance - displayTo - a list of MOBS to show this appearance to -*/ -/atom/proc/display_alt_appearance(key, list/displayTo) - if(!alternate_appearances || !key) +/atom/proc/add_alt_appearance(type, key, ...) + if(!type || !key) return - var/datum/alternate_appearance/AA = alternate_appearances[key] - if(!AA || !AA.img) + if(alternate_appearances && alternate_appearances[key]) return - AA.display_to(displayTo) + var/list/arguments = args.Copy(2) + new type(arglist(arguments)) -/* - Hides an alternate appearance from src's alternate_appearances list - Wrapper for: alternate_appearance/hide() - key - the key to the assoc list of key = /datum/alternate_appearance - hideFrom - optional list of MOBS to hide it from the list's mobs specifically -*/ -/atom/proc/hide_alt_appearance(key, list/hideFrom) - if(!alternate_appearances || !key) - return - var/datum/alternate_appearance/AA = alternate_appearances[key] - if(!AA) - return - AA.hide(hideFrom) +/datum/atom_hud/alternate_appearance + var/appearance_key + +/datum/atom_hud/alternate_appearance/New(key) + ..() + GLOB.active_alternate_appearances += src + appearance_key = key + +/datum/atom_hud/alternate_appearance/Destroy() + if(!QDELETED(src)) + for(var/v in hudusers) + remove_hud_from(v) + for(var/v in hudatoms) + remove_from_hud(v) + GLOB.active_alternate_appearances -= src + return ..() + +/datum/atom_hud/alternate_appearance/proc/onNewMob(mob/M) + if(mobShouldSee(M)) + add_hud_to(M) + +/datum/atom_hud/alternate_appearance/proc/mobShouldSee(mob/M) + return FALSE + +/datum/atom_hud/alternate_appearance/add_to_hud(atom/A, image/I) + . = ..() + if(.) + LAZYINITLIST(A.alternate_appearances) + A.alternate_appearances[appearance_key] = src + +/datum/atom_hud/alternate_appearance/remove_from_hud(atom/A) + . = ..() + if(.) + LAZYREMOVE(A.alternate_appearances, appearance_key) +//an alternate appearance that attaches a single image to a single atom +/datum/atom_hud/alternate_appearance/basic + var/atom/target + var/image/theImage + +/datum/atom_hud/alternate_appearance/basic/New(key, image/I, target_sees_appearance = TRUE) + ..() + theImage = I + target = I.loc + hud_icons = list(appearance_key) + add_to_hud(target, I) + if(target_sees_appearance && ismob(target)) + add_hud_to(target) + +/datum/atom_hud/alternate_appearance/basic/add_to_hud(atom/A) + A.hud_list[appearance_key] = theImage + . = ..() + +/datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A) + . = ..() + A.hud_list -= appearance_key + +/datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A) + . = ..() + if(.) + qdel(src) + +/datum/atom_hud/alternate_appearance/basic/everyone + +/datum/atom_hud/alternate_appearance/basic/everyone/New() + ..() + for(var/mob in GLOB.player_list) + if(mob) + add_hud_to(mob) + +/datum/atom_hud/alternate_appearance/basic/everyone/mobShouldSee(mob/M) + return TRUE + +/datum/atom_hud/alternate_appearance/basic/silicons + +/datum/atom_hud/alternate_appearance/basic/silicons/New() + ..() + for(var/mob in GLOB.silicon_mobs) + if(mob) + add_hud_to(mob) + +/datum/atom_hud/alternate_appearance/basic/silicons/mobShouldSee(mob/M) + if(issilicon(M)) + return TRUE + return FALSE diff --git a/code/game/atoms.dm b/code/game/atoms.dm index a80b5a17817..bfa51a09de7 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -79,15 +79,10 @@ /atom/Destroy() if(alternate_appearances) - for(var/aakey in alternate_appearances) - var/datum/alternate_appearance/AA = alternate_appearances[aakey] - qdel(AA) - alternate_appearances = null - if(viewing_alternate_appearances) - for(var/aakey in viewing_alternate_appearances) - for(var/aa in viewing_alternate_appearances[aakey]) - var/datum/alternate_appearance/AA = aa - AA.hide(list(src)) + for(var/K in alternate_appearances) + var/datum/atom_hud/alternate_appearance/AA = alternate_appearances[K] + AA.remove_from_hud(src) + if(reagents) qdel(reagents) diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index af970e3bf19..1f73b474275 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -49,7 +49,7 @@ /datum/mind/proc/leave_all_antag_huds() for(var/datum/atom_hud/antag/hud in GLOB.huds) - if(current in hud.hudusers) + if(hud.hudusers[current]) hud.leave_hud(current) /datum/atom_hud/antag/gang diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 3ae9e3e8d63..f9eb16c7a92 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -307,7 +307,7 @@ /obj/structure/blob/examine(mob/user) ..() var/datum/atom_hud/hud_to_check = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - if(user.research_scanner || (user in hud_to_check.hudusers)) + if(user.research_scanner || hud_to_check.hudusers[user]) to_chat(user, "Your HUD displays an extensive report...
") chemeffectreport(user) typereport(user) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 6c29061fcb8..84fe78cef64 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -262,7 +262,7 @@ /obj/item/weapon/twohanded/required/kirbyplants/equipped(mob/living/user) var/image/I = image(icon = 'icons/obj/flora/plants.dmi' , icon_state = src.icon_state, loc = user) I.override = 1 - user.add_alt_appearance("sneaking_mission", I, GLOB.player_list) + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "sneaking_mission", I) ..() /obj/item/weapon/twohanded/required/kirbyplants/dropped(mob/living/user) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index d340e08fdf2..afd69e02382 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -974,7 +974,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits /client/proc/has_antag_hud() var/datum/atom_hud/A = GLOB.huds[ANTAG_HUD_TRAITOR] - return mob in A.hudusers + return A.hudusers[mob] /client/proc/open_shuttle_manipulator() set category = "Admin" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 321163d1040..b55cb58f41d 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -179,7 +179,7 @@ var/image/I = image(icon = 'icons/mob/robots.dmi' , icon_state = "robot", loc = H) I.override = 1 I.add_overlay(image(icon = 'icons/mob/robots.dmi' , icon_state = "robot_e")) //gotta look realistic - H.add_alt_appearance("standard_borg_disguise", I, GLOB.silicon_mobs+H) //you look like a robot to robots! (including yourself because you're totally a robot) + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "standard_borg_disguise", I) //you look like a robot to robots! (including yourself because you're totally a robot) /obj/item/clothing/suit/snowman diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 20d40e324cd..dc172b7730d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -37,7 +37,7 @@ I.override = 1 I.pixel_x -= owner.pixel_x I.pixel_y -= owner.pixel_y - owner.add_alt_appearance("smallqueen", I, list(owner)) + owner.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic, "smallqueen", I) small = 1 else diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 2e642ff6a7c..a6f0c981441 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -35,12 +35,6 @@ client.sethotkeys() //set mob specific hotkeys - if(viewing_alternate_appearances && viewing_alternate_appearances.len) - for(var/aakey in viewing_alternate_appearances) - for(var/aa in viewing_alternate_appearances[aakey]) - var/datum/alternate_appearance/AA = aa - AA.display_to(list(src)) - update_client_colour() if(client) client.click_intercept = null diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 34e977acfc4..023c1047178 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -28,6 +28,9 @@ GLOB.living_mob_list += src prepare_huds() can_ride_typecache = typecacheof(can_ride_typecache) + for(var/v in GLOB.active_alternate_appearances) + var/datum/atom_hud/alternate_appearance/AA = v + AA.onNewMob(src) ..() /atom/proc/prepare_huds() From ba7e5e00ac3e9d0497615f92954d1117941591eb Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 23 Apr 2017 11:53:25 -0700 Subject: [PATCH 45/73] Automatic changelog generation for PR #26436 [ci skip] --- html/changelogs/AutoChangeLog-pr-26436.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26436.yml diff --git a/html/changelogs/AutoChangeLog-pr-26436.yml b/html/changelogs/AutoChangeLog-pr-26436.yml new file mode 100644 index 00000000000..87f80c1ad07 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26436.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Swarmers now only speak their own language, rather than swarmer and +common." From df5e6f1ea10aeedd6f71d223bcbfb51bcf3d0574 Mon Sep 17 00:00:00 2001 From: BeeSting12 Date: Sun, 23 Apr 2017 15:23:22 -0400 Subject: [PATCH 46/73] [Deltastation] Access Fixes [Ready for Review]* (#26292) * fixes secure tech storage access * solars access fixed * fixes final solar access --- .../map_files/Deltastation/DeltaStation2.dmm | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index a599d785f44..2e275a194f7 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -720,7 +720,7 @@ }, /obj/machinery/door/airlock/external{ name = "External Solar Access"; - req_access_txt = "10" + req_access_txt = "10; 13" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -1216,7 +1216,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/engineering{ name = "Auxiliary Construction Storage"; - req_access_txt = "32;47;48" + req_access_txt = "10;32;47;48" }, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -15746,8 +15746,9 @@ }, /obj/machinery/door/airlock/external{ name = "External Solar Access"; - req_access_txt = "24"; - req_one_access = null + req_access_txt = "10"; + req_one_access = null; + req_one_access_txt = "13; 24" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -15820,8 +15821,9 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/atmos{ name = "Fore Port Solar Access"; - req_access_txt = "24"; - req_one_access = null + req_access_txt = "0"; + req_one_access = null; + req_one_access_txt = "13; 24" }, /obj/structure/cable/white{ icon_state = "4-8" @@ -38349,7 +38351,10 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/highsecurity, +/obj/machinery/door/airlock/highsecurity{ + name = "Secure Tech Storage"; + req_access_txt = "19;23" + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -107067,7 +107072,7 @@ }, /obj/machinery/door/airlock/external{ name = "External Solar Access"; - req_access_txt = "10" + req_access_txt = "10; 13" }, /obj/effect/turf_decal/stripes/line{ dir = 8 From 188f468cd3149f46162e960fc90cd526d571d85f Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 23 Apr 2017 12:23:24 -0700 Subject: [PATCH 47/73] Automatic changelog generation for PR #26292 [ci skip] --- html/changelogs/AutoChangeLog-pr-26292.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26292.yml diff --git a/html/changelogs/AutoChangeLog-pr-26292.yml b/html/changelogs/AutoChangeLog-pr-26292.yml new file mode 100644 index 00000000000..9d91cc6f1f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26292.yml @@ -0,0 +1,4 @@ +author: "BeeSting12" +delete-after: True +changes: + - bugfix: "Deltastation's secure tech storage is no longer all access." From 12406125a8441ccf7787c26c84a3e7d2d8e5fa75 Mon Sep 17 00:00:00 2001 From: QualityVan Date: Sun, 23 Apr 2017 15:48:19 -0400 Subject: [PATCH 48/73] Braining/debraining fixes (#26346) * Changes ling brains to be more completely fake * whoops forgot to convert this * Fixes cloned changelings having the wrong sort of brain, prevents brains from holding onto brainmobs for too long, renames brains as soon as they're inserted rather than on removal so you can't remove an item called B's brain from A's head * travis pls fix * Safeties in case a brain inside someone is destroyed. --- .../gamemodes/changeling/evolution_menu.dm | 5 ++++ .../gamemodes/changeling/powers/regenerate.dm | 3 +++ code/game/machinery/cloning.dm | 5 ++++ code/modules/mob/living/brain/brain.dm | 2 ++ code/modules/mob/living/brain/brain_item.dm | 23 +++++++++++++++---- code/modules/mob/living/carbon/carbon.dm | 2 +- .../mob/living/carbon/human/examine.dm | 19 +++++++-------- .../surgery/bodyparts/dismemberment.dm | 12 ++++------ code/modules/surgery/organs/organ_internal.dm | 4 ++-- 9 files changed, 51 insertions(+), 24 deletions(-) diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm index 1ff0bccb7b2..838210eb586 100644 --- a/code/game/gamemodes/changeling/evolution_menu.dm +++ b/code/game/gamemodes/changeling/evolution_menu.dm @@ -74,6 +74,11 @@ if(ishuman(C)) var/datum/changelingprofile/prof = mind.changeling.add_new_profile(C, src) mind.changeling.first_prof = prof + + var/obj/item/organ/brain/B = C.getorganslot("brain") + if(B) + B.vital = FALSE + B.decoy_override = TRUE return 1 /datum/changeling/proc/reset() diff --git a/code/game/gamemodes/changeling/powers/regenerate.dm b/code/game/gamemodes/changeling/powers/regenerate.dm index 1f07b46e798..bd7308b033a 100644 --- a/code/game/gamemodes/changeling/powers/regenerate.dm +++ b/code/game/gamemodes/changeling/powers/regenerate.dm @@ -27,6 +27,9 @@ C.emote("scream") C.regenerate_limbs(1) C.regenerate_organs() + if(!user.getorganslot("brain")) + var/obj/item/organ/brain/changeling_brain/B = new() + B.Insert(C) if(ishuman(user)) var/mob/living/carbon/human/H = user H.restore_blood() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 794f1ccda32..3391267f26d 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -172,6 +172,11 @@ var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) + if(clonemind.changeling) + var/obj/item/organ/brain/B = H.getorganslot("brain") + B.vital = FALSE + B.decoy_override = TRUE + H.hardset_dna(ui, se, H.real_name, null, mrace, features) if(efficiency > 2) diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 33c3d00d2ee..1f74ed19178 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -28,6 +28,8 @@ if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. if(stat!=DEAD) //If not dead. death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA + if(mind) //You aren't allowed to return to brains that don't exist + mind.current = null ghostize() //Ghostize checks for key so nothing else is necessary. container = null return ..() diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 077c876f242..ea97bc30ae7 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -7,16 +7,29 @@ layer = ABOVE_MOB_LAYER zone = "head" slot = "brain" - vital = 1 + vital = TRUE origin_tech = "biotech=5" attack_verb = list("attacked", "slapped", "whacked") var/mob/living/brain/brainmob = null var/damaged_brain = FALSE //whether the brain organ is damaged. var/decoy_override = FALSE //I apologize to the security players, and myself, who abused this, but this is going to go. +/obj/item/organ/brain/changeling_brain + vital = FALSE + decoy_override = TRUE + /obj/item/organ/brain/Insert(mob/living/carbon/C, special = 0) ..() + name = "brain" + + if(C.mind && C.mind.changeling) //congrats, you're trapped in a body you don't control + if(brainmob && !(C.stat == DEAD || (C.status_flags & FAKEDEATH))) + to_chat(brainmob, "You can't feel your body! You're still just a brain!") + loc = C + C.update_hair() + return + if(brainmob) if(C.key) C.ghostize() @@ -26,7 +39,7 @@ else C.key = brainmob.key - qdel(brainmob) + QDEL_NULL(brainmob) //Update the body's icon so it doesnt appear debrained anymore C.update_hair() @@ -37,7 +50,7 @@ if(C.has_brain_worms()) var/mob/living/simple_animal/borer/B = C.has_brain_worms() B.leave_victim() //Should remove borer if the brain is removed - RR - transfer_identity(C) + transfer_identity(C) C.update_hair() /obj/item/organ/brain/prepare_eat() @@ -45,6 +58,8 @@ /obj/item/organ/brain/proc/transfer_identity(mob/living/L) name = "[L.name]'s brain" + if(brainmob || decoy_override) + return brainmob = new(src) brainmob.name = L.real_name brainmob.real_name = L.real_name @@ -54,7 +69,7 @@ if(!brainmob.stored_dna) brainmob.stored_dna = new /datum/dna/stored(brainmob) C.dna.copy_dna(brainmob.stored_dna) - if(L.mind && L.mind.current && (L.mind.current.stat == DEAD)) + if(L.mind && L.mind.current) L.mind.transfer_to(brainmob) to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just a brain.") diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b040c59d0c9..327a221efea 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -671,7 +671,7 @@ if(status_flags & GODMODE) return if(stat != DEAD) - if(health<= HEALTH_THRESHOLD_DEAD || !getorgan(/obj/item/organ/brain)) + if(health<= HEALTH_THRESHOLD_DEAD) death() return if(paralysis || sleeping || getOxyLoss() > 50 || (status_flags & FAKEDEATH) || health <= HEALTH_THRESHOLD_CRIT) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index b3a791528df..71a5acd17c7 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -133,12 +133,12 @@ var/appears_dead = 0 if(stat == DEAD || (status_flags & FAKEDEATH)) appears_dead = 1 - if(getorgan(/obj/item/organ/brain))//Only perform these checks if there is no brain - if(suiciding) - msg += "[t_He] appear[p_s()] to have commited suicide... there is no hope of recovery.\n" - if(hellbound) - msg += "[t_His] soul seems to have been ripped out of [t_his] body. Revival is impossible.\n" - msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" + if(suiciding) + msg += "[t_He] appear[p_s()] to have commited suicide... there is no hope of recovery.\n" + if(hellbound) + msg += "[t_His] soul seems to have been ripped out of [t_his] body. Revival is impossible.\n" + msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" + if(getorgan(/obj/item/organ/brain)) if(!key) var/foundghost = 0 if(mind) @@ -150,9 +150,10 @@ break if(!foundghost) msg += " and [t_his] soul has departed" - msg += "...\n" - else if(get_bodypart("head")) //Brain is gone, doesn't matter if they are AFK or present. Check for head first tho. Decapitation has similar message. - msg += "It appears that [t_his] brain is missing...\n" + msg += "...\n" + + if(get_bodypart("head") && !getorgan(/obj/item/organ/brain)) + msg += "It appears that [t_his] brain is missing...\n" var/temp = getBruteLoss() //no need to calculate each of these twice diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 7d9cf89ff06..de8c2b79acf 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -137,14 +137,10 @@ loc = LB /obj/item/organ/brain/transfer_to_limb(obj/item/bodypart/head/LB, mob/living/carbon/human/C) - if(C.mind && C.mind.changeling) - LB.brain = new //changeling doesn't lose its real brain organ, we drop a decoy. - LB.brain.loc = LB - LB.brain.decoy_override = TRUE - else //if not a changeling, we put the brain organ inside the dropped head - Remove(C) //and put the player in control of the brainmob - loc = LB - LB.brain = src + Remove(C) //Changeling brain concerns are now handled in Remove + loc = LB + LB.brain = src + if(brainmob) LB.brainmob = brainmob brainmob = null LB.brainmob.loc = LB diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 5f8f6609d70..f8deed5b289 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -32,7 +32,7 @@ var/datum/action/A = X A.Grant(M) - +//Special is for instant replacement like autosurgeons /obj/item/organ/proc/Remove(mob/living/carbon/M, special = 0) owner = null if(M) @@ -78,7 +78,7 @@ /obj/item/organ/Destroy() if(owner) - Remove(owner, 1) + Remove(owner) return ..() /obj/item/organ/attack(mob/living/carbon/M, mob/user) From 9850c90ecbbc1090b926890c53d03fdc23ee8066 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 23 Apr 2017 12:48:20 -0700 Subject: [PATCH 49/73] Automatic changelog generation for PR #26346 [ci skip] --- html/changelogs/AutoChangeLog-pr-26346.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26346.yml diff --git a/html/changelogs/AutoChangeLog-pr-26346.yml b/html/changelogs/AutoChangeLog-pr-26346.yml new file mode 100644 index 00000000000..f1756d26d8c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26346.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - bugfix: "Changeling brains are now more fully vestigial" From b85bba7aea875237a908057d82b5c186d1d1d33d Mon Sep 17 00:00:00 2001 From: MMMiracles Date: Sun, 23 Apr 2017 16:07:43 -0400 Subject: [PATCH 50/73] incinerator --- _maps/map_files/Cerestation/cerestation.dmm | 2177 ++++++++++++++++--- 1 file changed, 1892 insertions(+), 285 deletions(-) diff --git a/_maps/map_files/Cerestation/cerestation.dmm b/_maps/map_files/Cerestation/cerestation.dmm index d3ab701075a..cf2c5614634 100644 --- a/_maps/map_files/Cerestation/cerestation.dmm +++ b/_maps/map_files/Cerestation/cerestation.dmm @@ -54946,6 +54946,11 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (NORTH)"; icon_state = "yellow"; @@ -55707,6 +55712,12 @@ /area/engine/engine_smes) "bSP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -56328,6 +56339,12 @@ /area/engine/engine_smes) "bTQ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -56891,6 +56908,11 @@ /area/atmos) "bUR" = ( /obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (SOUTHWEST)"; icon_state = "yellow"; @@ -56906,6 +56928,11 @@ icon_state = "camera"; network = list("SS13","CE") }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/open/floor/plasteel/yellow/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -57375,6 +57402,12 @@ name = "Central Asteroid Maintenance"; req_access_txt = "10" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -57785,6 +57818,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -59670,6 +59709,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -90903,6 +90947,11 @@ }) "dgP" = ( /obj/item/stack/rods, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -92358,6 +92407,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -95048,6 +95102,1559 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) +"dpi" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix To Incinerator"; + on = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpj" = ( +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + tag = "icon-manifold (NORTH)"; + icon_state = "manifold"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpk" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpl" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpm" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpn" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpo" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpp" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Central Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpr" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dps" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpt" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpu" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpv" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpw" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpx" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpy" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpz" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpB" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpC" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpD" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpF" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpH" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpJ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpK" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpL" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpM" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpN" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpP" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpQ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpS" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpT" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpV" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpW" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Central Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqa" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqb" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqc" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqd" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqe" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqf" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqg" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqh" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqi" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dql" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqm" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqn" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqo" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqp" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqr" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqs" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqt" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqu" = ( +/obj/machinery/door/airlock/atmos{ + name = "Turbine Access"; + req_access_txt = "32" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqv" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqw" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqx" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqy" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqz" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Central Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqD" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqE" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqG" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqH" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqJ" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqK" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4; + name = "input gas connector port" + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqL" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "plasma tank pump" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 4; + initialize_directions = 11 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqN" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/weapon/extinguisher, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqO" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqP" = ( +/obj/machinery/power/smes{ + capacity = 9e+006; + charge = 10000 + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqQ" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqR" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqS" = ( +/obj/machinery/atmospherics/components/unary/tank/toxins{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqT" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "plasma tank pump" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqU" = ( +/obj/machinery/atmospherics/pipe/manifold4w/general{ + level = 2 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqV" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqW" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqX" = ( +/obj/machinery/airalarm{ + desc = "This particular atmos control unit appears to have no access restrictions."; + dir = 8; + icon_state = "alarm0"; + locked = 0; + name = "all-access air alarm"; + pixel_x = 24; + req_access = "0"; + req_one_access = "0" + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + name = "output gas connector port" + }, +/obj/machinery/portable_atmospherics/canister, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqY" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqZ" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dra" = ( +/obj/structure/chair/stool, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Incinerator APC"; + pixel_x = -23; + pixel_y = 2 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drc" = ( +/obj/machinery/atmospherics/components/binary/valve{ + name = "Mix to Space" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drd" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dre" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drf" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Incinerator to Output"; + on = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drg" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drh" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dri" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drj" = ( +/obj/machinery/computer/turbine_computer{ + id = "incineratorturbine" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + icon_state = "intact"; + dir = 6 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drk" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drl" = ( +/obj/machinery/button/door{ + id = "auxincineratorvent"; + name = "Auxiliary Vent Control"; + pixel_x = 6; + pixel_y = -24; + req_access_txt = "32" + }, +/obj/machinery/button/door{ + id = "turbinevent"; + name = "Turbine Vent Control"; + pixel_x = -6; + pixel_y = -24; + req_access_txt = "32" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/incinerator) +"drm" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/binary/valve{ + dir = 4; + name = "Incinerator to Space" + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/incinerator) +"drn" = ( +/obj/machinery/doorButtons/airlock_controller{ + idExterior = "incinerator_airlock_exterior"; + idSelf = "incinerator_access_control"; + idInterior = "incinerator_airlock_interior"; + name = "Incinerator Access Console"; + pixel_x = 6; + pixel_y = -26; + req_access_txt = "12" + }, +/obj/machinery/button/ignition{ + id = "Incinerator"; + pixel_x = -6; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 4; + initialize_directions = 11 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/incinerator) +"dro" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drp" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drq" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drs" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drt" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 2 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dru" = ( +/obj/machinery/door/airlock/glass{ + autoclose = 0; + frequency = 1449; + heat_proof = 1; + icon_state = "door_locked"; + id_tag = "incinerator_airlock_interior"; + locked = 1; + name = "Turbine Interior Airlock"; + req_access_txt = "32" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/maintenance/incinerator) +"drv" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drw" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drx" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Incinerator Output Pump"; + on = 1 + }, +/turf/open/space, +/area/maintenance/incinerator) +"dry" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drz" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + on = 1 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "incinerator_airlock_exterior"; + idSelf = "incinerator_access_control"; + layer = 3.1; + name = "Incinerator airlock control"; + pixel_x = 8; + pixel_y = -24 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/sign/fire{ + pixel_x = -32; + pixel_y = 0 + }, +/turf/open/floor/engine, +/area/maintenance/incinerator) +"drA" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/maintenance/incinerator) +"drB" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + on = 1 + }, +/obj/structure/sign/fire{ + pixel_x = 32; + pixel_y = 0 + }, +/obj/machinery/doorButtons/access_button{ + idSelf = "incinerator_access_control"; + idDoor = "incinerator_airlock_interior"; + name = "Incinerator airlock control"; + pixel_x = -8; + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/cobweb{ + icon_state = "cobweb2" + }, +/turf/open/floor/engine, +/area/maintenance/incinerator) +"drC" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drD" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/open/space, +/area/maintenance/incinerator) +"drE" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drF" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 2 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drG" = ( +/obj/machinery/door/airlock/glass{ + autoclose = 0; + frequency = 1449; + heat_proof = 1; + icon_state = "door_locked"; + id_tag = "incinerator_airlock_exterior"; + locked = 1; + name = "Turbine Exterior Airlock"; + req_access_txt = "32" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/maintenance/incinerator) +"drH" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drI" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drJ" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/open/space, +/area/maintenance/incinerator) +"drK" = ( +/obj/machinery/door/poddoor{ + id = "auxincineratorvent"; + name = "Auxiliary Incinerator Vent" + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drL" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1; + frequency = 1441; + id = "inc_in" + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drM" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/igniter{ + icon_state = "igniter0"; + id = "Incinerator"; + luminosity = 2; + on = 0 + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + initialize_directions = 1; + internal_pressure_bound = 4000; + on = 0; + pressure_checks = 2; + pump_direction = 0 + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drO" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drP" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/open/space, +/area/maintenance/incinerator) +"drQ" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drR" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drS" = ( +/obj/machinery/power/compressor{ + comp_id = "incineratorturbine"; + dir = 1; + luminosity = 2 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drT" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drU" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drV" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/open/space, +/area/maintenance/incinerator) +"drW" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drX" = ( +/obj/machinery/power/turbine{ + luminosity = 2 + }, +/obj/structure/cable/yellow, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drY" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drZ" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/maintenance/incinerator) +"dsa" = ( +/obj/structure/sign/fire{ + pixel_x = 0; + pixel_y = 0 + }, +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"dsb" = ( +/obj/machinery/door/poddoor{ + id = "turbinevent"; + name = "Turbine Vent" + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dsc" = ( +/obj/structure/sign/fire{ + pixel_x = 0; + pixel_y = 0 + }, +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) (1,1,1) = {" aaa @@ -110765,7 +112372,7 @@ aeY afs afM ags -doY +doX dpa aiJ akw @@ -121654,26 +123261,26 @@ aZt bAd bAd byQ -byP -byP -byP -byO -dgD -bvU -dht -cbr -cbr -cbr -dfU -cbr -cbr -dfU -cbr -cbr -cbr -cbr -dfU -dfU +bEj +dpl +dpm +dpn +dpo +dpp +dpq +dpr +dps +dpt +dpu +dpv +dpw +dpx +dpy +dpz +dpB +dpD +dpF +dpH caf bBN bBN @@ -121911,7 +123518,7 @@ aZt bBN cMH bDb -byP +bEk bGE bGE bGE @@ -121931,8 +123538,8 @@ cbr djb diU cbr -cbr -cbr +dpJ +dpL bAd aZt aZt @@ -122168,7 +123775,7 @@ aZt bBN byS byQ -byP +bEk bGE bHH bHH @@ -122189,7 +123796,7 @@ bOM bOM bOM dgQ -djm +dpM byS bAd bBN @@ -122425,7 +124032,7 @@ aZt bAd bAd byQ -byO +dpk bGE bHI bJv @@ -122446,8 +124053,8 @@ bYp bXG bOM cbr -cbr -cbr +dpN +dpP cMH byS cbr @@ -122682,7 +124289,7 @@ aZH bAd bAd bEi -byP +bEk bGE bHJ bHJ @@ -122704,8 +124311,8 @@ bXG bOM byS dfU -cbr -cbr +dpQ +dpS byS cbr dgD @@ -122939,7 +124546,7 @@ aZH bAd cMH byQ -byP +bEk bGE bHK bHK @@ -122962,10 +124569,10 @@ bOM bAd diS djs -dgD -bvU -dht -cbr +dpT +dpW +dpY +dqa cMH cMH byS @@ -123195,8 +124802,8 @@ aZt aZH bBN bCZ -byP -byP +bEj +bEl bGE bGE bGE @@ -123222,7 +124829,7 @@ cMH byS cMH dfU -cbr +dqb byS byS aZt @@ -123452,7 +125059,7 @@ aZt bAd byS bAf -byP +bEk bAd bGE bHL @@ -123479,8 +125086,8 @@ cMV cbr byS cbr -cbr -djM +dqc +djm bAd aZt aZt @@ -123736,8 +125343,8 @@ cbr dgD cNc dht -cbr -djm +dqd +djO byS aZH aZt @@ -123966,7 +125573,7 @@ aZt bAd bAd dgC -byP +dpi bFq bGG bHN @@ -123993,8 +125600,8 @@ cMW cbr cMH bAd -cbr -djO +dqe +djP djl aZH aZt @@ -124223,7 +125830,7 @@ bal bal bal bDb -bEj +dpj bFr bGH bHO @@ -124250,12 +125857,12 @@ bOM bOM bOM byS -cbr -djP +dqf +bAe cMH aZH aZt -aaa +abC aaa aaa aaa @@ -124507,13 +126114,13 @@ cbi cbi bOM dge -cbr -bAe -byS -aZH -aZt -aZt -aaa +dqg +dqr +dqJ +dqR +dqZ +drh +drp aaa aaa aaa @@ -124764,13 +126371,13 @@ cbj cbP bOM dfU -cbr -bBN -bBN -aZH -aZt -aZt -aaa +dqh +dqs +dqK +dqS +dra +dri +drq aaa aaa aaa @@ -125021,19 +126628,19 @@ cbi cbi bOM cbr -cbr -bBN -aZH -aZH -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dqi +dqt +dqL +dqT +drb +drj +drr +drx +drD +drJ +drP +drV +drZ aaa aaa aaa @@ -125278,19 +126885,19 @@ bOM bOM bOM djb -cbr -cMH -aZH -aZH -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dqj +dqu +dqM +dqU +drc +drk +drs +dry +drE +drK +drQ +arw +arw aaa aaa aaa @@ -125535,19 +127142,19 @@ cbk cbk bOM cbr -djm -cMH -aZt -aZt -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dqk +dqv +dqN +dqV +drd +drl +drt +drz +drF +drL +drR +drW +dsa aaa aaa aaa @@ -125792,19 +127399,19 @@ cbl cbQ bOM cbr -cbr -bAd -aZH -aZt -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dql +dqw +dqO +dqW +dre +drm +dru +drA +drG +drM +drS +drX +dsb aaa aaa aaa @@ -126049,19 +127656,19 @@ cbk cbk bOM cbr -dfU -bAd -aZH -aZH -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dqm +dqx +dqP +dqX +drf +drn +drv +drB +drH +drN +drT +drY +dsc aaa aaa aaa @@ -126306,19 +127913,19 @@ bOM bOM bOM cbr -cbr -byS -bBN -aZH -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dqn +dqy +dqQ +dqY +drg +dro +drw +drC +drI +drO +drU +arw +arw aaa aaa aaa @@ -126563,15 +128170,15 @@ cbm cbm bOM djs -cbr +dqo dgE byS aZH aZt aZt aZt -aaa -aaa +abC +abC aaa aaa aaa @@ -126820,7 +128427,7 @@ cbn cbR bOM djF -cbr +dqp djR cMH aZH @@ -127078,7 +128685,7 @@ cbm bOM bAd dgQ -bvU +dqz bBN aZH aZt @@ -127335,7 +128942,7 @@ bOM bOM cbr diU -caf +dqA byS aZH aZt @@ -127592,7 +129199,7 @@ cbo bOM djG bAd -cbr +dqB bBN aZH aZt @@ -127849,27 +129456,27 @@ cbS bOM bAd byS -cbr +dqC byS aZH aZH aZH aZt -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -128106,27 +129713,27 @@ cbo bOM bAd cMH -cbr +dqD byS aZH aZH aZH aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -128363,27 +129970,27 @@ bOM bOM bAd bAd -cbr +dqE bBN aZH aZH aZH aaa -aaa -aaa cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -128620,27 +130227,27 @@ byS bAd byS cbr -cbr +dqF bBN aZH aZH aZH aaa -aaa -aaa cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -128877,27 +130484,27 @@ djv byS bPt byP -cbr +dqG djk aZH aZt aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -129122,19 +130729,19 @@ bTP bUR bVQ bWD -cbr -cbr -cbr -cbr -cbr -cMV -cbr -cbr -cbr +dpA +dpC +dpE +dpG +dpI +dpK +dpO +dpR +dpU djw byP byP -cbr +dqH cMH aZH aZt @@ -129144,17 +130751,17 @@ cKF cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aac aad @@ -129387,11 +130994,11 @@ bAe djk cbr byP -byP -byP -byP -byP -byP +dpV +dpX +dpZ +dqq +dqI byS aZH aaa @@ -129401,17 +131008,17 @@ cKF cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aab aad aad @@ -129658,17 +131265,17 @@ cKF cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aab aab aad @@ -129915,17 +131522,17 @@ cKF cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aad +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +aab aab aad aac @@ -130181,7 +131788,7 @@ aaa aaa aaa aaa -aaa +aab aab aab aad From 7ddea10cd785ce2b8ebe830c5eee7cf0af2a8826 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sun, 23 Apr 2017 21:16:10 -0400 Subject: [PATCH 51/73] Exploit whack-a-mole --- code/__HELPERS/type2type.dm | 2 +- code/_globalvars/lists/names.dm | 36 +++++++++---------- code/controllers/configuration.dm | 6 ++-- code/controllers/subsystem/ticker.dm | 6 ++-- code/datums/ai_laws.dm | 2 +- code/datums/helper_datums/getrev.dm | 2 +- code/game/objects/items/weapons/AI_modules.dm | 2 +- code/modules/admin/admin_ranks.dm | 4 +-- code/modules/admin/verbs/deadsay.dm | 2 +- code/modules/admin/whitelist.dm | 2 +- code/modules/awaymissions/zlevel.dm | 2 +- code/modules/games/cas.dm | 2 +- code/world.dm | 4 +-- tools/Redirector/Configurations.dm | 4 +-- tools/Redirector/textprocs.dm | 2 +- 15 files changed, 39 insertions(+), 39 deletions(-) diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 92636ee9dc1..3fb38839804 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -72,7 +72,7 @@ return . //Splits the text of a file at seperator and returns them in a list. -/proc/file2list(filename, seperator="\n") +/world/proc/file2list(filename, seperator="\n") return splittext(return_file_text(filename),seperator) diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index 7b34552e35d..0853a10aeb7 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -1,23 +1,23 @@ -GLOBAL_LIST_INIT(ai_names, file2list("config/names/ai.txt")) -GLOBAL_LIST_INIT(wizard_first, file2list("config/names/wizardfirst.txt")) -GLOBAL_LIST_INIT(wizard_second, file2list("config/names/wizardsecond.txt")) -GLOBAL_LIST_INIT(ninja_titles, file2list("config/names/ninjatitle.txt")) -GLOBAL_LIST_INIT(ninja_names, file2list("config/names/ninjaname.txt")) -GLOBAL_LIST_INIT(commando_names, file2list("config/names/death_commando.txt")) -GLOBAL_LIST_INIT(first_names_male, file2list("config/names/first_male.txt")) -GLOBAL_LIST_INIT(first_names_female, file2list("config/names/first_female.txt")) -GLOBAL_LIST_INIT(last_names, file2list("config/names/last.txt")) -GLOBAL_LIST_INIT(lizard_names_male, file2list("config/names/lizard_male.txt")) -GLOBAL_LIST_INIT(lizard_names_female, file2list("config/names/lizard_female.txt")) -GLOBAL_LIST_INIT(clown_names, file2list("config/names/clown.txt")) -GLOBAL_LIST_INIT(mime_names, file2list("config/names/mime.txt")) -GLOBAL_LIST_INIT(carp_names, file2list("config/names/carp.txt")) -GLOBAL_LIST_INIT(golem_names, file2list("config/names/golem.txt")) -GLOBAL_LIST_INIT(plasmaman_names, file2list("config/names/plasmaman.txt")) +GLOBAL_LIST_INIT(ai_names, world.file2list("config/names/ai.txt")) +GLOBAL_LIST_INIT(wizard_first, world.file2list("config/names/wizardfirst.txt")) +GLOBAL_LIST_INIT(wizard_second, world.file2list("config/names/wizardsecond.txt")) +GLOBAL_LIST_INIT(ninja_titles, world.file2list("config/names/ninjatitle.txt")) +GLOBAL_LIST_INIT(ninja_names, world.file2list("config/names/ninjaname.txt")) +GLOBAL_LIST_INIT(commando_names, world.file2list("config/names/death_commando.txt")) +GLOBAL_LIST_INIT(first_names_male, world.file2list("config/names/first_male.txt")) +GLOBAL_LIST_INIT(first_names_female, world.file2list("config/names/first_female.txt")) +GLOBAL_LIST_INIT(last_names, world.file2list("config/names/last.txt")) +GLOBAL_LIST_INIT(lizard_names_male, world.file2list("config/names/lizard_male.txt")) +GLOBAL_LIST_INIT(lizard_names_female, world.file2list("config/names/lizard_female.txt")) +GLOBAL_LIST_INIT(clown_names, world.file2list("config/names/clown.txt")) +GLOBAL_LIST_INIT(mime_names, world.file2list("config/names/mime.txt")) +GLOBAL_LIST_INIT(carp_names, world.file2list("config/names/carp.txt")) +GLOBAL_LIST_INIT(golem_names, world.file2list("config/names/golem.txt")) +GLOBAL_LIST_INIT(plasmaman_names, world.file2list("config/names/plasmaman.txt")) GLOBAL_LIST_INIT(posibrain_names, list("PBU","HIU","SINA","ARMA","OSI","HBL","MSO","RR","CHRI","CDB","HG","XSI","ORNG","GUN","KOR","MET","FRE","XIS","SLI","PKP","HOG","RZH","GOOF","MRPR","JJR","FIRC","INC","PHL","BGB","ANTR","MIW","WJ","JRD","CHOC","ANCL","JLLO","JNLG","KOS","TKRG","XAL","STLP","CBOS","DUNC","FXMC","DRSD","COI")) -GLOBAL_LIST_INIT(verbs, file2list("config/names/verbs.txt")) -GLOBAL_LIST_INIT(adjectives, file2list("config/names/adjectives.txt")) +GLOBAL_LIST_INIT(verbs, world.file2list("config/names/verbs.txt")) +GLOBAL_LIST_INIT(adjectives, world.file2list("config/names/adjectives.txt")) //loaded on startup because of " //would include in rsc if ' was used diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 35f12e4dc51..f0f39e68255 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -293,7 +293,7 @@ GLOB.abandon_allowed = respawn /datum/configuration/proc/load(filename, type = "config") //the type can also be game_options, in which case it uses a different switch. not making it separate to not copypaste code - Urist - var/list/Lines = file2list(filename) + var/list/Lines = world.file2list(filename) for(var/t in Lines) if(!t) @@ -785,7 +785,7 @@ /datum/configuration/proc/loadmaplist(filename) - var/list/Lines = file2list(filename) + var/list/Lines = world.file2list(filename) var/datum/map_config/currentmap = null for(var/t in Lines) @@ -835,7 +835,7 @@ /datum/configuration/proc/loadsql(filename) - var/list/Lines = file2list(filename) + var/list/Lines = world.file2list(filename) for(var/t in Lines) if(!t) continue diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 5d572f8a07a..34dd9d6c41f 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -60,7 +60,7 @@ SUBSYSTEM_DEF(ticker) var/list/round_start_events /datum/controller/subsystem/ticker/Initialize(timeofday) - var/list/music = file2list(ROUND_START_MUSIC_LIST, "\n") + var/list/music = world.file2list(ROUND_START_MUSIC_LIST, "\n") login_music = pick(music) if(!GLOB.syndicate_code_phrase) @@ -604,8 +604,8 @@ SUBSYSTEM_DEF(ticker) if(selected_tip) m = selected_tip else - var/list/randomtips = file2list("config/tips.txt") - var/list/memetips = file2list("config/sillytips.txt") + var/list/randomtips = world.file2list("config/tips.txt") + var/list/memetips = world.file2list("config/sillytips.txt") if(randomtips.len && prob(95)) m = pick(randomtips) else if(memetips.len) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 576d1080bb7..30b839cef0e 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -190,7 +190,7 @@ /datum/ai_laws/custom/New() //This reads silicon_laws.txt and allows server hosts to set custom AI starting laws. ..() - for(var/line in file2list("config/silicon_laws.txt")) + for(var/line in world.file2list("config/silicon_laws.txt")) if(!line) continue if(findtextEx(line,"#",1,2)) diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index f285effc0fb..31d6b384de5 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -8,7 +8,7 @@ /datum/getrev/New() var/head_file = return_file_text(".git/logs/HEAD") if(SERVERTOOLS && fexists("..\\prtestjob.lk")) - var/list/tmp = file2list("..\\prtestjob.lk") + var/list/tmp = world.file2list("..\\prtestjob.lk") for(var/I in tmp) if(I) testmerge |= I diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 9775481b30b..c75b4c7d743 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -409,7 +409,7 @@ AI MODULES /obj/item/weapon/aiModule/core/full/custom/New() ..() - for(var/line in file2list("config/silicon_laws.txt")) + for(var/line in world.file2list("config/silicon_laws.txt")) if(!line) continue if(findtextEx(line,"#",1,2)) diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 6c1eecda767..bf7b9dcb1ae 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -105,7 +105,7 @@ GLOBAL_PROTECT(admin_ranks) if(config.admin_legacy_system) var/previous_rights = 0 //load text from file and process each line seperately - for(var/line in file2list("config/admin_ranks.txt")) + for(var/line in world.file2list("config/admin_ranks.txt")) if(!line) continue if(findtextEx(line,"#",1,2)) @@ -175,7 +175,7 @@ GLOBAL_PROTECT(admin_ranks) if(config.admin_legacy_system) //load text from file - var/list/lines = file2list("config/admins.txt") + var/list/lines = world.file2list("config/admins.txt") //process each line seperately for(var/line in lines) diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 14abaf9dcb5..f29a04e376e 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -19,7 +19,7 @@ if (!msg) return - var/nicknames = file2list("config/admin_nicknames.txt") + var/nicknames = world.file2list("config/admin_nicknames.txt") var/rendered = "DEAD: ADMIN([src.holder.fakekey ? pick(nicknames) : src.key]) says, \"[msg]\"" diff --git a/code/modules/admin/whitelist.dm b/code/modules/admin/whitelist.dm index b922518812c..095e3dceac0 100644 --- a/code/modules/admin/whitelist.dm +++ b/code/modules/admin/whitelist.dm @@ -5,7 +5,7 @@ GLOBAL_PROTECT(whitelist) /proc/load_whitelist() GLOB.whitelist = list() - for(var/line in file2list(WHITELISTFILE)) + for(var/line in world.file2list(WHITELISTFILE)) if(!line) continue if(findtextEx(line,"#",1,2)) diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 382be07fbe6..bea67c994f7 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -32,7 +32,7 @@ GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "config/away /proc/generateMapList(filename) var/list/potentialMaps = list() - var/list/Lines = file2list(filename) + var/list/Lines = world.file2list(filename) if(!Lines.len) return diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm index c34325c9041..3858e633a2c 100644 --- a/code/modules/games/cas.dm +++ b/code/modules/games/cas.dm @@ -28,7 +28,7 @@ card_text_file = "strings/cas_black.txt" /obj/item/toy/cards/deck/cas/New() - var/static/list/cards_against_space = list("cas_white" = file2list("strings/cas_white.txt"),"cas_black" = file2list("strings/cas_black.txt")) + var/static/list/cards_against_space = list("cas_white" = world.file2list("strings/cas_white.txt"),"cas_black" = world.file2list("strings/cas_black.txt")) allcards = cards_against_space[card_face] var/list/possiblecards = allcards.Copy() if(possiblecards.len < decksize) // sanity check diff --git a/code/world.dm b/code/world.dm index 6207483c2dc..75470585e43 100644 --- a/code/world.dm +++ b/code/world.dm @@ -17,7 +17,7 @@ log_world("World loaded at [time_stamp()]") #if (PRELOAD_RSC == 0) - external_rsc_urls = file2list("config/external_rsc_urls.txt","\n") + external_rsc_urls = world.file2list("config/external_rsc_urls.txt","\n") var/i=1 while(i<=external_rsc_urls.len) if(external_rsc_urls[i]) @@ -251,7 +251,7 @@ world << sound(round_end_sound) /world/proc/load_mode() - var/list/Lines = file2list("data/mode.txt") + var/list/Lines = world.file2list("data/mode.txt") if(Lines.len) if(Lines[1]) GLOB.master_mode = Lines[1] diff --git a/tools/Redirector/Configurations.dm b/tools/Redirector/Configurations.dm index 6b89ace90d5..2966bb8702c 100644 --- a/tools/Redirector/Configurations.dm +++ b/tools/Redirector/Configurations.dm @@ -11,7 +11,7 @@ var/list/adminkeys = list() proc/gen_configs() - config_stream = dd_file2list("config.txt") + config_stream = dd_world.file2list("config.txt") var/server_gen = 0 // if the stream is looking for servers var/admin_gen = 0 // if the stream is looking for admins @@ -43,7 +43,7 @@ proc/gen_configs() // Generate the list of admins now for(var/file in adminfiles) - var/admin_config_stream = dd_file2list(file) + var/admin_config_stream = dd_world.file2list(file) for(var/line in admin_config_stream) diff --git a/tools/Redirector/textprocs.dm b/tools/Redirector/textprocs.dm index b8d49ade72f..5f12d1dc89c 100644 --- a/tools/Redirector/textprocs.dm +++ b/tools/Redirector/textprocs.dm @@ -11,7 +11,7 @@ proc /////////////////// // Reading files // /////////////////// - dd_file2list(file_path, separator = "\n") + dd_world.file2list(file_path, separator = "\n") var/file if (isfile(file_path)) file = file_path From 877d7f962665f4f27d8b32f07c69832a75786a2f Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sun, 23 Apr 2017 21:17:57 -0400 Subject: [PATCH 52/73] These --- tools/Redirector/Configurations.dm | 2 +- tools/Redirector/textprocs.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/Redirector/Configurations.dm b/tools/Redirector/Configurations.dm index 2966bb8702c..3d5087071ba 100644 --- a/tools/Redirector/Configurations.dm +++ b/tools/Redirector/Configurations.dm @@ -11,7 +11,7 @@ var/list/adminkeys = list() proc/gen_configs() - config_stream = dd_world.file2list("config.txt") + config_stream = dd_file2list("config.txt") var/server_gen = 0 // if the stream is looking for servers var/admin_gen = 0 // if the stream is looking for admins diff --git a/tools/Redirector/textprocs.dm b/tools/Redirector/textprocs.dm index 5f12d1dc89c..b8d49ade72f 100644 --- a/tools/Redirector/textprocs.dm +++ b/tools/Redirector/textprocs.dm @@ -11,7 +11,7 @@ proc /////////////////// // Reading files // /////////////////// - dd_world.file2list(file_path, separator = "\n") + dd_file2list(file_path, separator = "\n") var/file if (isfile(file_path)) file = file_path From 0ed97ad026785b129c5d413743182b72ccd3bef6 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sun, 23 Apr 2017 21:18:38 -0400 Subject: [PATCH 53/73] Reeee --- tools/Redirector/Configurations.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/Redirector/Configurations.dm b/tools/Redirector/Configurations.dm index 3d5087071ba..6b89ace90d5 100644 --- a/tools/Redirector/Configurations.dm +++ b/tools/Redirector/Configurations.dm @@ -43,7 +43,7 @@ proc/gen_configs() // Generate the list of admins now for(var/file in adminfiles) - var/admin_config_stream = dd_world.file2list(file) + var/admin_config_stream = dd_file2list(file) for(var/line in admin_config_stream) From 9bae54c45c838678361018268f7706cfe1d773b2 Mon Sep 17 00:00:00 2001 From: coiax Date: Mon, 24 Apr 2017 10:05:41 +0100 Subject: [PATCH 54/73] Plasmamen tongues, plasmaman lung sprites (#26441) * Plasmamen tongues, plasmaman lung sprites :cl: coiax, WJohnston add: Plasmamen lungs, also known as "plasma filters" now look different from human lungs. add: Plasmamen now have their own special type of bone tongue. They still sound the same, it's just purple. Like them. /:cl: Thanks to @WJohnston for the sprites. * Actually uses new tongue sprite --- .../carbon/human/species_types/plasmamen.dm | 1 + code/modules/surgery/organs/lungs.dm | 2 ++ code/modules/surgery/organs/tongue.dm | 8 ++++++++ icons/obj/surgery.dmi | Bin 28574 -> 29118 bytes 4 files changed, 11 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 025a256c045..09d89d3a01a 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -6,6 +6,7 @@ meat = /obj/item/stack/sheet/mineral/plasma species_traits = list(NOBLOOD,RESISTCOLD,RADIMMUNE,NOTRANSSTING,VIRUSIMMUNE,NOHUNGER) mutantlungs = /obj/item/organ/lungs/plasmaman + mutant_organs = list(/obj/item/organ/tongue/bone/plasmaman) dangerous_existence = 1 //So so much blacklisted = 1 //See above burnmod = 1.5 diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index ece2ad3f402..675f10b3e9d 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -251,6 +251,8 @@ /obj/item/organ/lungs/plasmaman name = "plasma filter" + desc = "A spongy rib-shaped mass for filtering plasma from the air." + icon_state = "lungs-plasma" safe_oxygen_min = 0 //We don't breath this safe_toxins_min = 16 //We breath THIS! diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 4c6ce0ab0e4..096e7e955a4 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -168,6 +168,14 @@ if("papyrus") . |= SPAN_PAPYRUS +/obj/item/organ/tongue/bone/plasmaman + name = "plasma bone \"tongue\"" + desc = "Like animated skeletons, Plasmamen vibrate their teeth in order to produce speech." + icon_state = "tongueplasma" + +/obj/item/organ/tongue/bone/plasmaman/get_spans() + return + /obj/item/organ/tongue/robot name = "robotic voicebox" desc = "A voice synthesizer that can interface with organic lifeforms." diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 9532ecbcccd14d7cf7cd4e0e714b4211a04b735d..19d6275d785108cfeac96ebff99ccaeeddd9bbd8 100644 GIT binary patch delta 9914 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 delta 9366 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 WK}Lbpb}<;}At$XYRU=^({J#Jlz(>RY From e0e59f9aa1f81e4c4618f460b4a019102bbbc8d9 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 24 Apr 2017 02:05:43 -0700 Subject: [PATCH 55/73] Automatic changelog generation for PR #26441 [ci skip] --- html/changelogs/AutoChangeLog-pr-26441.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26441.yml diff --git a/html/changelogs/AutoChangeLog-pr-26441.yml b/html/changelogs/AutoChangeLog-pr-26441.yml new file mode 100644 index 00000000000..731e4a870b0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26441.yml @@ -0,0 +1,7 @@ +author: "coiax, WJohnston" +delete-after: True +changes: + - rscadd: "Plasmamen lungs, also known as \"plasma filters\" now look different +from human lungs." + - rscadd: "Plasmamen now have their own special type of bone tongue. They +still sound the same, it's just purple. Like them." From 562c3db4081f8783344bb81e3fc6339f60681a65 Mon Sep 17 00:00:00 2001 From: coiax Date: Mon, 24 Apr 2017 13:44:51 +0100 Subject: [PATCH 56/73] Adds examine tips to firedoor construction/deconstruction (#26381) * Adds examine tips to firedoor construction :cl: coiax add: You can examine a firedoor for hints on how to construct/deconstruct it. add: Add an additional hint during construction where you can add plasteel to make the firedoor reinforced. /:cl: - Makes welding a firedoor take the same amount of time as welding an airlock, and use one fuel. - Makes the firelock construction/destruction steps equivalent to each other, specifically, changed a construction weld step to a crowbar step. * Only if not already reinforced * Compound if statement * Welders use fuel based on usetime these days --- code/game/machinery/doors/firedoor.dm | 70 ++++++++++++++++++--------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 42685bee61f..6cb05037bf5 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -30,6 +30,19 @@ ..() CalculateAffectingAreas() +/obj/machinery/door/firedoor/examine(mob/user) + ..() + if(!density) + to_chat(user, "It is open, but could be pried closed.") + else + if(!welded) + to_chat(user, "It is closed, but could be pried open. Deconstruction would require it to be welded shut.") + else + if(boltslocked) + to_chat(user, "It is welded shut. The floor bolt have been locked by screws.") + else + to_chat(user, "The bolt locks have been unscrewed, but the bolts themselves are still wrenched to the floor.") + /obj/machinery/door/firedoor/proc/CalculateAffectingAreas() remove_from_areas() affecting_areas = get_adjacent_open_areas(src) | get_area(src) @@ -64,7 +77,6 @@ latetoggle() else stat |= NOPOWER - return /obj/machinery/door/firedoor/attack_hand(mob/user) if(operating || !density) @@ -96,8 +108,8 @@ deconstruct(TRUE) return if(istype(C, /obj/item/weapon/screwdriver)) - user.visible_message("[user] [boltslocked ? "unlocks" : "locks"] [src]'s bolts...", \ - "You [boltslocked ? "unlock" : "lock"] [src]'s floor bolts...") + user.visible_message("[user] [boltslocked ? "unlocks" : "locks"] [src]'s bolts.", \ + "You [boltslocked ? "unlock" : "lock"] [src]'s floor bolts.") playsound(get_turf(src), C.usesound, 50, 1) boltslocked = !boltslocked return @@ -109,9 +121,13 @@ /obj/machinery/door/firedoor/try_to_weld(obj/item/weapon/weldingtool/W, mob/user) if(W.remove_fuel(0, user)) - welded = !welded - to_chat(user, "You [welded?"welded":"unwelded"] \the [src]") - update_icon() + playsound(get_turf(src), W.usesound, 50, 1) + user.visible_message("[user] starts [welded ? "unwelding" : "welding"] [src].", "You start welding [src].") + if(do_after(user, 40*W.toolspeed, 1, target=src)) + playsound(get_turf(src), W.usesound, 50, 1) + welded = !welded + to_chat(user, "[user] [welded?"welds":"unwelds"] [src].", "You [welded ? "weld" : "unweld"] [src].") + update_icon() /obj/machinery/door/firedoor/try_to_crowbar(obj/item/I, mob/user) if(welded || operating) @@ -243,13 +259,15 @@ ..() switch(constructionStep) if(CONSTRUCTION_PANEL_OPEN) - to_chat(user, "There is a small metal plate covering the wires.") + to_chat(user, "It is unbolted from the floor. A small loosely connected metal plate is covering the wires.") + if(!reinforced) + to_chat(user, "It could be reinforced with plasteel.") if(CONSTRUCTION_WIRES_EXPOSED) - to_chat(user, "Wires are trailing from the maintenance panel.") + to_chat(user, "The maintenance plate has been pried away, and wires are trailing.") if(CONSTRUCTION_GUTTED) - to_chat(user, "The circuit board is visible.") + to_chat(user, "The maintenance panel is missing wires and the circuit board is loosely connected.") if(CONSTRUCTION_NOCIRCUIT) - to_chat(user, "There are no electronics in the frame.") + to_chat(user, "There are no firelock electronics in the frame. The frame could be cut apart.") /obj/structure/firelock_frame/update_icon() ..() @@ -329,19 +347,17 @@ constructionStep = CONSTRUCTION_GUTTED update_icon() return - if(istype(C, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = C - if(W.remove_fuel(1, user)) - playsound(get_turf(src), W.usesound, 50, 1) - user.visible_message("[user] starts welding a metal plate into [src]...", \ - "You begin welding the cover plate back onto [src]...") - if(!do_after(user, 80*C.toolspeed, target = src)) - return - if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) - return - playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) - user.visible_message("[user] welds the metal plate into [src].", \ - "You weld [src]'s cover plate into place, hiding the wires.") + if(istype(C, /obj/item/weapon/crowbar)) + playsound(get_turf(src), C.usesound, 50, 1) + user.visible_message("[user] starts prying a metal plate into [src]...", \ + "You begin prying the cover plate back onto [src]...") + if(!do_after(user, 80*C.toolspeed, target = src)) + return + if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) + return + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + user.visible_message("[user] pries the metal plate into [src].", \ + "You pry [src]'s cover plate into place, hiding the wires.") constructionStep = CONSTRUCTION_PANEL_OPEN update_icon() return @@ -419,4 +435,10 @@ /obj/structure/firelock_frame/heavy name = "heavy firelock frame" - reinforced = 1 \ No newline at end of file + reinforced = 1 + +#undef CONSTRUCTION_COMPLETE +#undef CONSTRUCTION_PANEL_OPEN +#undef CONSTRUCTION_WIRES_EXPOSED +#undef CONSTRUCTION_GUTTED +#undef CONSTRUCTION_NOCIRCUIT From ce68510b31152e31862b31ab1abaf01dbb640db1 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 24 Apr 2017 05:44:52 -0700 Subject: [PATCH 57/73] Automatic changelog generation for PR #26381 [ci skip] --- html/changelogs/AutoChangeLog-pr-26381.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26381.yml diff --git a/html/changelogs/AutoChangeLog-pr-26381.yml b/html/changelogs/AutoChangeLog-pr-26381.yml new file mode 100644 index 00000000000..b81943d30fb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26381.yml @@ -0,0 +1,7 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "You can examine a firedoor for hints on how to +construct/deconstruct it." + - rscadd: "Add an additional hint during construction where you can add +plasteel to make the firedoor reinforced." From ad458d452c936a28595ff4f57f030a2bc302bff2 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Mon, 24 Apr 2017 14:11:57 -0400 Subject: [PATCH 58/73] Fixes template tank dispensers (#26490) --- code/game/objects/structures/tank_dispenser.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 8b935aab2a8..9a24935009e 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -18,13 +18,14 @@ /obj/structure/tank_dispenser/plasma oxygentanks = 0 -/obj/structure/tank_dispenser/New() +/obj/structure/tank_dispenser/Initialize() + . = ..() for(var/i in 1 to oxygentanks) new /obj/item/weapon/tank/internals/oxygen(src) for(var/i in 1 to plasmatanks) new /obj/item/weapon/tank/internals/plasma(src) update_icon() - ..() + /obj/structure/tank_dispenser/update_icon() cut_overlays() switch(oxygentanks) @@ -109,4 +110,4 @@ new /obj/item/stack/sheet/metal (loc, 2) qdel(src) -#undef TANK_DISPENSER_CAPACITY \ No newline at end of file +#undef TANK_DISPENSER_CAPACITY From c4486968f58aae2e08067a0806bbc661619f9e81 Mon Sep 17 00:00:00 2001 From: AnturK Date: Mon, 24 Apr 2017 20:13:15 +0200 Subject: [PATCH 59/73] Fixes linking of multiple comm equipment with same id. (#26478) --- code/game/machinery/telecomms/telecomunications.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index acbe6792b2d..73322ce8d0f 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -176,7 +176,6 @@ GLOBAL_LIST_EMPTY(telecomms_list) for(var/x in autolinkers) if(x in T.autolinkers) links |= T - break /obj/machinery/telecomms/update_icon() if(on) From 05a63da8a298c280df94af951101f88ccca33f75 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 24 Apr 2017 11:21:13 -0700 Subject: [PATCH 60/73] Automatic changelog generation for PR #26484 [ci skip] --- html/changelogs/AutoChangeLog-pr-26484.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26484.yml diff --git a/html/changelogs/AutoChangeLog-pr-26484.yml b/html/changelogs/AutoChangeLog-pr-26484.yml new file mode 100644 index 00000000000..cc711de25cd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26484.yml @@ -0,0 +1,4 @@ +author: "Jalleo" +delete-after: True +changes: + - rscdel: "WW_maze from lavaland has been removed it wasnt that good really anyhow" From 7644925523c814239e1c8c5317988a1d9aa97a05 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 24 Apr 2017 15:38:58 -0700 Subject: [PATCH 61/73] Automatic changelog generation for PR #26445 [ci skip] --- html/changelogs/AutoChangeLog-pr-26445.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26445.yml diff --git a/html/changelogs/AutoChangeLog-pr-26445.yml b/html/changelogs/AutoChangeLog-pr-26445.yml new file mode 100644 index 00000000000..e61bf150ef9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26445.yml @@ -0,0 +1,4 @@ +author: "XDTM" +delete-after: True +changes: + - bugfix: "Items will no longer be used on backpacks if they fail to insert when they're too full." From 5ca2e1817bd1cd0578b1eb23efd00b33511cce9a Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 24 Apr 2017 15:43:30 -0700 Subject: [PATCH 62/73] Automatic changelog generation for PR #26400 [ci skip] --- html/changelogs/AutoChangeLog-pr-26400.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26400.yml diff --git a/html/changelogs/AutoChangeLog-pr-26400.yml b/html/changelogs/AutoChangeLog-pr-26400.yml new file mode 100644 index 00000000000..821d37f331e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26400.yml @@ -0,0 +1,6 @@ +author: "CoreOverload" +delete-after: True +changes: + - bugfix: "Disposals no longer get broken by shuttles rotation." + - bugfix: "Wires no longer get broken by shuttles movement and rotation." + - bugfix: "Atmospheric equipment no longer gets broken by shuttles movement and rotation. Glory to the Flying Fortress of Atmosia!" From 20004ea7d64f1e6032504923b2e6690627bdc88c Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 24 Apr 2017 15:53:00 -0700 Subject: [PATCH 63/73] Automatic changelog generation for PR #26416 [ci skip] --- html/changelogs/AutoChangeLog-pr-26416.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26416.yml diff --git a/html/changelogs/AutoChangeLog-pr-26416.yml b/html/changelogs/AutoChangeLog-pr-26416.yml new file mode 100644 index 00000000000..cbfa45a0a50 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26416.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Ghosts no longer drift in space." From 10fa642f2a3557c13febcd3d298e7c0d3d20a5e5 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 24 Apr 2017 15:59:04 -0700 Subject: [PATCH 64/73] Automatic changelog generation for PR #26456 [ci skip] --- html/changelogs/AutoChangeLog-pr-26456.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26456.yml diff --git a/html/changelogs/AutoChangeLog-pr-26456.yml b/html/changelogs/AutoChangeLog-pr-26456.yml new file mode 100644 index 00000000000..758f0c4c15c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26456.yml @@ -0,0 +1,4 @@ +author: "basilman" +delete-after: True +changes: + - bugfix: "fixed species with no skin dropping skin when gibbed." From 0292433010b6fe6ee59bf6a9a224e0341759cd92 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 24 Apr 2017 16:01:11 -0700 Subject: [PATCH 65/73] Automatic changelog generation for PR #26457 [ci skip] --- html/changelogs/AutoChangeLog-pr-26457.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26457.yml diff --git a/html/changelogs/AutoChangeLog-pr-26457.yml b/html/changelogs/AutoChangeLog-pr-26457.yml new file mode 100644 index 00000000000..43829911c1b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26457.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "When you are crushed by a door, it prints a visible message, +instead of, in some cases, silently damaging you." From f75abc6f6a2f460deac7165c693008ae9f1583f8 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 24 Apr 2017 16:06:29 -0700 Subject: [PATCH 66/73] Automatic changelog generation for PR #26397 [ci skip] --- html/changelogs/AutoChangeLog-pr-26397.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26397.yml diff --git a/html/changelogs/AutoChangeLog-pr-26397.yml b/html/changelogs/AutoChangeLog-pr-26397.yml new file mode 100644 index 00000000000..0e555c64add --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26397.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Fixed easter eggs spawning during non-Easter." + - bugfix: "Fixes stations not having holiday specific prefixes during the holidays." From 2ce2fb10c60c1ace82a83f34b87d7b6cd1967613 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 24 Apr 2017 18:54:32 -0700 Subject: [PATCH 67/73] Automatic changelog generation for PR #26491 [ci skip] --- html/changelogs/AutoChangeLog-pr-26491.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26491.yml diff --git a/html/changelogs/AutoChangeLog-pr-26491.yml b/html/changelogs/AutoChangeLog-pr-26491.yml new file mode 100644 index 00000000000..a84c98f989c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26491.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "The vent in the Escape Coridoor on Omega Station has been fixed." From f5646f082ead6a0c46bfdcf73e311341dc108461 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 24 Apr 2017 18:55:18 -0700 Subject: [PATCH 68/73] Automatic changelog generation for PR #26443 [ci skip] --- html/changelogs/AutoChangeLog-pr-26443.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-26443.yml diff --git a/html/changelogs/AutoChangeLog-pr-26443.yml b/html/changelogs/AutoChangeLog-pr-26443.yml new file mode 100644 index 00000000000..c5a7877ffc7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26443.yml @@ -0,0 +1,4 @@ +author: "WJohnston" +delete-after: True +changes: + - tweak: "Skeletons and plasmamen's hitboxes now more closely match that of humans. They are no longer full of holes and incredibly frustrating to hit, should they run around naked." From a050b0db6e3d690dddd189b257f6a152295f148d Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Mon, 24 Apr 2017 22:21:55 -0400 Subject: [PATCH 69/73] >We still let old code in the codebase (#26506) --- code/__HELPERS/files.dm | 14 -------------- code/__HELPERS/type2type.dm | 2 +- code/controllers/subsystem/job.dm | 2 +- code/datums/helper_datums/getrev.dm | 2 +- 4 files changed, 3 insertions(+), 17 deletions(-) diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm index f457278eb0f..5983f26950d 100644 --- a/code/__HELPERS/files.dm +++ b/code/__HELPERS/files.dm @@ -1,17 +1,3 @@ -//checks if a file exists and contains text -//returns text as a string if these conditions are met -/proc/return_file_text(filename) - if(fexists(filename) == 0) - throw EXCEPTION("return_file_text(): File not found") - return - - var/text = file2text(filename) - if(!text) - throw EXCEPTION("return_file_text(): File empty") - return - - return text - //Sends resource files to client cache /client/proc/getFiles() for(var/file in args) diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 92636ee9dc1..304a8968278 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -73,7 +73,7 @@ //Splits the text of a file at seperator and returns them in a list. /proc/file2list(filename, seperator="\n") - return splittext(return_file_text(filename),seperator) + return splittext(file2text(filename),seperator) //Turns a direction into text diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 68e27c9900d..137bd2a2c10 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -448,7 +448,7 @@ SUBSYSTEM_DEF(job) /datum/controller/subsystem/job/proc/LoadJobs() - var/jobstext = return_file_text("config/jobs.txt") + var/jobstext = file2text("config/jobs.txt") for(var/datum/job/J in occupations) var/regex/jobs = new("[J.title]=(-1|\\d+),(-1|\\d+)") jobs.Find(jobstext) diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index f285effc0fb..428046d8eeb 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -6,7 +6,7 @@ var/date /datum/getrev/New() - var/head_file = return_file_text(".git/logs/HEAD") + var/head_file = file2text(".git/logs/HEAD") if(SERVERTOOLS && fexists("..\\prtestjob.lk")) var/list/tmp = file2list("..\\prtestjob.lk") for(var/I in tmp) From 39113655ebea329d07a2948cd7ba58722289c58a Mon Sep 17 00:00:00 2001 From: QualityVan Date: Tue, 25 Apr 2017 04:50:44 -0400 Subject: [PATCH 70/73] Fixes flashlight eyes (#26497) * Fixes flashlight eyes * jesus that's a lotta light * Rebasing * test * nothing to see here --- code/game/objects/items/devices/flashlight.dm | 8 ++++++++ code/modules/surgery/organs/eyes.dm | 12 ++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 62e0667f149..385e177b6f8 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -428,3 +428,11 @@ item_state = "flashdark" brightness_on = 2.5 flashlight_power = -3 + +/obj/item/device/flashlight/eyelight + name = "eyelight" + desc = "This shouldn't exist outside of someone's head, how are you seeing this?" + brightness_on = 15 + flashlight_power = 1 + flags = CONDUCT | DROPDEL + actions_types = list() diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 672ac924adb..4ad8b9c518e 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -106,19 +106,27 @@ icon_state = "flashlight_eyes" flash_protect = 2 tint = INFINITY + var/obj/item/device/flashlight/eyelight/eye /obj/item/organ/eyes/robotic/flashlight/emp_act(severity) return /obj/item/organ/eyes/robotic/flashlight/Insert(var/mob/living/carbon/M, var/special = 0) ..() - M.set_light(M.light_range + 15, M.light_power + 1) + if(!eye) + eye = new /obj/item/device/flashlight/eyelight() + eye.on = TRUE + eye.forceMove(M) + eye.update_brightness(M) /obj/item/organ/eyes/robotic/flashlight/Remove(var/mob/living/carbon/M, var/special = 0) - M.set_light(M.light_range -15, M.light_power - 1) + eye.on = FALSE + eye.update_brightness(M) + eye.forceMove(src) ..() + // Welding shield implant /obj/item/organ/eyes/robotic/shield name = "shielded robotic eyes" From dc0e007a2364b723ce3d05a6529343ee694097b3 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Tue, 25 Apr 2017 04:51:40 -0400 Subject: [PATCH 71/73] A bunch of Initialize()s now have return values (#26464) --- code/game/objects/structures/electricchair.dm | 3 +-- code/game/objects/structures/fireaxe.dm | 3 +-- code/game/objects/structures/lattice.dm | 2 +- code/modules/VR/vr_human.dm | 2 +- .../mob/living/simple_animal/hostile/megafauna/colossus.dm | 4 ++-- .../mob/living/simple_animal/hostile/megafauna/dragon.dm | 6 +++--- .../living/simple_animal/hostile/megafauna/hierophant.dm | 2 +- .../mob/living/simple_animal/hostile/megafauna/legion.dm | 2 +- .../mob/living/simple_animal/hostile/megafauna/swarmer.dm | 6 +++--- .../mob/living/simple_animal/hostile/retaliate/frog.dm | 2 +- .../mob/living/simple_animal/hostile/retaliate/ghost.dm | 2 +- code/modules/mob/living/simple_animal/slime/slime.dm | 2 +- code/modules/modular_computers/computers/item/laptop.dm | 2 +- code/modules/paperwork/filingcabinet.dm | 2 +- code/modules/paperwork/paperbin.dm | 2 +- code/modules/paperwork/paperplane.dm | 2 +- code/modules/power/apc.dm | 2 +- code/modules/power/generator.dm | 2 +- code/modules/power/gravitygenerator.dm | 2 +- code/modules/power/port_gen.dm | 2 +- code/modules/power/rtg.dm | 2 +- code/modules/power/singularity/emitter.dm | 2 +- code/modules/power/solar.dm | 2 +- code/modules/power/turbine.dm | 6 +++--- code/modules/projectiles/guns/ballistic/bow.dm | 2 +- code/modules/projectiles/projectile/energy.dm | 6 +++--- code/modules/recycling/conveyor2.dm | 2 +- code/modules/research/server.dm | 4 ++-- code/modules/research/xenobiology/xenobio_camera.dm | 2 +- code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm | 2 +- code/modules/shuttle/arrivals.dm | 2 +- code/modules/shuttle/emergency.dm | 2 +- code/modules/shuttle/shuttle.dm | 4 ++-- code/modules/spells/spell_types/lichdom.dm | 2 +- code/modules/spells/spell_types/spacetime_distortion.dm | 2 +- code/modules/station_goals/dna_vault.dm | 2 +- code/modules/surgery/organs/autosurgeon.dm | 2 +- code/modules/surgery/organs/tongue.dm | 6 +++--- code/modules/telesci/telesci_computer.dm | 2 +- code/modules/vehicles/pimpin_ride.dm | 2 +- 40 files changed, 53 insertions(+), 55 deletions(-) diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index c44181f9719..929cfaee993 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -42,6 +42,5 @@ var/mob/living/buckled_mob = m buckled_mob.electrocute_act(85, src, 1) to_chat(buckled_mob, "You feel a deep shock course through your body!") - spawn(1) - buckled_mob.electrocute_act(85, src, 1) + addtimer(CALLBACK(buckled_mob, /mob/living.proc/electrocute_act, 85, src, 1), 1) visible_message("The electric chair went off!", "You hear a deep sharp shock!") diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 970f1d594b4..e2331e13dc7 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -19,8 +19,7 @@ /obj/structure/fireaxecabinet/Destroy() if(fireaxe) - qdel(fireaxe) - fireaxe = null + QDEL_NULL(fireaxe) return ..() /obj/structure/fireaxecabinet/attackby(obj/item/I, mob/user, params) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index ba859d5952b..ba9e5f8a338 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -18,7 +18,7 @@ // flags = CONDUCT /obj/structure/lattice/Initialize(mapload) - ..() + . = ..() for(var/obj/structure/lattice/LAT in loc) if(LAT != src) QDEL_IN(LAT, 0) diff --git a/code/modules/VR/vr_human.dm b/code/modules/VR/vr_human.dm index f8d59e060bb..1b83b323c83 100644 --- a/code/modules/VR/vr_human.dm +++ b/code/modules/VR/vr_human.dm @@ -7,7 +7,7 @@ /mob/living/carbon/human/virtual_reality/Initialize() - ..() + . = ..() quit_action = new() quit_action.Grant(src) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index a0e7c3694f3..edcc2eedb71 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -106,7 +106,7 @@ Difficulty: Very Hard var/target /obj/effect/overlay/temp/at_shield/Initialize(mapload, new_target) - ..() + . = ..() target = new_target INVOKE_ASYNC(src, /atom/movable/proc/orbit, target, 0, FALSE, 0, 0, FALSE, TRUE) @@ -628,7 +628,7 @@ Difficulty: Very Hard var/heal_power = 5 /mob/living/simple_animal/hostile/lightgeist/Initialize() - ..() + . = ..() verbs -= /mob/living/verb/pulled verbs -= /mob/verb/me_verb var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index 9bc32993fa9..c56e963aefc 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -54,7 +54,7 @@ Difficulty: Medium death_sound = 'sound/magic/demon_dies.ogg' /mob/living/simple_animal/hostile/megafauna/dragon/Initialize() - ..() + . = ..() internal = new/obj/item/device/gps/internal/dragon(src) /mob/living/simple_animal/hostile/megafauna/dragon/ex_act(severity, target) @@ -97,7 +97,7 @@ Difficulty: Medium pixel_z = 500 /obj/effect/overlay/temp/fireball/Initialize(loc) - ..() + . = ..() animate(src, pixel_z = 0, time = 12) /obj/effect/overlay/temp/target @@ -122,7 +122,7 @@ Difficulty: Medium return /obj/effect/overlay/temp/target/Initialize(loc) - ..() + . = ..() INVOKE_ASYNC(src, .proc/fall) /obj/effect/overlay/temp/target/proc/fall() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index d9f099e2f11..f0c1a7ec04c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -74,7 +74,7 @@ Difficulty: Hard death_sound = 'sound/magic/Repulse.ogg' /mob/living/simple_animal/hostile/megafauna/hierophant/Initialize() - ..() + . = ..() internal = new/obj/item/device/gps/internal/hierophant(src) spawned_beacon = new(loc) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index bf834fce03d..1e97dedb745 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -51,7 +51,7 @@ Difficulty: Medium mouse_opacity = 1 /mob/living/simple_animal/hostile/megafauna/legion/Initialize() - ..() + . = ..() internal = new/obj/item/device/gps/internal/legion(src) /mob/living/simple_animal/hostile/megafauna/legion/AttackingTarget() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm index 8b6c9c5e1cd..62833132ec3 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm @@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa /mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/Initialize() - ..() + . = ..() swarmer_caps = GLOB.AISwarmerCapsByType //for admin-edits internal = new/obj/item/device/gps/internal/swarmer_beacon(src) for(var/ddir in GLOB.cardinal) @@ -109,7 +109,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa /mob/living/simple_animal/hostile/swarmer/ai/Initialize() - ..() + . = ..() ToggleLight() //so you can see them eating you out of house and home/shooting you/stunlocking you for eternity LAZYINITLIST(GLOB.AISwarmersByType[type]) GLOB.AISwarmers += src @@ -179,7 +179,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa /mob/living/simple_animal/hostile/swarmer/ai/resource/Initialize() - ..() + . = ..() sharedWanted = typecacheof(sharedWanted) sharedIgnore = typecacheof(sharedIgnore) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm index 3f54f3d20ba..0dc4609e912 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm @@ -26,7 +26,7 @@ gold_core_spawnable = 1 /mob/living/simple_animal/hostile/retaliate/frog/Initialize() - ..() + . = ..() if(prob(1)) name = "rare frog" desc = "It seems a little smug." diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm index 20bb9c497e3..9deb139497d 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm @@ -39,7 +39,7 @@ var/random = TRUE //if you want random names for ghosts or not /mob/living/simple_animal/hostile/retaliate/ghost/Initialize() - ..() + . = ..() if(!random) give_hair() else diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 4ff8904625f..d9c6ed54c76 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -92,7 +92,7 @@ E.Grant(src) create_reagents(100) set_colour(new_colour) - ..() + . = ..() /mob/living/simple_animal/slime/proc/set_colour(new_colour) colour = new_colour diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm index 6a14d3a43fe..e1d20c3ecc2 100644 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop.dm @@ -19,7 +19,7 @@ var/slowdown_open = 1 /obj/item/device/modular_computer/laptop/Initialize() - ..() + . = ..() // No running around with open laptops in hands. SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 3b120840c0f..dadb1ddd60a 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -32,7 +32,7 @@ /obj/structure/filingcabinet/Initialize(mapload) - ..() + . = ..() if(mapload) for(var/obj/item/I in loc) if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/folder) || istype(I, /obj/item/weapon/photo)) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 2fca29b45c5..227aee9681f 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -15,7 +15,7 @@ var/obj/item/weapon/pen/bin_pen /obj/item/weapon/paper_bin/Initialize(mapload) - ..() + . = ..() if(!mapload) return var/obj/item/weapon/pen/P = locate(/obj/item/weapon/pen) in src.loc diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index d294e094f56..e7742b4bc86 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -14,7 +14,7 @@ var/obj/item/weapon/paper/internalPaper /obj/item/weapon/paperplane/Initialize(mapload, obj/item/weapon/paper/newPaper) - ..() + . = ..() pixel_y = rand(-8, 8) pixel_x = rand(-9, 9) if(newPaper) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index a9dd0e78f2f..3c8cc467325 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -172,7 +172,7 @@ terminal.master = src /obj/machinery/power/apc/Initialize(mapload) - ..() + . = ..() if(!mapload) return has_electronics = 2 //installed and secured diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 3dfba8e952c..9ae006dfbd2 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -28,7 +28,7 @@ /obj/machinery/power/generator/Initialize(mapload) - ..() + . = ..() var/obj/machinery/atmospherics/components/binary/circulator/circpath = /obj/machinery/atmospherics/components/binary/circulator cold_circ = locate(circpath) in get_step(src, cold_dir) hot_circ = locate(circpath) in get_step(src, hot_dir) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index c23597f95f8..4f8cd308752 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -98,7 +98,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne // /obj/machinery/gravity_generator/main/station/Initialize() - ..() + . = ..() setup_parts() middle.add_overlay("activated") update_list() diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 30ec0f41707..f24c7fdd5fb 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -60,7 +60,7 @@ var/current_heat = 0 /obj/machinery/power/port_gen/pacman/Initialize() - ..() + . = ..() if(anchored) connect_to_network() diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm index 2f006d1965a..53bcc0869b5 100644 --- a/code/modules/power/rtg.dm +++ b/code/modules/power/rtg.dm @@ -34,7 +34,7 @@ /obj/item/stack/sheet/mineral/uranium = 10) // We have no Pu-238, and this is the closest thing to it. /obj/machinery/power/rtg/Initialize() - ..() + . = ..() connect_to_network() /obj/machinery/power/rtg/process() diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index e007949b088..02953a70242 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -88,7 +88,7 @@ rotate() /obj/machinery/power/emitter/Initialize() - ..() + . = ..() if(state == 2 && anchored) connect_to_network() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index e5097d422a0..e18e6781c20 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -282,7 +282,7 @@ var/list/connected_panels = list() /obj/machinery/power/solar_control/Initialize() - ..() + . = ..() if(powernet) set_panels(currentdir) connect_to_network() diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 8f0e4d0f330..4f194129bd0 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -86,7 +86,7 @@ /obj/item/weapon/stock_parts/manipulator = 6) /obj/machinery/power/compressor/Initialize() - ..() + . = ..() locate_machinery() if(!turbine) stat |= BROKEN @@ -202,7 +202,7 @@ /obj/item/weapon/stock_parts/capacitor = 6) /obj/machinery/power/turbine/Initialize() - ..() + . = ..() locate_machinery() if(!compressor) stat |= BROKEN @@ -338,7 +338,7 @@ /obj/machinery/computer/turbine_computer/Initialize() - ..() + . = ..() locate_machinery() /obj/machinery/computer/turbine_computer/locate_machinery() diff --git a/code/modules/projectiles/guns/ballistic/bow.dm b/code/modules/projectiles/guns/ballistic/bow.dm index bd00fdd7d92..89a5faa9283 100644 --- a/code/modules/projectiles/guns/ballistic/bow.dm +++ b/code/modules/projectiles/guns/ballistic/bow.dm @@ -15,7 +15,7 @@ var/slowdown_when_ready = 2 /obj/item/weapon/gun/ballistic/bow/Initialize(mapload) - ..() + . = ..() SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND) /obj/item/weapon/gun/ballistic/bow/update_icon() diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index a3dd75c3749..7c845759ea0 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -42,7 +42,7 @@ range = 10 /obj/item/projectile/energy/net/Initialize() - ..() + . = ..() SpinAnimation() /obj/item/projectile/energy/net/on_hit(atom/target, blocked = 0) @@ -61,11 +61,11 @@ desc = "A field of bluespace energy, locking on to teleport a target." icon = 'icons/effects/effects.dmi' icon_state = "dragnetfield" + light_range = 3 anchored = 1 /obj/effect/nettingportal/Initialize() - ..() - set_light(3) + . = ..() var/obj/item/device/radio/beacon/teletarget = null for(var/obj/machinery/computer/teleporter/com in GLOB.machines) if(com.target) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 060e3e98704..264b6a167d2 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -214,7 +214,7 @@ /obj/machinery/conveyor_switch/Initialize(mapload, newid) if(mapload) return TRUE //need machines list - ..() + . = ..() if(!id) id = newid update() diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 4b8242c1f86..42143f6e3ad 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -38,7 +38,7 @@ heat_gen /= max(1, tot_rating) /obj/machinery/r_n_d/server/Initialize(mapload) - ..() + . = ..() if(!files) files = new /datum/research(src) var/list/temp_list if(!id_with_upload.len) @@ -137,7 +137,7 @@ server_id = -1 /obj/machinery/r_n_d/server/centcom/Initialize() - ..() + . = ..() fix_noid_research_servers() /proc/fix_noid_research_servers() diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index c02894bc3c9..bd34ff60c0d 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -8,7 +8,7 @@ /mob/camera/aiEye/remote/xenobio/Initialize() var/area/A = get_area(loc) allowed_area = A.name - ..() + . = ..() /mob/camera/aiEye/remote/xenobio/setLoc(var/t) var/area/new_area = get_area(t) diff --git a/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm b/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm index 4db811604d8..669890a279a 100644 --- a/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm +++ b/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm @@ -7,7 +7,7 @@ var/baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface /obj/effect/baseturf_helper/Initialize() - ..() + . = ..() var/area/thearea = get_area(src) for(var/turf/T in get_area_turfs(thearea, z)) if(T.baseturf != T.type) //Don't break indestructible walls and the like diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index cc0efd53594..aa0b9e6f786 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -34,7 +34,7 @@ SSshuttle.arrivals = src - ..() + . = ..() areas = list() diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 07c135d7955..553210a5f72 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -450,7 +450,7 @@ // Minimal distance from the map edge, setting this too low can result in shuttle landing on the edge and getting "sliced" /obj/docking_port/stationary/random/Initialize(mapload) - ..() + . = ..() if(!mapload) return diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 94d10392ccd..f214d018b40 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -241,7 +241,7 @@ . = ..() /obj/docking_port/mobile/Initialize(mapload) - ..() + . = ..() var/area/A = get_area(src) if(istype(A, /area/shuttle)) @@ -316,7 +316,7 @@ if(!check_dock(S)) testing("check_dock failed on request for [src]") return - + if(mode == SHUTTLE_IGNITING && destination == S) return diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index f72eff6302c..50f51a0b3b9 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -85,7 +85,7 @@ var/static/active_phylacteries = 0 /obj/item/phylactery/Initialize(mapload, datum/mind/newmind) - ..() + . = ..() mind = newmind name = "phylactery of [mind.name]" diff --git a/code/modules/spells/spell_types/spacetime_distortion.dm b/code/modules/spells/spell_types/spacetime_distortion.dm index bed0255b027..6a68643d557 100644 --- a/code/modules/spells/spell_types/spacetime_distortion.dm +++ b/code/modules/spells/spell_types/spacetime_distortion.dm @@ -74,7 +74,7 @@ var/walks_left = 50 //prevents the game from hanging in extreme cases (such as minigun fire) /obj/effect/cross_action/spacetime_dist/Initialize(mapload) - ..() + . = ..() sound = "sound/guitar/[safepick(GLOB.guitar_notes)]" dir = pick(GLOB.cardinal) diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index d7f9a72a9ef..02ce0f77069 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -170,7 +170,7 @@ plants_max = G.plant_count dna_max = G.human_count break - ..() + . = ..() /obj/machinery/dna_vault/Destroy() for(var/V in fillers) diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index 981e6000c37..53b0d5f17f4 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -12,7 +12,7 @@ var/starting_organ /obj/item/device/autosurgeon/Initialize(mapload) - ..() + . = ..() if(starting_organ) insert_organ(new starting_organ(src)) diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 096e7e955a4..c70058039d8 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -10,7 +10,7 @@ var/taste_sensitivity = 15 // lower is more sensitive. /obj/item/organ/tongue/Initialize(mapload) - ..() + . = ..() languages_possible = typecacheof(list( /datum/language/common, /datum/language/monkey, @@ -123,7 +123,7 @@ taste_sensitivity = 10 // LIZARDS ARE ALIENS CONFIRMED /obj/item/organ/tongue/alien/Initialize(mapload) - ..() + . = ..() languages_possible = typecacheof(list( /datum/language/xenocommon, /datum/language/common, @@ -186,7 +186,7 @@ taste_sensitivity = 25 // not as good as an organic tongue /obj/item/organ/tongue/robot/Initialize(mapload) - ..() + . = ..() languages_possible = typecacheof(list( /datum/language/xenocommon, /datum/language/common, diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 60ac49a529c..868aa5d6ae8 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -46,7 +46,7 @@ to_chat(user, "There are [crystals.len ? crystals.len : "no"] bluespace crystal\s in the crystal slots.") /obj/machinery/computer/telescience/Initialize(mapload) - ..() + . = ..() if(mapload) for(var/i = 1; i <= starting_crystals; i++) crystals += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) // starting crystals diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index ae34cfd5157..42e9298c881 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -8,7 +8,7 @@ var/floorbuffer = FALSE /obj/vehicle/janicart/Initialize(mapload) - ..() + . = ..() update_icon() /obj/vehicle/janicart/Destroy() From 572696292a6cd9817aa6739267221e4d4625a05d Mon Sep 17 00:00:00 2001 From: Core0verload Date: Tue, 25 Apr 2017 11:58:19 +0300 Subject: [PATCH 72/73] Small abductors refactor (#26501) * Small abductors refactor * Abductors no longer get hungry --- code/datums/mind.dm | 25 +- .../abduction/abductee_objectives.dm | 148 ++++++++++ .../miniantags/abduction/abduction.dm | 269 +----------------- .../miniantags/abduction/abduction_gear.dm | 19 ++ .../miniantags/abduction/abduction_outfits.dm | 62 ++++ .../carbon/human/species_types/abductors.dm | 3 +- icons/mob/ears.dmi | Bin 881 -> 901 bytes icons/obj/abductor.dmi | Bin 55429 -> 55757 bytes tgstation.dme | 2 + 9 files changed, 257 insertions(+), 271 deletions(-) create mode 100644 code/game/gamemodes/miniantags/abduction/abductee_objectives.dm create mode 100644 code/game/gamemodes/miniantags/abduction/abduction_outfits.dm diff --git a/code/datums/mind.dm b/code/datums/mind.dm index b4844b32bf4..e78d996f643 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1192,14 +1192,17 @@ log_admin("[key_name(usr)] turned [current] into abductor.") SSticker.mode.update_abductor_icons_added(src) if("equip") + if(!ishuman(current)) + to_chat(usr, "This only works on humans!") + return + + var/mob/living/carbon/human/H = current var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist") if(gear) - var/datum/game_mode/abduction/temp = new - temp.equip_common(current) if(gear=="Agent") - temp.equip_agent(current) + H.equipOutfit(/datum/outfit/abductor/agent) else - temp.equip_scientist(current) + H.equipOutfit(/datum/outfit/abductor/scientist) else if (href_list["monkey"]) var/mob/living/L = current @@ -1468,11 +1471,8 @@ H.set_species(/datum/species/abductor) var/datum/species/abductor/S = H.dna.species - switch(role) - if("Agent") - S.agent = 1 - if("Scientist") - S.scientist = 1 + if(role == "Scientist") + S.scientist = TRUE S.team = team var/list/obj/effect/landmark/abductor/agent_landmarks = new @@ -1489,13 +1489,10 @@ if(teleport=="Yes") switch(role) if("Agent") - S.agent = 1 L = agent_landmarks[team] - H.loc = L.loc if("Scientist") - S.scientist = 1 - L = agent_landmarks[team] - H.loc = L.loc + L = scientist_landmarks[team] + H.forceMove(L.loc) /datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/S) spell_list += S diff --git a/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm new file mode 100644 index 00000000000..aa633e1ef59 --- /dev/null +++ b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm @@ -0,0 +1,148 @@ +/datum/objective/abductee + dangerrating = 5 + completed = 1 + +/datum/objective/abductee/steal + explanation_text = "Steal all" + +/datum/objective/abductee/steal/New() + var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap", "weapons", "computers", "organs")) + explanation_text+=" [target]." + +/datum/objective/abductee/paint + explanation_text = "The station is hideous. You must color it all" + +/datum/objective/abductee/paint/New() + var/color = pick(list("red", "blue", "green", "yellow", "orange", "purple", "black", "in rainbows", "in blood")) + explanation_text+= " [color]!" + +/datum/objective/abductee/speech + explanation_text = "Your brain is broken... you can only communicate in" + +/datum/objective/abductee/speech/New() + var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon")) + explanation_text+= " [style]." + +/datum/objective/abductee/capture + explanation_text = "Capture" + +/datum/objective/abductee/capture/New() + var/list/jobs = SSjob.occupations.Copy() + for(var/datum/job/J in jobs) + if(J.current_positions < 1) + jobs -= J + if(jobs.len > 0) + var/datum/job/target = pick(jobs) + explanation_text += " a [target.title]." + else + explanation_text += " someone." + +/datum/objective/abductee/shuttle + explanation_text = "You must escape the station! Get the shuttle called!" + +/datum/objective/abductee/noclone + explanation_text = "Don't allow anyone to be cloned." + +/datum/objective/abductee/oxygen + explanation_text = "The oxygen is killing them all and they don't even know it. Make sure no oxygen is on the station." + +/datum/objective/abductee/blazeit + explanation_text = "Your body must be improved. Ingest as many drugs as you can." + +/datum/objective/abductee/yumyum + explanation_text = "You are hungry. Eat as much food as you can find." + +/datum/objective/abductee/insane + explanation_text = "You see you see what they cannot you see the open door you seeE you SEeEe you SEe yOU seEee SHOW THEM ALL" + +/datum/objective/abductee/cannotmove + explanation_text = "Convince the crew that you are a paraplegic." + +/datum/objective/abductee/deadbodies + explanation_text = "Start a collection of corpses. Don't kill people to get these corpses." + +/datum/objective/abductee/floors + explanation_text = "Replace all the floor tiles with wood, carpeting, grass or bling." + +/datum/objective/abductee/POWERUNLIMITED + explanation_text = "Flood the station's powernet with as much electricity as you can." + +/datum/objective/abductee/pristine + explanation_text = "The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition." + +/datum/objective/abductee/nowalls + explanation_text = "The crew must get to know one another better. Break down the walls inside the station!" + +/datum/objective/abductee/nations + explanation_text = "Ensure your department prospers over all else." + +/datum/objective/abductee/abductception + explanation_text = "You have been changed forever. Find the ones that did this to you and give them a taste of their own medicine." + +/datum/objective/abductee/summon + explanation_text = "The elder gods hunger. Gather a cult and conduct a ritual to summon one." + +/datum/objective/abductee/machine + explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last." + +/datum/objective/abductee/calling + explanation_text = "Call forth a spirit from the other side." + +/datum/objective/abductee/calling/New() + var/mob/dead/D = pick(GLOB.dead_mob_list) + if(D) + explanation_text = "You know that [D] has perished. Hold a seance to call them from the spirit realm." + +/datum/objective/abductee/social_experiment + explanation_text = "This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth." + +/datum/objective/abductee/vr + explanation_text = "It's all an entirely virtual simulation within an underground vault. Convince the crew to escape the shackles of VR." + +/datum/objective/abductee/pets + explanation_text = "Nanotrasen is abusing the animals! Save as many as you can!" + +/datum/objective/abductee/defect + explanation_text = "Fuck the system! Defect from the station and start an independent colony in space, Lavaland or the derelict. Recruit crewmates if you can." + +/datum/objective/abductee/promote + explanation_text = "Climb the corporate ladder all the way to the top!" + +/datum/objective/abductee/science + explanation_text = "So much lies undiscovered. Look deeper into the machinations of the universe." + +/datum/objective/abductee/build + explanation_text = "Expand the station." + +/datum/objective/abductee/pragnant + explanation_text = "You are pregnant and soon due. Find a safe place to deliver your baby." + +/datum/objective/abductee/engine + explanation_text = "Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds." + +/datum/objective/abductee/music + explanation_text = "You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument!" + +/datum/objective/abductee/clown + explanation_text = "The clown is not funny. You can do better! Steal his audience and make the crew laugh!" + +/datum/objective/abductee/party + explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!" + +/datum/objective/abductee/pets + explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!" + +/datum/objective/abductee/conspiracy + explanation_text = "The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people!" + +/datum/objective/abductee/stalker + explanation_text = "The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it." + +/datum/objective/abductee/narrator + explanation_text = "You're the narrator of this tale. Follow around the protagonists to tell their story." + +/datum/objective/abductee/lurve + explanation_text = "You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you!" + +/datum/objective/abductee/sixthsense + explanation_text = "You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo." diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index aa5a688596e..e692654bf3d 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -85,56 +85,14 @@ return 1 /datum/game_mode/abduction/post_setup() - //Spawn Team - var/list/obj/effect/landmark/abductor/agent_landmarks = new - var/list/obj/effect/landmark/abductor/scientist_landmarks = new - agent_landmarks.len = max_teams - scientist_landmarks.len = max_teams - for(var/obj/effect/landmark/abductor/A in GLOB.landmarks_list) - if(istype(A,/obj/effect/landmark/abductor/agent)) - agent_landmarks[text2num(A.team)] = A - else if(istype(A,/obj/effect/landmark/abductor/scientist)) - scientist_landmarks[text2num(A.team)] = A - - var/datum/mind/agent - var/obj/effect/landmark/L - var/datum/mind/scientist - var/team_name - var/mob/living/carbon/human/H - var/datum/species/abductor/S for(var/team_number=1,team_number<=abductor_teams,team_number++) - team_name = team_names[team_number] - agent = agents[team_number] - H = agent.current - L = agent_landmarks[team_number] - H.loc = L.loc - H.set_species(/datum/species/abductor) - S = H.dna.species - S.agent = 1 - S.team = team_number - H.real_name = team_name + " Agent" - equip_common(H,team_number) - equip_agent(H,team_number) - greet_agent(agent,team_number) - - scientist = scientists[team_number] - H = scientist.current - L = scientist_landmarks[team_number] - H.loc = L.loc - H.set_species(/datum/species/abductor) - S = H.dna.species - S.scientist = 1 - S.team = team_number - H.real_name = team_name + " Scientist" - equip_common(H,team_number) - equip_scientist(H,team_number) - greet_scientist(scientist,team_number) + post_setup_team(team_number) return ..() //Used for create antag buttons /datum/game_mode/abduction/proc/post_setup_team(team_number) - var/list/obj/effect/landmark/abductor/agent_landmarks = new - var/list/obj/effect/landmark/abductor/scientist_landmarks = new + var/list/obj/effect/landmark/abductor/agent_landmarks = list() + var/list/obj/effect/landmark/abductor/scientist_landmarks = list() agent_landmarks.len = max_teams scientist_landmarks.len = max_teams for(var/obj/effect/landmark/abductor/A in GLOB.landmarks_list) @@ -143,39 +101,36 @@ else if(istype(A,/obj/effect/landmark/abductor/scientist)) scientist_landmarks[text2num(A.team)] = A + var/team_name = team_names[team_number] + var/datum/mind/agent var/obj/effect/landmark/L var/datum/mind/scientist - var/team_name var/mob/living/carbon/human/H var/datum/species/abductor/S - team_name = team_names[team_number] agent = agents[team_number] H = agent.current L = agent_landmarks[team_number] - H.loc = L.loc + H.forceMove(L.loc) H.set_species(/datum/species/abductor) S = H.dna.species - S.agent = 1 S.team = team_number H.real_name = team_name + " Agent" - equip_common(H,team_number) - equip_agent(H,team_number) + H.equipOutfit(/datum/outfit/abductor/agent) greet_agent(agent,team_number) scientist = scientists[team_number] H = scientist.current L = scientist_landmarks[team_number] - H.loc = L.loc + H.forceMove(L.loc) H.set_species(/datum/species/abductor) S = H.dna.species - S.scientist = 1 + S.scientist = TRUE S.team = team_number H.real_name = team_name + " Scientist" - equip_common(H,team_number) - equip_scientist(H,team_number) + H.equipOutfit(/datum/outfit/abductor/scientist) greet_scientist(scientist,team_number) @@ -200,57 +155,10 @@ abductor.announce_objectives() -/datum/game_mode/abduction/proc/equip_common(mob/living/carbon/human/agent,team_number) - var/radio_freq = GLOB.SYND_FREQ - - var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/alt(agent) - R.set_frequency(radio_freq) - agent.equip_to_slot_or_del(R, slot_ears) - agent.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(agent), slot_shoes) - agent.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(agent), slot_w_uniform) //they're greys gettit - agent.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(agent), slot_back) - -/datum/game_mode/abduction/proc/get_team_console(team) - var/obj/machinery/abductor/console/console - for(var/obj/machinery/abductor/console/c in GLOB.machines) - if(c.team == team) - console = c - break - return console - -/datum/game_mode/abduction/proc/equip_agent(mob/living/carbon/human/agent,team_number) - if(!team_number) - var/datum/species/abductor/S = agent.dna.species - team_number = S.team - - var/obj/machinery/abductor/console/console = get_team_console(team_number) - var/obj/item/clothing/suit/armor/abductor/vest/V = new /obj/item/clothing/suit/armor/abductor/vest(agent) - if(console!=null) - console.vest = V - V.flags |= NODROP - agent.equip_to_slot_or_del(V, slot_wear_suit) - agent.equip_to_slot_or_del(new /obj/item/weapon/abductor_baton(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/alien(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/device/abductor/silencer(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/abductor(agent), slot_head) - agent.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/military/abductor/full(agent), slot_belt) - - -/datum/game_mode/abduction/proc/equip_scientist(var/mob/living/carbon/human/scientist,var/team_number) - if(!team_number) - var/datum/species/abductor/S = scientist.dna.species - team_number = S.team - - var/obj/machinery/abductor/console/console = get_team_console(team_number) - var/obj/item/device/abductor/gizmo/G = new /obj/item/device/abductor/gizmo(scientist) - if(console!=null) - console.gizmo = G - G.console = console - scientist.equip_to_slot_or_del(G, slot_in_backpack) - - var/obj/item/weapon/implant/abductor/beamplant = new /obj/item/weapon/implant/abductor(scientist) - beamplant.implant(scientist) - +/datum/game_mode/abduction/proc/get_team_console(team_number) + for(var/obj/machinery/abductor/console/C in GLOB.machines) + if(C.team == team_number) + return C /datum/game_mode/abduction/check_finished() if(!finished) @@ -336,152 +244,3 @@ var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_ABDUCTOR] hud.leave_hud(alien_mind.current) set_antag_hud(alien_mind.current, null) - -/datum/objective/abductee - dangerrating = 5 - completed = 1 - -/datum/objective/abductee/steal - explanation_text = "Steal all" - -/datum/objective/abductee/steal/New() - var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap", "weapons", "computers", "organs")) - explanation_text+=" [target]." - -/datum/objective/abductee/paint - explanation_text = "The station is hideous. You must color it all" - -/datum/objective/abductee/paint/New() - var/color = pick(list("red", "blue", "green", "yellow", "orange", "purple", "black", "in rainbows", "in blood")) - explanation_text+= " [color]!" - -/datum/objective/abductee/speech - explanation_text = "Your brain is broken... you can only communicate in" - -/datum/objective/abductee/speech/New() - var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon")) - explanation_text+= " [style]." - -/datum/objective/abductee/capture - explanation_text = "Capture" - -/datum/objective/abductee/capture/New() - var/list/jobs = SSjob.occupations.Copy() - for(var/datum/job/J in jobs) - if(J.current_positions < 1) - jobs -= J - if(jobs.len > 0) - var/datum/job/target = pick(jobs) - explanation_text += " a [target.title]." - else - explanation_text += " someone." - -/datum/objective/abductee/shuttle - explanation_text = "You must escape the station! Get the shuttle called!" - -/datum/objective/abductee/noclone - explanation_text = "Don't allow anyone to be cloned." - -/datum/objective/abductee/oxygen - explanation_text = "The oxygen is killing them all and they don't even know it. Make sure no oxygen is on the station." - -/datum/objective/abductee/blazeit - explanation_text = "Your body must be improved. Ingest as many drugs as you can." - -/datum/objective/abductee/yumyum - explanation_text = "You are hungry. Eat as much food as you can find." - -/datum/objective/abductee/insane - explanation_text = "You see you see what they cannot you see the open door you seeE you SEeEe you SEe yOU seEee SHOW THEM ALL" - -/datum/objective/abductee/cannotmove - explanation_text = "Convince the crew that you are a paraplegic." - -/datum/objective/abductee/deadbodies - explanation_text = "Start a collection of corpses. Don't kill people to get these corpses." - -/datum/objective/abductee/floors - explanation_text = "Replace all the floor tiles with wood, carpeting, grass or bling." - -/datum/objective/abductee/POWERUNLIMITED - explanation_text = "Flood the station's powernet with as much electricity as you can." - -/datum/objective/abductee/pristine - explanation_text = "The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition." - -/datum/objective/abductee/nowalls - explanation_text = "The crew must get to know one another better. Break down the walls inside the station!" - -/datum/objective/abductee/nations - explanation_text = "Ensure your department prospers over all else." - -/datum/objective/abductee/abductception - explanation_text = "You have been changed forever. Find the ones that did this to you and give them a taste of their own medicine." - -/datum/objective/abductee/summon - explanation_text = "The elder gods hunger. Gather a cult and conduct a ritual to summon one." - -/datum/objective/abductee/machine - explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last." - -/datum/objective/abductee/calling - explanation_text = "Call forth a spirit from the other side." - -/datum/objective/abductee/calling/New() - var/mob/dead/D = pick(GLOB.dead_mob_list) - if(D) - explanation_text = "You know that [D] has perished. Hold a seance to call them from the spirit realm." - -/datum/objective/abductee/social_experiment - explanation_text = "This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth." - -/datum/objective/abductee/vr - explanation_text = "It's all an entirely virtual simulation within an underground vault. Convince the crew to escape the shackles of VR." - -/datum/objective/abductee/pets - explanation_text = "Nanotrasen is abusing the animals! Save as many as you can!" - -/datum/objective/abductee/defect - explanation_text = "Fuck the system! Defect from the station and start an independent colony in space, Lavaland or the derelict. Recruit crewmates if you can." - -/datum/objective/abductee/promote - explanation_text = "Climb the corporate ladder all the way to the top!" - -/datum/objective/abductee/science - explanation_text = "So much lies undiscovered. Look deeper into the machinations of the universe." - -/datum/objective/abductee/build - explanation_text = "Expand the station." - -/datum/objective/abductee/pragnant - explanation_text = "You are pregnant and soon due. Find a safe place to deliver your baby." - -/datum/objective/abductee/engine - explanation_text = "Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds." - -/datum/objective/abductee/music - explanation_text = "You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument!" - -/datum/objective/abductee/clown - explanation_text = "The clown is not funny. You can do better! Steal his audience and make the crew laugh!" - -/datum/objective/abductee/party - explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!" - -/datum/objective/abductee/pets - explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!" - -/datum/objective/abductee/conspiracy - explanation_text = "The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people!" - -/datum/objective/abductee/stalker - explanation_text = "The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it." - -/datum/objective/abductee/narrator - explanation_text = "You're the narrator of this tale. Follow around the protagonists to tell their story." - -/datum/objective/abductee/lurve - explanation_text = "You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you!" - -/datum/objective/abductee/sixthsense - explanation_text = "You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo." \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index f735bf253ca..e6365d5e651 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -479,6 +479,25 @@ Congratulations! You are now trained for invasive xenobiology research!"} if(BATON_PROBE) to_chat(user, "The baton is in probing mode.") +/obj/item/device/radio/headset/abductor + name = "alien headset" + desc = "An advanced alien headset designed to monitor communications of human space stations. Why does it have a microphone? No one knows." + origin_tech = "magnets=2;abductor=3" + icon = 'icons/obj/abductor.dmi' + icon_state = "abductor_headset" + item_state = "abductor_headset" + keyslot2 = new /obj/item/device/encryptionkey/heads/captain + +/obj/item/device/radio/headset/abductor/Initialize(mapload) + ..() + SET_SECONDARY_FLAG(src, BANG_PROTECT) + make_syndie() + +/obj/item/device/radio/headset/abductor/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W, /obj/item/weapon/screwdriver)) + return // Stops humans from disassembling abductor headsets. + return ..() + /obj/item/weapon/scalpel/alien name = "alien scalpel" diff --git a/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm b/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm new file mode 100644 index 00000000000..100c4852632 --- /dev/null +++ b/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm @@ -0,0 +1,62 @@ +/datum/outfit/abductor + name = "Abductor Basic" + uniform = /obj/item/clothing/under/color/grey //they're greys gettit + shoes = /obj/item/clothing/shoes/combat + back = /obj/item/weapon/storage/backpack + ears = /obj/item/device/radio/headset/abductor + +/datum/outfit/abductor/proc/get_team_console(team_number) + for(var/obj/machinery/abductor/console/C in GLOB.machines) + if(C.team == team_number) + return C + +/datum/outfit/abductor/proc/link_to_console(mob/living/carbon/human/H, team_number) + if(!team_number && isabductor(H)) + var/datum/species/abductor/S = H.dna.species + team_number = S.team + + if(!team_number) + team_number = 1 + + var/obj/machinery/abductor/console/console = get_team_console(team_number) + if(console) + var/obj/item/clothing/suit/armor/abductor/vest/V = locate() in H + if(V) + console.vest = V + V.flags |= NODROP + + var/obj/item/device/abductor/gizmo/G = locate() in H.getBackSlot() + if(G) + console.gizmo = G + G.console = console + +/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(!visualsOnly) + link_to_console(H) + + +/datum/outfit/abductor/agent + name = "Abductor Agent" + head = /obj/item/clothing/head/helmet/abductor + suit = /obj/item/clothing/suit/armor/abductor/vest + belt = /obj/item/weapon/storage/belt/military/abductor/full + + backpack_contents = list( + /obj/item/weapon/abductor_baton = 1, + /obj/item/weapon/gun/energy/alien = 1, + /obj/item/device/abductor/silencer = 1 + ) + +/datum/outfit/abductor/scientist + name = "Abductor Scientist" + + backpack_contents = list( + /obj/item/device/abductor/gizmo = 1 + ) + +/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(!visualsOnly) + var/obj/item/weapon/implant/abductor/beamplant = new /obj/item/weapon/implant/abductor(H) + beamplant.implant(H) diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index 750c88fd881..0b8ca1500d7 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -3,8 +3,7 @@ id = "abductor" say_mod = "gibbers" sexes = 0 - species_traits = list(NOBLOOD,NOBREATH,VIRUSIMMUNE,NOGUNS) + species_traits = list(NOBLOOD,NOBREATH,VIRUSIMMUNE,NOGUNS,NOHUNGER) mutant_organs = list(/obj/item/organ/tongue/abductor) var/scientist = 0 // vars to not pollute spieces list with castes - var/agent = 0 var/team = 1 \ No newline at end of file diff --git a/icons/mob/ears.dmi b/icons/mob/ears.dmi index f87713f7a1f665cfb6208eab710e1700a872943b..0a5154c396c8ddb81e09c1f4a26ee302c686435a 100644 GIT binary patch delta 763 zcmV289QZBmq&8B~=x@=~Y_*0004WQchC%1+xRF@O1s+;QR(LG9B>2J}0CHxigj#t*jt^fc4 z00000$RvNhUrf~e-72SOz8{{B!5~+&lmP00000z#o-6-ydWDz>xX=;%QZ= z^P87r|3J=szqtryzB&G6D;)17-J^)kN63*6WicA0i002ovPDHLkV1iq#c{Bh3 delta 743 zcmV;2k{1wBmq>BB~=)}z`#I*XpH~>00DGTPE!Ct=GbNc005qmk0pOg>A}82 z2+70*Obgjn@$GF@@S5Ic;G5Znsnxmd`aw09UOtd1PNO=h<7O+xGdd2lIqanfh}Xbh zLu?qctOAT9a3zI{nUicjV?l$zH6tns@`Jc zRe=Oo!q=)Dn$IwA6<>SDx66N?Q2+n}AxT6*RCt{2-0M!lKoExEr9!PmKm|E?{}*aG z#RfVDnZkm;k3q@KGSepY&sQKNpk+`DLiOB=!{gF=ZiCkEOX|5jo&5c6Jq?|MlzrY7 zT}I{MNjbWxp3<{(lCsa+qDyr=z^b~ao?hIe#GU>YUBZ`;cf7JMb_Ra{0000006-@B z^ZjC==I>THMf3gGd{_3aY>DUlvH2-IiMgp~PdJ>U@jBKUn7Nw1 zAv%B3Jf=#0TFl<`4)1^JA=bMM*POrG^&u2KrW5nU^X5k_OU+yJ7eZm-n7>m>>-Ndd z=j!n{8>HqfpVGQLf3NHguq(%GQzbNSTXtWB_0l<`w(|W5v3YBY^iSjq-mjX^JDPKU z0000000030Qs#U=I{y~=z8;as<|jwKFNOC%rqXxx4EwmhV0?c8ke%;4ve!Vq-^+Ye zJ+eDQ^L=%GG`)@lLQ57joY%F}!~ag!cdd00000 Z2j5#;5F-PT{ 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 delta 6494 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 F{ReMyc+LO- diff --git a/tgstation.dme b/tgstation.dme index 5d2c8cc7fa3..fcd8d95738c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -454,8 +454,10 @@ #include "code\game\gamemodes\malfunction\Malf_Modules.dm" #include "code\game\gamemodes\meteor\meteor.dm" #include "code\game\gamemodes\meteor\meteors.dm" +#include "code\game\gamemodes\miniantags\abduction\abductee_objectives.dm" #include "code\game\gamemodes\miniantags\abduction\abduction.dm" #include "code\game\gamemodes\miniantags\abduction\abduction_gear.dm" +#include "code\game\gamemodes\miniantags\abduction\abduction_outfits.dm" #include "code\game\gamemodes\miniantags\abduction\abduction_surgery.dm" #include "code\game\gamemodes\miniantags\abduction\gland.dm" #include "code\game\gamemodes\miniantags\abduction\machinery\camera.dm" From ff3f84ab81761802f34310e65627c9ff591232a4 Mon Sep 17 00:00:00 2001 From: MrPerson Date: Tue, 25 Apr 2017 03:15:16 -0700 Subject: [PATCH 73/73] Replaces /image with /mutable_appearance, where appropriate (#26518) In cases where you're creating an image to use as an overlay, it makes more sense to use a mutable_appearance if you can. The image will create a static appearance for not just the image but also each intermediate step if you change vars along the way. The mutable appearance avoids this unnecessary and expensive process. The only situation that requires an image instead of a mutable_appearance is if the overlay is supposed to be directional. MA's ignore direction while images don't. I dunno why, probably another BYOND-ism. I added a convenience function, mutable_appearance(), designed to emulate image(). Also went ahead and set the default plane of /mutable_appearance to FLOAT_PLANE because it's fucking 0 by default. Several overlays that were image() calls were changed to just text strings when I could. overlays += "string" has the same result as overlays += image(icon, "string") and saves a proc call. --- code/__HELPERS/icon_smoothing.dm | 30 ++--- code/__HELPERS/unsorted.dm | 8 +- code/_onclick/hud/action_button.dm | 3 +- code/_onclick/hud/parallax.dm | 6 +- code/_onclick/hud/screen_objects.dm | 17 +-- .../subsystem/processing/overlays.dm | 10 +- code/datums/action.dm | 6 +- code/datums/antagonists/datum_clockcult.dm | 2 +- code/datums/dog_fashion.dm | 4 +- code/datums/mutable_appearance.dm | 18 +++ code/datums/mutations.dm | 14 +-- code/game/gamemodes/blob/blobs/blob_mobs.dm | 6 +- code/game/gamemodes/blob/blobs/core.dm | 9 +- code/game/gamemodes/blob/blobs/node.dm | 9 +- .../clock_structures/geis_binding.dm | 3 +- .../ratvar_the_clockwork_justicar.dm | 2 +- .../clock_structures/tinkerers_daemon.dm | 11 +- code/game/gamemodes/cult/cult_items.dm | 6 +- code/game/gamemodes/cult/runes.dm | 10 +- .../gamemodes/devil/true_devil/inventory.dm | 15 ++- code/game/gamemodes/nuclear/nuclearbomb.dm | 28 ++--- code/game/machinery/computer/apc_control.dm | 9 +- code/game/machinery/computer/message.dm | 4 +- code/game/machinery/doors/airlock.dm | 20 ++-- code/game/machinery/doors/brigdoors.dm | 2 +- code/game/machinery/iv_drip.dm | 20 ++-- code/game/machinery/status_display.dm | 4 +- code/game/machinery/vending.dm | 2 +- code/game/machinery/washing_machine.dm | 2 +- code/game/mecha/mecha_wreckage.dm | 2 +- code/game/mecha/working/ripley.dm | 4 +- .../effects/decals/cleanable/humans.dm | 24 ++-- code/game/objects/items.dm | 2 +- code/game/objects/items/crayons.dm | 9 +- code/game/objects/items/devices/PDA/PDA.dm | 26 +++-- code/game/objects/items/devices/aicard.dm | 4 +- code/game/objects/items/devices/flashlight.dm | 5 +- code/game/objects/items/robot/robot_items.dm | 2 +- code/game/objects/items/shooting_range.dm | 16 +-- .../objects/items/weapons/chrono_eraser.dm | 4 +- .../objects/items/weapons/cigs_lighters.dm | 18 +-- code/game/objects/items/weapons/cosmetics.dm | 6 +- code/game/objects/items/weapons/explosives.dm | 6 +- .../items/weapons/grenades/ghettobomb.dm | 17 ++- .../objects/items/weapons/grenades/plastic.dm | 8 +- .../objects/items/weapons/holy_weapons.dm | 2 +- .../objects/items/weapons/pneumaticCannon.dm | 2 +- .../objects/items/weapons/storage/bags.dm | 4 +- .../objects/items/weapons/storage/boxes.dm | 2 +- .../objects/items/weapons/storage/fancy.dm | 16 ++- .../objects/items/weapons/storage/secure.dm | 2 +- .../objects/items/weapons/storage/toolbox.dm | 2 +- .../objects/items/weapons/tanks/watertank.dm | 4 +- code/game/objects/obj_defense.dm | 2 +- .../structures/beds_chairs/alien_nest.dm | 6 +- .../objects/structures/beds_chairs/chair.dm | 4 +- code/game/objects/structures/electricchair.dm | 2 +- code/game/objects/structures/guncase.dm | 6 +- .../structures/transit_tubes/transit_tube.dm | 16 +-- code/game/objects/structures/watercloset.dm | 2 +- code/game/objects/structures/window.dm | 6 +- code/game/turfs/closed.dm | 6 +- code/game/turfs/open.dm | 17 ++- code/game/turfs/simulated/minerals.dm | 15 ++- code/modules/admin/verbs/pray.dm | 6 +- code/modules/assembly/holder.dm | 11 +- .../atmospherics/machinery/atmosmachinery.dm | 15 +-- .../atmospherics/machinery/other/miner.dm | 9 +- code/modules/clothing/clothing.dm | 36 +++--- .../modules/clothing/spacesuits/chronosuit.dm | 16 --- code/modules/clothing/spacesuits/hardsuit.dm | 6 +- code/modules/clothing/suits/miscellaneous.dm | 2 +- code/modules/detectivework/evidence.dm | 15 +-- code/modules/events/portal_storm.dm | 4 +- .../drinks/drinks/drinkingglass.dm | 12 +- .../food_and_drinks/food/customizables.dm | 41 ++++--- code/modules/food_and_drinks/food/snacks.dm | 8 +- .../food_and_drinks/food/snacks/meat.dm | 6 +- .../food_and_drinks/food/snacks_other.dm | 4 +- .../food_and_drinks/food/snacks_pie.dm | 2 +- .../kitchen_machinery/gibber.dm | 10 +- code/modules/food_and_drinks/pizzabox.dm | 19 ++-- code/modules/games/cards.dm | 29 +++-- code/modules/holiday/easter.dm | 4 +- .../hydroponics/beekeeping/honeycomb.dm | 10 +- code/modules/hydroponics/grown/towercap.dm | 5 +- code/modules/hydroponics/hydroponics.dm | 25 ++--- code/modules/hydroponics/sample.dm | 6 +- code/modules/mining/equipment.dm | 20 ++-- code/modules/mining/fulton.dm | 12 +- code/modules/mining/lavaland/ruins/gym.dm | 7 +- code/modules/mining/ores_coins.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 32 +++--- .../carbon/alien/humanoid/update_icons.dm | 10 +- .../modules/mob/living/carbon/alien/screen.dm | 3 +- .../carbon/alien/special/alien_embryo.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 18 +-- .../mob/living/carbon/human/species.dm | 106 +++++++++--------- .../mob/living/carbon/human/update_icons.dm | 78 ++++++------- .../mob/living/carbon/monkey/update_icons.dm | 9 +- .../modules/mob/living/carbon/update_icons.dm | 36 +++--- code/modules/mob/living/living.dm | 4 +- code/modules/mob/living/silicon/robot/life.dm | 6 +- .../modules/mob/living/silicon/robot/robot.dm | 4 +- .../living/simple_animal/bot/construction.dm | 4 +- .../mob/living/simple_animal/bot/ed209bot.dm | 2 +- .../mob/living/simple_animal/bot/medbot.dm | 2 +- .../mob/living/simple_animal/friendly/dog.dm | 18 +-- .../friendly/drone/visuals_icons.dm | 21 ++-- .../mob/living/simple_animal/friendly/pet.dm | 14 ++- .../living/simple_animal/guardian/guardian.dm | 13 +-- .../simple_animal/guardian/types/protector.dm | 6 +- .../mob/living/simple_animal/hostile/bear.dm | 4 +- .../mob/living/simple_animal/hostile/bees.dm | 24 ++-- .../mob/living/simple_animal/hostile/mimic.dm | 8 +- .../living/simple_animal/hostile/mushroom.dm | 16 +-- .../simple_animal/hostile/retaliate/ghost.dm | 16 +-- .../mob/living/simple_animal/slime/slime.dm | 2 +- code/modules/mob/mob_helpers.dm | 17 +-- code/modules/paperwork/paper.dm | 4 +- code/modules/paperwork/paperbin.dm | 2 +- code/modules/paperwork/paperplane.dm | 3 +- code/modules/power/apc.dm | 45 +------- code/modules/power/cell.dm | 6 +- code/modules/power/generator.dm | 4 +- code/modules/power/singularity/collector.dm | 4 +- code/modules/power/singularity/narsie.dm | 2 +- code/modules/power/smes.dm | 29 +---- code/modules/power/solar.dm | 7 +- code/modules/power/turbine.dm | 10 +- code/modules/projectiles/guns/energy.dm | 11 +- .../guns/energy/kinetic_accelerator.dm | 5 +- .../chemistry/machinery/chem_dispenser.dm | 9 +- .../reagents/pyrotechnic_reagents.dm | 2 +- .../reagents/reagent_containers/bottle.dm | 2 +- .../reagents/reagent_containers/dropper.dm | 2 +- .../reagents/reagent_containers/glass.dm | 2 +- .../reagents/reagent_containers/syringes.dm | 7 +- code/modules/recycling/disposal-unit.dm | 8 +- code/modules/research/message_server.dm | 2 +- .../ruins/objects_and_mobs/necropolis_gate.dm | 2 +- code/modules/shuttle/manipulator.dm | 4 +- code/modules/spells/spell_types/lightning.dm | 7 +- code/modules/station_goals/bsa.dm | 9 +- code/modules/surgery/bodyparts/bodyparts.dm | 69 +++++------- code/modules/surgery/bodyparts/head.dm | 45 ++++---- .../surgery/organs/augments_internal.dm | 2 +- code/modules/vehicles/atv.dm | 6 +- code/modules/vehicles/speedbike.dm | 5 +- tgstation.dme | 1 + 151 files changed, 763 insertions(+), 921 deletions(-) create mode 100644 code/datums/mutable_appearance.dm diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index d890788c91d..de46e18fde2 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -1,7 +1,7 @@ //generic (by snowflake) tile smoothing code; smooth your icons with this! /* - Each tile is divided in 4 corners, each corner has an image associated to it; the tile is then overlayed by these 4 images + Each tile is divided in 4 corners, each corner has an appearance associated to it; the tile is then overlayed by these 4 appearances To use this, just set your atom's 'smooth' var to 1. If your atom can be moved/unanchored, set its 'can_be_unanchored' var to 1. If you don't want your atom's icon to smooth with anything but atoms of the same type, set the list 'canSmoothWith' to null; Otherwise, put all types you want the atom icon to smooth with in 'canSmoothWith' INCLUDING THE TYPE OF THE ATOM ITSELF. @@ -44,7 +44,6 @@ #define DEFAULT_UNDERLAY_ICON 'icons/turf/floors.dmi' #define DEFAULT_UNDERLAY_ICON_STATE "plating" -#define DEFAULT_UNDERLAY_IMAGE image(DEFAULT_UNDERLAY_ICON, DEFAULT_UNDERLAY_ICON_STATE) /atom/var/smooth = SMOOTH_FALSE /atom/var/top_left_corner @@ -157,14 +156,16 @@ /turf/closed/wall/diagonal_smooth(adjacencies) adjacencies = reverse_ndir(..()) if(adjacencies) - var/list/U = list() + var/mutable_appearance/underlay_appearance = mutable_appearance(layer = TURF_LAYER) + var/list/U = list(underlay_appearance) if(fixed_underlay) if(fixed_underlay["space"]) - var/image/I = image('icons/turf/space.dmi', SPACE_ICON_STATE, layer=TURF_LAYER) - I.plane = PLANE_SPACE - U += I + underlay_appearance.icon = 'icons/turf/space.dmi' + underlay_appearance.icon_state = SPACE_ICON_STATE + underlay_appearance.plane = PLANE_SPACE else - U += image(fixed_underlay["icon"], fixed_underlay["icon_state"], layer=TURF_LAYER) + underlay_appearance.icon = fixed_underlay["icon"] + underlay_appearance.icon_state = fixed_underlay["icon_state"] else var/turf/T = get_step(src, turn(adjacencies, 180)) if(T && (T.density || T.smooth)) @@ -173,15 +174,18 @@ T = get_step(src, turn(adjacencies, 225)) if(isspaceturf(T) && !istype(T, /turf/open/space/transit)) - var/image/I = image('icons/turf/space.dmi', SPACE_ICON_STATE, layer=TURF_LAYER) - I.plane = PLANE_SPACE - U += I + underlay_appearance.icon = 'icons/turf/space.dmi' + underlay_appearance.icon_state = SPACE_ICON_STATE + underlay_appearance.plane = PLANE_SPACE else if(T && !T.density && !T.smooth) - U += T + underlay_appearance.icon = T.icon + underlay_appearance.icon_state = T.icon_state else if(baseturf && !initial(baseturf.density) && !initial(baseturf.smooth)) - U += image(initial(baseturf.icon), initial(baseturf.icon_state), layer=TURF_LAYER) + underlay_appearance.icon = initial(baseturf.icon) + underlay_appearance.icon_state = initial(baseturf.icon_state) else - U += DEFAULT_UNDERLAY_IMAGE + underlay_appearance.icon = DEFAULT_UNDERLAY_ICON + underlay_appearance.icon_state = DEFAULT_UNDERLAY_ICON_STATE underlays = U diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 35e66d5f4b7..a7338a0c5d2 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1138,13 +1138,13 @@ B --><-- A if(location == src) return 1 -/proc/flick_overlay_static(image/I, atom/A, duration) +/proc/flick_overlay_static(O, atom/A, duration) set waitfor = 0 - if(!A || !I) + if(!A || !O) return - A.add_overlay(I) + A.add_overlay(O) sleep(duration) - A.cut_overlay(I) + A.cut_overlay(O) /proc/get_areas_in_z(zlevel) . = list() diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 407137dfcfd..96a07bad24c 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -57,8 +57,7 @@ /obj/screen/movable/action_button/hide_toggle/proc/UpdateIcon() cut_overlays() - var/image/img = image(hide_icon, src, hidden ? show_state : hide_state) - add_overlay(img) + add_overlay(mutable_appearance(hide_icon, hidden ? show_state : hide_state)) /obj/screen/movable/action_button/MouseEntered(location,control,params) diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index df0894403c2..4bf86f414bc 100644 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -261,9 +261,9 @@ for(var/y in -count to count) if(x == 0 && y == 0) continue - var/image/I = image(icon, null, icon_state) - I.transform = matrix(1, 0, x*480, 0, 1, y*480) - new_overlays += I + var/mutable_appearance/texture_overlay = mutable_appearance(icon, icon_state) + texture_overlay.transform = matrix(1, 0, x*480, 0, 1, y*480) + new_overlays += texture_overlay cut_overlays() add_overlay(new_overlays) view_sized = view diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 0c2871a26b0..206a9fabc1a 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -134,21 +134,16 @@ icon_state = icon_empty /obj/screen/inventory/hand - var/image/active_overlay - var/image/handcuff_overlay - var/image/blocked_overlay + var/mutable_appearance/handcuff_overlay + var/static/mutable_appearance/blocked_overlay = mutable_appearance('icons/mob/screen_gen.dmi', "blocked") var/held_index = 0 /obj/screen/inventory/hand/update_icon() ..() - if(!active_overlay) - active_overlay = image("icon"=icon, "icon_state"="hand_active") if(!handcuff_overlay) var/state = (!(held_index % 2)) ? "markus" : "gabrielle" - handcuff_overlay = image("icon"='icons/mob/screen_gen.dmi', "icon_state"=state) - if(!blocked_overlay) - blocked_overlay = image("icon"='icons/mob/screen_gen.dmi', "icon_state"="blocked") + handcuff_overlay = mutable_appearance('icons/mob/screen_gen.dmi', state) cut_overlays() @@ -163,7 +158,7 @@ add_overlay(blocked_overlay) if(held_index == hud.mymob.active_hand_index) - add_overlay(active_overlay) + add_overlay("hand_active") /obj/screen/inventory/hand/Click(location, control, params) @@ -445,7 +440,7 @@ /obj/screen/zone_sel/update_icon(mob/user) cut_overlays() - add_overlay(image('icons/mob/screen_gen.dmi', "[selecting]")) + add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[selecting]")) user.zone_selected = selecting /obj/screen/zone_sel/alien @@ -453,7 +448,7 @@ /obj/screen/zone_sel/alien/update_icon(mob/user) cut_overlays() - add_overlay(image('icons/mob/screen_alien.dmi', "[selecting]")) + add_overlay(mutable_appearance('icons/mob/screen_alien.dmi', "[selecting]")) user.zone_selected = selecting /obj/screen/zone_sel/robot diff --git a/code/controllers/subsystem/processing/overlays.dm b/code/controllers/subsystem/processing/overlays.dm index 1a42944bb5f..1aa76e6b3de 100644 --- a/code/controllers/subsystem/processing/overlays.dm +++ b/code/controllers/subsystem/processing/overlays.dm @@ -55,7 +55,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays) /proc/iconstate2appearance(icon, iconstate) var/static/image/stringbro = new() - var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches + var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches var/list/cached_icon = icon_states_cache[icon] if (cached_icon) var/cached_appearance = cached_icon["[iconstate]"] @@ -91,7 +91,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays) new_overlays[i] = iconstate2appearance(icon, cached_overlay) else if(isicon(cached_overlay)) new_overlays[i] = icon2appearance(cached_overlay) - else //image probable + else //image/mutable_appearance probable appearance_bro.appearance = cached_overlay if(!ispath(cached_overlay)) appearance_bro.dir = cached_overlay.dir @@ -99,11 +99,11 @@ PROCESSING_SUBSYSTEM_DEF(overlays) return new_overlays #define NOT_QUEUED_ALREADY (!(flags & OVERLAY_QUEUED)) -#define QUEUE_FOR_COMPILE flags |= OVERLAY_QUEUED; SSoverlays.processing += src; +#define QUEUE_FOR_COMPILE flags |= OVERLAY_QUEUED; SSoverlays.processing += src; /atom/proc/cut_overlays(priority = FALSE) var/list/cached_overlays = our_overlays var/list/cached_priority = priority_overlays - + var/need_compile = FALSE if(LAZYLEN(cached_overlays)) //don't queue empty lists, don't cut priority overlays @@ -165,7 +165,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays) if(cut_old) cut_overlays() return - + var/list/cached_other = other.our_overlays if(cached_other) if(cut_old || !LAZYLEN(our_overlays)) diff --git a/code/datums/action.dm b/code/datums/action.dm index bd18d646e2d..08239492f33 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -110,12 +110,8 @@ /datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button) if(icon_icon && button_icon_state && current_button.button_icon_state != button_icon_state) - var/image/img - img = image(icon_icon, current_button, button_icon_state) - img.pixel_x = 0 - img.pixel_y = 0 current_button.cut_overlays(TRUE) - current_button.add_overlay(img) + current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state)) current_button.button_icon_state = button_icon_state diff --git a/code/datums/antagonists/datum_clockcult.dm b/code/datums/antagonists/datum_clockcult.dm index 89be685f761..0c39b5a9899 100644 --- a/code/datums/antagonists/datum_clockcult.dm +++ b/code/datums/antagonists/datum_clockcult.dm @@ -83,7 +83,7 @@ var/mob/living/silicon/ai/A = S A.can_be_carded = FALSE A.requires_power = POWER_REQ_CLOCKCULT - var/list/AI_frame = list(image('icons/mob/clockwork_mobs.dmi', A, "aiframe")) //make the AI's cool frame + var/list/AI_frame = list(mutable_appearance('icons/mob/clockwork_mobs.dmi', "aiframe")) //make the AI's cool frame for(var/d in GLOB.cardinal) AI_frame += image('icons/mob/clockwork_mobs.dmi', A, "eye[rand(1, 10)]", dir = d) //the eyes are randomly fast or slow A.add_overlay(AI_frame) diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index 75c8379524d..c798f352189 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -31,9 +31,9 @@ if(speak_emote) D.speak_emote = speak_emote -/datum/dog_fashion/proc/get_image(var/dir) +/datum/dog_fashion/proc/get_overlay(var/dir) if(icon_file && obj_icon_state) - var/image/corgI = image(icon_file, icon_state = obj_icon_state, dir = dir) + var/image/corgI = image(icon_file, obj_icon_state, dir = dir) corgI.alpha = obj_alpha corgI.color = obj_color return corgI diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm new file mode 100644 index 00000000000..1cb3a97d9f7 --- /dev/null +++ b/code/datums/mutable_appearance.dm @@ -0,0 +1,18 @@ +// Mutable appearances are an inbuilt byond datastructure. Read the documentation on them by hitting F1 in DM. +// Basically use them instead of images for overlays/underlays and when changing an object's appearance if you're doing so with any regularity. +// Unless you need the overlay/underlay to have a different direction than the base object. Then you have to use an image due to a bug. + +// Mutable appearances are children of images, just so you know. + +/mutable_appearance/New() + ..() + plane = FLOAT_PLANE // No clue why this is 0 by default yet images are on FLOAT_PLANE + // And yes this does have to be in the constructor, BYOND ignores it if you set it as a normal var + +// Helper similar to image() +/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER) + var/mutable_appearance/MA = new() + MA.icon = icon + MA.icon_state = icon_state + MA.layer = layer + return MA \ No newline at end of file diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm index 55f2b03161c..caab422e8b1 100644 --- a/code/datums/mutations.dm +++ b/code/datums/mutations.dm @@ -15,7 +15,7 @@ GLOBAL_LIST_EMPTY(mutations_list) var/lowest_value = 256 * 8 var/text_gain_indication = "" var/text_lose_indication = "" - var/list/visual_indicators = list() + var/list/mutable_appearance/visual_indicators = list() var/layer_used = MUTATIONS_LAYER //which mutation layer to use var/list/species_allowed = list() //to restrict mutation to only certain species var/health_req //minimum health required to acquire the mutation @@ -161,7 +161,7 @@ GLOBAL_LIST_EMPTY(mutations_list) /datum/mutation/human/telekinesis/New() ..() - visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead", "layer"=-MUTATIONS_LAYER) + visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER) /datum/mutation/human/telekinesis/get_visual_indicator(mob/living/carbon/human/owner) return visual_indicators[1] @@ -180,7 +180,7 @@ GLOBAL_LIST_EMPTY(mutations_list) /datum/mutation/human/cold_resistance/New() ..() - visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="fire", "layer"=-MUTATIONS_LAYER) + visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "fire", -MUTATIONS_LAYER) /datum/mutation/human/cold_resistance/get_visual_indicator(mob/living/carbon/human/owner) return visual_indicators[1] @@ -618,7 +618,7 @@ GLOBAL_LIST_EMPTY(mutations_list) /datum/mutation/human/laser_eyes/New() ..() - visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="lasereyes", "layer"=-FRONT_MUTATIONS_LAYER) + visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "lasereyes", -FRONT_MUTATIONS_LAYER) /datum/mutation/human/laser_eyes/get_visual_indicator(mob/living/carbon/human/owner) return visual_indicators[1] @@ -640,11 +640,11 @@ GLOBAL_LIST_EMPTY(mutations_list) var/list/mut_overlay = list() if(overlays_standing[CM.layer_used]) mut_overlay = overlays_standing[CM.layer_used] - var/image/V = CM.get_visual_indicator(src) + var/mutable_appearance/V = CM.get_visual_indicator(src) if(!mut_overlay.Find(V)) //either we lack the visual indicator or we have the wrong one remove_overlay(CM.layer_used) - for(var/image/I in CM.visual_indicators) - mut_overlay.Remove(I) + for(var/mutable_appearance/MA in CM.visual_indicators) + mut_overlay.Remove(MA) mut_overlay |= V overlays_standing[CM.layer_used] = mut_overlay apply_overlay(CM.layer_used) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 7a8bc7f517f..46853995cb3 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -179,11 +179,11 @@ remove_atom_colour(FIXED_COLOUR_PRIORITY) if(is_zombie) copy_overlays(oldguy, TRUE) - var/image/I = image('icons/mob/blob.dmi', icon_state = "blob_head") + var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/blob.dmi', "blob_head") if(overmind) - I.color = overmind.blob_reagent_datum.complementary_color + blob_head_overlay.color = overmind.blob_reagent_datum.complementary_color color = initial(color)//looks better. - add_overlay(I) + add_overlay(blob_head_overlay) /mob/living/simple_animal/hostile/blob/blobspore/weak name = "fragile blob spore" diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 7ae47f4c0e6..6ee0a56ceec 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -33,12 +33,11 @@ /obj/structure/blob/core/update_icon() cut_overlays() color = null - var/image/I = new('icons/mob/blob.dmi', "blob") + var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") if(overmind) - I.color = overmind.blob_reagent_datum.color - add_overlay(I) - var/image/C = new('icons/mob/blob.dmi', "blob_core_overlay") - add_overlay(C) + blob_overlay.color = overmind.blob_reagent_datum.color + add_overlay(blob_overlay) + add_overlay(mutable_appearance('icons/mob/blob.dmi', "blob_core_overlay")) /obj/structure/blob/core/Destroy() GLOB.blob_cores -= src diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index d778323ac23..ba92b7e03f5 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -21,12 +21,11 @@ /obj/structure/blob/node/update_icon() cut_overlays() color = null - var/image/I = new('icons/mob/blob.dmi', "blob") + var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") if(overmind) - I.color = overmind.blob_reagent_datum.color - add_overlay(I) - var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay") - add_overlay(C) + blob_overlay.color = overmind.blob_reagent_datum.color + add_overlay(blob_overlay) + add_overlay(mutable_appearance('icons/mob/blob.dmi', "blob_node_overlay")) /obj/structure/blob/node/Destroy() GLOB.blob_nodes -= src diff --git a/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm b/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm index 31b88010281..1203c7119a7 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm @@ -42,8 +42,7 @@ icon_state = "geisbinding" mob_layer = M.layer layer = M.layer - 0.01 - var/image/GB = new('icons/effects/clockwork_effects.dmi', src, "geisbinding_top", M.layer + 0.01) - add_overlay(GB) + add_overlay(mutable_appearance('icons/effects/clockwork_effects.dmi', "geisbinding_top", M.layer + 0.01)) for(var/obj/item/I in M.held_items) M.dropItemToGround(I) for(var/i in M.get_empty_held_indexes()) diff --git a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm index ffc3d5e1a14..9b2d868730e 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm @@ -25,7 +25,7 @@ START_PROCESSING(SSobj, src) send_to_playing_players("\"[text2ratvar("ONCE AGAIN MY LIGHT SHALL SHINE ACROSS THIS PATHETIC REALM")]!!\"") send_to_playing_players('sound/effects/ratvar_reveal.ogg') - var/image/alert_overlay = image('icons/effects/clockwork_effects.dmi', "ratvar_alert") + var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/clockwork_effects.dmi', "ratvar_alert") var/area/A = get_area(src) notify_ghosts("The Justiciar's light calls to you! Reach out to Ratvar in [A.name] to be granted a shell to spread his glory!", null, source = src, alert_overlay = alert_overlay) INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency..proc/request, null, 0) diff --git a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm index 727f13fea4a..22ea9e2ce50 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm @@ -14,8 +14,8 @@ debris = list(/obj/item/clockwork/alloy_shards/medium = 1, \ /obj/item/clockwork/alloy_shards/small = 6, \ /obj/item/clockwork/component/replicant_alloy/replication_plate = 1) - var/image/daemon_glow - var/image/component_glow + var/static/mutable_appearance/daemon_glow = mutable_appearance('icons/obj/clockwork_objects.dmi', "tinkerglow") + var/static/mutable_appearance/component_glow = mutable_appearance('icons/obj/clockwork_objects.dmi', "t_random_component") var/component_id_to_produce var/production_time = 0 //last time we produced a component var/production_cooldown = 120 @@ -119,14 +119,9 @@ . = ..() if(active) var/component_color = get_component_color(component_id_to_produce) - if(!daemon_glow) - daemon_glow = new('icons/obj/clockwork_objects.dmi', "tinkerglow") daemon_glow.color = component_color add_overlay(daemon_glow) - if(!component_glow) - component_glow = new('icons/obj/clockwork_objects.dmi', "t_[component_id_to_produce ? component_id_to_produce :"random_component"]") - else - component_glow.icon_state = "t_[component_id_to_produce ? component_id_to_produce :"random_component"]" + component_glow.icon_state = "t_[component_id_to_produce ? component_id_to_produce :"random_component"]" component_glow.color = component_color add_overlay(component_glow) production_time = world.time + production_cooldown //don't immediately produce when turned on after being off diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 8d87eeb4fcd..a90aeb78bc2 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -201,9 +201,9 @@ return 0 /obj/item/clothing/suit/hooded/cultrobes/cult_shield/worn_overlays(isinhands) - . = list() - if(!isinhands && current_charges) - . += image(layer = MOB_LAYER+0.01, icon = 'icons/effects/effects.dmi', icon_state = "shield-cult") + . = list() + if(!isinhands && current_charges) + . += mutable_appearance('icons/effects/effects.dmi', "shield-cult", MOB_LAYER + 0.01) /obj/item/clothing/suit/hooded/cultrobes/berserker name = "flagellant's robes" diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 2e2ff9c46bc..296b248938f 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -775,11 +775,11 @@ structure_check() searches for nearby cultist structures required for the invoca deltimer(density_timer) air_update_turf(1) if(density) - var/image/I = image(layer = ABOVE_MOB_LAYER, icon = 'icons/effects/effects.dmi', icon_state = "barriershimmer") - I.appearance_flags = RESET_COLOR - I.alpha = 60 - I.color = "#701414" - add_overlay(I) + var/mutable_appearance/shimmer = mutable_appearance('icons/effects/effects.dmi', "barriershimmer", ABOVE_MOB_LAYER) + shimmer.appearance_flags |= RESET_COLOR + shimmer.alpha = 60 + shimmer.color = "#701414" + add_overlay(shimmer) add_atom_colour("#FF0000", FIXED_COLOUR_PRIORITY) else cut_overlays() diff --git a/code/game/gamemodes/devil/true_devil/inventory.dm b/code/game/gamemodes/devil/true_devil/inventory.dm index c474eaf1161..778c4216160 100644 --- a/code/game/gamemodes/devil/true_devil/inventory.dm +++ b/code/game/gamemodes/devil/true_devil/inventory.dm @@ -5,7 +5,7 @@ return 0 /mob/living/carbon/true_devil/update_inv_hands() - //TODO LORDPIDEY: Figure out how to make the hands line up properly. the l/r_hand_image should use the down sprite when facing down, left, or right, and the up sprite when facing up. + //TODO LORDPIDEY: Figure out how to make the hands line up properly. the l/r_hand_overlay should use the down sprite when facing down, left, or right, and the up sprite when facing up. remove_overlay(DEVIL_HANDS_LAYER) var/list/hands_overlays = list() var/obj/item/l_hand = get_item_for_held_index(1) //hardcoded 2-hands only, for now. @@ -17,9 +17,9 @@ if(!r_state) r_state = r_hand.icon_state - var/image/r_hand_image = r_hand.build_worn_icon(state = r_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) + var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) - hands_overlays += r_hand_image + hands_overlays += r_hand_overlay if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) r_hand.layer = ABOVE_HUD_LAYER @@ -33,9 +33,9 @@ if(!l_state) l_state = l_hand.icon_state - var/image/l_hand_image = l_hand.build_worn_icon(state = l_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) + var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) - hands_overlays += l_hand_image + hands_overlays += l_hand_overlay if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) l_hand.layer = ABOVE_HUD_LAYER @@ -54,6 +54,5 @@ /mob/living/carbon/true_devil/apply_overlay(cache_index) - var/image/I = devil_overlays[cache_index] - if(I) - add_overlay(I) + if((. = devil_overlays[cache_index])) + add_overlay(.) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 575db19f5ce..1f01b38860d 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -37,8 +37,8 @@ var/previous_level = "" var/obj/item/nuke_core/core = null var/deconstruction_state = NUKESTATE_INTACT - var/image/lights = null - var/image/interior = null + var/lights = "" + var/interior = "" var/obj/effect/countdown/nuclearbomb/countdown var/static/bomb_set @@ -201,30 +201,32 @@ cut_overlay(interior) switch(deconstruction_state) if(NUKESTATE_UNSCREWED) - interior = image(icon,"panel-unscrewed") + interior = "panel-unscrewed" if(NUKESTATE_PANEL_REMOVED) - interior = image(icon,"panel-removed") + interior = "panel-removed" if(NUKESTATE_WELDED) - interior = image(icon,"plate-welded") + interior = "plate-welded" if(NUKESTATE_CORE_EXPOSED) - interior = image(icon,"plate-removed") + interior = "plate-removed" if(NUKESTATE_CORE_REMOVED) - interior = image(icon,"core-removed") + interior = "core-removed" if(NUKESTATE_INTACT) - interior = null + return add_overlay(interior) /obj/machinery/nuclearbomb/proc/update_icon_lights() - cut_overlay(lights) + if(lights) + cut_overlay(lights) switch(get_nuke_state()) if(NUKE_OFF_LOCKED) - lights = null + lights = "" + return if(NUKE_OFF_UNLOCKED) - lights = image(icon,"lights-safety") + lights = "lights-safety" if(NUKE_ON_TIMING) - lights = image(icon,"lights-timing") + lights = "lights-timing" if(NUKE_ON_EXPLODING) - lights = image(icon,"lights-exploding") + lights = "lights-exploding" add_overlay(lights) /obj/machinery/nuclearbomb/process() diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 39bd31bdb7b..753cd42a4f7 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -96,7 +96,6 @@ return if(!usr || !usr.canUseTopic(src) || usr.incapacitated() || stat || QDELETED(src)) return - var/image/I = image(src) //For feedback message flavor if(href_list["authenticate"]) var/obj/item/weapon/card/id/ID = usr.get_active_held_item() if(!istype(ID)) @@ -117,24 +116,24 @@ authenticated = FALSE auth_id = "\[NULL\]" if(href_list["restore_logging"]) - to_chat(usr, "\icon[I] Logging functionality restored from backup data.") + to_chat(usr, "\icon[src] Logging functionality restored from backup data.") emagged = FALSE LAZYADD(logs, "-=- Logging restored to full functionality at this point -=-") if(href_list["access_apc"]) playsound(src, "terminal_type", 50, 0) var/obj/machinery/power/apc/APC = locate(href_list["access_apc"]) in GLOB.apcs_list if(!APC || APC.aidisabled || APC.panel_open || QDELETED(APC)) - to_chat(usr, "\icon[I] APC does not return interface request. Remote access may be disabled.") + to_chat(usr, "\icon[src] APC does not return interface request. Remote access may be disabled.") return if(active_apc) - to_chat(usr, "\icon[I] Disconnected from [active_apc].") + to_chat(usr, "\icon[src] Disconnected from [active_apc].") active_apc.say("Remote access canceled. Interface locked.") playsound(active_apc, 'sound/machines/BoltsDown.ogg', 25, 0) playsound(active_apc, 'sound/machines/terminal_alert.ogg', 50, 0) active_apc.locked = TRUE active_apc.update_icon() active_apc = null - to_chat(usr, "\icon[I] Connected to APC in [get_area(APC)]. Interface request sent.") + to_chat(usr, "\icon[src] Connected to APC in [get_area(APC)]. Interface request sent.") log_activity("remotely accessed APC in [get_area(APC)]") APC.interact(usr, GLOB.not_incapacitated_state) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 00ac48ad5a7..7a2f58bc01b 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -419,7 +419,7 @@ to_chat(H, "\icon[customrecepient] Message from [customsender] ([customjob]), \"[custommessage]\" (Reply)") log_pda("[usr]/([usr.ckey]) (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]") customrecepient.cut_overlays() - customrecepient.add_overlay(image('icons/obj/pda.dmi', "pda-r")) + customrecepient.add_overlay(mutable_appearance('icons/obj/pda.dmi', "pda-r")) //Sender is faking as someone who exists else src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]") @@ -432,7 +432,7 @@ to_chat(H, "\icon[customrecepient] Message from [PDARec.owner] ([customjob]), \"[custommessage]\" (Reply)") log_pda("[usr]/([usr.ckey]) (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]") customrecepient.cut_overlays() - customrecepient.add_overlay(image('icons/obj/pda.dmi', "pda-r")) + customrecepient.add_overlay(mutable_appearance('icons/obj/pda.dmi', "pda-r")) //Finally.. ResetMessage() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index c8555e47ad2..a9331cd142f 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -366,13 +366,13 @@ set_airlock_overlays(state) /obj/machinery/door/airlock/proc/set_airlock_overlays(state) - var/image/frame_overlay - var/image/filling_overlay - var/image/lights_overlay - var/image/panel_overlay - var/image/weld_overlay - var/image/damag_overlay - var/image/sparks_overlay + var/mutable_appearance/frame_overlay + var/mutable_appearance/filling_overlay + var/mutable_appearance/lights_overlay + var/mutable_appearance/panel_overlay + var/mutable_appearance/weld_overlay + var/mutable_appearance/damag_overlay + var/mutable_appearance/sparks_overlay switch(state) if(AIRLOCK_CLOSED) @@ -494,10 +494,8 @@ pass(A) //suppress unused warning var/list/airlock_overlays = A.airlock_overlays var/iconkey = "[icon_state][icon_file]" - if(airlock_overlays[iconkey]) - return airlock_overlays[iconkey] - airlock_overlays[iconkey] = image(icon_file, icon_state) - return airlock_overlays[iconkey] + if((!(. = airlock_overlays[iconkey]))) + . = airlock_overlays[iconkey] = mutable_appearance(icon_file, icon_state) /obj/machinery/door/airlock/do_animate(animation) switch(animation) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 607c6870ce3..18dde20df2d 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -184,7 +184,7 @@ if(maptext) maptext = "" cut_overlays() - add_overlay(image('icons/obj/status_display.dmi', icon_state=state)) + add_overlay(mutable_appearance('icons/obj/status_display.dmi', state)) //Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index e4e1f7e75d8..e6d84699436 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -36,27 +36,27 @@ else add_overlay("beakeridle") if(beaker.reagents.total_volume) - var/image/filling = image('icons/obj/iv_drip.dmi', src, "reagent") + var/mutable_appearance/filling_overlay = mutable_appearance('icons/obj/iv_drip.dmi', "reagent") var/percent = round((beaker.reagents.total_volume / beaker.volume) * 100) switch(percent) if(0 to 9) - filling.icon_state = "reagent0" + filling_overlay.icon_state = "reagent0" if(10 to 24) - filling.icon_state = "reagent10" + filling_overlay.icon_state = "reagent10" if(25 to 49) - filling.icon_state = "reagent25" + filling_overlay.icon_state = "reagent25" if(50 to 74) - filling.icon_state = "reagent50" + filling_overlay.icon_state = "reagent50" if(75 to 79) - filling.icon_state = "reagent75" + filling_overlay.icon_state = "reagent75" if(80 to 90) - filling.icon_state = "reagent80" + filling_overlay.icon_state = "reagent80" if(91 to INFINITY) - filling.icon_state = "reagent100" + filling_overlay.icon_state = "reagent100" - filling.icon += mix_color_from_reagents(beaker.reagents.reagent_list) - add_overlay(filling) + filling_overlay.color = list("#0000", "#0000", "#0000", "#000f", mix_color_from_reagents(beaker.reagents.reagent_list)) + add_overlay(filling_overlay) /obj/machinery/iv_drip/MouseDrop(mob/living/target) if(!ishuman(usr) || !usr.canUseTopic(src,BE_CLOSE) || !isliving(target)) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 24ac822ad08..a91b1fbf0ec 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -146,7 +146,7 @@ /obj/machinery/status_display/proc/set_picture(state) picture_state = state remove_display() - add_overlay(image('icons/obj/status_display.dmi', icon_state=picture_state)) + add_overlay(picture_state) /obj/machinery/status_display/proc/update_display(line1, line2) var/new_text = {"
[line1]
[line2]
"} @@ -278,7 +278,7 @@ /obj/machinery/ai_status_display/proc/set_picture(state) picture_state = state cut_overlays() - add_overlay(image('icons/obj/status_display.dmi', icon_state=picture_state)) + add_overlay(picture_state) #undef CHARS_PER_LINE #undef FOND_SIZE diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index a05a5af3755..774e6d9082b 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -297,7 +297,7 @@ to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") cut_overlays() if(panel_open) - add_overlay(image(icon, "[initial(icon_state)]-panel")) + add_overlay("[initial(icon_state)]-panel") playsound(src.loc, W.usesound, 50, 1) updateUsrDialog() else diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 46ae55e9b82..40b973c5969 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -186,7 +186,7 @@ var/full = contents.len ? 1 : 0 icon_state = "wm_[state_open]_[full]" if(panel_open) - add_overlay(image(icon, icon_state = "wm_panel")) + add_overlay("wm_panel") /obj/machinery/washing_machine/attackby(obj/item/weapon/W, mob/user, params) if(default_deconstruction_screwdriver(user, null, null, W)) diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 667f5896406..950f6eaafbc 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -23,7 +23,7 @@ AI.apply_damage(150, BURN) //Give the AI a bit of damage from the "shock" of being suddenly shut down AI.death() //The damage is not enough to kill the AI, but to be 'corrupted files' in need of repair. AI.forceMove(src) //Put the dead AI inside the wreckage for recovery - add_overlay(image('icons/obj/projectiles.dmi', icon_state = "green_laser")) //Overlay for the recovery beacon + add_overlay(mutable_appearance('icons/obj/projectiles.dmi', "green_laser")) //Overlay for the recovery beacon AI.controlled_mech = null AI.remote_control = null diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 8b855c7c3d2..6539ab64563 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -48,9 +48,9 @@ if (hides) cut_overlays() if(hides < 3) - add_overlay(image("icon" = "mecha.dmi", "icon_state" = occupant ? "ripley-g" : "ripley-g-open")) + add_overlay(occupant ? "ripley-g" : "ripley-g-open") else - add_overlay(image("icon" = "mecha.dmi", "icon_state" = occupant ? "ripley-g-full" : "ripley-g-full-open")) + add_overlay(occupant ? "ripley-g-full" : "ripley-g-full-open") /obj/mecha/working/ripley/firefighter diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 0d4b5786536..7727b4d9e94 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -161,23 +161,15 @@ for(var/Ddir in GLOB.cardinal) if(entered_dirs & Ddir) - var/image/I - if(GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"]) - I = GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] - else - I = image(icon,"[blood_state]1",dir = Ddir) - GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = I - if(I) - add_overlay(I) + var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] + if(!bloodstep_overlay) + GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]1", dir = Ddir) + add_overlay(bloodstep_overlay) if(exited_dirs & Ddir) - var/image/I - if(GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"]) - I = GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] - else - I = image(icon,"[blood_state]2",dir = Ddir) - GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = I - if(I) - add_overlay(I) + var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] + if(!bloodstep_overlay) + GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]2", dir = Ddir) + add_overlay(bloodstep_overlay) alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index d1f7522e216..28388d656d3 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1,4 +1,4 @@ -GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/effects/fire.dmi', "icon_state" = "fire")) +GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/effects/fire.dmi', "fire")) GLOBAL_VAR_INIT(rpg_loot_items, FALSE) // if true, everyone item when created will have its name changed to be diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 098d3371233..039237c63c7 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -521,7 +521,7 @@ /obj/item/weapon/storage/crayons/update_icon() cut_overlays() for(var/obj/item/toy/crayon/crayon in contents) - add_overlay(image('icons/obj/crayons.dmi',crayon.item_color)) + add_overlay(mutable_appearance('icons/obj/crayons.dmi', crayon.item_color)) /obj/item/weapon/storage/crayons/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/toy/crayon)) @@ -667,10 +667,9 @@ icon_state = is_capped ? icon_capped : icon_uncapped if(use_overlays) cut_overlays() - var/image/I = image('icons/obj/crayons.dmi', - icon_state = "[is_capped ? "spraycan_cap_colors" : "spraycan_colors"]") - I.color = paint_color - add_overlay(I) + var/mutable_appearance/spray_overlay = mutable_appearance('icons/obj/crayons.dmi', "[is_capped ? "spraycan_cap_colors" : "spraycan_colors"]") + spray_overlay.color = paint_color + add_overlay(spray_overlay) /obj/item/toy/crayon/spraycan/gang //desc = "A modified container containing suspicious paint." diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 068717f667c..0d1c6444689 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -51,7 +51,7 @@ GLOBAL_LIST_EMPTY(PDAs) var/obj/item/device/paicard/pai = null // A slot for a personal AI device - var/image/photo = null //Scanned photo + var/icon/photo //Scanned photo var/list/contained_item = list(/obj/item/weapon/pen, /obj/item/toy/crayon, /obj/item/weapon/lipstick, /obj/item/device/flashlight/pen, /obj/item/clothing/mask/cigarette) var/obj/item/inserted_item //Used for pen, crayon, and lipstick insertion or removal. Same as above. @@ -82,22 +82,24 @@ GLOBAL_LIST_EMPTY(PDAs) /obj/item/device/pda/update_icon() cut_overlays() + var/mutable_appearance/overlay = new() + overlay.pixel_x = overlays_x_offset if(id) - var/image/I = image(icon_state = "id_overlay", pixel_x = overlays_x_offset) - add_overlay(I) + overlay.icon_state = "id_overlay" + add_overlay(new /mutable_appearance(overlay)) if(inserted_item) - var/image/I = image(icon_state = "insert_overlay", pixel_x = overlays_x_offset) - add_overlay(I) + overlay.icon_state = "insert_overlay" + add_overlay(new /mutable_appearance(overlay)) if(fon) - var/image/I = image(icon_state = "light_overlay", pixel_x = overlays_x_offset) - add_overlay(I) + overlay.icon_state = "light_overlay" + add_overlay(new /mutable_appearance(overlay)) if(pai) if(pai.pai) - var/image/I = image(icon_state = "pai_overlay", pixel_x = overlays_x_offset) - add_overlay(I) + overlay.icon_state = "pai_overlay" + add_overlay(new /mutable_appearance(overlay)) else - var/image/I = image(icon_state = "pai_off_overlay", pixel_x = overlays_x_offset) - add_overlay(I) + overlay.icon_state = "pai_off_overlay" + add_overlay(new /mutable_appearance(overlay)) /obj/item/device/pda/MouseDrop(obj/over_object, src_location, over_location) var/mob/M = usr @@ -633,7 +635,7 @@ GLOBAL_LIST_EMPTY(PDAs) to_chat(L, "\icon[src] Message from [source.owner] ([source.ownjob]), \"[msg.message]\"[msg.get_photo_ref()] (Reply)") update_icon() - add_overlay(image(icon, icon_alert)) + add_overlay(icon_alert) /obj/item/device/pda/proc/show_to_ghosts(mob/living/user, datum/data_pda_msg/msg,multiple = 0) for(var/mob/M in GLOB.player_list) diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 86104f7b941..5c8dd2fe805 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -23,6 +23,7 @@ update_icon() //Whatever happened, update the card's state (icon, name) to match. /obj/item/device/aicard/update_icon() + cut_overlays() if(AI) name = "[initial(name)]- [AI.name]" if(AI.stat == DEAD) @@ -30,12 +31,11 @@ else icon_state = "aicard-full" if(!AI.control_disabled) - add_overlay(image('icons/obj/aicards.dmi', "aicard-on")) + add_overlay("aicard-on") AI.cancel_camera() else name = initial(name) icon_state = initial(icon_state) - cut_overlays() /obj/item/device/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 385e177b6f8..5d47f304f05 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -344,8 +344,9 @@ cut_overlays() set_light(0) else if(on) - var/image/I = image(icon,"glowstick-glow",color) - add_overlay(I) + var/mutable_appearance/glowstick_overlay = mutable_appearance(icon, "glowstick-glow") + glowstick_overlay.color = color + add_overlay(glowstick_overlay) item_state = "glowstick-on" set_light(brightness_on) else diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index f17b5adbbdd..73581f9269d 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -493,7 +493,7 @@ /obj/item/projectile/bullet/reusable/lollipop/New() var/obj/item/weapon/reagent_containers/food/snacks/lollipop/S = new ammo_type(src) color2 = S.headcolor - var/image/head = image(icon = 'icons/obj/projectiles.dmi', icon_state = "lollipop_2") + var/mutable_appearance/head = mutable_appearance('icons/obj/projectiles.dmi', "lollipop_2") head.color = color2 add_overlay(head) diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 673c1a56006..2e31e597144 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -73,18 +73,18 @@ if(hp <= 0) visible_message("[src] breaks into tiny pieces and collapses!") qdel(src) - var/image/I = image("icon"='icons/effects/effects.dmi', "icon_state"="scorch", "layer"=OBJ_LAYER+0.5) - I.pixel_x = p_x - 1 //offset correction - I.pixel_y = p_y - 1 + var/image/bullet_hole = image('icons/effects/effects.dmi', "scorch", OBJ_LAYER + 0.5) + bullet_hole.pixel_x = p_x - 1 //offset correction + bullet_hole.pixel_y = p_y - 1 if(decaltype == DECALTYPE_SCORCH) - I.setDir(pick(NORTH,SOUTH,EAST,WEST))// random scorch design + bullet_hole.setDir(pick(NORTH,SOUTH,EAST,WEST))// random scorch design if(P.damage >= 20 || istype(P, /obj/item/projectile/beam/practice)) - I.setDir(pick(NORTH,SOUTH,EAST,WEST)) + bullet_hole.setDir(pick(NORTH,SOUTH,EAST,WEST)) else - I.icon_state = "light_scorch" + bullet_hole.icon_state = "light_scorch" else - I.icon_state = "dent" - add_overlay(I) + bullet_hole.icon_state = "dent" + add_overlay(bullet_hole) return return -1 diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm index 5613891326c..e32d365298a 100644 --- a/code/game/objects/items/weapons/chrono_eraser.dm +++ b/code/game/objects/items/weapons/chrono_eraser.dm @@ -155,7 +155,7 @@ var/mob/living/captured = null var/obj/item/weapon/gun/energy/chrono_gun/gun = null var/tickstokill = 15 - var/image/mob_underlay = null + var/mutable_appearance/mob_underlay var/preloaded = 0 var/RPpos = null @@ -172,7 +172,7 @@ mob_icon.Blend(removing_frame, ICON_MULTIPLY) cached_icon.Insert(mob_icon, "frame[i]") - mob_underlay = new(cached_icon, "frame1") + mob_underlay = mutable_appearance(cached_icon, "frame1") update_icon() desc = initial(desc) + "
It appears to contain [target.name]." diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index d4e19865029..f53c9f66976 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -496,11 +496,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/weapon/lighter/greyscale/update_icon() cut_overlays() - var/image/I = image(icon,"[initial(icon_state)]_base") - I.appearance_flags = RESET_COLOR //the edging doesn't change color + var/mutable_appearance/base_overlay = mutable_appearance(icon,"[initial(icon_state)]_base") + base_overlay.appearance_flags = RESET_COLOR //the edging doesn't change color if(lit) - I.icon_state = "[initial(icon_state)]_on" - add_overlay(I) + base_overlay.icon_state = "[initial(icon_state)]_on" + add_overlay(base_overlay) /obj/item/weapon/lighter/greyscale/ignition_effect(atom/A, mob/user) . = "After some fiddling, [user] manages to light [A] with [src]." @@ -651,9 +651,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM screw = 1 to_chat(user, "You open the cap on the [src]") if(super) - add_overlay(image(icon, "vapeopen_med")) + add_overlay("vapeopen_med") else - add_overlay(image(icon, "vapeopen_low")) + add_overlay("vapeopen_low") else screw = 0 to_chat(user, "You close the cap on the [src]") @@ -665,12 +665,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM cut_overlays() super = 1 to_chat(user, "You increase the voltage in the [src]") - add_overlay(image(icon, "vapeopen_med")) + add_overlay("vapeopen_med") else cut_overlays() super = 0 to_chat(user, "You decrease the voltage in the [src]") - add_overlay(image(icon, "vapeopen_low")) + add_overlay("vapeopen_low") if(screw && emagged) to_chat(user, "The [name] can't be modified!") @@ -683,7 +683,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM emagged = 1 super = 0 to_chat(user, "You maximize the voltage in the [src]") - add_overlay(image(icon, "vapeopen_high")) + add_overlay("vapeopen_high") var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread //for effect sp.set_up(5, 1, src) sp.start() diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 31d700a7b69..fd586c815b7 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -38,10 +38,10 @@ to_chat(user, "You twist \the [src] [open ? "closed" : "open"].") open = !open if(open) - var/image/colored = image("icon"='icons/obj/items.dmi', "icon_state"="lipstick_uncap_color") - colored.color = colour + var/mutable_appearance/colored_overlay = mutable_appearance(icon, "lipstick_uncap_color") + colored_overlay.color = colour icon_state = "lipstick_uncap" - add_overlay(colored) + add_overlay(colored_overlay) else icon_state = "lipstick" diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 65d191927e2..404c40c4b6a 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -16,7 +16,7 @@ /obj/item/weapon/c4/New() wires = new /datum/wires/explosive/c4(src) - image_overlay = image('icons/obj/grenade.dmi', "plastic-explosive2") + plastic_overlay = mutable_appearance(icon, "plastic-explosive2") ..() /obj/item/weapon/c4/Destroy() @@ -92,7 +92,7 @@ message_admins(message,0,1) log_game("[key_name(user)] planted [name] on [target.name] at [COORD(target)] with [timer] second fuse") - target.add_overlay(image_overlay, 1) + target.add_overlay(plastic_overlay, 1) to_chat(user, "You plant the bomb. Timer counting down from [timer].") addtimer(CALLBACK(src, .proc/explode), timer * 10) @@ -103,7 +103,7 @@ if(target) if(!QDELETED(target)) location = get_turf(target) - target.cut_overlay(image_overlay, TRUE) + target.cut_overlay(plastic_overlay, TRUE) else location = get_turf(src) if(location) diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm index d461ae6dcda..9bcbbfe0720 100644 --- a/code/game/objects/items/weapons/grenades/ghettobomb.dm +++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm @@ -19,8 +19,8 @@ /obj/item/weapon/grenade/iedcasing/New(loc) ..() - add_overlay(image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled")) - add_overlay(image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_wired")) + add_overlay("improvised_grenade_filled") + add_overlay("improvised_grenade_wired") times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value] det_time = text2num(pickweight(times)) if(det_time < 0) //checking for 'duds' @@ -33,13 +33,10 @@ ..() var/obj/item/weapon/reagent_containers/food/drinks/soda_cans/can = locate() in contents if(can) - var/muh_layer = can.layer - var/muh_plane = can.plane - can.layer = FLOAT_LAYER - can.plane = FLOAT_PLANE - underlays += can - can.layer = muh_layer - can.plane = muh_plane + var/mutable_appearance/can_underlay = new(can) + can_underlay.layer = FLOAT_LAYER + can_underlay.plane = FLOAT_PLANE + underlays += can_underlay /obj/item/weapon/grenade/iedcasing/attack_self(mob/user) // @@ -47,7 +44,7 @@ if(clown_check(user)) to_chat(user, "You light the [name]!") active = 1 - cut_overlay(image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled"), TRUE) //this line make no sense + cut_overlay("improvised_grenade_filled") icon_state = initial(icon_state) + "_active" add_fingerprint(user) var/turf/bombturf = get_turf(src) diff --git a/code/game/objects/items/weapons/grenades/plastic.dm b/code/game/objects/items/weapons/grenades/plastic.dm index 477a50330ed..aedf0954c2a 100644 --- a/code/game/objects/items/weapons/grenades/plastic.dm +++ b/code/game/objects/items/weapons/grenades/plastic.dm @@ -7,7 +7,7 @@ det_time = 10 display_timer = 0 var/atom/target = null - var/image_overlay = null + var/mutable_appearance/plastic_overlay var/obj/item/device/assembly_holder/nadeassembly = null var/assemblyattacher var/directional = FALSE @@ -15,7 +15,7 @@ var/boom_sizes = list(0, 0, 3) /obj/item/weapon/grenade/plastic/New() - image_overlay = image('icons/obj/grenade.dmi', "[item_state]2") + plastic_overlay = mutable_appearance(icon, "[item_state]2") ..() /obj/item/weapon/grenade/plastic/Destroy() @@ -50,7 +50,7 @@ if(target) if(!QDELETED(target)) location = get_turf(target) - target.cut_overlay(image_overlay, TRUE) + target.cut_overlay(plastic_overlay, TRUE) else location = get_turf(src) if(location) @@ -111,7 +111,7 @@ message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [det_time] second fuse",0,1) log_game("[key_name(user)] planted [name] on [target.name] at [COORD(src)] with [det_time] second fuse") - target.add_overlay(image_overlay, 1) + target.add_overlay(plastic_overlay, 1) if(!nadeassembly) to_chat(user, "You plant the bomb. Timer counting down from [det_time].") addtimer(CALLBACK(src, .proc/prime), det_time*10) diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index d42e135aebf..571aece4c3d 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -71,7 +71,7 @@ /obj/item/weapon/nullrod/staff/worn_overlays(isinhands) . = list() if(isinhands) - . += image(layer = MOB_LAYER+0.01, icon = 'icons/effects/effects.dmi', icon_state = "[shield_icon]") + . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_LAYER + 0.01) /obj/item/weapon/nullrod/staff/blue name = "blue holy staff" diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index c053b6ed470..61e68934b92 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -162,5 +162,5 @@ src.cut_overlays() if(!tank) return - src.add_overlay(image('icons/obj/pneumaticCannon.dmi', "[tank.icon_state]")) + add_overlay(tank.icon_state) src.update_icon() diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index ddf6dc1c172..266fe875792 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -334,14 +334,14 @@ /obj/item/weapon/storage/bag/tray/proc/rebuild_overlays() cut_overlays() for(var/obj/item/I in contents) - add_overlay(image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = -1)) + add_overlay(mutable_appearance(I.icon, I.icon_state)) /obj/item/weapon/storage/bag/tray/remove_from_storage(obj/item/W as obj, atom/new_location) ..() rebuild_overlays() /obj/item/weapon/storage/bag/tray/handle_item_insertion(obj/item/I, prevent_warning = 0) - add_overlay(image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = -1)) + add_overlay(mutable_appearance(I.icon, I.icon_state)) . = ..() diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 91810c5a13b..5c53db06cf2 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -38,7 +38,7 @@ . = ..() if(illustration) cut_overlays() - add_overlay(image('icons/obj/storage.dmi', "[illustration]")) + add_overlay(illustration) /obj/item/weapon/storage/box/attack_self(mob/user) ..() diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index e3975843c8f..14938b92262 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -141,12 +141,15 @@ add_overlay("[icon_state]_open") var/i = contents.len for(var/C in contents) + var/mutable_appearance/inserted_overlay = mutable_appearance(icon) + inserted_overlay.pixel_x = 1 * (i - 1) if(istype(C, /obj/item/weapon/lighter/greyscale)) - add_overlay(image(icon = src.icon, icon_state = "lighter_in", pixel_x = 1 * (i -1))) + inserted_overlay.icon_state = "lighter_in" else if(istype(C, /obj/item/weapon/lighter)) - add_overlay(image(icon = src.icon, icon_state = "zippo_in", pixel_x = 1 * (i -1))) + inserted_overlay.icon_state = "zippo_in" else - add_overlay(image(icon = src.icon, icon_state = "cigarette", pixel_x = 1 * (i -1))) + inserted_overlay.icon_state = "cigarette" + add_overlay(inserted_overlay) i-- else cut_overlays() @@ -247,13 +250,14 @@ spawn_type = /obj/item/clothing/mask/cigarette/cigar /obj/item/weapon/storage/fancy/cigarettes/cigars/update_icon() + cut_overlays() if(fancy_open) - cut_overlays() add_overlay("[icon_state]_open") + var/mutable_appearance/cigar_overlay = mutable_appearance(icon, icon_type) for(var/c = contents.len, c >= 1, c--) - add_overlay(image(icon = src.icon, icon_state = icon_type, pixel_x = 4 * (c -1))) + cigar_overlay.pixel_x = 4 * (c - 1) + add_overlay(cigar_overlay) else - cut_overlays() icon_state = "cigarcase" /obj/item/weapon/storage/fancy/cigarettes/cigars/cohiba diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 68c7c74363f..e455a0277c1 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -94,7 +94,7 @@ else if ((src.code == src.l_code) && (src.l_set == 1)) src.locked = 0 cut_overlays() - add_overlay(image('icons/obj/storage.dmi', icon_opened)) + add_overlay(icon_opened) src.code = null else src.code = "ERROR" diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 66cb97d3a56..94b0709ae20 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -29,7 +29,7 @@ ..() cut_overlays() if(has_latches) - add_overlay(image('icons/obj/storage.dmi', "[latches]")) + add_overlay(latches) /obj/item/weapon/storage/toolbox/suicide_act(mob/user) diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index ecca6aabfcd..265e6bb2e5d 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -370,7 +370,7 @@ cut_overlays() if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi',icon_state = "backpack-10") + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "backpack-10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) @@ -388,7 +388,7 @@ . = list() //inhands + reagent_filling if(!isinhands && reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi',icon_state = "backpackmob-10") + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "backpackmob-10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 45f082f72c5..702e72842f6 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -148,7 +148,7 @@ ///// ACID -GLOBAL_DATUM_INIT(acid_overlay, /image, image("icon" = 'icons/effects/effects.dmi', "icon_state" = "acid")) +GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/effects/effects.dmi', "acid")) //the obj's reaction when touched by acid /obj/acid_act(acidpwr, acid_volume) diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm index f79e06e92d5..ce3d0882ce6 100644 --- a/code/game/objects/structures/beds_chairs/alien_nest.dm +++ b/code/game/objects/structures/beds_chairs/alien_nest.dm @@ -12,11 +12,7 @@ canSmoothWith = null buildstacktype = null flags = NODECONSTRUCT - var/image/nest_overlay - -/obj/structure/bed/nest/New() - nest_overlay = image('icons/mob/alien.dmi', "nestoverlay", layer=LYING_MOB_LAYER) - return ..() + var/static/mutable_appearance/nest_overlay = mutable_appearance('icons/mob/alien.dmi', "nestoverlay", LYING_MOB_LAYER) /obj/structure/bed/nest/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user) if(has_buckled_mobs()) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index fdded787bd6..87560f426fd 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -145,11 +145,11 @@ obj_integrity = 70 max_integrity = 70 buildstackamount = 2 - var/image/armrest = null + var/mutable_appearance/armrest item_chair = null /obj/structure/chair/comfy/Initialize() - armrest = image("icons/obj/chairs.dmi", "comfychair_armrest") + armrest = mutable_appearance('icons/obj/chairs.dmi', "comfychair_armrest") armrest.layer = ABOVE_MOB_LAYER return ..() diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index 929cfaee993..6d3f4197607 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -8,7 +8,7 @@ /obj/structure/chair/e_chair/New() ..() - add_overlay(image('icons/obj/chairs.dmi', src, "echair_over", MOB_LAYER + 1)) + add_overlay(mutable_appearance('icons/obj/chairs.dmi', "echair_over", MOB_LAYER + 1)) /obj/structure/chair/e_chair/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench)) diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index 077e4056161..be8c336c066 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -7,7 +7,7 @@ anchored = 0 density = 1 opacity = 0 - var/case_type = null + var/case_type = "" var/gun_category = /obj/item/weapon/gun var/open = 1 var/capacity = 4 @@ -25,8 +25,10 @@ /obj/structure/guncase/update_icon() cut_overlays() if(case_type && LAZYLEN(contents)) + var/mutable_appearance/gun_overlay = mutable_appearance(icon, case_type) for(var/i in 1 to contents.len) - add_overlay(image(icon = src.icon, icon_state = "[case_type]", pixel_x = 3 * (i - 1) )) + gun_overlay.pixel_x = 3 * (i - 1) + add_overlay(gun_overlay) if(open) add_overlay("[icon_state]_open") else diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index eae2041a315..730b9e057c4 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -143,21 +143,21 @@ /obj/structure/transit_tube/proc/create_tube_overlay(direction, shift_dir) - var/image/I + var/image/tube_overlay = new(dir = direction) if(shift_dir) - I = image(loc = src, icon_state = "decorative_diag", dir = direction) + tube_overlay.icon_state = "decorative_diag" switch(shift_dir) if(NORTH) - I.pixel_y = 32 + tube_overlay.pixel_y = 32 if(SOUTH) - I.pixel_y = -32 + tube_overlay.pixel_y = -32 if(EAST) - I.pixel_x = 32 + tube_overlay.pixel_x = 32 if(WEST) - I.pixel_x = -32 + tube_overlay.pixel_x = -32 else - I = image(loc = src, icon_state = "decorative", dir = direction) - add_overlay(I) + tube_overlay.icon_state = "decorative" + add_overlay(tube_overlay) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 56a8d0410c0..3db570db83d 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -239,7 +239,7 @@ qdel(mymist) if(on) - add_overlay(image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir)) + add_overlay(mutable_appearance('icons/obj/watercloset.dmi', "water", MOB_LAYER + 1)) if(watertemp == "freezing") return if(!ismist) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index c6c2ef358bc..e1336d1d245 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -18,7 +18,7 @@ var/fulltile = 0 var/glass_type = /obj/item/stack/sheet/glass var/glass_amount = 1 - var/image/crack_overlay + var/static/mutable_appearance/crack_overlay = mutable_appearance('icons/obj/structures.dmi') var/list/debris = list() can_be_unanchored = 1 resistance_flags = ACID_PROOF @@ -361,10 +361,10 @@ if(smooth) queue_smooth(src) - cut_overlay(crack_overlay) + cut_overlays() if(ratio > 75) return - crack_overlay = image('icons/obj/structures.dmi',"damage[ratio]",-(layer+0.1)) + crack_overlay.icon_state = "damage[ratio]" add_overlay(crack_overlay) /obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index f8cb0d1be3b..741d4f29587 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -71,10 +71,8 @@ /turf/closed/indestructible/fakeglass/Initialize() ..() icon_state = null //set the icon state to null, so our base state isn't visible - var/image/I = image('icons/obj/structures.dmi', loc = src, icon_state = "grille") - underlays += I //add a grille underlay - I = image('icons/turf/floors.dmi', loc = src, icon_state = "plating") - underlays += I //add the plating underlay, below the grille + underlays += mutable_appearance('icons/obj/structures.dmi', "grille") //add a grille underlay + underlays += mutable_appearance('icons/turf/floors.dmi', "plating") //add the plating underlay, below the grille /turf/closed/indestructible/fakedoor name = "Centcom Access" diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index ee5527c0f59..7183d33ef9d 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -3,7 +3,7 @@ var/wet = 0 var/wet_time = 0 // Time in seconds that this floor will be wet for. - var/image/wet_overlay = null + var/mutable_appearance/wet_overlay /turf/open/indestructible name = "floor" @@ -183,17 +183,22 @@ if(wet_setting != TURF_DRY) if(wet_overlay) cut_overlay(wet_overlay) - wet_overlay = null + else + wet_overlay = mutable_appearance() var/turf/open/floor/F = src if(istype(F)) if(wet_setting == TURF_WET_PERMAFROST) - wet_overlay = image('icons/effects/water.dmi', src, "ice_floor") + wet_overlay.icon = 'icons/effects/water.dmi' + wet_overlay.icon_state = "ice_floor" else if(wet_setting == TURF_WET_ICE) - wet_overlay = image('icons/turf/overlays.dmi', src, "snowfloor") + wet_overlay.icon = 'icons/turf/overlays.dmi' + wet_overlay.icon_state = "snowfloor" else - wet_overlay = image('icons/effects/water.dmi', src, "wet_floor_static") + wet_overlay.icon = 'icons/effects/water.dmi' + wet_overlay.icon_state = "wet_floor_static" else - wet_overlay = image('icons/effects/water.dmi', src, "wet_static") + wet_overlay.icon = 'icons/effects/water.dmi' + wet_overlay.icon_state = "wet_static" add_overlay(wet_overlay) HandleWet() diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index d418c0a48a5..5805d75e565 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -21,7 +21,7 @@ var/spread = 0 //will the seam spread? var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles var/last_act = 0 - var/scan_state = null //Holder for the image we display when we're pinged by a mining scanner + var/scan_state = "" //Holder for the image we display when we're pinged by a mining scanner var/defer_change = 0 /turf/closed/mineral/Initialize() @@ -380,7 +380,7 @@ var/stage = 0 //How far into the lifecycle of gibtonite we are, 0 is untouched, 1 is active and attempting to detonate, 2 is benign and ready for extraction var/activated_ckey = null //These are to track who triggered the gibtonite deposit for logging purposes var/activated_name = null - var/activated_image = null + var/mutable_appearance/activated_overlay /turf/closed/mineral/gibtonite/Initialize() det_time = rand(8,10) //So you don't know exactly when the hot potato will explode @@ -394,9 +394,8 @@ /turf/closed/mineral/gibtonite/proc/explosive_reaction(mob/user = null, triggered_by_explosion = 0) if(stage == 0) - var/image/I = image('icons/turf/smoothrocks.dmi', loc = src, icon_state = "rock_Gibtonite_active", layer = ON_EDGED_TURF_LAYER) - add_overlay(I) - activated_image = I + activated_overlay = mutable_appearance('icons/turf/smoothrocks.dmi', "rock_Gibtonite_active", ON_EDGED_TURF_LAYER) + add_overlay(activated_overlay) name = "gibtonite deposit" desc = "An active gibtonite reserve. Run!" stage = 1 @@ -433,9 +432,9 @@ /turf/closed/mineral/gibtonite/proc/defuse() if(stage == 1) - cut_overlay(activated_image) - var/image/I = image('icons/turf/smoothrocks.dmi', loc = src, icon_state = "rock_Gibtonite_inactive", layer = ON_EDGED_TURF_LAYER) - add_overlay(I) + cut_overlay(activated_overlay) + activated_overlay.icon_state = "rock_Gibtonite_inactive" + add_overlay(activated_overlay) desc = "An inactive gibtonite reserve. The ore can be extracted." stage = 2 if(det_time < 0) diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index f79a80f220e..2285466b3d3 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -17,18 +17,18 @@ if(src.client.handle_spam_prevention(msg,MUTE_PRAY)) return - var/image/cross = image('icons/obj/storage.dmi',"bible") + var/mutable_appearance/cross = mutable_appearance('icons/obj/storage.dmi', "bible") var/font_color = "purple" var/prayer_type = "PRAYER" var/deity if(usr.job == "Chaplain") - cross = image('icons/obj/storage.dmi',"kingyellow") + cross.icon_state = "kingyellow" font_color = "blue" prayer_type = "CHAPLAIN PRAYER" if(SSreligion.deity) deity = SSreligion.deity else if(iscultist(usr)) - cross = image('icons/obj/storage.dmi',"tome") + cross.icon_state = "tome" font_color = "red" prayer_type = "CULTIST PRAYER" deity = "Nar-Sie" diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index f2e6b451200..4615629f1a9 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -44,14 +44,11 @@ add_overlay("[O]_l") if(a_right) - var/list/images = list() - images += image(icon, icon_state = "[a_right.icon_state]_left") + var/mutable_appearance/right = mutable_appearance(icon, "[a_right.icon_state]_left") + right.transform = matrix(-1, 0, 0, 0, 1, 0) for(var/O in a_right.attached_overlays) - images += image(icon, icon_state = "[O]_l") - var/matrix = matrix(-1, 0, 0, 0, 1, 0) - for(var/image/I in images) - I.transform = matrix - add_overlay(I) + right.add_overlay("[O]_l") + add_overlay(right) if(master) master.update_icon() diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index c003c1b1021..a4c0641be09 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -201,17 +201,10 @@ Pipelines + Other Objects -> Pipe network //Generate a unique identifier for this image combination var/identifier = iconsetids[iconset] + "_[iconstate]_[direction]_[col]" - var/image/img - if(pipeimages[identifier] == null) - img = image(iconset, icon_state=iconstate, dir=direction) - img.color = col - - pipeimages[identifier] = img - - else - img = pipeimages[identifier] - - return img + if((!(. = pipeimages[identifier]))) + var/image/pipe_overlay + pipe_overlay = . = pipeimages[identifier] = image(iconset, iconstate, dir = direction) + pipe_overlay.color = col /obj/machinery/atmospherics/on_construction(pipe_type, obj_color) if(can_unwrench) diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm index 8b55ce14fc5..d12204d8ad3 100644 --- a/code/modules/atmospherics/machinery/other/miner.dm +++ b/code/modules/atmospherics/machinery/other/miner.dm @@ -98,12 +98,11 @@ /obj/machinery/atmospherics/miner/update_icon() overlays.Cut() if(broken) - var/image/A = image(icon, "broken") - add_overlay(A) + add_overlay("broken") else if(active) - var/image/A = image(icon, "on") - A.color = overlay_color - add_overlay(A) + var/mutable_appearance/on_overlay = mutable_appearance(icon, "on") + on_overlay.color = overlay_color + add_overlay(on_overlay) /obj/machinery/atmospherics/miner/process() update_power() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 9a21f3c4a4e..7db86ee3594 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -251,9 +251,9 @@ BLIND // can't see anything . = list() if(!isinhands) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedgloves") + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands") + . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands") /obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE) ..() @@ -279,9 +279,9 @@ BLIND // can't see anything . = list() if(!isinhands) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedhelmet") + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood") + . += mutable_appearance('icons/effects/blood.dmi', "helmetblood") /obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE) ..() @@ -304,9 +304,9 @@ BLIND // can't see anything if(!isinhands) if(body_parts_covered & HEAD) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedmask") + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") + . += mutable_appearance('icons/effects/blood.dmi', "maskblood") //Mask @@ -326,9 +326,9 @@ BLIND // can't see anything if(!isinhands) if(body_parts_covered & HEAD) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedmask") + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") + . += mutable_appearance('icons/effects/blood.dmi', "maskblood") /obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE) ..() @@ -400,9 +400,9 @@ BLIND // can't see anything bloody = bloody_shoes[BLOOD_STATE_HUMAN] if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedshoe") + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe") if(bloody) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood") + . += mutable_appearance('icons/effects/blood.dmi', "shoeblood") /obj/item/clothing/shoes/equipped(mob/user, slot) . = ..() @@ -455,9 +455,9 @@ BLIND // can't see anything . = list() if(!isinhands) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damaged[blood_overlay_type]") + . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="[blood_overlay_type]blood") + . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") /obj/item/clothing/suit/update_clothes_damaged_state(damaging = TRUE) ..() @@ -534,17 +534,17 @@ BLIND // can't see anything if(!isinhands) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damageduniform") + . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="uniformblood") + . += mutable_appearance('icons/effects/blood.dmi', "uniformblood") if(hastie) var/tie_color = hastie.item_color if(!tie_color) tie_color = hastie.icon_state - var/image/tI = image("icon"='icons/mob/ties.dmi', "icon_state"="[tie_color]") - tI.alpha = hastie.alpha - tI.color = hastie.color - . += tI + var/mutable_appearance/tie = mutable_appearance('icons/mob/ties.dmi', "[tie_color]") + tie.alpha = hastie.alpha + tie.color = hastie.color + . += tie /obj/item/clothing/under/update_clothes_damaged_state(damaging = TRUE) ..() diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 15e4d3f885a..10924c233ae 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -30,7 +30,6 @@ var/list/hands_nodrop = list() var/obj/item/clothing/head/helmet/space/chronos/helmet = null var/obj/effect/chronos_cam/camera = null - var/image/phase_underlay = null var/datum/action/innate/chrono_teleport/teleport_now = new var/activating = 0 var/activated = 0 @@ -97,10 +96,6 @@ for(var/obj/item/I in user.held_items) if(I in hands_nodrop) I.flags &= ~NODROP - if(phase_underlay && !QDELETED(phase_underlay)) - user.underlays -= phase_underlay - qdel(phase_underlay) - phase_underlay = null if(camera) camera.remove_target_ui() camera.loc = user @@ -133,8 +128,6 @@ user.ExtinguishMob() - phase_underlay = create_phase_underlay(user) - hands_nodrop = list() for(var/obj/item/I in user.held_items) if(!(I.flags & NODROP)) @@ -171,15 +164,6 @@ else finish_chronowalk(user, to_turf) - -/obj/item/clothing/suit/space/chronos/proc/create_phase_underlay(var/mob/user) - var/icon/user_icon = icon('icons/effects/alphacolors.dmi', "") - user_icon.AddAlphaMask(getFlatIcon(user)) - var/image/phase = new(user_icon) - phase.appearance_flags = RESET_COLOR|RESET_ALPHA - user.underlays += phase - return phase - /obj/item/clothing/suit/space/chronos/process() if(activated) var/mob/living/carbon/human/user = src.loc diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index d8a0c97f51c..0c3d20892fd 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -597,9 +597,9 @@ C.update_inv_wear_suit() /obj/item/clothing/suit/space/hardsuit/shielded/worn_overlays(isinhands) - . = list() - if(!isinhands) - . += image(layer = MOB_LAYER+0.01, icon = 'icons/effects/effects.dmi', icon_state = "[shield_state]") + . = list() + if(!isinhands) + . += mutable_appearance('icons/effects/effects.dmi', shield_state, MOB_LAYER + 0.01) /obj/item/clothing/head/helmet/space/hardsuit/shielded resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index b55cb58f41d..45606035a42 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -178,7 +178,7 @@ if(istype(borghead, /obj/item/clothing/head/cardborg)) //why is this done this way? because equipped() is called BEFORE THE ITEM IS IN THE SLOT WHYYYY var/image/I = image(icon = 'icons/mob/robots.dmi' , icon_state = "robot", loc = H) I.override = 1 - I.add_overlay(image(icon = 'icons/mob/robots.dmi' , icon_state = "robot_e")) //gotta look realistic + I.add_overlay(mutable_appearance('icons/mob/robots.dmi', "robot_e")) //gotta look realistic add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "standard_borg_disguise", I) //you look like a robot to robots! (including yourself because you're totally a robot) diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index 94e22b8b22a..dbfc2caee29 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -47,15 +47,12 @@ icon_state = "evidence" - var/xx = I.pixel_x //save the offset of the item - var/yy = I.pixel_y - I.pixel_x = 0 //then remove it so it'll stay within the evidence bag - I.pixel_y = 0 - var/image/img = image("icon"=I, "layer"=FLOAT_LAYER) //take a snapshot. (necessary to stop the underlays appearing under our inventory-HUD slots ~Carn - img.plane = FLOAT_PLANE - I.pixel_x = xx //and then return it - I.pixel_y = yy - add_overlay(img) + var/mutable_appearance/in_evidence = new(I) + in_evidence.plane = FLOAT_PLANE + in_evidence.layer = FLOAT_LAYER + in_evidence.pixel_x = 0 + in_evidence.pixel_y = 0 + add_overlay(in_evidence) add_overlay("evidence") //should look nicer for transparent stuff. not really that important, but hey. desc = "An evidence bag containing [I]. [I.desc]" diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 8f95552a4b9..888b87cc026 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -34,10 +34,10 @@ var/list/hostile_types = list() var/number_of_hostiles var/list/station_areas = list() - var/image/storm + var/mutable_appearance/storm /datum/round_event/portal_storm/setup() - storm = image('icons/obj/tesla_engine/energy_ball.dmi', "energy_ball_fast", layer=FLY_LAYER) + storm = storm = mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "energy_ball_fast", FLY_LAYER) storm.color = "#00FF00" station_areas = get_areas_in_z(ZLEVEL_STATION) diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index 7e2deff368b..1e2710afb69 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -22,9 +22,9 @@ if(R.glass_icon_state) icon_state = R.glass_icon_state else - var/image/I = image(icon, "glassoverlay") - I.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(I) + var/mutable_appearance/reagent_overlay = mutable_appearance(icon, "glassoverlay") + reagent_overlay.color = mix_color_from_reagents(reagents.reagent_list) + add_overlay(reagent_overlay) else icon_state = "glass_empty" name = "drinking glass" @@ -64,9 +64,9 @@ icon_state = largest_reagent.shot_glass_icon_state else icon_state = "shotglassclear" - var/image/I = image(icon, "shotglassoverlay") - I.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(I) + var/mutable_appearance/shot_overlay = mutable_appearance(icon, "shotglassoverlay") + shot_overlay.color = mix_color_from_reagents(reagents.reagent_list) + add_overlay(shot_overlay) else diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 705319f7c3a..3a6c2d91f66 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -101,37 +101,36 @@ filling_color = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3], rgbcolor[4]) /obj/item/weapon/reagent_containers/food/snacks/customizable/update_overlays(obj/item/weapon/reagent_containers/food/snacks/S) - var/image/I = new(icon, "[initial(icon_state)]_filling") + var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling") if(S.filling_color == "#FFFFFF") - I.color = pick("#FF0000","#0000FF","#008000","#FFFF00") + filling.color = pick("#FF0000","#0000FF","#008000","#FFFF00") else - I.color = S.filling_color + filling.color = S.filling_color switch(ingredients_placement) if(INGREDIENTS_SCATTER) - I.pixel_x = rand(-1,1) - I.pixel_y = rand(-1,1) + filling.pixel_x = rand(-1,1) + filling.pixel_y = rand(-1,1) if(INGREDIENTS_STACK) - I.pixel_x = rand(-1,1) - I.pixel_y = 2 * ingredients.len - 1 + filling.pixel_x = rand(-1,1) + filling.pixel_y = 2 * ingredients.len - 1 if(INGREDIENTS_STACKPLUSTOP) - I.pixel_x = rand(-1,1) - I.pixel_y = 2 * ingredients.len - 1 + filling.pixel_x = rand(-1,1) + filling.pixel_y = 2 * ingredients.len - 1 if(our_overlays) our_overlays.Cut(ingredients.len) //???, add overlay calls later in this proc will queue the compile if necessary - var/image/TOP = new(icon, "[icon_state]_top") + var/mutable_appearance/TOP = mutable_appearance(icon, "[icon_state]_top") TOP.pixel_y = 2 * ingredients.len + 3 - add_overlay(I) + add_overlay(filling) add_overlay(TOP) return if(INGREDIENTS_FILL) cut_overlays() - I.color = filling_color + filling.color = filling_color if(INGREDIENTS_LINE) - I.pixel_y = rand(-8,3) - I.pixel_x = I.pixel_y + filling.pixel_x = filling.pixel_y = rand(-8,3) - add_overlay(I) + add_overlay(filling) /obj/item/weapon/reagent_containers/food/snacks/customizable/initialize_slice(obj/item/weapon/reagent_containers/food/snacks/slice, reagents_per_slice) @@ -248,14 +247,14 @@ name = "[customname] sandwich" BS.reagents.trans_to(src, BS.reagents.total_volume) ingMax = ingredients.len //can't add more ingredients after that - var/image/TOP = new(icon, "[BS.icon_state]") + var/mutable_appearance/TOP = mutable_appearance(icon, "[BS.icon_state]") TOP.pixel_y = 2 * ingredients.len + 3 add_overlay(TOP) if(istype(BS, /obj/item/weapon/reagent_containers/food/snacks/breadslice/custom)) - var/image/O = new(icon, "[initial(BS.icon_state)]_filling") - O.color = BS.filling_color - O.pixel_y = 2 * ingredients.len + 3 - add_overlay(O) + var/mutable_appearance/filling = new(icon, "[initial(BS.icon_state)]_filling") + filling.color = BS.filling_color + filling.pixel_y = 2 * ingredients.len + 3 + add_overlay(filling) qdel(BS) return else @@ -313,7 +312,7 @@ /obj/item/weapon/reagent_containers/glass/bowl/update_icon() cut_overlays() if(reagents && reagents.total_volume) - var/image/filling = image('icons/obj/food/soupsalad.dmi', "fullbowl") + var/mutable_appearance/filling = mutable_appearance('icons/obj/food/soupsalad.dmi', "fullbowl") filling.color = mix_color_from_reagents(reagents.reagent_list) add_overlay(filling) else diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 96b88269718..d50c80567a5 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -234,13 +234,13 @@ /obj/item/weapon/reagent_containers/food/snacks/proc/update_overlays(obj/item/weapon/reagent_containers/food/snacks/S) cut_overlays() - var/image/I = new(src.icon, "[initial(icon_state)]_filling") + var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling") if(S.filling_color == "#FFFFFF") - I.color = pick("#FF0000","#0000FF","#008000","#FFFF00") + filling.color = pick("#FF0000","#0000FF","#008000","#FFFF00") else - I.color = S.filling_color + filling.color = S.filling_color - add_overlay(I) + add_overlay(filling) // initialize_cooked_food() is called when microwaving the food /obj/item/weapon/reagent_containers/food/snacks/proc/initialize_cooked_food(obj/item/weapon/reagent_containers/food/snacks/S, cooking_efficiency = 1) diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm index 625a0bfd560..c1b5a55ac06 100644 --- a/code/modules/food_and_drinks/food/snacks/meat.dm +++ b/code/modules/food_and_drinks/food/snacks/meat.dm @@ -17,9 +17,9 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/slab/initialize_slice(obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/slice, reagents_per_slice) ..() - var/image/I = new(icon, "rawcutlet_coloration") - I.color = filling_color - slice.add_overlay(I) + var/mutable_appearance/filling = mutable_appearance(icon, "rawcutlet_coloration") + filling.color = filling_color + slice.add_overlay(filling) slice.filling_color = filling_color slice.name = "raw [name] cutlet" slice.meat_type = name diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index 4a9001c68f6..6ec7fd9a1e7 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -383,13 +383,13 @@ icon = 'icons/obj/lollipop.dmi' icon_state = "lollipop_stick" list_reagents = list("nutriment" = 1, "vitamin" = 1, "iron" = 10, "sugar" = 5, "omnizine" = 2) //Honk - var/image/head + var/mutable_appearance/head var/headcolor = rgb(0, 0, 0) tastes = list("candy" = 1) /obj/item/weapon/reagent_containers/food/snacks/lollipop/New() ..() - head = image(icon = 'icons/obj/lollipop.dmi', icon_state = "lollipop_head") + head = mutable_appearance('icons/obj/lollipop.dmi', "lollipop_head") change_head_color(rgb(rand(0, 255), rand(0, 255), rand(0, 255))) /obj/item/weapon/reagent_containers/food/snacks/lollipop/proc/change_head_color(C) diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 68ccce9f2f4..27016d0c20c 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -33,7 +33,7 @@ if(ishuman(hit_atom)) var/mob/living/carbon/human/H = hit_atom - var/image/creamoverlay = image('icons/effects/creampie.dmi') + var/mutable_appearance/creamoverlay = mutable_appearance('icons/effects/creampie.dmi') if(H.dna.species.id == "lizard") creamoverlay.icon_state = "creampie_lizard" else diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 13442c40320..a4d9a32d3d2 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -47,7 +47,7 @@ /obj/machinery/gibber/New() ..() - src.add_overlay(image('icons/obj/kitchen.dmi', "grjam")) + add_overlay("grjam") var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/gibber(null) B.apply_default_parts(src) @@ -72,15 +72,15 @@ /obj/machinery/gibber/update_icon() cut_overlays() if (dirty) - src.add_overlay(image('icons/obj/kitchen.dmi', "grbloody")) + add_overlay("grbloody") if(stat & (NOPOWER|BROKEN)) return if (!occupant) - src.add_overlay(image('icons/obj/kitchen.dmi', "grjam")) + add_overlay("grjam") else if (operating) - src.add_overlay(image('icons/obj/kitchen.dmi', "gruse")) + add_overlay("gruse") else - src.add_overlay(image('icons/obj/kitchen.dmi', "gridle")) + add_overlay("gridle") /obj/machinery/gibber/attack_paw(mob/user) return src.attack_hand(user) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index c84b381ac5b..a10bf27a0ef 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -59,21 +59,20 @@ icon_state = "pizzabox_open" if(pizza) icon_state = "pizzabox_messy" - var/image/pizzaimg = image(pizza.icon, icon_state = pizza.icon_state) - pizzaimg.pixel_y = -3 - add_overlay(pizzaimg) + var/mutable_appearance/pizza_overlay = mutable_appearance(pizza.icon, pizza.icon_state) + pizza_overlay.pixel_y = -3 + add_overlay(pizza_overlay) if(bomb) bomb.icon_state = "pizzabomb_[bomb_active ? "active" : "inactive"]" - var/image/bombimg = image(bomb.icon, icon_state = bomb.icon_state) - bombimg.pixel_y = 5 - add_overlay(bombimg) - else + var/mutable_appearance/bomb_overlay = mutable_appearance(bomb.icon, bomb.icon_state) + bomb_overlay.pixel_y = 5 + add_overlay(bomb_overlay) icon_state = "pizzabox[boxes.len + 1]" var/obj/item/pizzabox/box = boxes.len ? boxes[boxes.len] : src if(box.boxtag != "") - var/image/tagimg = image(icon, icon_state = "pizzabox_tag") - tagimg.pixel_y = boxes.len * 3 - add_overlay(tagimg) + var/mutable_appearance/tag_overlay = mutable_appearance(icon, "pizzabox_tag") + tag_overlay.pixel_y = boxes.len * 3 + add_overlay(tag_overlay) /obj/item/pizzabox/attack_self(mob/user) if(boxes.len > 0) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index ebc9f84ae90..4e6f4c734e5 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -234,31 +234,30 @@ if (cards.len == 1) var/datum/playingcard/P = cards[1] - var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) + var/mutable_appearance/card_overlay = mutable_appearance(icon, (concealed ? "card_back" : "[P.card_icon]") ) - I.pixel_x = I.pixel_x + (-5 + rand(10)) - I.pixel_y = I.pixel_y + (-5 + rand(10)) + card_overlay.pixel_x = card_overlay.pixel_x + (-5 + rand(10)) + card_overlay.pixel_y = card_overlay.pixel_y + (-5 + rand(10)) - add_overlay(I) + add_overlay(card_overlay) else - var/origin = -12 - var/offset = round(32 / cards.len) + var/origin = -12 + var/offset = round(32 / cards.len) - var/i = 0 - var/image/I + var/i = 0 + var/mutable_appearance/card_overlay for(var/datum/playingcard/P in cards) - I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) - I.pixel_x = origin + (offset * i) + card_overlay = mutable_appearance(icon, (concealed ? "card_back" : P.card_icon)) + card_overlay.pixel_x = origin + (offset * i) - add_overlay(I) + add_overlay(card_overlay) + i = i + 1 - i = i + 1 - - var/html = "" + var/html = "" for(var/datum/playingcard/card in cards) - html = html + "" + html = html + "" src.hi.updateContent("hand", html) diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 067162be8ca..d418b40b811 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -73,8 +73,8 @@ /obj/item/weapon/storage/bag/easterbasket/proc/countEggs() cut_overlays() - add_overlay(image("icon" = icon, "icon_state" = "basket-grass", "layer" = -1)) - add_overlay(image("icon" = icon, "icon_state" = "basket-egg[contents.len <= 5 ? contents.len : 5]", "layer" = -1)) + add_overlay("basket-grass") + add_overlay("basket-egg[min(contents.len, 5)]") /obj/item/weapon/storage/bag/easterbasket/remove_from_storage(obj/item/W as obj, atom/new_location) ..() diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm index 442dd84aaf5..85d623d1e98 100644 --- a/code/modules/hydroponics/beekeeping/honeycomb.dm +++ b/code/modules/hydroponics/beekeeping/honeycomb.dm @@ -21,13 +21,11 @@ /obj/item/weapon/reagent_containers/honeycomb/update_icon() cut_overlays() - var/image/honey + var/mutable_appearance/honey_overlay = mutable_appearance(icon, "honey") if(honey_color) - honey = image(icon = 'icons/obj/hydroponics/harvest.dmi', icon_state = "greyscale_honey") - honey.color = honey_color - else - honey = image(icon = 'icons/obj/hydroponics/harvest.dmi', icon_state = "honey") - add_overlay(honey) + honey_overlay.icon_state = "greyscale_honey" + honey_overlay.color = honey_color + add_overlay(honey_overlay) /obj/item/weapon/reagent_containers/honeycomb/proc/set_reagent(reagent) diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 2c995695d14..6a1c877b97f 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -116,8 +116,9 @@ can_buckle = 1 buckle_requires_restraints = 1 to_chat(user, "You add a rod to [src].") - var/image/U = image(icon='icons/obj/hydroponics/equipment.dmi',icon_state="bonfire_rod",pixel_y=16) - underlays += U + var/mutable_appearance/rod_underlay = mutable_appearance('icons/obj/hydroponics/equipment.dmi', "bonfire_rod") + rod_underlay.pixel_y = 16 + underlays += rod_underlay if(W.is_hot()) StartBurning() diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 8e3b2e705a3..22384aa8039 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -259,7 +259,7 @@ if(istype(src, /obj/machinery/hydroponics/soil)) add_atom_colour(rgb(255, 175, 0), FIXED_COLOUR_PRIORITY) else - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "gaia_blessing")) + overlays += mutable_appearance('icons/obj/hydroponics/equipment.dmi', "gaia_blessing") set_light(3) update_icon_hoses() @@ -287,31 +287,30 @@ icon_state = "hoses-[n]" /obj/machinery/hydroponics/proc/update_icon_plant() - var/image/I + var/mutable_appearance/plant_overlay = mutable_appearance(myseed.growing_icon, layer = OBJ_LAYER + 0.01) if(dead) - I = image(icon = myseed.growing_icon, icon_state = myseed.icon_dead) + plant_overlay.icon_state = myseed.icon_dead else if(harvest) if(!myseed.icon_harvest) - I = image(icon = myseed.growing_icon, icon_state = "[myseed.icon_grow][myseed.growthstages]") + plant_overlay.icon_state = "[myseed.icon_grow][myseed.growthstages]" else - I = image(icon = myseed.growing_icon, icon_state = myseed.icon_harvest) + plant_overlay.icon_state = myseed.icon_harvest else var/t_growthstate = min(round((age / myseed.maturation) * myseed.growthstages), myseed.growthstages) - I = image(icon = myseed.growing_icon, icon_state = "[myseed.icon_grow][t_growthstate]") - I.layer = OBJ_LAYER + 0.01 - add_overlay(I) + plant_overlay.icon_state = "[myseed.icon_grow][t_growthstate]" + add_overlay(plant_overlay) /obj/machinery/hydroponics/proc/update_icon_lights() if(waterlevel <= 10) - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowwater3")) + add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lowwater3")) if(nutrilevel <= 2) - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lownutri3")) + add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lownutri3")) if(plant_health <= (myseed.endurance / 2)) - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowhealth3")) + add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lowhealth3")) if(weedlevel >= 5 || pestlevel >= 5 || toxic >= 40) - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_alert3")) + add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_alert3")) if(harvest) - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_harvest3")) + add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_harvest3")) /obj/machinery/hydroponics/examine(user) diff --git a/code/modules/hydroponics/sample.dm b/code/modules/hydroponics/sample.dm index a4ab2919be8..52c2e1052fe 100644 --- a/code/modules/hydroponics/sample.dm +++ b/code/modules/hydroponics/sample.dm @@ -8,9 +8,9 @@ /obj/item/seeds/sample/New() ..() if(sample_color) - var/image/I = image(icon, icon_state = "sample-filling") - I.color = sample_color - add_overlay(I) + var/mutable_appearance/filling = mutable_appearance(icon, "sample-filling") + filling.color = sample_color + add_overlay(filling) /obj/item/seeds/sample/get_analyzer_text() return " The DNA of this sample is damaged beyond recovery, it can't support life on its own.\n*---------*" diff --git a/code/modules/mining/equipment.dm b/code/modules/mining/equipment.dm index 02a752c2d76..36c30531431 100644 --- a/code/modules/mining/equipment.dm +++ b/code/modules/mining/equipment.dm @@ -513,7 +513,7 @@ var/charged = 1 var/charge_time = 16 var/atom/mark = null - var/marked_image = null + var/mutable_appearance/marked_underlay /obj/item/projectile/destabilizer name = "destabilizing force" @@ -530,15 +530,16 @@ if(hammer_synced.mark == target) return ..() if(isliving(target)) - if(hammer_synced.mark && hammer_synced.marked_image) - hammer_synced.mark.underlays -= hammer_synced.marked_image - hammer_synced.marked_image = null + if(hammer_synced.mark && hammer_synced.marked_underlay) + hammer_synced.mark.underlays -= hammer_synced.marked_underlay + hammer_synced.marked_underlay = null var/mob/living/L = target if(L.mob_size >= MOB_SIZE_LARGE) hammer_synced.mark = L - var/image/I = image('icons/effects/effects.dmi', loc = L, icon_state = "shield2",pixel_y = (-L.pixel_y),pixel_x = (-L.pixel_x)) - L.underlays += I - hammer_synced.marked_image = I + hammer_synced.marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2") + hammer_synced.marked_underlay.pixel_x = -L.pixel_x + hammer_synced.marked_underlay.pixel_y = -L.pixel_y + L.underlays += hammer_synced.marked_underlay var/target_turf = get_turf(target) if(ismineralturf(target_turf)) var/turf/closed/mineral/M = target_turf @@ -570,9 +571,8 @@ new /obj/effect/overlay/temp/kinetic_blast(get_turf(L)) mark = 0 if(L.mob_size >= MOB_SIZE_LARGE) - L.underlays -= marked_image - qdel(marked_image) - marked_image = null + L.underlays -= marked_underlay + QDEL_NULL(marked_underlay) var/backstab_dir = get_dir(user, L) var/def_check = L.getarmor(type = "bomb") if((user.dir & backstab_dir) && (L.dir & backstab_dir)) diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index 463ee524f94..b8b1bcc6b9e 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -69,9 +69,9 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) if(uses_left <= 0) user.drop_item(src) loc = A - var/image/balloon - var/image/balloon2 - var/image/balloon3 + var/mutable_appearance/balloon + var/mutable_appearance/balloon2 + var/mutable_appearance/balloon3 if(isliving(A)) var/mob/living/M = A M.Weaken(16) // Keep them from moving during the duration of the extraction @@ -82,12 +82,12 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) var/obj/effect/extraction_holder/holder_obj = new(A.loc) holder_obj.appearance = A.appearance A.loc = holder_obj - balloon2 = image('icons/obj/fulton_balloon.dmi',"fulton_expand") + balloon2 = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_expand") balloon2.pixel_y = 10 balloon2.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM holder_obj.add_overlay(balloon2) sleep(4) - balloon = image('icons/obj/fulton_balloon.dmi',"fulton_balloon") + balloon = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_balloon") balloon.pixel_y = 10 balloon.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM holder_obj.cut_overlay(balloon2) @@ -121,7 +121,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) sleep(10) animate(holder_obj, pixel_z = 10, time = 10) sleep(10) - balloon3 = image('icons/obj/fulton_balloon.dmi',"fulton_retract") + balloon3 = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_retract") balloon3.pixel_y = 10 balloon3.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM holder_obj.cut_overlay(balloon) diff --git a/code/modules/mining/lavaland/ruins/gym.dm b/code/modules/mining/lavaland/ruins/gym.dm index c390851b1b3..13e3e56f667 100644 --- a/code/modules/mining/lavaland/ruins/gym.dm +++ b/code/modules/mining/lavaland/ruins/gym.dm @@ -68,9 +68,8 @@ user.setDir(SOUTH) user.Stun(4) user.loc = src.loc - var/image/W = image('goon/icons/obj/fitness.dmi',"fitnessweight-w") - W.layer = WALL_OBJ_LAYER - add_overlay(W) + var/mutable_appearance/swole_overlay = mutable_appearance(icon, "fitnessweight-w", WALL_OBJ_LAYER) + add_overlay(swole_overlay) var/bragmessage = pick("pushing it to the limit","going into overdrive","burning with determination","rising up to the challenge", "getting strong now","getting ripped") user.visible_message("[user] is [bragmessage]!") var/reps = 0 @@ -93,5 +92,5 @@ animate(user, pixel_y = 0, time = 3) var/finishmessage = pick("You feel stronger!","You feel like you can take on the world!","You feel robust!","You feel indestructible!") icon_state = "fitnessweight" - cut_overlay(W) + cut_overlay(swole_overlay) to_chat(user, "[finishmessage]") \ No newline at end of file diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index eff7e4780b7..1f7f4b4695f 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -392,7 +392,7 @@ return if (CC.use(1)) - add_overlay(image('icons/obj/economy.dmi',"coin_string_overlay")) + add_overlay("coin_string_overlay") string_attached = 1 to_chat(user, "You attach a string to the coin.") else diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 7a77aab7cdf..7946d67d10a 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -37,10 +37,10 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) //These variables store hair data if the ghost originates from a species with head and/or facial hair. var/hair_style var/hair_color - var/image/hair_image + var/mutable_appearance/hair_overlay var/facial_hair_style var/facial_hair_color - var/image/facial_hair_image + var/mutable_appearance/facial_hair_overlay var/updatedir = 1 //Do we have to update our dir as the ghost moves around? var/lastsetting = null //Stores the last setting that ghost_others was set to, for a little more efficiency when we update ghost images. Null means no update is necessary @@ -161,13 +161,13 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) ghost_accs = client.prefs.ghost_accs ghost_others = client.prefs.ghost_others - if(hair_image) - cut_overlay(hair_image) - hair_image = null + if(hair_overlay) + cut_overlay(hair_overlay) + hair_overlay = null - if(facial_hair_image) - cut_overlay(facial_hair_image) - facial_hair_image = null + if(facial_hair_overlay) + cut_overlay(facial_hair_overlay) + facial_hair_overlay = null if(new_form) @@ -188,19 +188,19 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) if(facial_hair_style) S = GLOB.facial_hair_styles_list[facial_hair_style] if(S) - facial_hair_image = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER) + facial_hair_overlay = mutable_appearance(S.icon, "[S.icon_state]", -HAIR_LAYER) if(facial_hair_color) - facial_hair_image.color = "#" + facial_hair_color - facial_hair_image.alpha = 200 - add_overlay(facial_hair_image) + facial_hair_overlay.color = "#" + facial_hair_color + facial_hair_overlay.alpha = 200 + add_overlay(facial_hair_overlay) if(hair_style) S = GLOB.hair_styles_list[hair_style] if(S) - hair_image = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER) + hair_overlay = mutable_appearance(S.icon, "[S.icon_state]", -HAIR_LAYER) if(hair_color) - hair_image.color = "#" + hair_color - hair_image.alpha = 200 - add_overlay(hair_image) + hair_overlay.color = "#" + hair_color + hair_overlay.alpha = 200 + add_overlay(hair_overlay) /* * Increase the brightness of a color by calculating the average distance between the R, G and B values, diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index 556d5ac7db7..8b88440a8ef 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -1,7 +1,7 @@ /mob/living/carbon/alien/humanoid/update_icons() cut_overlays() - for(var/image/I in overlays_standing) + for(var/I in overlays_standing) add_overlay(I) if(stat == DEAD) @@ -66,7 +66,7 @@ dmi_file = 'icons/mob/alienqueen.dmi' if(handcuffed) - overlays_standing[HANDCUFF_LAYER] = image(dmi_file,icon_state= cuff_icon, layer =-HANDCUFF_LAYER) + overlays_standing[HANDCUFF_LAYER] = mutable_appearance(dmi_file, cuff_icon, -HANDCUFF_LAYER) apply_overlay(HANDCUFF_LAYER) //Royals have bigger sprites, so inhand things must be handled differently. @@ -80,16 +80,14 @@ var/itm_state = l_hand.item_state if(!itm_state) itm_state = l_hand.icon_state - var/image/I = image("icon" = alt_inhands_file , "icon_state"="[itm_state][caste]_l", "layer"=-HANDS_LAYER) - hands += I + hands += mutable_appearance(alt_inhands_file, "[itm_state][caste]_l", -HANDS_LAYER) var/obj/item/r_hand = get_item_for_held_index(2) if(r_hand) var/itm_state = r_hand.item_state if(!itm_state) itm_state = r_hand.icon_state - var/image/I = image("icon" = alt_inhands_file , "icon_state"="[itm_state][caste]_r", "layer"=-HANDS_LAYER) - hands += I + hands += mutable_appearance(alt_inhands_file, "[itm_state][caste]_r", -HANDS_LAYER) overlays_standing[HANDS_LAYER] = hands apply_overlay(HANDS_LAYER) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/screen.dm b/code/modules/mob/living/carbon/alien/screen.dm index 58f10ab1222..b5b646b08b6 100644 --- a/code/modules/mob/living/carbon/alien/screen.dm +++ b/code/modules/mob/living/carbon/alien/screen.dm @@ -18,7 +18,6 @@ return var/Qdir = get_dir(src, Q) var/Qdist = get_dist(src, Q) - image(icon,loc,icon_state,layer,dir) var/finder_icon = "finder_center" //Overlay showed when adjacent to or on top of the queen! switch(Qdist) if(2 to 7) @@ -27,7 +26,7 @@ finder_icon = "finder_med" if(21 to INFINITY) finder_icon = "finder_far" - var/image/finder_eye = image('icons/mob/screen_alien.dmi', icon_state = finder_icon, dir = Qdir) + var/image/finder_eye = image('icons/mob/screen_alien.dmi', finder_icon, dir = Qdir) hud_used.alien_queen_finder.add_overlay(finder_eye) /mob/living/carbon/alien/humanoid/royal/queen/findQueen() diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 63f79d2eb8c..7eb6d182ef4 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -81,7 +81,7 @@ var/mob/dead/observer/ghost = pick(candidates) - var/overlay = image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_lie") + var/mutable_appearance/overlay = mutable_appearance('icons/mob/alien.dmi', "burst_lie") owner.add_overlay(overlay) var/atom/xeno_loc = get_turf(owner) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 80fbdbb71df..44e578c909d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -754,7 +754,7 @@ ..() /mob/living/carbon/fakefire(var/fire_icon = "Generic_mob_burning") - var/image/new_fire_overlay = image("icon"='icons/mob/OnFire.dmi', "icon_state"= fire_icon, "layer"=-FIRE_LAYER) + var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', fire_icon, -FIRE_LAYER) new_fire_overlay.appearance_flags = RESET_COLOR overlays_standing[FIRE_LAYER] = new_fire_overlay apply_overlay(FIRE_LAYER) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 57d7d4e2f87..d3f2bd5bfa7 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -730,8 +730,8 @@ /mob/living/carbon/human/wash_cream() //clean both to prevent a rare bug - cut_overlay(image('icons/effects/creampie.dmi', "creampie_lizard")) - cut_overlay(image('icons/effects/creampie.dmi', "creampie_human")) + cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_lizard")) + cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_human")) //Turns a mob black, flashes a skeleton overlay @@ -740,17 +740,19 @@ //Handle mutant parts if possible if(dna && dna.species) add_atom_colour("#000000", TEMPORARY_COLOUR_PRIORITY) - var/static/image/electrocution_skeleton_anim = image(icon = icon, icon_state = "electrocuted_base") - electrocution_skeleton_anim.appearance_flags = RESET_COLOR + var/static/mutable_appearance/electrocution_skeleton_anim + if(!electrocution_skeleton_anim) + electrocution_skeleton_anim = mutable_appearance(icon, "electrocuted_base") + electrocution_skeleton_anim.appearance_flags |= RESET_COLOR add_overlay(electrocution_skeleton_anim) addtimer(CALLBACK(src, .proc/end_electrocution_animation, electrocution_skeleton_anim), anim_duration) else //or just do a generic animation flick_overlay_view(image(icon,src,"electrocuted_generic",ABOVE_MOB_LAYER), src, anim_duration) -/mob/living/carbon/human/proc/end_electrocution_animation(image/I) +/mob/living/carbon/human/proc/end_electrocution_animation(mutable_appearance/MA) remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#000000") - cut_overlay(I) + cut_overlay(MA) /mob/living/carbon/human/canUseTopic(atom/movable/M, be_close = 0) if(incapacitated() || lying ) @@ -819,9 +821,9 @@ if(hal_screwyhud == SCREWYHUD_HEALTHY) icon_num = 0 if(icon_num) - hud_used.healthdoll.add_overlay(image('icons/mob/screen_gen.dmi',"[BP.body_zone][icon_num]")) + hud_used.healthdoll.add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[BP.body_zone][icon_num]")) for(var/t in get_missing_limbs()) //Missing limbs - hud_used.healthdoll.add_overlay(image('icons/mob/screen_gen.dmi',"[t]6")) + hud_used.healthdoll.add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[t]6")) else hud_used.healthdoll.icon_state = "healthdoll_DEAD" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index ac2fed005f8..f64d30e90ac 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -228,22 +228,22 @@ fhair_state += dynamic_fhair_suffix fhair_file = 'icons/mob/facialhair_extensions.dmi' - var/image/img_facial = image("icon" = fhair_file, "icon_state" = fhair_state, "layer" = -HAIR_LAYER) + var/mutable_appearance/facial_overlay = mutable_appearance(fhair_file, fhair_state, -HAIR_LAYER) if(!forced_colour) if(hair_color) if(hair_color == "mutcolor") - img_facial.color = "#" + H.dna.features["mcolor"] + facial_overlay.color = "#" + H.dna.features["mcolor"] else - img_facial.color = "#" + hair_color + facial_overlay.color = "#" + hair_color else - img_facial.color = "#" + H.facial_hair_color + facial_overlay.color = "#" + H.facial_hair_color else - img_facial.color = forced_colour + facial_overlay.color = forced_colour - img_facial.alpha = hair_alpha + facial_overlay.alpha = hair_alpha - standing += img_facial + standing += facial_overlay if(H.head) var/obj/item/I = H.head @@ -261,9 +261,11 @@ hair_hidden = TRUE if(!hair_hidden || dynamic_hair_suffix) + var/mutable_appearance/hair_overlay = mutable_appearance(layer = -HAIR_LAYER) if(!hair_hidden && !H.getorgan(/obj/item/organ/brain)) //Applies the debrained overlay if there is no brain if(!(NOBLOOD in species_traits)) - standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER) + hair_overlay.icon = 'icons/mob/human_face.dmi' + hair_overlay.icon_state = "debrained" else if(H.hair_style && (HAIR in species_traits)) S = GLOB.hair_styles_list[H.hair_style] @@ -285,67 +287,69 @@ hair_state += dynamic_hair_suffix hair_file = 'icons/mob/hair_extensions.dmi' - var/image/img_hair = image("icon" = hair_file, "icon_state" = hair_state, "layer" = -HAIR_LAYER) + hair_overlay.icon = hair_file + hair_overlay.icon_state = hair_state if(!forced_colour) if(hair_color) if(hair_color == "mutcolor") - img_hair.color = "#" + H.dna.features["mcolor"] + hair_overlay.color = "#" + H.dna.features["mcolor"] else - img_hair.color = "#" + hair_color + hair_overlay.color = "#" + hair_color else - img_hair.color = "#" + H.hair_color + hair_overlay.color = "#" + H.hair_color else - img_hair.color = forced_colour - img_hair.alpha = hair_alpha - img_hair.pixel_y += hair_y_offset - standing += img_hair + hair_overlay.color = forced_colour + hair_overlay.alpha = hair_alpha + hair_overlay.pixel_y += hair_y_offset + if(hair_overlay.icon) + standing += hair_overlay if(standing.len) - H.overlays_standing[HAIR_LAYER] = standing + H.overlays_standing[HAIR_LAYER] = standing H.apply_overlay(HAIR_LAYER) /datum/species/proc/handle_body(mob/living/carbon/human/H) H.remove_overlay(BODY_LAYER) - var/list/standing = list() + var/list/standing = list() var/obj/item/bodypart/head/HD = H.get_bodypart("head") if(!(H.disabilities & HUSK)) // lipstick if(H.lip_style && (LIPS in species_traits) && HD) - var/image/lips = image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[H.lip_style]", "layer" = -BODY_LAYER) - lips.color = H.lip_color - lips.pixel_y += face_y_offset - standing += lips + var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[H.lip_style]", -BODY_LAYER) + lip_overlay.color = H.lip_color + lip_overlay.pixel_y += face_y_offset + standing += lip_overlay // eyes if((EYECOLOR in species_traits) && HD) - var/image/img_eyes = image("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes", "layer" = -BODY_LAYER) - img_eyes.color = "#" + H.eye_color - img_eyes.pixel_y += face_y_offset - standing += img_eyes + var/mutable_appearance/eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes", -BODY_LAYER) + eye_overlay.color = "#" + H.eye_color + eye_overlay.pixel_y += face_y_offset + standing += eye_overlay //Underwear, Undershirts & Socks if(H.underwear) var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[H.underwear] if(underwear) - standing += image("icon"=underwear.icon, "icon_state"="[underwear.icon_state]", "layer"=-BODY_LAYER) + standing += mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) if(H.undershirt) var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[H.undershirt] if(undershirt) if(H.dna.species.sexes && H.gender == FEMALE) - standing += wear_female_version("[undershirt.icon_state]", undershirt.icon, BODY_LAYER) + standing += wear_female_version(undershirt.icon_state, undershirt.icon, -BODY_LAYER) else - standing += image("icon"=undershirt.icon, "icon_state"="[undershirt.icon_state]", "layer"=-BODY_LAYER) + standing += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) if(H.socks && H.get_num_legs() >= 2 && !(DIGITIGRADE in species_traits)) var/datum/sprite_accessory/socks/socks = GLOB.socks_list[H.socks] if(socks) - standing += image("icon"=socks.icon, "icon_state"="[socks.icon_state]", "layer"=-BODY_LAYER) + standing += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) if(standing.len) H.overlays_standing[BODY_LAYER] = standing @@ -453,8 +457,6 @@ var/g = (H.gender == FEMALE) ? "f" : "m" - var/image/I - for(var/layer in relevent_layers) var/layertext = mutant_bodyparts_layertext(layer) @@ -493,58 +495,54 @@ if(!S || S.icon_state == "none") continue + var/mutable_appearance/accessory_overlay = mutable_appearance(S.icon, layer = -layer) + //A little rename so we don't have to use tail_lizard or tail_human when naming the sprites. if(bodypart == "tail_lizard" || bodypart == "tail_human") bodypart = "tail" else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human") bodypart = "waggingtail" - - var/icon_string - if(S.gender_specific) - icon_string = "[g]_[bodypart]_[S.icon_state]_[layertext]" + accessory_overlay.icon_state = "[g]_[bodypart]_[S.icon_state]_[layertext]" else - icon_string = "m_[bodypart]_[S.icon_state]_[layertext]" - - I = image("icon" = S.icon, "icon_state" = icon_string, "layer" =- layer) + accessory_overlay.icon_state = "m_[bodypart]_[S.icon_state]_[layertext]" if(S.center) - I = center_image(I,S.dimension_x,S.dimension_y) + accessory_overlay = center_image(accessory_overlay, S.dimension_x, S.dimension_y) if(!(H.disabilities & HUSK)) if(!forced_colour) switch(S.color_src) if(MUTCOLORS) if(fixed_mut_color) - I.color = "#[fixed_mut_color]" + accessory_overlay.color = "#[fixed_mut_color]" else - I.color = "#[H.dna.features["mcolor"]]" + accessory_overlay.color = "#[H.dna.features["mcolor"]]" if(HAIR) if(hair_color == "mutcolor") - I.color = "#[H.dna.features["mcolor"]]" + accessory_overlay.color = "#[H.dna.features["mcolor"]]" else - I.color = "#[H.hair_color]" + accessory_overlay.color = "#[H.hair_color]" if(FACEHAIR) - I.color = "#[H.facial_hair_color]" + accessory_overlay.color = "#[H.facial_hair_color]" if(EYECOLOR) - I.color = "#[H.eye_color]" + accessory_overlay.color = "#[H.eye_color]" else - I.color = forced_colour - standing += I + accessory_overlay.color = forced_colour + standing += accessory_overlay if(S.hasinner) + var/mutable_appearance/inner_accessory_overlay = mutable_appearance(S.icon, layer = -layer) if(S.gender_specific) - icon_string = "[g]_[bodypart]inner_[S.icon_state]_[layertext]" + inner_accessory_overlay.icon_state = "[g]_[bodypart]inner_[S.icon_state]_[layertext]" else - icon_string = "m_[bodypart]inner_[S.icon_state]_[layertext]" - - I = image("icon" = S.icon, "icon_state" = icon_string, "layer" =- layer) + inner_accessory_overlay.icon_state = "m_[bodypart]inner_[S.icon_state]_[layertext]" if(S.center) - I = center_image(I,S.dimension_x,S.dimension_y) + inner_accessory_overlay = center_image(inner_accessory_overlay, S.dimension_x, S.dimension_y) - standing += I + standing += inner_accessory_overlay H.overlays_standing[layer] = standing.Copy() standing = list() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index b5f047b0da9..f8e62704518 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -124,17 +124,17 @@ There are several things that need to be remembered: else if(U.adjusted == DIGITIGRADE_STYLE) t_color = "[t_color]_l" - var/image/standing + var/mutable_appearance/uniform_overlay if(dna && dna.species.sexes) var/G = (gender == FEMALE) ? "f" : "m" if(G == "f" && U.fitted != NO_FEMALE_UNIFORM) - standing = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE, femaleuniform = U.fitted) + uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE, femaleuniform = U.fitted) - if(!standing) - standing = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE) + if(!uniform_overlay) + uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE) - overlays_standing[UNIFORM_LAYER] = standing + overlays_standing[UNIFORM_LAYER] = uniform_overlay else if(!(dna && dna.species.nojumpsuit) && invdrop) // Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY @@ -159,8 +159,7 @@ There are several things that need to be remembered: update_observer_view(wear_id) //TODO: add an icon file for ID slot stuff, so it's less snowflakey - var/image/standing = wear_id.build_worn_icon(state = wear_id.item_state, default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi') - overlays_standing[ID_LAYER] = standing + overlays_standing[ID_LAYER] = wear_id.build_worn_icon(state = wear_id.item_state, default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi') apply_overlay(ID_LAYER) @@ -168,20 +167,20 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_gloves() remove_overlay(GLOVES_LAYER) - if(get_num_arms() <2) - if(!gloves && blood_DNA) - if(has_left_hand()) - overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands_left", "layer"=-GLOVES_LAYER) - apply_overlay(GLOVES_LAYER) - else if(has_right_hand()) - overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands_right", "layer"=-GLOVES_LAYER) - apply_overlay(GLOVES_LAYER) - return - if(client && hud_used && hud_used.inv_slots[slot_gloves]) var/obj/screen/inventory/inv = hud_used.inv_slots[slot_gloves] inv.update_icon() + if(!gloves && blood_DNA) + var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER) + if(get_num_arms() < 2) + if(has_left_hand()) + bloody_overlay.icon_state = "bloodyhands_left" + else if(has_right_hand()) + bloody_overlay.icon_state = "bloodyhands_right" + + overlays_standing[GLOVES_LAYER] = bloody_overlay + if(gloves) gloves.screen_loc = ui_gloves if(client && hud_used && hud_used.hud_shown) @@ -191,14 +190,7 @@ There are several things that need to be remembered: var/t_state = gloves.item_state if(!t_state) t_state = gloves.icon_state - - var/image/standing = gloves.build_worn_icon(state = t_state, default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/hands.dmi') - - overlays_standing[GLOVES_LAYER] = standing - - else - if(blood_DNA) - overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands", "layer"=-GLOVES_LAYER) + overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(state = t_state, default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/hands.dmi') apply_overlay(GLOVES_LAYER) @@ -221,8 +213,7 @@ There are several things that need to be remembered: update_observer_view(glasses,1) if(!(head && (head.flags_inv & HIDEEYES)) && !(wear_mask && (wear_mask.flags_inv & HIDEEYES))) - var/image/standing = glasses.build_worn_icon(state = glasses.icon_state, default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/eyes.dmi') - overlays_standing[GLASSES_LAYER] = standing + overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(state = glasses.icon_state, default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/eyes.dmi') apply_overlay(GLASSES_LAYER) @@ -244,8 +235,7 @@ There are several things that need to be remembered: client.screen += ears //add it to the client's screen update_observer_view(ears,1) - var/image/standing = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi') - overlays_standing[EARS_LAYER] = standing + overlays_standing[EARS_LAYER] = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi') apply_overlay(EARS_LAYER) @@ -266,8 +256,7 @@ There are several things that need to be remembered: if(hud_used.inventory_shown) //if the inventory is open client.screen += shoes //add it to client's screen update_observer_view(shoes,1) - var/image/standing = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi') - overlays_standing[SHOES_LAYER] = standing + overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi') apply_overlay(SHOES_LAYER) @@ -287,7 +276,7 @@ There are several things that need to be remembered: var/t_state = s_store.item_state if(!t_state) t_state = s_store.icon_state - overlays_standing[SUIT_STORE_LAYER] = image("icon"='icons/mob/belt_mirror.dmi', "icon_state"="[t_state]", "layer"=-SUIT_STORE_LAYER) + overlays_standing[SUIT_STORE_LAYER] = mutable_appearance('icons/mob/belt_mirror.dmi', t_state, -SUIT_STORE_LAYER) apply_overlay(SUIT_STORE_LAYER) @@ -313,8 +302,7 @@ There are several things that need to be remembered: if(!t_state) t_state = belt.icon_state - var/image/standing = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = 'icons/mob/belt.dmi') - overlays_standing[BELT_LAYER] = standing + overlays_standing[BELT_LAYER] = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = 'icons/mob/belt.dmi') apply_overlay(BELT_LAYER) @@ -335,8 +323,7 @@ There are several things that need to be remembered: client.screen += wear_suit update_observer_view(wear_suit,1) - var/image/standing = wear_suit.build_worn_icon(state = wear_suit.icon_state, default_layer = SUIT_LAYER, default_icon_file = 'icons/mob/suit.dmi') - overlays_standing[SUIT_LAYER] = standing + overlays_standing[SUIT_LAYER] = wear_suit.build_worn_icon(state = wear_suit.icon_state, default_layer = SUIT_LAYER, default_icon_file = 'icons/mob/suit.dmi') if(wear_suit.breakouttime) //suit is restraining drop_all_held_items() @@ -379,7 +366,7 @@ There are several things that need to be remembered: remove_overlay(LEGCUFF_LAYER) clear_alert("legcuffed") if(legcuffed) - overlays_standing[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) + overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER) apply_overlay(LEGCUFF_LAYER) throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = src.legcuffed) @@ -388,8 +375,7 @@ There are several things that need to be remembered: var/icon/female_clothing_icon = GLOB.female_clothing_icons[index] if(!female_clothing_icon) //Create standing/laying icons if they don't exist generate_female_clothing(index,t_color,icon,type) - var/standing = image("icon"=GLOB.female_clothing_icons["[t_color]"], "layer"=-layer) - return(standing) + return mutable_appearance(GLOB.female_clothing_icons[t_color], layer = -layer) /mob/living/carbon/human/proc/get_overlays_copy(list/unwantedLayers) var/list/out = new @@ -438,12 +424,12 @@ There are several things that need to be remembered: /* -Does everything in relation to building the /image used in the mob's overlays list +Does everything in relation to building the /mutable_appearance used in the mob's overlays list covers: inhands and any other form of worn item - centering large images - layering images on custom layers - building images from custom icon files + centering large appearances + layering appearances on custom layers + building appearances from custom icon files By Remie Richards (yes I'm taking credit because this just removed 90% of the copypaste in update_icons()) @@ -478,13 +464,13 @@ generate/load female uniform sprites matching all previously decided variables if(!layer2use) layer2use = default_layer - var/image/standing + var/mutable_appearance/standing if(femaleuniform) standing = wear_female_version(state,file2use,layer2use,femaleuniform) if(!standing) - standing = image("icon"=file2use, "icon_state"=state,"layer"=-layer2use) + standing = mutable_appearance(file2use, state, -layer2use) - //Get the overlay images for this item when it's being worn + //Get the overlays for this item when it's being worn //eg: ammo counters, primed grenade flashes, etc. var/list/worn_overlays = worn_overlays(isinhands) if(worn_overlays && worn_overlays.len) diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 57e2bb7e02f..5a4ba686b25 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -34,8 +34,7 @@ hair_hidden = 1 if(!hair_hidden) if(!getorgan(/obj/item/organ/brain)) //Applies the debrained overlay if there is no brain - var/image/I = image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER) - overlays_standing[HAIR_LAYER] = I + overlays_standing[HAIR_LAYER] = mutable_appearance('icons/mob/human_face.dmi', "debrained", -HAIR_LAYER) apply_overlay(HAIR_LAYER) @@ -45,9 +44,9 @@ /mob/living/carbon/monkey/update_inv_legcuffed() remove_overlay(LEGCUFF_LAYER) if(legcuffed) - var/image/standing = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) - standing.pixel_y = 8 - overlays_standing[LEGCUFF_LAYER] = standing + var/mutable_appearance/legcuff_overlay = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER) + legcuff_overlay.pixel_y = 8 + overlays_standing[LEGCUFF_LAYER] = legcuff_overlay apply_overlay(LEGCUFF_LAYER) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 4e76b3da1e9..762ebd56cc5 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -30,9 +30,8 @@ var/list/overlays_standing[TOTAL_LAYERS] /mob/living/carbon/proc/apply_overlay(cache_index) - var/I = overlays_standing[cache_index] - if(I) - add_overlay(I) + if((. = overlays_standing[cache_index])) + add_overlay(.) /mob/living/carbon/proc/remove_overlay(cache_index) var/I = overlays_standing[cache_index] @@ -79,8 +78,7 @@ if(get_held_index_of_item(I) % 2 == 0) icon_file = I.righthand_file - var/image/standing = I.build_worn_icon(state = t_state, default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE) - hands += standing + hands += I.build_worn_icon(state = t_state, default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE) overlays_standing[HANDS_LAYER] = hands apply_overlay(HANDS_LAYER) @@ -89,7 +87,7 @@ /mob/living/carbon/update_fire(var/fire_icon = "Generic_mob_burning") remove_overlay(FIRE_LAYER) if(on_fire) - var/image/new_fire_overlay = image("icon"='icons/mob/OnFire.dmi', "icon_state"= fire_icon, "layer"=-FIRE_LAYER) + var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', fire_icon, -FIRE_LAYER) new_fire_overlay.appearance_flags = RESET_COLOR overlays_standing[FIRE_LAYER] = new_fire_overlay @@ -100,16 +98,16 @@ /mob/living/carbon/update_damage_overlays() remove_overlay(DAMAGE_LAYER) - var/image/standing = image("icon"='icons/mob/dam_mob.dmi', "icon_state"="blank", "layer"=-DAMAGE_LAYER) - overlays_standing[DAMAGE_LAYER] = standing + var/mutable_appearance/damage_overlay = mutable_appearance('icons/mob/dam_mob.dmi', "blank", -DAMAGE_LAYER) + overlays_standing[DAMAGE_LAYER] = damage_overlay for(var/X in bodyparts) var/obj/item/bodypart/BP = X if(BP.dmg_overlay_type) if(BP.brutestate) - standing.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_[BP.brutestate]0") //we're adding icon_states of the base image as overlays + damage_overlay.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_[BP.brutestate]0") //we're adding icon_states of the base image as overlays if(BP.burnstate) - standing.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_0[BP.burnstate]") + damage_overlay.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_0[BP.burnstate]") apply_overlay(DAMAGE_LAYER) @@ -126,8 +124,7 @@ if(wear_mask) if(!(head && (head.flags_inv & HIDEMASK))) - var/image/standing = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi') - overlays_standing[FACEMASK_LAYER] = standing + overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi') update_hud_wear_mask(wear_mask) apply_overlay(FACEMASK_LAYER) @@ -141,8 +138,7 @@ if(wear_neck) if(!(head && (head.flags_inv & HIDENECK))) - var/image/standing = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi') - overlays_standing[NECK_LAYER] = standing + overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi') update_hud_neck(wear_neck) apply_overlay(NECK_LAYER) @@ -155,8 +151,7 @@ inv.update_icon() if(back) - var/image/standing = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi') - overlays_standing[BACK_LAYER] = standing + overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi') update_hud_back(back) apply_overlay(BACK_LAYER) @@ -171,8 +166,7 @@ inv.update_icon() if(head) - var/image/standing = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi') - overlays_standing[HEAD_LAYER] = standing + overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi') update_hud_head(head) apply_overlay(HEAD_LAYER) @@ -181,7 +175,7 @@ /mob/living/carbon/update_inv_handcuffed() remove_overlay(HANDCUFF_LAYER) if(handcuffed) - overlays_standing[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff1", "layer"=-HANDCUFF_LAYER) + overlays_standing[HANDCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "handcuff1", -HANDCUFF_LAYER) apply_overlay(HANDCUFF_LAYER) @@ -244,9 +238,7 @@ var/list/new_limbs = list() for(var/X in bodyparts) var/obj/item/bodypart/BP = X - var/image/temp = BP.get_limb_icon() - if(temp) - new_limbs += temp + new_limbs += BP.get_limb_icon() if(new_limbs.len) overlays_standing[BODYPARTS_LAYER] = new_limbs limb_icon_cache[icon_render_key] = new_limbs diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index b06223a7cbf..78970c0bc97 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -489,7 +489,7 @@ for(var/obj/effect/decal/cleanable/trail_holder/TH in src.loc) if((!(newdir in TH.existing_dirs) || trail_type == "trails_1" || trail_type == "trails_2") && TH.existing_dirs.len <= 16) //maximum amount of overlays is 16 (all light & heavy directions filled) TH.existing_dirs += newdir - TH.overlays.Add(image('icons/effects/blood.dmi',trail_type,dir = newdir)) + TH.add_overlay(image('icons/effects/blood.dmi', trail_type, dir = newdir)) TH.transfer_mob_blood_dna(src) /mob/living/carbon/human/makeTrail(turf/T) @@ -925,4 +925,4 @@ /mob/living/ConveyorMove() if((movement_type & FLYING) && !stat) return - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index bb25eb2e4d6..fba4f50080f 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -102,11 +102,11 @@ return /mob/living/silicon/robot/update_fire() - var/I = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Generic_mob_burning") + var/mutable_appearance/fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', "Generic_mob_burning") if(on_fire) - add_overlay(I) + add_overlay(fire_overlay) else - cut_overlay(I) + cut_overlay(fire_overlay) /mob/living/silicon/robot/update_canmove() if(stat || buckled || lockcharge) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 023ddd9719d..6ef36096dc8 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -38,7 +38,7 @@ var/obj/item/module_active = null held_items = list(null, null, null) //we use held_items for the module holding, because that makes sense to do! - var/image/eye_lights + var/mutable_appearance/eye_lights var/mob/living/silicon/ai/connected_ai = null var/obj/item/weapon/stock_parts/cell/cell = null @@ -602,7 +602,7 @@ else add_overlay("ov-opencover -c") if(hat) - var/image/head_overlay = hat.build_worn_icon(state = hat.icon_state, default_layer = 20, default_icon_file = 'icons/mob/head.dmi') + var/mutable_appearance/head_overlay = hat.build_worn_icon(state = hat.icon_state, default_layer = 20, default_icon_file = 'icons/mob/head.dmi') head_overlay.pixel_y += hat_offset add_overlay(head_overlay) update_fire() diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 95e62a556d3..25be0495467 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -286,7 +286,7 @@ ..() spawn(5) if(skin) - add_overlay(image('icons/mob/aibots.dmi', "kit_skin_[skin]")) + add_overlay("kit_skin_[skin]") /obj/item/weapon/storage/firstaid/attackby(obj/item/bodypart/S, mob/user, params) @@ -333,7 +333,7 @@ build_step++ to_chat(user, "You add the health sensor to [src].") name = "First aid/robot arm/health analyzer assembly" - add_overlay(image('icons/mob/aibots.dmi', "na_scanner")) + add_overlay("na_scanner") if(1) if(isprox(W)) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index ef133252d70..8c96a70cc0e 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -358,7 +358,7 @@ Auto Patrol[]"}, var/obj/item/weapon/ed209_assembly/Sa = new /obj/item/weapon/ed209_assembly(Tsec) Sa.build_step = 1 - Sa.add_overlay(image('icons/mob/aibots.dmi', "hs_hole")) + Sa.add_overlay("hs_hole") Sa.created_name = name new /obj/item/device/assembly/prox_sensor(Tsec) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index b2a4eaefc68..f1629296a7c 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -90,7 +90,7 @@ update_icon() if(skin) - add_overlay(image('icons/mob/aibots.dmi', "medskin_[skin]")) + add_overlay("medskin_[skin]") var/datum/job/doctor/J = new /datum/job/doctor access_card.access += J.get_access() diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index bcc8e1d90e9..75cc8ff1b8a 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -406,7 +406,7 @@ cut_overlays() if(inventory_head) var/image/head_icon - var/datum/dog_fashion.DF = new inventory_head.dog_fashion(src) + var/datum/dog_fashion/DF = new inventory_head.dog_fashion(src) if(!DF.obj_icon_state) DF.obj_icon_state = inventory_head.icon_state @@ -416,17 +416,17 @@ DF.obj_color = inventory_head.color if(health <= 0) - head_icon = DF.get_image(dir = EAST) + head_icon = DF.get_overlay(dir = EAST) head_icon.pixel_y = -8 head_icon.transform = turn(head_icon.transform, 180) else - head_icon = DF.get_image() + head_icon = DF.get_overlay() add_overlay(head_icon) if(inventory_back) var/image/back_icon - var/datum/dog_fashion.DF = new inventory_back.dog_fashion(src) + var/datum/dog_fashion/DF = new inventory_back.dog_fashion(src) if(!DF.obj_icon_state) DF.obj_icon_state = inventory_back.icon_state @@ -436,18 +436,20 @@ DF.obj_color = inventory_back.color if(health <= 0) - back_icon = DF.get_image(dir = EAST) + back_icon = DF.get_overlay(dir = EAST) back_icon.pixel_y = -11 back_icon.transform = turn(back_icon.transform, 180) else - back_icon = DF.get_image() + back_icon = DF.get_overlay() add_overlay(back_icon) if(facehugger) + var/mutable_appearance/facehugger_overlay = mutable_appearance('icons/mob/mask.dmi') if(istype(src, /mob/living/simple_animal/pet/dog/corgi/puppy)) - add_overlay(image('icons/mob/mask.dmi',"facehugger_corgipuppy")) + facehugger_overlay.icon_state = "facehugger_corgipuppy" else - add_overlay(image('icons/mob/mask.dmi',"facehugger_corgi")) + facehugger_overlay.icon_state = "facehugger_corgi" + add_overlay(facehugger_overlay) if(pcollar) add_overlay(collar) add_overlay(pettag) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm index 7fb7caf8e9f..259ca4327dc 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm @@ -7,9 +7,8 @@ /mob/living/simple_animal/drone/proc/apply_overlay(cache_index) - var/I = drone_overlays[cache_index] - if(I) - add_overlay(I) + if((. = drone_overlays[cache_index])) + add_overlay(.) /mob/living/simple_animal/drone/proc/remove_overlay(cache_index) @@ -34,11 +33,11 @@ if(!r_state) r_state = r_hand.icon_state - var/image/r_hand_image = r_hand.build_worn_icon(state = r_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) + var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) if(y_shift) - r_hand_image.pixel_y += y_shift + r_hand_overlay.pixel_y += y_shift - hands_overlays += r_hand_image + hands_overlays += r_hand_overlay if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) r_hand.layer = ABOVE_HUD_LAYER @@ -52,11 +51,11 @@ if(!l_state) l_state = l_hand.icon_state - var/image/l_hand_image = l_hand.build_worn_icon(state = l_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) + var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) if(y_shift) - l_hand_image.pixel_y += y_shift + l_hand_overlay.pixel_y += y_shift - hands_overlays += l_hand_image + hands_overlays += l_hand_overlay if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) l_hand.layer = ABOVE_HUD_LAYER @@ -86,10 +85,10 @@ var/used_head_icon = 'icons/mob/head.dmi' if(istype(head, /obj/item/clothing/mask)) used_head_icon = 'icons/mob/mask.dmi' - var/image/head_overlay = head.build_worn_icon(state = head.icon_state, default_layer = DRONE_HEAD_LAYER, default_icon_file = used_head_icon) + var/mutable_appearance/head_overlay = head.build_worn_icon(state = head.icon_state, default_layer = DRONE_HEAD_LAYER, default_icon_file = used_head_icon) head_overlay.pixel_y += -15 - drone_overlays[DRONE_HEAD_LAYER] = head_overlay + drone_overlays[DRONE_HEAD_LAYER] = head_overlay apply_overlay(DRONE_HEAD_LAYER) diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm index baad2da95cf..ae707fb2e6f 100644 --- a/code/modules/mob/living/simple_animal/friendly/pet.dm +++ b/code/modules/mob/living/simple_animal/friendly/pet.dm @@ -2,16 +2,16 @@ icon = 'icons/mob/pets.dmi' mob_size = MOB_SIZE_SMALL var/obj/item/clothing/neck/petcollar/pcollar = null - var/image/collar = null - var/image/pettag = null + var/collar = "" + var/pettag = "" blood_volume = BLOOD_VOLUME_NORMAL /mob/living/simple_animal/pet/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/clothing/neck/petcollar) && !pcollar) var/obj/item/clothing/neck/petcollar/P = O pcollar = P - collar = image('icons/mob/pets.dmi', src, "[icon_state]collar") - pettag = image('icons/mob/pets.dmi', src, "[icon_state]tag") + collar = "[icon_state]collar" + pettag = "[icon_state]tag" regenerate_icons() to_chat(user, "You put the [P] around [src]'s neck.") if(P.tagname) @@ -46,5 +46,7 @@ /mob/living/simple_animal/pet/regenerate_icons() cut_overlays() - add_overlay(collar) - add_overlay(pettag) + if(collar) + add_overlay(collar) + if(pettag) + add_overlay(pettag) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index e49e4120478..be889a4183c 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -260,9 +260,8 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians I.plane = ABOVE_HUD_PLANE /mob/living/simple_animal/hostile/guardian/proc/apply_overlay(cache_index) - var/I = guardian_overlays[cache_index] - if(I) - add_overlay(I) + if((. = guardian_overlays[cache_index])) + add_overlay(.) /mob/living/simple_animal/hostile/guardian/proc/remove_overlay(cache_index) var/I = guardian_overlays[cache_index] @@ -281,9 +280,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(!r_state) r_state = r_hand.icon_state - var/image/r_hand_image = r_hand.build_worn_icon(state = r_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) - - hands_overlays += r_hand_image + hands_overlays += r_hand.build_worn_icon(state = r_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) r_hand.layer = ABOVE_HUD_LAYER @@ -296,9 +293,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(!l_state) l_state = l_hand.icon_state - var/image/l_hand_image = l_hand.build_worn_icon(state = l_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) - - hands_overlays += l_hand_image + hands_overlays += l_hand.build_worn_icon(state = l_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) l_hand.layer = ABOVE_HUD_LAYER diff --git a/code/modules/mob/living/simple_animal/guardian/types/protector.dm b/code/modules/mob/living/simple_animal/guardian/types/protector.dm index 80212004217..eacf58410b4 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/protector.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/protector.dm @@ -40,10 +40,10 @@ to_chat(src, "You switch to combat mode.") toggle = FALSE else - var/image/I = new('icons/effects/effects.dmi', "shield-grey") + var/mutable_appearance/shield_overlay = mutable_appearance('icons/effects/effects.dmi', "shield-grey") if(namedatum) - I.color = namedatum.colour - add_overlay(I) + shield_overlay.color = namedatum.colour + add_overlay(shield_overlay) melee_damage_lower = 2 melee_damage_upper = 2 speed = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 462bad0df16..67b3d451b9a 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -71,9 +71,7 @@ /mob/living/simple_animal/hostile/bear/update_icons() ..() if(armored) - var/image/B = image(icon = 'icons/mob/animal.dmi', icon_state = "armor_bear") - if(B) - add_overlay(B) + add_overlay("armor_bear") /obj/item/bear_armor name = "pile of bear armor" diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index fbbd2c20c87..e7ab6e1b565 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -49,7 +49,6 @@ var/idle = 0 var/isqueen = FALSE var/icon_base = "bee" - var/static/list/bee_icons = list() /mob/living/simple_animal/hostile/poison/bees/Process_Spacemove(movement_dir = 0) @@ -91,24 +90,15 @@ if(beegent && beegent.color) col = beegent.color - var/image/base - if(!bee_icons["[icon_base]_base"]) - bee_icons["[icon_base]_base"] = image(icon = 'icons/mob/bees.dmi', icon_state = "[icon_base]_base") - base = bee_icons["[icon_base]_base"] - add_overlay(base) + add_overlay("[icon_base]_base") - var/image/greyscale - if(!bee_icons["[icon_base]_grey_[col]"]) - bee_icons["[icon_base]_grey_[col]"] = image(icon = 'icons/mob/bees.dmi', icon_state = "[icon_base]_grey") - greyscale = bee_icons["[icon_base]_grey_[col]"] - greyscale.color = col - add_overlay(greyscale) + var/static/mutable_appearance/greyscale_overlay + greyscale_overlay = greyscale_overlay || mutable_appearance('icons/mob/bees.dmi') + greyscale_overlay.icon_state = "[icon_base]_grey" + greyscale_overlay.color = col + add_overlay(greyscale_overlay) - var/image/wings - if(!bee_icons["[icon_base]_wings"]) - bee_icons["[icon_base]_wings"] = image(icon = 'icons/mob/bees.dmi', icon_state = "[icon_base]_wings") - wings = bee_icons["[icon_base]_wings"] - add_overlay(wings) + add_overlay("[icon_base]_wings") //We don't attack beekeepers/people dressed as bees//Todo: bee costume diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 825b376a07f..aade8cbca16 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca var/mob/living/creator = null // the creator var/destroy_objects = 0 var/knockdown_people = 0 - var/image/googly_eyes = null + var/static/mutable_appearance/googly_eyes = mutable_appearance('icons/mob/mob.dmi', "googly_eyes") gold_core_spawnable = 0 /mob/living/simple_animal/hostile/mimic/copy/Initialize(mapload, obj/copy, mob/living/creator, destroy_original = 0) @@ -143,7 +143,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca icon_state = O.icon_state icon_living = icon_state copy_overlays(O) - googly_eyes = image('icons/mob/mob.dmi',"googly_eyes") add_overlay(googly_eyes) if(istype(O, /obj/structure) || istype(O, /obj/machinery)) health = (anchored * 50) + 50 @@ -178,11 +177,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca C.visible_message("\The [src] knocks down \the [C]!", \ "\The [src] knocks you down!") -/mob/living/simple_animal/hostile/mimic/copy/Aggro() - ..() - googly_eyes.setDir(get_dir(src,target)) - - /mob/living/simple_animal/hostile/mimic/copy/machine speak = list("HUMANS ARE IMPERFECT!", "YOU SHALL BE ASSIMILATED!", "YOU ARE HARMING YOURSELF", "You have been deemed hazardous. Will you comply?", \ "My logic is undeniable.", "One of us.", "FLESH IS WEAK", "THIS ISN'T WAR, THIS IS EXTERMINATION!") diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index 4419b3eb04d..202a26b355c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -29,12 +29,13 @@ unique_name = 1 speak_emote = list("squeaks") deathmessage = "fainted." + var/cap_color = "#ffffff" var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight var/faint_ticker = 0 //If we hit three, another mushroom's gonna eat us - var/image/cap_living = null //Where we store our cap icons so we dont generate them constantly to update our icon - var/image/cap_dead = null + var/static/mutable_appearance/cap_living //Where we store our cap icons so we dont generate them constantly to update our icon + var/static/mutable_appearance/cap_dead /mob/living/simple_animal/hostile/mushroom/examine(mob/user) ..() @@ -53,11 +54,10 @@ melee_damage_upper += rand(10,20) maxHealth += rand(40,60) move_to_delay = rand(3,11) - var/cap_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) - cap_living = image('icons/mob/animal.dmi',icon_state = "mushroom_cap") - cap_dead = image('icons/mob/animal.dmi',icon_state = "mushroom_cap_dead") - cap_living.color = cap_color - cap_dead.color = cap_color + cap_living = cap_living || mutable_appearance(icon, "mushroom_cap") + cap_dead = cap_dead || mutable_appearance(icon, "mushroom_cap_dead") + + cap_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) UpdateMushroomCap() health = maxHealth ..() @@ -101,6 +101,8 @@ /mob/living/simple_animal/hostile/mushroom/proc/UpdateMushroomCap() cut_overlays() + cap_living.color = cap_color + cap_dead.color = cap_color if(health == 0) add_overlay(cap_dead) else diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm index 9deb139497d..a0078013c7a 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm @@ -32,35 +32,31 @@ gold_core_spawnable = 0 //too spooky for science var/ghost_hair_style var/ghost_hair_color - var/image/ghost_hair = null + var/mutable_appearance/ghost_hair var/ghost_facial_hair_style var/ghost_facial_hair_color - var/image/ghost_facial_hair = null + var/mutable_appearance/ghost_facial_hair var/random = TRUE //if you want random names for ghosts or not /mob/living/simple_animal/hostile/retaliate/ghost/Initialize() . = ..() - if(!random) - give_hair() - else + give_hair() + if(random) switch(rand(0,1)) if(0) name = "ghost of [pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" if(1) name = "ghost of [pick(GLOB.first_names_female)] [pick(GLOB.last_names)]" - give_hair() /mob/living/simple_animal/hostile/retaliate/ghost/proc/give_hair() if(ghost_hair_style != null) - ghost_hair = image('icons/mob/human_face.dmi', "hair_[ghost_hair_style]") - ghost_hair.layer = -HAIR_LAYER + ghost_hair = mutable_appearance('icons/mob/human_face.dmi', "hair_[ghost_hair_style]", -HAIR_LAYER) ghost_hair.alpha = 200 ghost_hair.color = ghost_hair_color add_overlay(ghost_hair) if(ghost_facial_hair_style != null) - ghost_facial_hair = image('icons/mob/human_face.dmi', "facial_[ghost_facial_hair_style]") - ghost_facial_hair.layer = -HAIR_LAYER + ghost_facial_hair = mutable_appearance('icons/mob/human_face.dmi', "facial_[ghost_facial_hair_style]", -HAIR_LAYER) ghost_facial_hair.alpha = 200 ghost_facial_hair.color = ghost_facial_hair_color add_overlay(ghost_facial_hair) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index d9c6ed54c76..8971d33b284 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -118,7 +118,7 @@ if(stat != DEAD) icon_state = icon_text if(mood && !stat) - add_overlay(image('icons/mob/slimes.dmi', icon_state = "aslime-[mood]")) + add_overlay("aslime-[mood]") else icon_state = icon_dead ..() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 3942014fb9f..2700d35092f 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -377,7 +377,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp /mob/proc/reagent_check(datum/reagent/R) // utilized in the species code return 1 -/proc/notify_ghosts(var/message, var/ghost_sound = null, var/enter_link = null, var/atom/source = null, var/image/alert_overlay = null, var/action = NOTIFY_JUMP, flashwindow = TRUE) //Easy notification of ghosts. +/proc/notify_ghosts(var/message, var/ghost_sound = null, var/enter_link = null, var/atom/source = null, var/mutable_appearance/alert_overlay = null, var/action = NOTIFY_JUMP, flashwindow = TRUE) //Easy notification of ghosts. if(SSatoms.initialized != INITIALIZATION_INNEW_REGULAR) //don't notify for objects created during a map load return for(var/mob/dead/observer/O in GLOB.player_list) @@ -396,17 +396,10 @@ It's fairly easy to fix if dealing with single letters but not so much with comp A.action = action A.target = source if(!alert_overlay) - var/old_layer = source.layer - var/old_plane = source.plane - source.layer = FLOAT_LAYER - source.plane = FLOAT_PLANE - A.add_overlay(source) - source.layer = old_layer - source.plane = old_plane - else - alert_overlay.layer = FLOAT_LAYER - alert_overlay.plane = FLOAT_PLANE - A.add_overlay(alert_overlay) + alert_overlay = new(src) + alert_overlay.layer = FLOAT_LAYER + alert_overlay.plane = FLOAT_PLANE + A.add_overlay(alert_overlay) /proc/item_heal_robotic(mob/living/carbon/human/H, mob/user, brute_heal, burn_heal) var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected)) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 72fe84de458..36e69828b27 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -336,12 +336,10 @@ return stamps += "" - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') + var/mutable_appearance/stampoverlay = mutable_appearance('icons/obj/bureaucracy.dmi', "paper_[P.icon_state]") stampoverlay.pixel_x = rand(-2, 2) stampoverlay.pixel_y = rand(-3, 2) - stampoverlay.icon_state = "paper_[P.icon_state]" - LAZYADD(stamped, P.icon_state) add_overlay(stampoverlay) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 227aee9681f..6a25273b83e 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -135,7 +135,7 @@ icon_state = "[initial(icon_state)]" cut_overlays() if(bin_pen) - add_overlay(image(icon=bin_pen.icon,icon_state=bin_pen.icon_state)) + add_overlay(mutable_appearance(bin_pen.icon, bin_pen.icon_state)) /obj/item/weapon/paper_bin/construction name = "construction paper bin" diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index e7742b4bc86..2514784bcb5 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -44,8 +44,7 @@ var/list/stamped = internalPaper.stamped if(stamped) for(var/S in stamped) - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[stamped]") - add_overlay(stampoverlay) + add_overlay("paperplane_[S]") /obj/item/weapon/paperplane/attack_self(mob/user) to_chat(user, "You unfold [src].") diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 3c8cc467325..46332854887 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -93,12 +93,6 @@ var/force_update = 0 var/update_state = -1 var/update_overlay = -1 - var/global/status_overlays = 0 - var/global/list/status_overlays_lock - var/global/list/status_overlays_charging - var/global/list/status_overlays_equipment - var/global/list/status_overlays_lighting - var/global/list/status_overlays_environ /obj/machinery/power/apc/connect_to_network() @@ -218,35 +212,6 @@ // update the APC icon to show the three base states // also add overlays for indicator lights /obj/machinery/power/apc/update_icon() - if (!status_overlays) - status_overlays = 1 - status_overlays_lock = new(2) - status_overlays_charging = new(3) - status_overlays_equipment = new(4) - status_overlays_lighting = new(4) - status_overlays_environ = new(4) - - status_overlays_lock[1] = image(icon, "apcox-0") // 0=blue 1=red - status_overlays_lock[2] = image(icon, "apcox-1") - - status_overlays_charging[1] = image(icon, "apco3-0") - status_overlays_charging[2] = image(icon, "apco3-1") - status_overlays_charging[3] = image(icon, "apco3-2") - - status_overlays_equipment[1] = image(icon, "apco0-0") - status_overlays_equipment[2] = image(icon, "apco0-1") - status_overlays_equipment[3] = image(icon, "apco0-2") - status_overlays_equipment[4] = image(icon, "apco0-3") - - status_overlays_lighting[1] = image(icon, "apco1-0") - status_overlays_lighting[2] = image(icon, "apco1-1") - status_overlays_lighting[3] = image(icon, "apco1-2") - status_overlays_lighting[4] = image(icon, "apco1-3") - - status_overlays_environ[1] = image(icon, "apco2-0") - status_overlays_environ[2] = image(icon, "apco2-1") - status_overlays_environ[3] = image(icon, "apco2-2") - status_overlays_environ[4] = image(icon, "apco2-3") var/update = check_updates() //returns 0 if no need to update icons. // 1 if we need to update the icon_state @@ -283,12 +248,12 @@ cut_overlays() if(!(stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD) var/list/O = list( - status_overlays_lock[locked+1], - status_overlays_charging[charging+1]) + "apcox-[locked]", + "apco3-[charging]") if(operating) - O += status_overlays_equipment[equipment+1] - O += status_overlays_lighting[lighting+1] - O += status_overlays_environ[environ+1] + O += "apco0-[equipment]" + O += "apco1-[lighting]" + O += "apco2-[environ]" add_overlay(O) // And now, seperately for cleanness, the lighting changing diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index c12be4e0135..985fceec23f 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -49,13 +49,13 @@ /obj/item/weapon/stock_parts/cell/proc/updateicon() cut_overlays() if(grown_battery) - add_overlay(image('icons/obj/power.dmi', "grown_wires")) + add_overlay("grown_wires") if(charge < 0.01) return else if(charge/maxcharge >=0.995) - add_overlay(image('icons/obj/power.dmi', "cell-o2")) + add_overlay("cell-o2") else - add_overlay(image('icons/obj/power.dmi', "cell-o1")) + add_overlay("cell-o1") /obj/item/weapon/stock_parts/cell/proc/percent() // return % charge of cell return 100*charge/maxcharge diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 9ae006dfbd2..f3bbc205663 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -64,9 +64,9 @@ cut_overlays() if(lastgenlev != 0) - add_overlay(image('icons/obj/power.dmi', "teg-op[lastgenlev]")) + add_overlay("teg-op[lastgenlev]") - add_overlay(image('icons/obj/power.dmi', "teg-oc[lastcirc]")) + add_overlay("teg-oc[lastcirc]") #define GENRATE 800 // generator output coefficient from Q diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 7e04df570f2..9fc4f668c9c 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -141,11 +141,11 @@ GLOBAL_LIST_EMPTY(rad_collectors) /obj/machinery/power/rad_collector/proc/update_icons() cut_overlays() if(loaded_tank) - add_overlay(image('icons/obj/singularity.dmi', "ptank")) + add_overlay("ptank") if(stat & (NOPOWER|BROKEN)) return if(active) - add_overlay(image('icons/obj/singularity.dmi', "on")) + add_overlay("on") /obj/machinery/power/rad_collector/proc/toggle_power() diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index dc54a3db4e7..410181dede6 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -33,7 +33,7 @@ var/area/A = get_area(src) if(A) - var/image/alert_overlay = image('icons/effects/effects.dmi', "ghostalertsie") + var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/effects.dmi', "ghostalertsie") notify_ghosts("Nar-Sie has risen in \the [A.name]. Reach out to the Geometer to be given a new shell for your soul.", source = src, alert_overlay = alert_overlay, action=NOTIFY_ATTACK) narsie_spawn_animation() diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index e03eaf944ac..fdb4699ae5d 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -38,9 +38,6 @@ var/obj/machinery/power/terminal/terminal = null - var/static/list/smesImageCache - - /obj/machinery/power/smes/examine(user) ..() if(!terminal) @@ -226,36 +223,20 @@ if(panel_open) return - if(!smesImageCache || !smesImageCache.len) - smesImageCache = list() - smesImageCache.len = 9 - - smesImageCache[SMES_CLEVEL_1] = image('icons/obj/power.dmi',"smes-og1") - smesImageCache[SMES_CLEVEL_2] = image('icons/obj/power.dmi',"smes-og2") - smesImageCache[SMES_CLEVEL_3] = image('icons/obj/power.dmi',"smes-og3") - smesImageCache[SMES_CLEVEL_4] = image('icons/obj/power.dmi',"smes-og4") - smesImageCache[SMES_CLEVEL_5] = image('icons/obj/power.dmi',"smes-og5") - - smesImageCache[SMES_OUTPUTTING] = image('icons/obj/power.dmi', "smes-op1") - smesImageCache[SMES_NOT_OUTPUTTING] = image('icons/obj/power.dmi',"smes-op0") - smesImageCache[SMES_INPUTTING] = image('icons/obj/power.dmi', "smes-oc1") - smesImageCache[SMES_INPUT_ATTEMPT] = image('icons/obj/power.dmi', "smes-oc0") - if(outputting) - add_overlay(smesImageCache[SMES_OUTPUTTING]) + add_overlay("smes-op1") else - add_overlay(smesImageCache[SMES_NOT_OUTPUTTING]) + add_overlay("smes-op0") if(inputting) - add_overlay(smesImageCache[SMES_INPUTTING]) + add_overlay("smes-oc1") else if(input_attempt) - add_overlay(smesImageCache[SMES_INPUT_ATTEMPT]) + add_overlay("smes-oc0") var/clevel = chargedisplay() if(clevel>0) - add_overlay(smesImageCache[clevel]) - return + add_overlay("smes-og[clevel]") /obj/machinery/power/smes/proc/chargedisplay() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index e18e6781c20..47e04339d49 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -103,9 +103,9 @@ ..() cut_overlays() if(stat & BROKEN) - add_overlay(image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER)) + add_overlay(mutable_appearance(icon, "solar_panel-b", FLY_LAYER)) else - add_overlay(image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER)) + add_overlay(mutable_appearance(icon, "solar_panel", FLY_LAYER)) src.setDir(angle2dir(adir)) //calculates the fraction of the sunlight that the panel recieves @@ -345,7 +345,8 @@ else add_overlay(icon_screen) if(currentdir > -1) - add_overlay(image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(currentdir))) + setDir(angle2dir(currentdir)) + add_overlay(mutable_appearance(icon, "solcon-o", FLY_LAYER)) /obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 4f194129bd0..120dd0b46c6 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -170,13 +170,13 @@ if(rpm>50000) - add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o4", FLY_LAYER)) + add_overlay(mutable_appearance(icon, "comp-o4", FLY_LAYER)) else if(rpm>10000) - add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o3", FLY_LAYER)) + add_overlay(mutable_appearance(icon, "comp-o3", FLY_LAYER)) else if(rpm>2000) - add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o2", FLY_LAYER)) + add_overlay(mutable_appearance(icon, "comp-o2", FLY_LAYER)) else if(rpm>500) - add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o1", FLY_LAYER)) + add_overlay(mutable_appearance(icon, "comp-o1", FLY_LAYER)) //TODO: DEFERRED // These are crucial to working of a turbine - the stats modify the power output. TurbGenQ modifies how much raw energy can you get from @@ -255,7 +255,7 @@ // If it works, put an overlay that it works! if(lastgen > 100) - add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "turb-o", FLY_LAYER)) + add_overlay(mutable_appearance(icon, "turb-o", FLY_LAYER)) updateDialog() diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 77910478423..4b2a43a3fcf 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -132,15 +132,20 @@ add_overlay("[icon_state]_empty") else if(!shaded_charge) + var/mutable_appearance/charge_overlay = mutable_appearance(icon, iconState) for(var/i = ratio, i >= 1, i--) - add_overlay(image(icon = icon, icon_state = iconState, pixel_x = ammo_x_offset * (i -1))) + charge_overlay.pixel_x = ammo_x_offset * (i - 1) + add_overlay(charge_overlay) else - add_overlay(image(icon = icon, icon_state = "[icon_state]_charge[ratio]")) + add_overlay("[icon_state]_charge[ratio]") if(gun_light && can_flashlight) var/iconF = "flight" if(gun_light.on) iconF = "flight_on" - add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) + var/mutable_appearance/flashlight_overlay = mutable_appearance(icon, iconF) + flashlight_overlay.pixel_x = flight_x_offset + flashlight_overlay.pixel_y = flight_y_offset + add_overlay(flashlight_overlay) if(itemState) itemState += "[ratio]" item_state = itemState diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 07450fc9b5a..6a5dab12bf6 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -136,7 +136,10 @@ var/iconF = "flight" if(gun_light.on) iconF = "flight_on" - add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) + var/mutable_appearance/flashlight_overlay = mutable_appearance(icon, iconF) + flashlight_overlay.pixel_x = flight_x_offset + flashlight_overlay.pixel_y = flight_y_offset + add_overlay(flashlight_overlay) //Casing /obj/item/ammo_casing/energy/kinetic diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index b4166d8070e..f8989a2304d 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -14,7 +14,7 @@ var/amount = 30 var/recharged = 0 var/recharge_delay = 5 - var/image/icon_beaker = null + var/mutable_appearance/beaker_overlay var/obj/item/weapon/reagent_containers/beaker = null var/list/dispensable_reagents = list( "hydrogen", @@ -184,10 +184,9 @@ beaker.loc = src to_chat(user, "You add \the [B] to the machine.") - if(!icon_beaker) - icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. - icon_beaker.pixel_x = rand(-10,5) - add_overlay(icon_beaker) + beaker_overlay = beaker_overlay || mutable_appearance(icon, "disp_beaker") + beaker_overlay.pixel_x = rand(-10, 5)//randomize beaker overlay position. + add_overlay(beaker_overlay) else if(user.a_intent != INTENT_HARM && !istype(I, /obj/item/weapon/card/emag)) to_chat(user, "You can't load \the [I] into the machine!") else diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index cb06dc29eec..5eb034d6043 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -15,7 +15,7 @@ else Wall.thermite = Wall.thermite+(reac_volume*10) Wall.overlays = list() - Wall.add_overlay(image('icons/effects/effects.dmi',"thermite")) + Wall.add_overlay(mutable_appearance('icons/effects/effects.dmi', "thermite")) /datum/reagent/thermite/on_mob_life(mob/living/M) M.adjustFireLoss(1, 0) diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 01f39db4d35..fc08ebdbe8d 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -21,7 +21,7 @@ /obj/item/weapon/reagent_containers/glass/bottle/update_icon() cut_overlays() if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]-10") + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[icon_state]-10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index 7b4faf0f7a0..9f0094bfc32 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -91,6 +91,6 @@ /obj/item/weapon/reagent_containers/dropper/update_icon() cut_overlays() if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "dropper") + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "dropper") filling.color = mix_color_from_reagents(reagents.reagent_list) add_overlay(filling) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 9a4ccada9b2..af130dbce7c 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -133,7 +133,7 @@ cut_overlays() if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[icon_state]10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 0cb848974af..0c40639f1a7 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -167,10 +167,9 @@ item_state = "syringe_[rounded_vol]" if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "syringe10") - filling.icon_state = "syringe[rounded_vol]" - filling.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(filling) + var/image/filling_overlay = mutable_appearance('icons/obj/reagentfillings.dmi', "syringe[rounded_vol]") + filling_overlay.color = mix_color_from_reagents(reagents.reagent_list) + add_overlay(filling_overlay) /obj/item/weapon/reagent_containers/syringe/epinephrine name = "syringe (epinephrine)" diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm index 7cc890c1f64..9b1d5e649f2 100644 --- a/code/modules/recycling/disposal-unit.dm +++ b/code/modules/recycling/disposal-unit.dm @@ -364,7 +364,7 @@ //flush handle if(flush) - add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-handle")) + add_overlay("dispover-handle") //only handle is shown if no power if(stat & NOPOWER || panel_open) @@ -372,13 +372,13 @@ //check for items in disposal - occupied light if(contents.len > 0) - add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-full")) + add_overlay("dispover-full") //charging and ready light if(pressure_charging) - add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-charge")) + add_overlay("dispover-charge") else if(full_pressure) - add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-ready")) + add_overlay("dispover-ready") //timed process //charge the gas reservoir and perform flush if ready diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index ec99299f06d..adc03f829ea 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -4,7 +4,7 @@ GLOBAL_LIST_INIT(message_servers, list()) var/recipient = "Unspecified" //name of the person var/sender = "Unspecified" //name of the sender var/message = "Blank" //transferred message - var/image/photo = null //Attached photo + var/icon/photo //Attached photo /datum/data_pda_msg/New(var/param_rec = "",var/param_sender = "",var/param_message = "",var/param_photo=null) diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index 6d18ce98f7e..2938f9263cf 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -47,7 +47,7 @@ to_chat(M, "Discordant whispers flood your mind in a thousand voices. Each one speaks your name, over and over. Something horrible has come.") M << 'sound/creatures/legion_spawn.ogg' flash_color(M, flash_color = "#FF0000", flash_time = 50) - var/image/door_overlay = image('icons/effects/effects.dmi', "legiondoor") + var/mutable_appearance/door_overlay = mutable_appearance('icons/effects/effects.dmi', "legiondoor") notify_ghosts("Legion has been summoned in the [get_area(src)]!", source = src, alert_overlay = door_overlay, action = NOTIFY_JUMP) is_anyone_home = FALSE new/mob/living/simple_animal/hostile/megafauna/legion(get_step(src.loc, SOUTH)) diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm index bb2f401cdba..594a6855da0 100644 --- a/code/modules/shuttle/manipulator.dm +++ b/code/modules/shuttle/manipulator.dm @@ -26,9 +26,9 @@ /obj/machinery/shuttle_manipulator/update_icon() cut_overlays() - var/image/hologram_projection = image(icon, "hologram_on") + var/mutable_appearance/hologram_projection = mutable_appearance(icon, "hologram_on") hologram_projection.pixel_y = 22 - var/image/hologram_ship = image(icon, "hologram_whiteship") + var/mutable_appearance/hologram_ship = mutable_appearance(icon, "hologram_whiteship") hologram_ship.pixel_y = 27 add_overlay(hologram_projection) add_overlay(hologram_ship) diff --git a/code/modules/spells/spell_types/lightning.dm b/code/modules/spells/spell_types/lightning.dm index 4f469b61b2a..3a84f73ef91 100644 --- a/code/modules/spells/spell_types/lightning.dm +++ b/code/modules/spells/spell_types/lightning.dm @@ -11,7 +11,7 @@ selection_type = "view" random_target = 1 var/ready = 0 - var/image/halo = null + var/static/mutable_appearance/halo var/sound/Snd // so far only way i can think of to stop a sound, thank MSO for the idea. action_icon_state = "lightning" @@ -25,7 +25,7 @@ ready = 1 to_chat(user, "You start gathering the power.") Snd = new/sound('sound/magic/lightning_chargeup.ogg',channel = 7) - halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER) + halo = halo || mutable_appearance('icons/effects/effects.dmi', "electricity", EFFECTS_LAYER) user.add_overlay(halo) playsound(get_turf(user), Snd, 50, 0) if(do_mob(user,user,100,1)) @@ -38,8 +38,7 @@ /obj/effect/proc_holder/spell/targeted/tesla/proc/Reset(mob/user = usr) ready = 0 - if(halo) - user.cut_overlay(halo) + user.cut_overlay(halo) /obj/effect/proc_holder/spell/targeted/tesla/revert_cast(mob/user = usr, message = 1) if(message) diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 0d4200d49eb..53a71983023 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -127,7 +127,7 @@ icon = 'icons/obj/lavaland/cannon.dmi' icon_state = "orbital_cannon1" unsecuring_tool = null - var/static/image/top_layer = null + var/static/mutable_appearance/top_layer var/ex_power = 3 var/power_used_per_shot = 2000000 //enough to kil standard apc - todo : make this use wires instead and scale explosion power with it var/ready @@ -163,17 +163,16 @@ /obj/machinery/bsa/full/New(loc,cannon_direction = WEST) ..() + top_layer = top_layer || mutable_appearance(icon, layer = ABOVE_MOB_LAYER) switch(cannon_direction) if(WEST) dir = WEST pixel_x = -192 - top_layer = image("icons/obj/lavaland/orbital_cannon.dmi", "top_west") - top_layer.layer = ABOVE_MOB_LAYER + top_layer.icon_state = "top_west" icon_state = "cannon_west" if(EAST) dir = EAST - top_layer = image("icons/obj/lavaland/orbital_cannon.dmi", "top_east") - top_layer.layer = ABOVE_MOB_LAYER + top_layer.icon_state = "top_east" icon_state = "cannon_east" add_overlay(top_layer) reload() diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 56d35be23b3..d93fc658ddb 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -284,79 +284,66 @@ /obj/item/bodypart/proc/get_limb_icon(dropped) icon_state = "" //to erase the default sprite, we're building the visual aspects of the bodypart through overlays alone. - var/list/standing = list() + . = list() - var/image_dir + var/image_dir = 0 if(dropped) image_dir = SOUTH if(dmg_overlay_type) if(brutestate) - standing += image("icon"='icons/mob/dam_mob.dmi', "icon_state"="[dmg_overlay_type]_[body_zone]_[brutestate]0", "layer"=-DAMAGE_LAYER, "dir"=image_dir) + . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_[brutestate]0", -DAMAGE_LAYER, image_dir) if(burnstate) - standing += image("icon"='icons/mob/dam_mob.dmi', "icon_state"="[dmg_overlay_type]_[body_zone]_0[burnstate]", "layer"=-DAMAGE_LAYER, "dir"=image_dir) + . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir) + var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) + . += limb if(animal_origin) if(status == BODYPART_ORGANIC) + limb.icon = 'icons/mob/animal_parts.dmi' if(species_id == "husk") - standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state"="[animal_origin]_husk_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[animal_origin]_husk_[body_zone]" else - standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state"="[animal_origin]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[animal_origin]_[body_zone]" else - standing += image("icon"='icons/mob/augments.dmi', "icon_state"="[animal_origin]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) - return standing + limb.icon = 'icons/mob/augments.dmi' + limb.icon_state = "[animal_origin]_[body_zone]" + return var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable if((body_zone != "head" && body_zone != "chest")) should_draw_gender = FALSE - var/image/I - if(status == BODYPART_ORGANIC) if(should_draw_greyscale) + limb.icon = 'icons/mob/human_parts_greyscale.dmi' if(should_draw_gender) - I = image("icon"='icons/mob/human_parts_greyscale.dmi', "icon_state"="[species_id]_[body_zone]_[icon_gender]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" else if(use_digitigrade) - I = image("icon"='icons/mob/human_parts_greyscale.dmi', "icon_state"="digitigrade_[use_digitigrade]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "digitigrade_[use_digitigrade]_[body_zone]" else - I = image("icon"='icons/mob/human_parts_greyscale.dmi', "icon_state"="[species_id]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[species_id]_[body_zone]" else + limb.icon = 'icons/mob/human_parts.dmi' if(should_draw_gender) - I = image("icon"='icons/mob/human_parts.dmi', "icon_state"="[species_id]_[body_zone]_[icon_gender]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" else - I = image("icon"='icons/mob/human_parts.dmi', "icon_state"="[species_id]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[species_id]_[body_zone]" + else + limb.icon = icon if(should_draw_gender) - I = image("icon"= icon, "icon_state"="[body_zone]_[icon_gender]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[body_zone]_[icon_gender]" else - I = image("icon"= icon, "icon_state"="[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) - standing += I - return standing - - - if(!should_draw_greyscale) - standing += I - return standing - - //Greyscale Colouring - var/draw_color - - if(skin_tone) //Limb has skin color variable defined, use it - draw_color = skintone2hex(skin_tone) - if(species_color) - draw_color = species_color - if(mutation_color) - draw_color = mutation_color - - if(draw_color) - I.color = "#[draw_color]" - //End Greyscale Colouring - standing += I - - return standing + limb.icon_state = "[body_zone]" + return + if(should_draw_greyscale) + var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone)) + if(draw_color) + limb.color = "#[draw_color]" /obj/item/bodypart/deconstruct(disassembled = TRUE) drop_organs() diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 6417ade8198..909f83e4d71 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -119,7 +119,7 @@ /obj/item/bodypart/head/get_limb_icon(dropped) cut_overlays() - var/list/standing = ..() + . = ..() if(dropped) //certain overlays only appear when the limb is being detached from its owner. var/datum/sprite_accessory/S @@ -128,45 +128,48 @@ if(facial_hair_style) S = GLOB.facial_hair_styles_list[facial_hair_style] if(S) - var/image/img_facial = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER, "dir"=SOUTH) - img_facial.color = "#" + facial_hair_color - img_facial.alpha = hair_alpha - standing += img_facial + var/image/facial_overlay = image(S.icon, "[S.icon_state]", -HAIR_LAYER, SOUTH) + facial_overlay.color = "#" + facial_hair_color + facial_overlay.alpha = hair_alpha + . += facial_overlay + var/image/hair_overlay = image(layer = -HAIR_LAYER, dir = SOUTH) + . += hair_overlay //Applies the debrained overlay if there is no brain if(!brain) if(animal_origin == ALIEN_BODYPART) - standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state" = "debrained_alien", "layer" = -HAIR_LAYER, "dir"=SOUTH) + hair_overlay.icon = 'icons/mob/animal_parts.dmi' + hair_overlay.icon_state = "debrained_alien" else if(animal_origin == LARVA_BODYPART) - standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state" = "debrained_larva", "layer" = -HAIR_LAYER, "dir"=SOUTH) + hair_overlay.icon = 'icons/mob/animal_parts.dmi' + hair_overlay.icon_state = "debrained_larva" else if(!(NOBLOOD in species_flags_list)) - standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER, "dir"=SOUTH) + hair_overlay.icon = 'icons/mob/human_face.dmi' + hair_overlay.icon_state = "debrained" else if(hair_style) S = GLOB.hair_styles_list[hair_style] if(S) - var/image/img_hair = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER, "dir"=SOUTH) - img_hair.color = "#" + hair_color - img_hair.alpha = hair_alpha - standing += img_hair + hair_overlay.icon = icon + hair_overlay.icon_state = "[S.icon_state]" + hair_overlay.color = "#" + hair_color + hair_overlay.alpha = hair_alpha // lipstick if(lip_style) - var/image/lips = image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]", "layer" = -BODY_LAYER, "dir"=SOUTH) - lips.color = lip_color - standing += lips + var/image/lips_overlay = image('icons/mob/human_face.dmi', "lips_[lip_style]", -BODY_LAYER, SOUTH) + lips_overlay.color = lip_color + . += lips_overlay // eyes + var/image/eyes_overlay = image('icons/mob/human_face.dmi', "eyes", -BODY_LAYER, SOUTH) + . += eyes_overlay if(!eyes) - standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "eyes_missing", "layer" = -BODY_LAYER, "dir"=SOUTH) + eyes_overlay.icon_state = "eyes_missing" else if(eyes.eye_color) - var/image/img_eyes = image("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes", "layer" = -BODY_LAYER, "dir"=SOUTH) - img_eyes.color = "#" + eyes.eye_color - standing += img_eyes - - return standing + eyes_overlay.color = "#" + eyes.eye_color /obj/item/bodypart/head/monkey icon = 'icons/mob/animal_parts.dmi' diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 85a98b09e6f..7b4f98693ca 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -11,7 +11,7 @@ if(iscarbon(M)) src.Insert(M) if(implant_overlay) - var/image/overlay = new /image(icon, implant_overlay) + var/mutable_appearance/overlay = mutable_appearance(icon, implant_overlay) overlay.color = implant_color add_overlay(overlay) return ..() diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm index 6afd401b75a..5f663b85f84 100644 --- a/code/modules/vehicles/atv.dm +++ b/code/modules/vehicles/atv.dm @@ -3,7 +3,7 @@ name = "all-terrain vehicle" desc = "An all-terrain vehicle built for traversing rough terrain with ease. One of the few old-earth technologies that are still relevant on most planet-bound outposts." icon_state = "atv" - var/static/image/atvcover = null + var/static/mutable_appearance/atvcover /obj/vehicle/atv/buckle_mob(mob/living/buckled_mob, force = 0, check_loc = 1) . = ..() @@ -11,9 +11,7 @@ /obj/vehicle/atv/New() ..() - if(!atvcover) - atvcover = image("icons/obj/vehicles.dmi", "atvcover") - atvcover.layer = ABOVE_MOB_LAYER + atvcover = atvcover || mutable_appearance(icon, "atvcover", ABOVE_MOB_LAYER) /obj/vehicle/atv/post_buckle_mob(mob/living/M) diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm index 3db99e736b6..21d8cff1be2 100644 --- a/code/modules/vehicles/speedbike.dm +++ b/code/modules/vehicles/speedbike.dm @@ -4,7 +4,7 @@ icon_state = "speedbike_blue" layer = LYING_MOB_LAYER var/overlay_state = "cover_blue" - var/image/overlay = null + var/static/mutable_appearance/overlay /obj/vehicle/space/speedbike/buckle_mob(mob/living/M, force = 0, check_loc = 1) . = ..() @@ -12,8 +12,7 @@ /obj/vehicle/space/speedbike/New() . = ..() - overlay = image("icons/obj/bike.dmi", overlay_state) - overlay.layer = ABOVE_MOB_LAYER + overlay = overlay || mutable_appearance(icon, overlay_state, ABOVE_MOB_LAYER) add_overlay(overlay) /obj/effect/overlay/temp/speedbike_trail diff --git a/tgstation.dme b/tgstation.dme index fcd8d95738c..6785056c1ac 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -218,6 +218,7 @@ #include "code\datums\martial.dm" #include "code\datums\material_container.dm" #include "code\datums\mind.dm" +#include "code\datums\mutable_appearance.dm" #include "code\datums\mutations.dm" #include "code\datums\outfit.dm" #include "code\datums\progressbar.dm"