From 36afce275665798594bbc4e30f38b3189f09e1a2 Mon Sep 17 00:00:00 2001 From: Citinited Date: Sun, 26 Mar 2017 06:37:00 +0100 Subject: [PATCH 001/378] Adds the RPD Now with 100% more Travis support --- code/game/objects/items/weapons/rpd.dm | 315 ++++++++++++++++++ .../closets/secure/engineering.dm | 1 + .../research/designs/autolathe_designs.dm | 8 + nano/templates/rpd.tmpl | 113 +++++++ 4 files changed, 437 insertions(+) create mode 100644 code/game/objects/items/weapons/rpd.dm create mode 100644 nano/templates/rpd.tmpl diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm new file mode 100644 index 00000000000..f640b031e46 --- /dev/null +++ b/code/game/objects/items/weapons/rpd.dm @@ -0,0 +1,315 @@ +/*Contains: + Rapid Pipe Dispenser +*/ + +/obj/item/weapon/rpd + name = "rapid pipe dispenser" + desc = "This device can rapidly dispense atmospherics and disposals piping, manipulate loose piping, and recycle any detached pipes it is applied to." + icon = 'icons/obj/tools.dmi' //Apparently we can't use double quotes here + icon_state = "rpd" + opacity = 0 + density = 0 + anchored = 0.0 + flags = CONDUCT + force = 10.0 + throwforce = 10.0 + throw_speed = 3 + throw_range = 5 + w_class = 3 + materials = list(MAT_METAL = 30000, MAT_GLASS = 5000) + origin_tech = "engineering=4;materials=2" + var/iconrotation = 0 //used to orient icons and pipes + var/initialised = 0 //This stops us unnecessarily checking the cache for icons + var/mode = 1 //Disposals, atmospherics + var/pipemenu = 1 //For nanoUI menus + var/pipetype = 1//For nanoUI menus + var/whatpipe = 0 //What kind of pipe is it? See code/game/machinery/pipe/construction.dm for a list of defines + var/whatdpipe = 0 //What kind of disposals pipe is it? See code/game/machinery/pipe/pipe_dispenser.dm for a list of defines + var/cooldown = 0 //Waiting for something to complete? + var/spawndelay = 4 //Adding a *slight* delay to the RPD, shouldn't be very noticeable + var/walldelay = 40 //How long should drilling into a wall take? + var/datum/effect/system/spark_spread/spark_system + +/obj/item/weapon/rpd/New() + spark_system = new /datum/effect/system/spark_spread() + spark_system.set_up(1, 0, src) + spark_system.attach(src) + +//List of things follow here + +//Pipename, pipe type (see construction.dm), pipe category, number of orientations this pipe has, name of pipe in the icon file, is this pipe bendy? +var/list/pipelist = list( + list("key1" = "Straight pipe", "key2" = "0", "key3" = "1", "key4" = "2", "key5" = "simple", "key6" = "0"), + list("key1" = "Bent pipe", "key2" = "1", "key3" = "1", "key4" = "4", "key5" = "simple", "key6" = "1"), + list("key1" = "T-manifold", "key2" = "5", "key3" = "1", "key4" = "4", "key5" = "manifold", "key6" = "0"), + list("key1" = "4-way manifold", "key2" = "19", "key3" = "1", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), + list("key1" = "Pipe cap", "key2" = "20", "key3" = "1", "key4" = "4", "key5" = "cap", "key6" = "0"), + list("key1" = "Manual valve", "key2" = "8", "key3" = "1", "key4" = "2", "key5" = "mvalve", "key6" = "0"), + list("key1" = "Digital valve", "key2" = "35", "key3" = "1", "key4" = "2", "key5" = "dvalve", "key6" = "0"), + list("key1" = "Manual T-valve", "key2" = "18", "key3" = "1", "key4" = "4", "key5" = "tvalve", "key6" = "0"), + list("key1" = "Digital T-valve", "key2" = "38", "key3" = "1", "key4" = "4", "key5" = "dtvalve", "key6" = "0"), + list("key1" = "Straight supply pipe", "key2" = "24", "key3" = "2", "key4" = "2", "key5" = "simple", "key6" = "0"), + list("key1" = "Bent supply pipe", "key2" = "25", "key3" = "2", "key4" = "4", "key5" = "simple", "key6" = "1"), + list("key1" = "Supply T-manifold", "key2" = "28", "key3" = "2", "key4" = "4", "key5" = "manifold", "key6" = "0"), + list("key1" = "4-way supply manifold", "key2" = "30", "key3" = "2", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), + list("key1" = "Supply pipe cap", "key2" = "32", "key3" = "2", "key4" = "4", "key5" = "cap", "key6" = "0"), + list("key1" = "Straight scrubbers pipe", "key2" = "26", "key3" = "3", "key4" = "2", "key5" = "simple", "key6" = "0"), + list("key1" = "Bent scrubbers pipe", "key2" = "27", "key3" = "3", "key4" = "4", "key5" = "simple", "key6" = "1"), + list("key1" = "Scrubbers T-manifold", "key2" = "29", "key3" = "3", "key4" = "4", "key5" = "manifold", "key6" = "0"), + list("key1" = "4-way scrubbers manifold", "key2" = "31", "key3" = "3", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), + list("key1" = "Scrubbers pipe cap", "key2" = "33", "key3" = "3", "key4" = "4", "key5" = "cap", "key6" = "0"), + list("key1" = "Universal pipe adapter", "key2" = "23", "key3" = "4", "key4" = "2", "key5" = "universal", "key6" = "0"), + list("key1" = "Unary vent", "key2" = "7", "key3" = "4", "key4" = "4", "key5" = "uvent", "key6" = "0"), + list("key1" = "Scrubber", "key2" = "10", "key3" = "4", "key4" = "4", "key5" = "scrubber", "key6" = "0"), + list("key1" = "Air injector", "key2" = "34", "key3" = "4", "key4" = "4", "key5" = "injector", "key6" = "0"), + list("key1" = "Gas pump", "key2" = "9", "key3" = "4", "key4" = "4", "key5" = "pump", "key6" = "0"), + list("key1" = "Volume pump", "key2" = "16", "key3" = "4", "key4" = "4", "key5" = "volumepump", "key6" = "0"), + list("key1" = "Passive gate", "key2" = "15", "key3" = "4", "key4" = "4", "key5" = "passivegate", "key6" = "0"), + list("key1" = "Connector", "key2" = "4", "key3" = "4", "key4" = "4", "key5" = "connector", "key6" = "0"), + list("key1" = "Gas sensor", "key2" = "98", "key3" = "4", "key4" = "1", "key5" = "sensor", "key6" = "0"), + list("key1" = "Meter", "key2" = "99", "key3" = "4", "key4" = "1", "key5" = "meter", "key6" = "0"), + list("key1" = "Gas filter", "key2" = "13", "key3" = "4", "key4" = "4", "key5" = "filter", "key6" = "0"), + list("key1" = "Gas mixer", "key2" = "14", "key3" = "4", "key4" = "4", "key5" = "mixer", "key6" = "0"), + list("key1" = "Dual-port vent pump", "key2" = "36", "key3" = "4", "key4" = "2", "key5" = "dual-port vent", "key6" = "0"), + list("key1" = "Passive vent", "key2" = "37", "key3" = "4", "key4" = "4", "key5" = "passive vent", "key6" = "0"), + list("key1" = "Straight HE pipe", "key2" = "2", "key3" = "5", "key4" = "2", "key5" = "he", "key6" = "0"), + list("key1" = "Bent HE pipe", "key2" = "3", "key3" = "5", "key4" = "4", "key5" = "he", "key6" = "1"), + list("key1" = "Junction", "key2" = "6", "key3" = "5", "key4" = "4", "key5" = "junction", "key6" = "0"), + list("key1" = "Heat exchanger", "key2" = "17", "key3" = "5", "key4" = "4", "key5" = "heunary", "key6" = "0")) + +//Pipename, pipe type, no. of unique orientations, name of pipe icon +var/list/dpipelist = list( + list("key1" = "Straight pipe", "key2" = "0", "key3" = "2", "key4" = "conpipe-s"), + list("key1" = "Bent pipe", "key2" = "1", "key3" = "4", "key4" = "conpipe-c"), + list("key1" = "Junction", "key2" = "2", "key3" = "4", "key4" = "conpipe-j1"), + list("key1" = "Y-junction", "key2" = "4", "key3" = "4", "key4" = "conpipe-y"), + list("key1" = "Trunk", "key2" = "5", "key3" = "4", "key4" = "conpipe-t"), + list("key1" = "Bin", "key2" = "6", "key3" = "1", "key4" = "condisposal"), + list("key1" = "Outlet", "key2" = "7", "key3" = "4", "key4" = "outlet"), + list("key1" = "Chute", "key2" = "8", "key3" = "4", "key4" = "intake")) + +//Procs + +/obj/item/weapon/rpd/proc/Activaterpd(soundfile, delay) + playsound(loc, soundfile, 50, 1) + if(prob(15)) + spark_system.start() + if(delay == 1) + cooldown = 1 + spawn(spawndelay) + cooldown = 0 + return + +/obj/item/weapon/rpd/proc/Checkifbent(x) + if(x in list(1,3,25,27)) + return 1 + else + return 0 + +//This proc puts each necessary icon into the initial user's cache for later use. It then sets initialised = 1 to avoid calling itself unnecessarily. +/obj/item/weapon/rpd/proc/Initialiseicons() + if(initialised == 1) + return + var/F + var/I + var/disposalsfile = "icons/obj/pipes/disposal.dmi" + var/pipefile = "icons/obj/pipe-item.dmi" + var/list/filenames + for(I in pipelist) + if(I["key6"] == "1")//Bendy pipe icons + filenames = list( + list(I["key5"] + "-southeast.png", SOUTHEAST), + list(I["key5"] + "-southwest.png", SOUTHWEST), + list(I["key5"] + "-northwest.png", NORTHWEST), + list(I["key5"] + "-northeast.png", NORTHEAST)) + else if(I["key4"] == "2") //Dual state icons + filenames = list( + list(I["key5"] + "-north.png", NORTH), + list(I["key5"] + "-east.png", EAST)) + else if(I["key4"] == "4")//All other pipes that need icons + filenames = list( + list(I["key5"] + "-north.png", NORTH), + list(I["key5"] + "-east.png", EAST), + list(I["key5"] + "-south.png", SOUTH), + list(I["key5"] + "-west.png", WEST)) + else + filenames = . + for(F in filenames) + var/icon/iconfile = icon(pipefile, icon_state = I["key5"], dir = F[2]) + usr << browse_rsc(iconfile, F[1]) + for(I in dpipelist) //All disposals pipes have four states so we don't need to bother checking direction + filenames = list( + list(I["key4"] + "-north.png", NORTH), + list(I["key4"] + "-east.png", EAST), + list(I["key4"] + "-south.png", SOUTH), + list(I["key4"] + "-west.png", WEST)) + for(F in filenames) + var/icon/iconfile = icon(disposalsfile, icon_state = I["key4"], dir = F[2]) + usr << browse_rsc(iconfile, F[1]) + initialised = 1 + return + +/obj/item/weapon/rpd/proc/Manipulatepipes(subject, targetturf, atmosverb, disposalsverb) + if(istype(subject, /obj/item/pipe)) + call(subject, atmosverb)() + else if(istype(subject, /obj/structure/disposalconstruct/)) + call(subject, disposalsverb)() + else + return + +//NanoUI stuff + +/obj/item/weapon/rpd/attack_self(mob/user as mob) + ui_interact(user) + +/obj/item/weapon/rpd/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "rpd.tmpl", "[name]", 600, 650, state = state) + ui.open() + Initialiseicons() + ui.set_auto_update(1) + +/obj/item/weapon/rpd/ui_data(mob/user, ui_key = "main", datum/topic_state/state = inventory_state) + var/data[0] + data["dpipelist"] = dpipelist + data["iconrotation"] = iconrotation + data["mode"] = mode + data["pipelist"] = pipelist + data["pipemenu"] = pipemenu + data["pipetype"] = pipetype + data["whatdpipe"] = whatdpipe + data["whatpipe"] = whatpipe + data["mainmenu"] = list( + list("key1" = "Atmospherics piping", "key2" = "1", "key3" = "wrench"), + list("key1" = "Disposals piping", "key2" = "2", "key3" = "recycle"), + list("key1" = "Rotate mode", "key2" = "3", "key3" = "rotate-right"), + list("key1" = "Flip mode", "key2" = "4", "key3" = "exchange"), + list("key1" = "Recycle mode", "key2" = "5", "key3" = "trash")) + data["mainmenu"] = list( + list("key1" = "Atmospherics piping", "key2" = "1", "key3" = "wrench"), + list("key1" = "Disposals piping", "key2" = "2", "key3" = "recycle"), + list("key1" = "Rotate mode", "key2" = "3", "key3" = "rotate-right"), + list("key1" = "Flip mode", "key2" = "4", "key3" = "exchange"), + list("key1" = "Recycle mode", "key2" = "5", "key3" = "trash")) + data["pipemenu"] = list( + list("key1" = "Normal pipes", "key2" = "1"), + list("key1" = "Supply pipes", "key2" = "2"), + list("key1" = "Scrubber pipes", "key2" = "3"), + list("key1" = "Devices", "key2" = "4"), + list("key1" = "HE pipes", "key2" = "5")) + return data + +/obj/item/weapon/rpd/Topic(href, href_list, nowindow, state) + if(href_list["iconrotation"]) + iconrotation = text2num(href_list["iconrotation"]) + else if(href_list["whatpipe"]) + whatpipe = text2num(href_list["whatpipe"]) + else if(href_list["whatdpipe"]) + whatdpipe = text2num(href_list["whatdpipe"]) + else if(href_list["pipetype"]) + pipetype = text2num(href_list["pipetype"]) + else if(href_list["mode"]) + mode = text2num(href_list["mode"]) + else if(href_list["refresh"]) + to_chat(usr, "You press the reset button, refreshing all settings on the [src].") + iconrotation = 0 + initialised = 0 + mode = 1 + pipemenu = 1 + pipetype = 1 + whatpipe = 0 + whatdpipe = 0 + cooldown = 0 + Initialiseicons() + else + return + nanomanager.update_uis(src) + return + +//What the RPD actually does + +/obj/item/weapon/rpd/afterattack(atom/target, mob/user as mob, proximity) + var/turf/T = get_turf(target) + if(!proximity) + return + else if(cooldown == 1) + return + else if(!isturf(target) && !istype(target, /obj/item/pipe) && !istype(target, /obj/item/pipe_meter) && !istype(target, /obj/item/pipe_gsensor) && !istype(target, /obj/structure/disposalconstruct)) + return + else if(istype(target, /turf/simulated/shuttle)) + return + else if(mode == 1) //Atmos mode + if(istype(T, /turf/simulated/wall)) //Drilling into walls takes time and we don't want to do anything else while drilling + cooldown = 1 + playsound(get_turf(src), "sound/weapons/circsawhit.ogg", 50, 1) + usr.visible_message("[usr] starts drilling a hole in [T]...", "You start drilling a hole in [T]...", "You hear a drill.") + if(do_after(usr, walldelay, target = T)) + usr.visible_message("[usr] finishes drilling a hole in [T]!", "You finish drilling a hole in [T]!", "You hear clanking.") + else + cooldown = 0 + return + if(whatpipe == 98)//need to check if it's a meter or a gas sensor separately ayylmao + new /obj/item/pipe_gsensor(T) + to_chat(usr, "[src] dispenses a sensor!") + Activaterpd("sound/machines/click.ogg", 1) + return + if(whatpipe == 99) + new /obj/item/pipe_meter(T) + to_chat(usr, "[src] dispenses a meter!") + Activaterpd("sound/machines/click.ogg", 1) + return + var/obj/item/pipe/P = new(T, pipe_type=whatpipe, dir = usr.dir) //Now we make the pipes + if(iconrotation == 0 && Checkifbent(P.pipe_type) == 1) //Automatic rotation of dispensed pipes + P.dir = turn(usr.dir, 135) + else if(iconrotation == 0 && P.pipe_type in list(4, 7, 10, 17, 20, 32, 33, 34, 37)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction + call(P, /obj/item/pipe/verb/flip)() + else if(iconrotation != 0 && Checkifbent(P.pipe_type) == 1) //If they selected a rotation and the pipe is bent + P.dir = turn(iconrotation, -45) + else if(iconrotation != 0) + P.dir = iconrotation + P.update() + to_chat(usr, "[src] rapidly dispenses [P]!") + Activaterpd("sound/machines/click.ogg", 1) + else if(mode == 2) //Disposals mode + if(istype(T, /turf/simulated/wall)) + to_chat(usr, "That type of pipe won't fit on [T]!") + return + if(is_blocked_turf(T) == 1 && whatdpipe in list(6, 7, 8))//We need to check if the targetted turf is already dense, in case some goofball sticks 100 bins in front of security or something + to_chat(usr, "You can't dispense that on [T] because something is in the way!") + return + var/obj/structure/disposalconstruct/P = new(T) //Now we make the pipe + P.dir = iconrotation + P.ptype = whatdpipe + if(whatdpipe in list(6, 7, 8)) //To properly set density of our bins/chutes/outlets + P.density = 1 + if(iconrotation == 0) //Automatic rotation + P.dir = usr.dir + if(iconrotation == 0 && whatdpipe != 2) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though + call(P, /obj/structure/disposalconstruct/verb/flip)() + P.update() + to_chat(usr, "[src] rapidly dispenses [P]!") + Activaterpd("sound/machines/click.ogg", 1) + return + else if(mode == 3) //Rotate mode + for(var/obj/W in T) + Manipulatepipes(W, T, /obj/item/pipe/verb/rotate, /obj/structure/disposalconstruct/verb/rotate) + return + else if(mode == 4) //Flip mode + for(var/obj/W in T) + Manipulatepipes(W, T, /obj/item/pipe/verb/flip, /obj/structure/disposalconstruct/verb/flip) + return + else if(mode == 5) //Delete mode + var/eaten + for(var/obj/W in T) + if(istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter) || istype(W, /obj/item/pipe_gsensor) || istype(W, /obj/structure/disposalconstruct) && W.anchored == 0) + qdel(W) + eaten = 1 + if(eaten == 1) + to_chat(usr, "[src] sucks up the loose pipes on [T]!") + Activaterpd("sound/items/Deconstruct.ogg", 1) + else + to_chat(usr, "There were no loose pipes on [T].") + return + else //Finished. + return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index d130b22074c..4ec3c0e649d 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -143,3 +143,4 @@ new /obj/item/weapon/watertank/atmos(src) new /obj/item/clothing/suit/fire/atmos(src) new /obj/item/clothing/head/hardhat/atmos(src) + new /obj/item/weapon/rpd(src) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 7431e44737c..fc60cd23ffa 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -608,6 +608,14 @@ build_path = /obj/item/weapon/rcd category = list("hacked", "Construction") +/datum/design/rpd + name = "Rapid Pipe Dispenser" + id = "rpd" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30000, MAT_GLASS = 5000) + build_path = /obj/item/weapon/rpd + category = list("hacked", "Construction") + /datum/design/electropack name = "Electropack" id = "electropack" diff --git a/nano/templates/rpd.tmpl b/nano/templates/rpd.tmpl new file mode 100644 index 00000000000..9419fcffa1d --- /dev/null +++ b/nano/templates/rpd.tmpl @@ -0,0 +1,113 @@ + +

Mode:

+
{{:helper.link("Reset RPD", "refresh", {"refresh": 1}, data.refresh == 1 ? "linkOn" : null)}}
+
+ {{for data.mainmenu}} + {{:helper.link(String(value.key1), String(value.key3), {"mode": Number(value.key2)}, data.mode == Number(value.key2) ? "linkOn" : null)}} + {{/for}} +
+{{if data.mode == 1}} +

Pipe type:

+
+ {{for data.pipemenu}} + {{:helper.link(String(value.key1), null, {"pipetype": Number(value.key2)}, data.pipetype == Number(value.key2) ? "linkOn" : null)}} + {{/for}} +
+

Available pipes:

+
+ {{for data.pipelist}} + {{if value.key3 == data.pipetype}} +
{{:helper.link(String(value.key1), "arrow-right", {"whatpipe": Number(value.key2)}, data.whatpipe == Number(value.key2) ? "linkOn" : null)}}
+ {{/if}} + {{/for}} +
+ {{for data.pipelist}} +
+ {{if value.key2 == data.whatpipe && value.key4 != 1}} +
+ {{:helper.link("Orient automatically", null, {"iconrotation": 0}, data.iconrotation == 0 ? "linkOn" : null)}} +
+ {{/if}} + {{if value.key2 == data.whatpipe && value.key4 != 1 && value.key6 != 1}} +
+ {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} + +
+
+ {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} + +
+ {{/if}} + {{if value.key2 == data.whatpipe && value.key4 == 4 && value.key6 != 1}} +
+ {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} + +
+
+ {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} + +
+ {{/if}} + {{if value.key2 == data.whatpipe && value.key6 == 1}} +
+ {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} + +
+
+ {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} + +
+
+ {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} + +
+
+ {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} + +
+ {{/if}} +
+ {{/for}} +{{else data.mode == 2}} +

Available pipes:

+
+ {{for data.dpipelist}} +
{{:helper.link(String(value.key1), "arrow-right", {"whatdpipe": Number(value.key2)}, data.whatdpipe == Number(value.key2) ? "linkOn" : null)}}
+ {{/for}} +
+ {{for data.dpipelist}} +
+ {{if value.key2 == data.whatdpipe && value.key3 != 1}} +
+ {{:helper.link("Orient automatically", null, {"iconrotation": 0}, data.iconrotation == 0 ? "linkOn" : null)}} +
+
+ {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} + +
+
+ {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} + +
+ {{/if}} + {{if value.key2 == data.whatdpipe && value.key3 == 4}} +
+ {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} + +
+
+ {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} + +
+ {{/if}} +
+ {{/for}} +{{else data.mode == 3}} +

Device ready to rotate loose pipes...

+{{else data.mode == 4}} +

Device ready to flip loose pipes...

+{{else data.mode == 5}} +

Device ready to eat loose pipes...

+{{/if}} From 16688d7494bdccef900f023b15e4f9fb53bdac8d Mon Sep 17 00:00:00 2001 From: Citinited Date: Sun, 26 Mar 2017 06:55:49 +0100 Subject: [PATCH 002/378] Commits the DME Damn you Travis --- paradise.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/paradise.dme b/paradise.dme index b87c0b16ab0..84127d42021 100644 --- a/paradise.dme +++ b/paradise.dme @@ -809,6 +809,7 @@ #include "code\game\objects\items\weapons\powerfist.dm" #include "code\game\objects\items\weapons\RCD.dm" #include "code\game\objects\items\weapons\RCL.dm" +#include "code\game\objects\items\weapons\rpd.dm" #include "code\game\objects\items\weapons\RSF.dm" #include "code\game\objects\items\weapons\scissors.dm" #include "code\game\objects\items\weapons\scrolls.dm" From 769244d40a058e0d77ca86906637b82d4a826dea Mon Sep 17 00:00:00 2001 From: Citinited Date: Sat, 8 Apr 2017 07:01:57 +0100 Subject: [PATCH 003/378] Improves legibility of rpd.dm and somewhat improves the code Minor text fixes --- code/game/objects/items/weapons/rpd.dm | 224 ++++++++++++------------- 1 file changed, 106 insertions(+), 118 deletions(-) diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index f640b031e46..7db79cdd06f 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -9,17 +9,17 @@ icon_state = "rpd" opacity = 0 density = 0 - anchored = 0.0 + anchored = 0 flags = CONDUCT - force = 10.0 - throwforce = 10.0 + force = 10 + throwforce = 10 throw_speed = 3 throw_range = 5 w_class = 3 materials = list(MAT_METAL = 30000, MAT_GLASS = 5000) origin_tech = "engineering=4;materials=2" var/iconrotation = 0 //used to orient icons and pipes - var/initialised = 0 //This stops us unnecessarily checking the cache for icons + var/initialised //This stops us unnecessarily checking the cache for icons var/mode = 1 //Disposals, atmospherics var/pipemenu = 1 //For nanoUI menus var/pipetype = 1//For nanoUI menus @@ -37,56 +37,56 @@ //List of things follow here -//Pipename, pipe type (see construction.dm), pipe category, number of orientations this pipe has, name of pipe in the icon file, is this pipe bendy? +//Pipename, pipe type (see construction.dm), pipe category, number of unique orientations, name of pipe icon, is this pipe bendy? var/list/pipelist = list( - list("key1" = "Straight pipe", "key2" = "0", "key3" = "1", "key4" = "2", "key5" = "simple", "key6" = "0"), - list("key1" = "Bent pipe", "key2" = "1", "key3" = "1", "key4" = "4", "key5" = "simple", "key6" = "1"), - list("key1" = "T-manifold", "key2" = "5", "key3" = "1", "key4" = "4", "key5" = "manifold", "key6" = "0"), - list("key1" = "4-way manifold", "key2" = "19", "key3" = "1", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), - list("key1" = "Pipe cap", "key2" = "20", "key3" = "1", "key4" = "4", "key5" = "cap", "key6" = "0"), - list("key1" = "Manual valve", "key2" = "8", "key3" = "1", "key4" = "2", "key5" = "mvalve", "key6" = "0"), - list("key1" = "Digital valve", "key2" = "35", "key3" = "1", "key4" = "2", "key5" = "dvalve", "key6" = "0"), - list("key1" = "Manual T-valve", "key2" = "18", "key3" = "1", "key4" = "4", "key5" = "tvalve", "key6" = "0"), - list("key1" = "Digital T-valve", "key2" = "38", "key3" = "1", "key4" = "4", "key5" = "dtvalve", "key6" = "0"), - list("key1" = "Straight supply pipe", "key2" = "24", "key3" = "2", "key4" = "2", "key5" = "simple", "key6" = "0"), - list("key1" = "Bent supply pipe", "key2" = "25", "key3" = "2", "key4" = "4", "key5" = "simple", "key6" = "1"), - list("key1" = "Supply T-manifold", "key2" = "28", "key3" = "2", "key4" = "4", "key5" = "manifold", "key6" = "0"), - list("key1" = "4-way supply manifold", "key2" = "30", "key3" = "2", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), - list("key1" = "Supply pipe cap", "key2" = "32", "key3" = "2", "key4" = "4", "key5" = "cap", "key6" = "0"), - list("key1" = "Straight scrubbers pipe", "key2" = "26", "key3" = "3", "key4" = "2", "key5" = "simple", "key6" = "0"), - list("key1" = "Bent scrubbers pipe", "key2" = "27", "key3" = "3", "key4" = "4", "key5" = "simple", "key6" = "1"), - list("key1" = "Scrubbers T-manifold", "key2" = "29", "key3" = "3", "key4" = "4", "key5" = "manifold", "key6" = "0"), - list("key1" = "4-way scrubbers manifold", "key2" = "31", "key3" = "3", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), - list("key1" = "Scrubbers pipe cap", "key2" = "33", "key3" = "3", "key4" = "4", "key5" = "cap", "key6" = "0"), - list("key1" = "Universal pipe adapter", "key2" = "23", "key3" = "4", "key4" = "2", "key5" = "universal", "key6" = "0"), - list("key1" = "Unary vent", "key2" = "7", "key3" = "4", "key4" = "4", "key5" = "uvent", "key6" = "0"), - list("key1" = "Scrubber", "key2" = "10", "key3" = "4", "key4" = "4", "key5" = "scrubber", "key6" = "0"), - list("key1" = "Air injector", "key2" = "34", "key3" = "4", "key4" = "4", "key5" = "injector", "key6" = "0"), - list("key1" = "Gas pump", "key2" = "9", "key3" = "4", "key4" = "4", "key5" = "pump", "key6" = "0"), - list("key1" = "Volume pump", "key2" = "16", "key3" = "4", "key4" = "4", "key5" = "volumepump", "key6" = "0"), - list("key1" = "Passive gate", "key2" = "15", "key3" = "4", "key4" = "4", "key5" = "passivegate", "key6" = "0"), - list("key1" = "Connector", "key2" = "4", "key3" = "4", "key4" = "4", "key5" = "connector", "key6" = "0"), - list("key1" = "Gas sensor", "key2" = "98", "key3" = "4", "key4" = "1", "key5" = "sensor", "key6" = "0"), - list("key1" = "Meter", "key2" = "99", "key3" = "4", "key4" = "1", "key5" = "meter", "key6" = "0"), - list("key1" = "Gas filter", "key2" = "13", "key3" = "4", "key4" = "4", "key5" = "filter", "key6" = "0"), - list("key1" = "Gas mixer", "key2" = "14", "key3" = "4", "key4" = "4", "key5" = "mixer", "key6" = "0"), - list("key1" = "Dual-port vent pump", "key2" = "36", "key3" = "4", "key4" = "2", "key5" = "dual-port vent", "key6" = "0"), - list("key1" = "Passive vent", "key2" = "37", "key3" = "4", "key4" = "4", "key5" = "passive vent", "key6" = "0"), - list("key1" = "Straight HE pipe", "key2" = "2", "key3" = "5", "key4" = "2", "key5" = "he", "key6" = "0"), - list("key1" = "Bent HE pipe", "key2" = "3", "key3" = "5", "key4" = "4", "key5" = "he", "key6" = "1"), - list("key1" = "Junction", "key2" = "6", "key3" = "5", "key4" = "4", "key5" = "junction", "key6" = "0"), - list("key1" = "Heat exchanger", "key2" = "17", "key3" = "5", "key4" = "4", "key5" = "heunary", "key6" = "0")) + list("key1" = "Straight pipe", "key2" = "0", "key3" = "1", "key4" = "2", "key5" = "simple", "key6" = "0"), + list("key1" = "Bent pipe", "key2" = "1", "key3" = "1", "key4" = "4", "key5" = "simple", "key6" = "1"), + list("key1" = "T-manifold", "key2" = "5", "key3" = "1", "key4" = "4", "key5" = "manifold", "key6" = "0"), + list("key1" = "4-way manifold", "key2" = "19", "key3" = "1", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), + list("key1" = "Pipe cap", "key2" = "20", "key3" = "1", "key4" = "4", "key5" = "cap", "key6" = "0"), + list("key1" = "Manual valve", "key2" = "8", "key3" = "1", "key4" = "2", "key5" = "mvalve", "key6" = "0"), + list("key1" = "Digital valve", "key2" = "35", "key3" = "1", "key4" = "2", "key5" = "dvalve", "key6" = "0"), + list("key1" = "Manual T-valve", "key2" = "18", "key3" = "1", "key4" = "4", "key5" = "tvalve", "key6" = "0"), + list("key1" = "Digital T-valve", "key2" = "38", "key3" = "1", "key4" = "4", "key5" = "dtvalve", "key6" = "0"), + list("key1" = "Straight supply pipe", "key2" = "24", "key3" = "2", "key4" = "2", "key5" = "simple", "key6" = "0"), + list("key1" = "Bent supply pipe", "key2" = "25", "key3" = "2", "key4" = "4", "key5" = "simple", "key6" = "1"), + list("key1" = "Supply T-manifold", "key2" = "28", "key3" = "2", "key4" = "4", "key5" = "manifold", "key6" = "0"), + list("key1" = "4-way supply manifold", "key2" = "30", "key3" = "2", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), + list("key1" = "Supply pipe cap", "key2" = "32", "key3" = "2", "key4" = "4", "key5" = "cap", "key6" = "0"), + list("key1" = "Straight scrubbers pipe", "key2" = "26", "key3" = "3", "key4" = "2", "key5" = "simple", "key6" = "0"), + list("key1" = "Bent scrubbers pipe", "key2" = "27", "key3" = "3", "key4" = "4", "key5" = "simple", "key6" = "1"), + list("key1" = "Scrubbers T-manifold", "key2" = "29", "key3" = "3", "key4" = "4", "key5" = "manifold", "key6" = "0"), + list("key1" = "4-way scrubbers manifold", "key2" = "31", "key3" = "3", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), + list("key1" = "Scrubbers pipe cap", "key2" = "33", "key3" = "3", "key4" = "4", "key5" = "cap", "key6" = "0"), + list("key1" = "Universal pipe adapter", "key2" = "23", "key3" = "4", "key4" = "2", "key5" = "universal", "key6" = "0"), + list("key1" = "Unary vent", "key2" = "7", "key3" = "4", "key4" = "4", "key5" = "uvent", "key6" = "0"), + list("key1" = "Scrubber", "key2" = "10", "key3" = "4", "key4" = "4", "key5" = "scrubber", "key6" = "0"), + list("key1" = "Air injector", "key2" = "34", "key3" = "4", "key4" = "4", "key5" = "injector", "key6" = "0"), + list("key1" = "Gas pump", "key2" = "9", "key3" = "4", "key4" = "4", "key5" = "pump", "key6" = "0"), + list("key1" = "Volume pump", "key2" = "16", "key3" = "4", "key4" = "4", "key5" = "volumepump", "key6" = "0"), + list("key1" = "Passive gate", "key2" = "15", "key3" = "4", "key4" = "4", "key5" = "passivegate", "key6" = "0"), + list("key1" = "Connector", "key2" = "4", "key3" = "4", "key4" = "4", "key5" = "connector", "key6" = "0"), + list("key1" = "Gas sensor", "key2" = "98", "key3" = "4", "key4" = "1", "key5" = "sensor", "key6" = "0"), + list("key1" = "Meter", "key2" = "99", "key3" = "4", "key4" = "1", "key5" = "meter", "key6" = "0"), + list("key1" = "Gas filter", "key2" = "13", "key3" = "4", "key4" = "4", "key5" = "filter", "key6" = "0"), + list("key1" = "Gas mixer", "key2" = "14", "key3" = "4", "key4" = "4", "key5" = "mixer", "key6" = "0"), + list("key1" = "Dual-port vent pump", "key2" = "36", "key3" = "4", "key4" = "2", "key5" = "dual-port vent", "key6" = "0"), + list("key1" = "Passive vent", "key2" = "37", "key3" = "4", "key4" = "4", "key5" = "passive vent", "key6" = "0"), + list("key1" = "Straight HE pipe", "key2" = "2", "key3" = "5", "key4" = "2", "key5" = "he", "key6" = "0"), + list("key1" = "Bent HE pipe", "key2" = "3", "key3" = "5", "key4" = "4", "key5" = "he", "key6" = "1"), + list("key1" = "Junction", "key2" = "6", "key3" = "5", "key4" = "4", "key5" = "junction", "key6" = "0"), + list("key1" = "Heat exchanger", "key2" = "17", "key3" = "5", "key4" = "4", "key5" = "heunary", "key6" = "0")) -//Pipename, pipe type, no. of unique orientations, name of pipe icon +//Pipename, pipe type, number of unique orientations, name of pipe icon var/list/dpipelist = list( - list("key1" = "Straight pipe", "key2" = "0", "key3" = "2", "key4" = "conpipe-s"), - list("key1" = "Bent pipe", "key2" = "1", "key3" = "4", "key4" = "conpipe-c"), - list("key1" = "Junction", "key2" = "2", "key3" = "4", "key4" = "conpipe-j1"), - list("key1" = "Y-junction", "key2" = "4", "key3" = "4", "key4" = "conpipe-y"), - list("key1" = "Trunk", "key2" = "5", "key3" = "4", "key4" = "conpipe-t"), - list("key1" = "Bin", "key2" = "6", "key3" = "1", "key4" = "condisposal"), - list("key1" = "Outlet", "key2" = "7", "key3" = "4", "key4" = "outlet"), - list("key1" = "Chute", "key2" = "8", "key3" = "4", "key4" = "intake")) + list("key1" = "Straight pipe", "key2" = "0", "key3" = "2", "key4" = "conpipe-s"), + list("key1" = "Bent pipe", "key2" = "1", "key3" = "4", "key4" = "conpipe-c"), + list("key1" = "Junction", "key2" = "2", "key3" = "4", "key4" = "conpipe-j1"), + list("key1" = "Y-junction", "key2" = "4", "key3" = "4", "key4" = "conpipe-y"), + list("key1" = "Trunk", "key2" = "5", "key3" = "4", "key4" = "conpipe-t"), + list("key1" = "Bin", "key2" = "6", "key3" = "1", "key4" = "condisposal"), + list("key1" = "Outlet", "key2" = "7", "key3" = "4", "key4" = "outlet"), + list("key1" = "Chute", "key2" = "8", "key3" = "4", "key4" = "intake")) //Procs @@ -94,7 +94,7 @@ var/list/dpipelist = list( playsound(loc, soundfile, 50, 1) if(prob(15)) spark_system.start() - if(delay == 1) + if(delay) cooldown = 1 spawn(spawndelay) cooldown = 0 @@ -108,44 +108,39 @@ var/list/dpipelist = list( //This proc puts each necessary icon into the initial user's cache for later use. It then sets initialised = 1 to avoid calling itself unnecessarily. /obj/item/weapon/rpd/proc/Initialiseicons() - if(initialised == 1) - return var/F var/I + var/list/filenames var/disposalsfile = "icons/obj/pipes/disposal.dmi" var/pipefile = "icons/obj/pipe-item.dmi" - var/list/filenames for(I in pipelist) if(I["key6"] == "1")//Bendy pipe icons - filenames = list( - list(I["key5"] + "-southeast.png", SOUTHEAST), - list(I["key5"] + "-southwest.png", SOUTHWEST), - list(I["key5"] + "-northwest.png", NORTHWEST), - list(I["key5"] + "-northeast.png", NORTHEAST)) - else if(I["key4"] == "2") //Dual state icons - filenames = list( - list(I["key5"] + "-north.png", NORTH), - list(I["key5"] + "-east.png", EAST)) - else if(I["key4"] == "4")//All other pipes that need icons - filenames = list( - list(I["key5"] + "-north.png", NORTH), - list(I["key5"] + "-east.png", EAST), - list(I["key5"] + "-south.png", SOUTH), - list(I["key5"] + "-west.png", WEST)) - else - filenames = . - for(F in filenames) - var/icon/iconfile = icon(pipefile, icon_state = I["key5"], dir = F[2]) - usr << browse_rsc(iconfile, F[1]) - for(I in dpipelist) //All disposals pipes have four states so we don't need to bother checking direction - filenames = list( - list(I["key4"] + "-north.png", NORTH), - list(I["key4"] + "-east.png", EAST), - list(I["key4"] + "-south.png", SOUTH), - list(I["key4"] + "-west.png", WEST)) - for(F in filenames) - var/icon/iconfile = icon(disposalsfile, icon_state = I["key4"], dir = F[2]) - usr << browse_rsc(iconfile, F[1]) + filenames += list( + list(pipefile, I["key5"], I["key5"] + "-southeast.png", SOUTHEAST), + list(pipefile, I["key5"], I["key5"] + "-southwest.png", SOUTHWEST), + list(pipefile, I["key5"], I["key5"] + "-northwest.png", NORTHWEST), + list(pipefile, I["key5"], I["key5"] + "-northeast.png", NORTHEAST)) + continue + if(I["key4"] == "2" || I["key4"] == "4") //Dual state icons + filenames += list( + list(pipefile, I["key5"], I["key5"] + "-north.png", NORTH), + list(pipefile, I["key5"], I["key5"] + "-east.png", EAST)) + if(I["key4"] == "4")//All other pipes that need icons + filenames += list( + list(pipefile, I["key5"], I["key5"] + "-south.png", SOUTH), + list(pipefile, I["key5"], I["key5"] + "-west.png", WEST)) + for(I in dpipelist) + if(I["key3"] == "2" || I["key3"] == "4") + filenames += list( + list(disposalsfile, I["key4"], I["key4"] + "-north.png", NORTH), + list(disposalsfile, I["key4"], I["key4"] + "-east.png", EAST)) + if(I["key3"] == "4") + filenames += list( + list(disposalsfile, I["key4"], I["key4"] + "-south.png", SOUTH), + list(disposalsfile, I["key4"], I["key4"] + "-west.png", WEST)) + for(F in filenames) + var/icon/iconfile = icon(F[1], icon_state = F[2], dir = F[4]) + usr << browse_rsc(iconfile, F[3]) initialised = 1 return @@ -167,7 +162,8 @@ var/list/dpipelist = list( if(!ui) ui = new(user, src, ui_key, "rpd.tmpl", "[name]", 600, 650, state = state) ui.open() - Initialiseicons() + if(!initialised) + Initialiseicons() ui.set_auto_update(1) /obj/item/weapon/rpd/ui_data(mob/user, ui_key = "main", datum/topic_state/state = inventory_state) @@ -212,9 +208,8 @@ var/list/dpipelist = list( else if(href_list["mode"]) mode = text2num(href_list["mode"]) else if(href_list["refresh"]) - to_chat(usr, "You press the reset button, refreshing all settings on the [src].") + to_chat(usr, "You press the reset button, refreshing all settings on the [src].") iconrotation = 0 - initialised = 0 mode = 1 pipemenu = 1 pipetype = 1 @@ -231,52 +226,45 @@ var/list/dpipelist = list( /obj/item/weapon/rpd/afterattack(atom/target, mob/user as mob, proximity) var/turf/T = get_turf(target) - if(!proximity) + if(!proximity || cooldown == 1) return - else if(cooldown == 1) - return - else if(!isturf(target) && !istype(target, /obj/item/pipe) && !istype(target, /obj/item/pipe_meter) && !istype(target, /obj/item/pipe_gsensor) && !istype(target, /obj/structure/disposalconstruct)) - return - else if(istype(target, /turf/simulated/shuttle)) + else if(!isturf(target) && !istype(target, /obj/item/pipe) && !istype(target, /obj/item/pipe_meter) && !istype(target, /obj/item/pipe_gsensor) && !istype(target, /obj/structure/disposalconstruct) || istype(target, /turf/simulated/shuttle)) return else if(mode == 1) //Atmos mode if(istype(T, /turf/simulated/wall)) //Drilling into walls takes time and we don't want to do anything else while drilling cooldown = 1 playsound(get_turf(src), "sound/weapons/circsawhit.ogg", 50, 1) - usr.visible_message("[usr] starts drilling a hole in [T]...", "You start drilling a hole in [T]...", "You hear a drill.") + usr.visible_message("[usr] starts drilling a hole in [T]...", "You start drilling a hole in [T]...", "You hear a drill.") if(do_after(usr, walldelay, target = T)) - usr.visible_message("[usr] finishes drilling a hole in [T]!", "You finish drilling a hole in [T]!", "You hear clanking.") + usr.visible_message("[usr] finishes drilling a hole in [T]!", "You finish drilling a hole in [T]!", "You hear clanking.") else cooldown = 0 return if(whatpipe == 98)//need to check if it's a meter or a gas sensor separately ayylmao new /obj/item/pipe_gsensor(T) - to_chat(usr, "[src] dispenses a sensor!") - Activaterpd("sound/machines/click.ogg", 1) - return - if(whatpipe == 99) + to_chat(usr, "[src] dispenses a sensor!") + else if(whatpipe == 99) new /obj/item/pipe_meter(T) - to_chat(usr, "[src] dispenses a meter!") - Activaterpd("sound/machines/click.ogg", 1) - return - var/obj/item/pipe/P = new(T, pipe_type=whatpipe, dir = usr.dir) //Now we make the pipes - if(iconrotation == 0 && Checkifbent(P.pipe_type) == 1) //Automatic rotation of dispensed pipes - P.dir = turn(usr.dir, 135) - else if(iconrotation == 0 && P.pipe_type in list(4, 7, 10, 17, 20, 32, 33, 34, 37)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction - call(P, /obj/item/pipe/verb/flip)() - else if(iconrotation != 0 && Checkifbent(P.pipe_type) == 1) //If they selected a rotation and the pipe is bent - P.dir = turn(iconrotation, -45) - else if(iconrotation != 0) - P.dir = iconrotation - P.update() - to_chat(usr, "[src] rapidly dispenses [P]!") + to_chat(usr, "[src] dispenses a meter!") + else + var/obj/item/pipe/P = new(T, pipe_type=whatpipe, dir = usr.dir) //Now we make the pipes + if(iconrotation == 0 && Checkifbent(P.pipe_type) == 1) //Automatic rotation of dispensed pipes + P.dir = turn(usr.dir, 135) + else if(iconrotation == 0 && P.pipe_type in list(4, 7, 10, 17, 20, 32, 33, 34, 37)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction + call(P, /obj/item/pipe/verb/flip)() + else if(iconrotation != 0 && Checkifbent(P.pipe_type) == 1) //If they selected a rotation and the pipe is bent + P.dir = turn(iconrotation, -45) + else if(iconrotation != 0) + P.dir = iconrotation + P.update() + to_chat(usr, "[src] rapidly dispenses [P]!") Activaterpd("sound/machines/click.ogg", 1) else if(mode == 2) //Disposals mode if(istype(T, /turf/simulated/wall)) - to_chat(usr, "That type of pipe won't fit on [T]!") + to_chat(usr, "That type of pipe won't fit on [T]!") return if(is_blocked_turf(T) == 1 && whatdpipe in list(6, 7, 8))//We need to check if the targetted turf is already dense, in case some goofball sticks 100 bins in front of security or something - to_chat(usr, "You can't dispense that on [T] because something is in the way!") + to_chat(usr, "You can't dispense that on [T] because something is in the way!") return var/obj/structure/disposalconstruct/P = new(T) //Now we make the pipe P.dir = iconrotation @@ -288,7 +276,7 @@ var/list/dpipelist = list( if(iconrotation == 0 && whatdpipe != 2) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though call(P, /obj/structure/disposalconstruct/verb/flip)() P.update() - to_chat(usr, "[src] rapidly dispenses [P]!") + to_chat(usr, "[src] rapidly dispenses [P]!") Activaterpd("sound/machines/click.ogg", 1) return else if(mode == 3) //Rotate mode @@ -306,10 +294,10 @@ var/list/dpipelist = list( qdel(W) eaten = 1 if(eaten == 1) - to_chat(usr, "[src] sucks up the loose pipes on [T]!") + to_chat(usr, "[src] sucks up the loose pipes on [T]!") Activaterpd("sound/items/Deconstruct.ogg", 1) else - to_chat(usr, "There were no loose pipes on [T].") + to_chat(usr, "There were no loose pipes on [T].") return else //Finished. return From 01177217f2405ea32f08cf6083d389c26d3e025d Mon Sep 17 00:00:00 2001 From: Citinited Date: Sun, 9 Apr 2017 20:19:34 +0100 Subject: [PATCH 004/378] Removes the RPD from the autolathe and adds an additional one in the CE's closet so everyone relevant in engineering can have one --- .../crates_lockers/closets/secure/engineering.dm | 1 + code/modules/research/designs/autolathe_designs.dm | 8 -------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 4ec3c0e649d..58cad5e5f36 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -34,6 +34,7 @@ new /obj/item/taperoll/engineering(src) new /obj/item/clothing/head/beret/eng(src) new /obj/item/weapon/door_remote/chief_engineer(src) + new /obj/item/weapon/rpd(src) /obj/structure/closet/secure_closet/engineering_electrical name = "electrical supplies locker" diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 5af1398dc71..29370cbc04b 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -616,14 +616,6 @@ build_path = /obj/item/weapon/twohanded/rcl category = list("hacked", "Construction") -/datum/design/rpd - name = "Rapid Pipe Dispenser" - id = "rpd" - build_type = AUTOLATHE - materials = list(MAT_METAL = 30000, MAT_GLASS = 5000) - build_path = /obj/item/weapon/rpd - category = list("hacked", "Construction") - /datum/design/electropack name = "Electropack" id = "electropack" From 4ec5d79e97bc88bdca8c89c1da9378a798e18350 Mon Sep 17 00:00:00 2001 From: Alffd Date: Wed, 19 Apr 2017 03:00:50 -0400 Subject: [PATCH 005/378] No more Human Vulp. --- code/game/sound.dm | 3 +++ code/modules/mob/living/carbon/human/emote.dm | 25 +++++++++++++++++- .../living/carbon/human/species/station.dm | 4 +++ sound/goonstation/voice/growl1.ogg | Bin 0 -> 10931 bytes sound/goonstation/voice/growl2.ogg | Bin 0 -> 10464 bytes sound/goonstation/voice/growl3.ogg | Bin 0 -> 11074 bytes sound/goonstation/voice/howl.ogg | Bin 0 -> 22339 bytes sound/voice/vulp_yelp.ogg | Bin 0 -> 18645 bytes 8 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 sound/goonstation/voice/growl1.ogg create mode 100644 sound/goonstation/voice/growl2.ogg create mode 100644 sound/goonstation/voice/growl3.ogg create mode 100644 sound/goonstation/voice/howl.ogg create mode 100644 sound/voice/vulp_yelp.ogg diff --git a/code/game/sound.dm b/code/game/sound.dm index 14269acb81f..8033e928173 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -15,6 +15,7 @@ var/list/ricochet = list('sound/weapons/effects/ric1.ogg', 'sound/weapons/effect var/list/terminal_type = list('sound/machines/terminal_button01.ogg', 'sound/machines/terminal_button02.ogg', 'sound/machines/terminal_button03.ogg', 'sound/machines/terminal_button04.ogg', 'sound/machines/terminal_button05.ogg', 'sound/machines/terminal_button06.ogg', 'sound/machines/terminal_button07.ogg', 'sound/machines/terminal_button08.ogg') +var/list/growls = list('sound/goonstation/voice/growl1.ogg', 'sound/goonstation/voice/growl2.ogg', 'sound/goonstation/voice/growl3.ogg') /proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff, var/is_global, var/pitch) @@ -142,4 +143,6 @@ var/list/terminal_type = list('sound/machines/terminal_button01.ogg', 'sound/mac soundin = pick(ricochet) if("terminal_type") soundin = pick(terminal_type) + if("growls") + soundin = pick(growls) return soundin diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 7b325eeeb8a..1a93e891217 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -36,8 +36,18 @@ if("drone","drones","hum","hums","rumble","rumbles") if(species.name == "Drask") //Only Drask can make whale noises on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm + else + return + if("howl", "howls") + if (species.name == "Vulpkanin") //Only Vulpkanin can howl + on_CD = handle_emote_CD(100) else return + if("growl", "growls") + if (species.name == "Vulpkanin") //Only Vulpkanin can growl + on_CD = handle_emote_CD() + else + return if("squish", "squishes") var/found_slime_bodypart = 0 @@ -85,8 +95,21 @@ if("me") //OKAY SO RANT TIME, THIS FUCKING HAS TO BE HERE OR A SHITLOAD OF THINGS BREAK return custom_emote(m_type, message) //DO YOU KNOW WHY SHIT BREAKS? BECAUSE SO MUCH OLDCODE CALLS mob.emote("me",1,"whatever_the_fuck_it_wants_to_emote") //WHO THE FUCK THOUGHT THAT WAS A GOOD FUCKING IDEA!?!? - if("ping", "pings") + + if("howl", "howls") var/M = handle_emote_param(param) //Check to see if the param is valid (mob with the param name is in view). + message = "[src] howls[M ? " at [M]" : ""]!" + playsound(loc, 'sound/goonstation/voice/howl.ogg', 100, 0, 10) + m_type = 2 + + if("growl", "growls") + var/M = handle_emote_param(param) + message = "[src] growls[M ? " at [M]" : ""]." + playsound(loc, "growls", 80, 0) + m_type = 2 + + if("ping", "pings") + var/M = handle_emote_param(param) message = "[src] pings[M ? " at [M]" : ""]." playsound(loc, 'sound/machines/ping.ogg', 50, 0) diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 10e39022315..295e7ec91ab 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -169,6 +169,10 @@ base_color = "#CF4D2F" butt_sprite = "vulp" + scream_verb = "yelps" + male_scream_sound = 'sound/voice/vulp_yelp.ogg' + female_scream_sound = 'sound/voice/vulp_yelp.ogg' + has_organ = list( "heart" = /obj/item/organ/internal/heart, "lungs" = /obj/item/organ/internal/lungs, diff --git a/sound/goonstation/voice/growl1.ogg b/sound/goonstation/voice/growl1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d5152d9c0577ed845ce091000b6dd2285ffcb790 GIT binary patch literal 10931 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 literal 0 HcmV?d00001 diff --git a/sound/goonstation/voice/howl.ogg b/sound/goonstation/voice/howl.ogg new file mode 100644 index 0000000000000000000000000000000000000000..778fd6b2483b3c69ecb0d18fdb435ee3ca38e4f0 GIT binary patch literal 22339 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 G0Q?s&1Ggdo literal 0 HcmV?d00001 diff --git a/sound/voice/vulp_yelp.ogg b/sound/voice/vulp_yelp.ogg new file mode 100644 index 0000000000000000000000000000000000000000..740fef48cabb01169efc7c22acb1f71264a01564 GIT binary patch literal 18645 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 Date: Fri, 31 Mar 2017 18:16:14 +0200 Subject: [PATCH 006/378] Non-cult soul stones now ask the victim whether they're up for some boo --- code/_onclick/hud/alert.dm | 17 ++++++++++ code/game/gamemodes/wizard/soulstone.dm | 43 ++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 0090dd654fd..3518a90d122 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -393,6 +393,23 @@ so as to remain in compliance with the most up-to-date laws." if(NOTIFY_FOLLOW) G.ManualFollow(target) +/obj/screen/alert/notify_soulstone + name = "Soul Stone" + desc = "Someone is trying to capture your soul in a soul stone. Click to allow it." + icon_state = "template" + timeout = 10 SECONDS + var/obj/item/device/soulstone/stone = null + var/stoner = null + +/obj/screen/alert/notify_soulstone/Click() + if(!usr || !usr.client) + return + if(stone) + if(alert(usr, "Do you want to be captured by [stoner]'s soul stone? This will destroy your corpse and make it \ + impossible for you to get back into the game as your regular character.",, "No", "Yes") == "Yes") + stone.opt_in = TRUE + + //OBJECT-BASED /obj/screen/alert/restrained/buckled diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 16c9b2f5857..90270c1d64a 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -9,10 +9,13 @@ origin_tech = "bluespace=4;materials=4" var/imprinted = "empty" + var/optional = FALSE //does this soulstone ask the victim whether they want to be turned into a shade var/usability = TRUE // Can this soul stone be used by anyone, or only cultists/wizards? var/reusable = TRUE // Can this soul stone be used more than once? var/spent = FALSE // If the soul stone can only be used once, has it been used? + var/opt_in = FALSE // for tracking during the 'optional' bit + /obj/item/device/soulstone/proc/can_use(mob/living/user) if(iscultist(user) || iswizard(user) || usability) return TRUE @@ -33,6 +36,7 @@ /obj/item/device/soulstone/anybody/chaplain name = "mysterious old shard" reusable = FALSE + optional = TRUE /obj/item/device/soulstone/pickup(mob/living/user) ..() @@ -69,6 +73,43 @@ M.create_attack_log("Has had their soul captured with [src.name] by [key_name(user)]") user.create_attack_log("Used the [src.name] to capture the soul of [key_name(M)]") + if(optional) + if(!M.ckey) + to_chat(user, "They have no soul!") + return + var/mob/player_mob = M + if(M.get_ghost())//in case our player ghosted and we need to throw the alert at their ghost instead + player_mob = M.get_ghost() + var/client/player_client = player_mob.client + to_chat(user, "You attempt to channel [M]'s soul into [src]. You must give the soul some time to react and stand still...") + to_chat(player_mob, "[user] is trying to capture your soul into [src]! Click the button in the top right of the game window to respond.") + var/obj/screen/alert/notify_soulstone/A = player_mob.throw_alert("\ref[src]_soulstone_thingy", /obj/screen/alert/notify_soulstone) + player_client << 'sound/misc/notice2.ogg' + window_flash(player_client) + if(player_client.prefs && player_client.prefs.UI_style) + A.icon = ui_style2icon(player_client.prefs.UI_style) + A.stone = src + A.stoner = user.real_name + + var/old_layer = layer + var/old_plane = plane + layer = FLOAT_LAYER + plane = FLOAT_PLANE + A.overlays += src + layer = old_layer + plane = old_plane + + sleep(10 SECONDS) + + if(!opt_in) + to_chat(user, "The soul resists your attempts at capturing it!") + return + + opt_in = FALSE + + if(spent)//checking one more time against shenanigans + return + M.create_attack_log("Has had their soul captured with [src.name] by [key_name(user)]") user.create_attack_log("Used the [src.name] to capture the soul of [key_name(M)]") log_attack("[key_name(user)] used the [src.name] to capture the soul of [key_name(M)]") @@ -347,4 +388,4 @@ T.unEquip(W) init_shade(T, U) qdel(T) - return 1 \ No newline at end of file + return 1 From 8cce3ecdd2417238984b3c70c613a9df313bb502 Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Tue, 2 May 2017 14:46:50 +0200 Subject: [PATCH 007/378] Tweaks. --- code/_onclick/hud/alert.dm | 5 +++++ code/game/gamemodes/wizard/soulstone.dm | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 3518a90d122..45c4331bcb3 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -409,6 +409,11 @@ so as to remain in compliance with the most up-to-date laws." impossible for you to get back into the game as your regular character.",, "No", "Yes") == "Yes") stone.opt_in = TRUE +/obj/screen/alert/notify_soulstone/Destroy() + stoner = null + stone = null + return ..() + //OBJECT-BASED diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 90270c1d64a..46709193ec2 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -77,20 +77,26 @@ if(!M.ckey) to_chat(user, "They have no soul!") return + + to_chat(user, "You attempt to channel [M]'s soul into [src]. You must give the soul some time to react and stand still...") + var/mob/player_mob = M if(M.get_ghost())//in case our player ghosted and we need to throw the alert at their ghost instead player_mob = M.get_ghost() var/client/player_client = player_mob.client - to_chat(user, "You attempt to channel [M]'s soul into [src]. You must give the soul some time to react and stand still...") to_chat(player_mob, "[user] is trying to capture your soul into [src]! Click the button in the top right of the game window to respond.") - var/obj/screen/alert/notify_soulstone/A = player_mob.throw_alert("\ref[src]_soulstone_thingy", /obj/screen/alert/notify_soulstone) player_client << 'sound/misc/notice2.ogg' window_flash(player_client) + + var/obj/screen/alert/notify_soulstone/A = player_mob.throw_alert("\ref[src]_soulstone_thingy", /obj/screen/alert/notify_soulstone) if(player_client.prefs && player_client.prefs.UI_style) A.icon = ui_style2icon(player_client.prefs.UI_style) + + //pass the stuff to the alert itself A.stone = src A.stoner = user.real_name + //layer shenanigans to make the alert display the soulstone var/old_layer = layer var/old_plane = plane layer = FLOAT_LAYER @@ -99,6 +105,7 @@ layer = old_layer plane = old_plane + //give the victim 10 seconds to respond sleep(10 SECONDS) if(!opt_in) From 6f0e6fd93d3865747a309f4ca7535ccff67123cc Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Wed, 3 May 2017 12:39:33 +0200 Subject: [PATCH 008/378] tweak --- code/_onclick/hud/alert.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 45c4331bcb3..9a1643cb34d 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -410,7 +410,6 @@ so as to remain in compliance with the most up-to-date laws." stone.opt_in = TRUE /obj/screen/alert/notify_soulstone/Destroy() - stoner = null stone = null return ..() From 63c39f3c8418957aa034e418adb484fb466c5b06 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sun, 7 May 2017 12:24:04 -0700 Subject: [PATCH 009/378] Restores the karma verbs tab --- code/modules/karma/karma.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm index 81af3a38395..b5cdbe0154f 100644 --- a/code/modules/karma/karma.dm +++ b/code/modules/karma/karma.dm @@ -87,7 +87,7 @@ var/list/karma_spenders = list() /mob/verb/spend_karma_list() set name = "Award Karma" set desc = "Let the gods know whether someone's been nice. Can only be used once per round." - set category = "OOC" + set category = "Special Verbs" if(!can_give_karma()) return @@ -116,7 +116,7 @@ var/list/karma_spenders = list() /mob/verb/spend_karma(var/mob/M) set name = "Award Karma to Player" set desc = "Let the gods know whether someone's been nice. Can only be used once per round." - set category = "OOC" + set category = "Special Verbs" if(!M) to_chat(usr, "Please right click a mob to award karma directly, or use the 'Award Karma' verb to select a player from the player listing.") @@ -149,7 +149,7 @@ var/list/karma_spenders = list() /client/verb/check_karma() set name = "Check Karma" set desc = "Reports how much karma you have accrued." - set category = "OOC" + set category = "Special Verbs" if(config.disable_karma) to_chat(src, "Karma is disabled.") From 5a0fb81ec3461b03ab418c5242ae2a1f97cf3e78 Mon Sep 17 00:00:00 2001 From: Alffd Date: Mon, 15 May 2017 22:14:51 -0400 Subject: [PATCH 010/378] Less obnoxious scream --- sound/voice/vulp_yelp.ogg | Bin 18645 -> 15861 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/sound/voice/vulp_yelp.ogg b/sound/voice/vulp_yelp.ogg index 740fef48cabb01169efc7c22acb1f71264a01564..898cc953823dbfa72169a6a26b4d0499464801fe 100644 GIT binary patch delta 14420 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 Date: Thu, 23 Mar 2017 19:44:33 -0400 Subject: [PATCH 011/378] Redoes everything --- code/__HELPERS/text.dm | 30 +++++----- code/game/dna/genes/vg_powers.dm | 11 ++-- .../mob/living/carbon/human/human_defense.dm | 3 + .../reagents/chemistry/reagents/water.dm | 57 ++++++++++++++++++- 4 files changed, 80 insertions(+), 21 deletions(-) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 89755d7acf0..864fc094286 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -448,32 +448,32 @@ proc/checkhtml(var/t) // Pencode -/proc/pencode_to_html(text, mob/user, obj/item/weapon/pen/P = null, sign = 1, fields = 1, deffont = PEN_FONT, signfont = SIGNFONT, crayonfont = CRAYON_FONT) - text = replacetext(text, "\n", "
") - text = replacetext(text, "\[center\]", "

") - text = replacetext(text, "\[/center\]", "
") - text = replacetext(text, "\[br\]", "
") +/proc/pencode_to_html(text, mob/user, obj/item/weapon/pen/P = null, format = 1, sign = 1, fields = 1, deffont = PEN_FONT, signfont = SIGNFONT, crayonfont = CRAYON_FONT) text = replacetext(text, "\[b\]", "") text = replacetext(text, "\[/b\]", "") text = replacetext(text, "\[i\]", "") text = replacetext(text, "\[/i\]", "") text = replacetext(text, "\[u\]", "") text = replacetext(text, "\[/u\]", "") - text = replacetext(text, "\[large\]", "") - text = replacetext(text, "\[/large\]", "") if(sign) text = replacetext(text, "\[sign\]", "[user ? user.real_name : "Anonymous"]") if(fields) text = replacetext(text, "\[field\]", "") + if(format) + text = replacetext(text, "\[h1\]", "

") + text = replacetext(text, "\[/h1\]", "

") + text = replacetext(text, "\[h2\]", "

") + text = replacetext(text, "\[/h2\]", "

") + text = replacetext(text, "\[h3\]", "

") + text = replacetext(text, "\[/h3\]", "

") + text = replacetext(text, "\n", "
") + text = replacetext(text, "\[center\]", "
") + text = replacetext(text, "\[/center\]", "
") + text = replacetext(text, "\[br\]", "
") + text = replacetext(text, "\[large\]", "") + text = replacetext(text, "\[/large\]", "") - text = replacetext(text, "\[h1\]", "

") - text = replacetext(text, "\[/h1\]", "

") - text = replacetext(text, "\[h2\]", "

") - text = replacetext(text, "\[/h2\]", "

") - text = replacetext(text, "\[h3\]", "

") - text = replacetext(text, "\[/h3\]", "

") - - if(istype(P, /obj/item/toy/crayon)) // If it is a crayon, and he still tries to use these, make them empty! + if(istype(P, /obj/item/toy/crayon) | !format) // If it is a crayon, and he still tries to use these, make them empty! text = replacetext(text, "\[*\]", "") text = replacetext(text, "\[hr\]", "") text = replacetext(text, "\[small\]", "") diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm index e159aa44247..0a336695082 100644 --- a/code/game/dna/genes/vg_powers.dm +++ b/code/game/dna/genes/vg_powers.dm @@ -211,11 +211,11 @@ /obj/effect/proc_holder/spell/targeted/remotetalk/choose_targets(mob/user = usr) var/list/targets = new /list() var/list/validtargets = new /list() - for(var/mob/M in view(user.client.view, user)) + var/turf/T = get_turf(user) + for(var/mob/M in range(14, T)) if(M && M.mind) if(M == user) continue - validtargets += M if(!validtargets.len) @@ -237,14 +237,15 @@ if(!say) return say = strip_html(say) + say = pencode_to_html(say, usr, format = 0, fields = 0 for(var/mob/living/target in targets) log_say("Project Mind: [key_name(user)]->[key_name(target)]: [say]") if(REMOTE_TALK in target.mutations) - target.show_message("You hear [user.real_name]'s voice: [say]") + target.show_message("You hear [user.real_name]'s voice: [say]") else - target.show_message("You hear a voice that seems to echo around the room: [say]") - user.show_message("You project your mind into [target.real_name]: [say]") + target.show_message("You hear a voice that seems to echo around the room: [say]") + user.show_message("You project your mind into [target.real_name]: [say]") for(var/mob/dead/observer/G in player_list) G.show_message("Telepathic message from [user] ([ghost_follow_link(user, ghost=G)]) to [target] ([ghost_follow_link(target, ghost=G)]): [say]") diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 3f25873e5f2..c4b9540d899 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -471,3 +471,6 @@ emp_act ..() if(temperature >= 330) bodytemperature = bodytemperature + (temperature - bodytemperature) if(temperature <= 280) bodytemperature = bodytemperature - (bodytemperature - temperature) + if(get_species() == "Grey") + take_organ_damage(5,min(volume,20)) + emote("scream") diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index 70d2a9f76c0..773d03c6006 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -20,10 +20,65 @@ drink_desc = "The father of all refreshments." /datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, volume) -// Put out fire if(method == TOUCH) + // Put out fire M.adjust_fire_stacks(-(volume / 10)) M.ExtinguishMob() + if(ishuman(M)) + + var/mob/living/carbon/human/H = M + + if(H.get_species() != "Grey") //God this is so gross I hate it. + return + + if(volume > 25) + + if(H.wear_mask) + to_chat(H, "Your mask protects you from the water!") + return + + if(H.head) + to_chat(H, "Your helmet protects you from the water!") + return + + if(!M.unacidable) + if(prob(75)) + var/obj/item/organ/external/affecting = H.get_organ("head") + if(affecting) + affecting.take_damage(5, 10) + H.UpdateDamageIcon() + H.emote("scream") + else + M.take_organ_damage(5,10) + else + M.take_organ_damage(5,10) + + if(method == INGEST) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + if(H.get_species() != "Grey") + return + + if(volume < 10) + to_chat(M, "The watery solvent substance stings you, but isn't concentrated enough to harm you!") + + if(volume >=10 && volume <=25) + if(!H.unacidable) + M.take_organ_damage(0,min(max(volume-10,2)*2,20)) + M.emote("scream") + + + if(volume > 25) + if(!M.unacidable) + if(prob(75)) + var/obj/item/organ/external/affecting = H.get_organ("head") + if(affecting) + affecting.take_damage(0, 20) + H.UpdateDamageIcon() + H.emote("scream") + else + M.take_organ_damage(0,20) /datum/reagent/water/reaction_turf(turf/simulated/T, volume) if(!istype(T)) From 05eceb85d1c60a49421da9c56526c71d25c19cc0 Mon Sep 17 00:00:00 2001 From: fludd12 Date: Thu, 23 Mar 2017 19:47:44 -0400 Subject: [PATCH 012/378] A single missing parenthesis managed to make every single file in all of code/modules return an error. --- code/game/dna/genes/vg_powers.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm index 0a336695082..3a05ae02e38 100644 --- a/code/game/dna/genes/vg_powers.dm +++ b/code/game/dna/genes/vg_powers.dm @@ -237,7 +237,7 @@ if(!say) return say = strip_html(say) - say = pencode_to_html(say, usr, format = 0, fields = 0 + say = pencode_to_html(say, usr, format = 0, fields = 0) for(var/mob/living/target in targets) log_say("Project Mind: [key_name(user)]->[key_name(target)]: [say]") From 247ba05ce55ec501b80c5a82f711e77b465ecc3c Mon Sep 17 00:00:00 2001 From: fludd12 Date: Thu, 23 Mar 2017 21:09:29 -0400 Subject: [PATCH 013/378] Finishes everything probably --- code/__HELPERS/text.dm | 9 +++++---- code/modules/mob/language.dm | 21 ++++++++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 864fc094286..f9bae78c35b 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -473,7 +473,7 @@ proc/checkhtml(var/t) text = replacetext(text, "\[large\]", "") text = replacetext(text, "\[/large\]", "") - if(istype(P, /obj/item/toy/crayon) | !format) // If it is a crayon, and he still tries to use these, make them empty! + if(istype(P, /obj/item/toy/crayon) || !format) // If it is a crayon, and he still tries to use these, make them empty! text = replacetext(text, "\[*\]", "") text = replacetext(text, "\[hr\]", "") text = replacetext(text, "\[small\]", "") @@ -485,7 +485,7 @@ proc/checkhtml(var/t) text = replacetext(text, "\[row\]", "") text = replacetext(text, "\[cell\]", "") text = replacetext(text, "\[logo\]", "") - + if(istype(P, /obj/item/toy/crayon)) text = "[text]" else // They are using "not a crayon" - formatting is OK and such text = replacetext(text, "\[*\]", "
  • ") @@ -501,9 +501,10 @@ proc/checkhtml(var/t) text = replacetext(text, "\[row\]", "") text = replacetext(text, "\[cell\]", "") text = replacetext(text, "\[logo\]", "") - + if(P) text = "[text]" - + else + text = "[text]" text = copytext(text, 1, MAX_PAPER_MESSAGE_LEN) return text diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index fb6d5ef5948..01fe5f43cc9 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -96,6 +96,9 @@ return (copytext(message, length(message)) == "!") ? 2 : 1 /datum/language/proc/broadcast(mob/living/speaker, message, speaker_mask) + if(!check_can_speak(speaker)) + return FALSE + log_say("[key_name(speaker)]: ([name]) [message]") if(!speaker_mask) @@ -114,6 +117,9 @@ /datum/language/proc/check_special_condition(mob/other, mob/living/speaker) return TRUE +/datum/language/proc/check_can_speak(mob/living/speaker) + return TRUE + /datum/language/proc/get_spoken_verb(msg_end) switch(msg_end) if("!") @@ -292,8 +298,21 @@ /datum/language/grey/broadcast(mob/living/speaker, message, speaker_mask) ..(speaker,message,speaker.real_name) +/datum/language/grey/check_can_speak(mob/living/speaker) + if(ishuman(speaker)) + var/mob/living/carbon/human/spkr = speaker + var/obj/item/organ/external/rhand = spkr.organs_by_name["r_hand"] + var/obj/item/organ/external/lhand = spkr.organs_by_name["l_hand"] + if((!rhand || !rhand.is_usable()) && (!lhand || !lhand.is_usable())) + to_chat(speaker,"You can't communicate without the ability to use your hands!") + return FALSE + if(speaker.incapacitated(ignore_lying = 1)) + to_chat(speaker,"You can't communicate while unable to move your hands to your head!") + return FALSE + return TRUE + /datum/language/grey/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker) - if(other in range(7, speaker)) + if(other.z == speaker.z) return TRUE return FALSE From 19db4147ffee1501c89776103dc36e823b89f792 Mon Sep 17 00:00:00 2001 From: fludd12 Date: Thu, 23 Mar 2017 21:56:36 -0400 Subject: [PATCH 014/378] Finalizes the re-do of my language changes. --- code/modules/mob/language.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 01fe5f43cc9..8a278a026e9 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -296,6 +296,13 @@ flags = RESTRICTED | HIVEMIND /datum/language/grey/broadcast(mob/living/speaker, message, speaker_mask) + var/their = "their" + if(speaker.gender == "female") + their = "her" + if(speaker.gender == "male") + their = "his" + for(var/mob/living/player in view(4, speaker)) + to_chat(player,"[speaker] touches [their] fingers to [their] temple.") ..(speaker,message,speaker.real_name) /datum/language/grey/check_can_speak(mob/living/speaker) From 67665d76cf475c4a3eca4385e39612e65a788bb3 Mon Sep 17 00:00:00 2001 From: fludd12 Date: Tue, 28 Mar 2017 23:48:07 -0400 Subject: [PATCH 015/378] Fixes two things Hopefully last fix Revert "Hopefully last fix" This reverts commit 91550ad5abb256d3d868459393073a4bd74b7241. Fixes two things --- code/game/dna/genes/vg_powers.dm | 2 +- code/modules/mob/language.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm index 3a05ae02e38..32a6a58cbb3 100644 --- a/code/game/dna/genes/vg_powers.dm +++ b/code/game/dna/genes/vg_powers.dm @@ -245,7 +245,7 @@ target.show_message("You hear [user.real_name]'s voice: [say]") else target.show_message("You hear a voice that seems to echo around the room: [say]") - user.show_message("You project your mind into [target.real_name]: [say]") + user.show_message("You project your mind into [target.name]: [say]") for(var/mob/dead/observer/G in player_list) G.show_message("Telepathic message from [user] ([ghost_follow_link(user, ghost=G)]) to [target] ([ghost_follow_link(target, ghost=G)]): [say]") diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 8a278a026e9..bbf840f7b3f 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -301,8 +301,8 @@ their = "her" if(speaker.gender == "male") their = "his" - for(var/mob/living/player in view(4, speaker)) - to_chat(player,"[speaker] touches [their] fingers to [their] temple.") + + speaker.visible_message("[speaker] touches [their] fingers to [their] temple.") ..(speaker,message,speaker.real_name) /datum/language/grey/check_can_speak(mob/living/speaker) From 9d74b9090aa11ba6d4b5297e388ecbd580837c50 Mon Sep 17 00:00:00 2001 From: fludd12 Date: Tue, 16 May 2017 23:51:37 -0400 Subject: [PATCH 016/378] Last fix, I hope --- code/modules/mob/language.dm | 8 ++++---- .../file_system/programs/generic/file_browser.dm | 2 +- code/modules/paperwork/paper.dm | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index bbf840f7b3f..7bd393412a8 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -307,9 +307,9 @@ /datum/language/grey/check_can_speak(mob/living/speaker) if(ishuman(speaker)) - var/mob/living/carbon/human/spkr = speaker - var/obj/item/organ/external/rhand = spkr.organs_by_name["r_hand"] - var/obj/item/organ/external/lhand = spkr.organs_by_name["l_hand"] + var/mob/living/carbon/human/S = speaker + var/obj/item/organ/external/rhand = S.get_organ("r_hand") + var/obj/item/organ/external/lhand = S.get_organ("l_hand") if((!rhand || !rhand.is_usable()) && (!lhand || !lhand.is_usable())) to_chat(speaker,"You can't communicate without the ability to use your hands!") return FALSE @@ -319,7 +319,7 @@ return TRUE /datum/language/grey/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker) - if(other.z == speaker.z) + if(atoms_share_level(other, speaker)) return TRUE return FALSE diff --git a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm index 20c4e92fd98..a868c0958ea 100644 --- a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm @@ -43,7 +43,7 @@ if(!istype(file)) data["error"] = "I/O ERROR: Unable to open file." else - data["filedata"] = pencode_to_html(file.stored_data, sign = 0, fields = 0) + data["filedata"] = pencode_to_html(file.stored_data, format = 1, sign = 0, fields = 0) data["filename"] = "[file.filename].[file.filetype]" else if(!computer || !HDD) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 60a501f1ecf..f82d2bc0b1e 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -203,7 +203,7 @@ /obj/item/weapon/paper/proc/parsepencode(var/t, var/obj/item/weapon/pen/P, mob/user as mob) - t = pencode_to_html(t, usr, P, TRUE, TRUE, deffont, signfont, crayonfont) + t = pencode_to_html(t, usr, P, TRUE, TRUE, TRUE, deffont, signfont, crayonfont) //Count the fields var/laststart = 1 From bbc0eb94d39fecd0c1807c7744616b4b971f7bf8 Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Sat, 20 May 2017 14:41:44 +0100 Subject: [PATCH 017/378] Adds a Coroner Report Printer --- code/game/objects/items/devices/autopsy.dm | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/autopsy.dm b/code/game/objects/items/devices/autopsy.dm index 2839715d7d7..268ee2fae79 100644 --- a/code/game/objects/items/devices/autopsy.dm +++ b/code/game/objects/items/devices/autopsy.dm @@ -74,6 +74,18 @@ if(O.trace_chemicals[V] > 0 && !chemtraces.Find(V)) chemtraces += V +/obj/item/weapon/autopsy_scanner/attackby(obj/item/weapon/P, mob/user) + if(istype(P, /obj/item/weapon/pen)) + var/dead_name = input("Insert name of deceased individual") + var/dead_rank = input("Insert rank of deceased individual") + var/dead_tod = input("Insert time of death") + var/dead_cause = input("Insert cause of death") + var/dead_notes = input("Insert any relevant notes") + var/obj/item/weapon/paper/R = new(user.loc) + R.name = "Official Coroner's Report - [dead_name]" + R.info = "NanoTrasen Science Station Cyberiad - Coroner's Report
    Name of Deceased: [dead_name]
    Rank of Deceased: [dead_rank]
    Time of Death: [dead_tod]
    Cause of Death: [dead_cause]
    Additional Coroner's Notes: [dead_notes]" + user.put_in_hands(R) + /obj/item/weapon/autopsy_scanner/attack_self(mob/user) if(!wdata.len && !chemtraces.len) return @@ -181,4 +193,4 @@ M.visible_message("[user] scans the wounds on [M]'s [S] with [src]") add_data(S) - return 1 \ No newline at end of file + return 1 From 6c8ede0275437eb94a4b1ac1ef9c9611fdf35d99 Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Sat, 20 May 2017 15:11:50 +0100 Subject: [PATCH 018/378] Adds sound --- code/game/objects/items/devices/autopsy.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/autopsy.dm b/code/game/objects/items/devices/autopsy.dm index 268ee2fae79..6396e9e20e4 100644 --- a/code/game/objects/items/devices/autopsy.dm +++ b/code/game/objects/items/devices/autopsy.dm @@ -83,7 +83,9 @@ var/dead_notes = input("Insert any relevant notes") var/obj/item/weapon/paper/R = new(user.loc) R.name = "Official Coroner's Report - [dead_name]" - R.info = "NanoTrasen Science Station Cyberiad - Coroner's Report
    Name of Deceased: [dead_name]
    Rank of Deceased: [dead_rank]
    Time of Death: [dead_tod]
    Cause of Death: [dead_cause]
    Additional Coroner's Notes: [dead_notes]" + R.info = "NanoTrasen Science Station Cyberiad - Coroner's Report

    Name of Deceased: [dead_name]

    Rank of Deceased: [dead_rank]

    Time of Death: [dead_tod]

    Cause of Death: [dead_cause]

    Additional Coroner's Notes: [dead_notes]" + playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1) + sleep(10) user.put_in_hands(R) /obj/item/weapon/autopsy_scanner/attack_self(mob/user) From df4e30ae617e210f17bc9f1ce0b5d1ec566f15cc Mon Sep 17 00:00:00 2001 From: TullyBurnalot Date: Sat, 20 May 2017 15:48:18 +0100 Subject: [PATCH 019/378] Adds Chemical Traces, Signature Area --- code/game/objects/items/devices/autopsy.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/autopsy.dm b/code/game/objects/items/devices/autopsy.dm index 6396e9e20e4..6b7a842d274 100644 --- a/code/game/objects/items/devices/autopsy.dm +++ b/code/game/objects/items/devices/autopsy.dm @@ -80,10 +80,11 @@ var/dead_rank = input("Insert rank of deceased individual") var/dead_tod = input("Insert time of death") var/dead_cause = input("Insert cause of death") + var/dead_chems = input("Insert any chemical traces") var/dead_notes = input("Insert any relevant notes") var/obj/item/weapon/paper/R = new(user.loc) R.name = "Official Coroner's Report - [dead_name]" - R.info = "NanoTrasen Science Station Cyberiad - Coroner's Report

    Name of Deceased: [dead_name]

    Rank of Deceased: [dead_rank]

    Time of Death: [dead_tod]

    Cause of Death: [dead_cause]

    Additional Coroner's Notes: [dead_notes]" + R.info = "NanoTrasen Science Station Cyberiad - Coroner's Report

    Name of Deceased: [dead_name]

    Rank of Deceased: [dead_rank]

    Time of Death: [dead_tod]

    Cause of Death: [dead_cause]

    Trace Chemicals: [dead_chems]

    Additional Coroner's Notes: [dead_notes]

    Coroner's Signature: " playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1) sleep(10) user.put_in_hands(R) From 519c23886d8581c583370512785b7c718a652479 Mon Sep 17 00:00:00 2001 From: Alffd Date: Tue, 23 May 2017 19:51:59 -0400 Subject: [PATCH 020/378] Makes PR atomic --- .../mob/living/carbon/human/species/station.dm | 2 -- sound/voice/vulp_yelp.ogg | Bin 15861 -> 0 bytes 2 files changed, 2 deletions(-) delete mode 100644 sound/voice/vulp_yelp.ogg diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 295e7ec91ab..e1dc9dee6b7 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -170,8 +170,6 @@ butt_sprite = "vulp" scream_verb = "yelps" - male_scream_sound = 'sound/voice/vulp_yelp.ogg' - female_scream_sound = 'sound/voice/vulp_yelp.ogg' has_organ = list( "heart" = /obj/item/organ/internal/heart, diff --git a/sound/voice/vulp_yelp.ogg b/sound/voice/vulp_yelp.ogg deleted file mode 100644 index 898cc953823dbfa72169a6a26b4d0499464801fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15861 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 From 47c4cf35384b166afa7faeca690c653db8b2f5e6 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 24 May 2017 10:27:11 +0100 Subject: [PATCH 021/378] Adds a jobs board to the newscaster --- code/game/machinery/newscaster.dm | 30 ++++++++++++++++++++++++++++++ nano/styles/_formatting.less | 5 +++++ nano/templates/newscaster.tmpl | 18 ++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 6040f72ab6b..fbbe6f68cc8 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -68,6 +68,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co #define NEWSCASTER_D_NOTICE_FC 9 // D-Notice feed channel #define NEWSCASTER_W_ISSUE_H 10 // Wanted Issue handler #define NEWSCASTER_W_ISSUE 11 // STATIONWIDE WANTED ISSUE +#define NEWSCASTER_JOBS 12 // Available jobs /obj/machinery/newscaster name = "newscaster" @@ -94,6 +95,21 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co var/silence = 0 var/temp = null var/temp_back_screen = NEWSCASTER_MAIN + var/list/jobblacklist = list( + /datum/job/ai, + /datum/job/cyborg, + /datum/job/captain, + /datum/job/judge, + /datum/job/blueshield, + /datum/job/nanotrasenrep, + /datum/job/pilot, + /datum/job/brigdoc, + /datum/job/mechanic, + /datum/job/barber, + /datum/job/chaplain, + /datum/job/ntnavyofficer, + /datum/job/ntspecops, + /datum/job/civilian) var/static/REDACTED = "\[REDACTED\]" light_range = 0 @@ -252,6 +268,14 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co data["criminal"] = news_network.wanted_issue.author data["description"] = news_network.wanted_issue.body data["photo"] = news_network.wanted_issue.img ? icon2base64(news_network.wanted_issue.img) : 0 + if(12) + var/list/jobs = list() + data["jobs"] = jobs + for(var/datum/job/job in job_master.occupations) + if(job_blacklisted(job)) + continue + if(job.is_position_available()) + jobs[++jobs.len] = list("title" = job.title) return data /obj/machinery/newscaster/Topic(href, href_list) @@ -535,6 +559,9 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(can_scan(usr)) scan_user(usr) //Newscaster scans you + else if(href_list["jobs"]) + screen = NEWSCASTER_JOBS + nanomanager.update_uis(src) return 1 @@ -748,6 +775,9 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co ////////////////////////////////////helper procs +/obj/machinery/newscaster/proc/job_blacklisted(datum/job/job) + return (job.type in jobblacklist) + /obj/machinery/newscaster/proc/scan_user(mob/user) if(ishuman(user)) //User is a human var/mob/living/carbon/human/human_user = user diff --git a/nano/styles/_formatting.less b/nano/styles/_formatting.less index e8f65be969c..19ff288dd3f 100644 --- a/nano/styles/_formatting.less +++ b/nano/styles/_formatting.less @@ -156,6 +156,11 @@ float: left; } +.jobValues { + float: left; + width: 30%; +} + // CHROMELESS STUFF .fancy { diff --git a/nano/templates/newscaster.tmpl b/nano/templates/newscaster.tmpl index af4edb702ad..c589bde4702 100644 --- a/nano/templates/newscaster.tmpl +++ b/nano/templates/newscaster.tmpl @@ -31,6 +31,7 @@ Property of Nanotrasen
    {{if data.wanted_issue}}
    {{:helper.link('Read Wanted issue', 'exclamation-triangle', {'view_wanted' : 1})}}
    {{/if}} +
    {{:helper.link('View available NT jobs', 'share', {'jobs' : 1})}}
    {{:helper.link('Create feed channel', 'plus', {'create_channel' : 1})}}
    {{:helper.link('View feed channels', 'arrow-right', {'view' : 1})}}
    {{:helper.link('Submit new feed story', 'share', {'create_feed_story' : 1})}}
    @@ -297,5 +298,22 @@ Property of Nanotrasen
    {{:helper.link('Back', 'arrow-left', {'setScreen' : 0})}}
    + {{else data.screen == 12}} +

    CAREERS AT NANOTRASEN

    + Work for a better future.
    +
    + {{for data.jobs}} +
    + {{:value.title}}
    +
    + {{empty}} + No available jobs... + {{/for}} + +
    +
    +
    {{:helper.link('Refresh', 'refresh', {'refresh' : 0})}}
    +
    {{:helper.link('Back', 'arrow-left', {'setScreen' : 1})}}
    +
    {{/if}} {{/if}} \ No newline at end of file From c730817c31a550a417a253d42726dc52690ada41 Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Sat, 27 May 2017 00:38:35 +0200 Subject: [PATCH 022/378] 26th century defibs --- code/game/objects/items/weapons/defib.dm | 327 +++++++++++------------ 1 file changed, 160 insertions(+), 167 deletions(-) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 5d0dcebcacc..91faedec79e 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -339,105 +339,102 @@ update_icon() defib.cooldowncheck(user) return - if(user.zone_sel && user.zone_sel.selecting == "chest") - user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest.") - busy = 1 - update_icon() - if(do_after(user, 30 * toolspeed, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process - user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.") - playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) - var/mob/dead/observer/ghost = H.get_ghost() - if(ghost && !ghost.client) - // In case the ghost's not getting deleted for some reason - H.key = ghost.key - log_runtime(EXCEPTION("Ghost of name [ghost.name] is bound to [H.real_name], but lacks a client. Deleting ghost."), src) + user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest.") + busy = 1 + update_icon() + if(do_after(user, 30 * toolspeed, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process + user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.") + playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) + var/mob/dead/observer/ghost = H.get_ghost() + if(ghost && !ghost.client) + // In case the ghost's not getting deleted for some reason + H.key = ghost.key + log_runtime(EXCEPTION("Ghost of name [ghost.name] is bound to [H.real_name], but lacks a client. Deleting ghost."), src) - qdel(ghost) - ghost = null - var/tplus = world.time - H.timeofdeath - var/tlimit = 1800 //past this much time the patient is unrecoverable (in deciseconds) - var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting - var/total_burn = 0 - var/total_brute = 0 - if(do_after(user, 20 * toolspeed, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total - for(var/obj/item/carried_item in H.contents) - if(istype(carried_item, /obj/item/clothing/suit/space)) - if(!defib.combat) - user.visible_message("[defib] buzzes: Patient's chest is obscured. Operation aborted.") - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - busy = 0 - update_icon() - return - if(H.heart_attack) - if(!H.get_int_organ(/obj/item/organ/internal/heart) && !H.get_int_organ(/obj/item/organ/internal/brain/slime)) //prevents defibing someone still alive suffering from a heart attack attack if they lack a heart - user.visible_message("[defib] buzzes: Resuscitation failed - Failed to pick up any heart electrical activity.") + qdel(ghost) + ghost = null + var/tplus = world.time - H.timeofdeath + var/tlimit = 1800 //past this much time the patient is unrecoverable (in deciseconds) + var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting + var/total_burn = 0 + var/total_brute = 0 + if(do_after(user, 20 * toolspeed, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total + for(var/obj/item/carried_item in H.contents) + if(istype(carried_item, /obj/item/clothing/suit/space)) + if(!defib.combat) + user.visible_message("[defib] buzzes: Patient's chest is obscured. Operation aborted.") playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) busy = 0 update_icon() return - else - H.heart_attack = 0 - user.visible_message("[defib] pings: Cardiac arrhythmia corrected.") - M.visible_message("[M]'s body convulses a bit.") - playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) - playsound(get_turf(src), "bodyfall", 50, 1) - playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) - defib.deductcharge(revivecost) - busy = 0 - cooldown = 1 - update_icon() - defib.cooldowncheck(user) - return - if(H.stat == DEAD) - var/health = H.health - M.visible_message("[M]'s body convulses a bit.") - playsound(get_turf(src), "bodyfall", 50, 1) - playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) - for(var/obj/item/organ/external/O in H.bodyparts) - total_brute += O.brute_dam - total_burn += O.burn_dam - if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(NOCLONE in H.mutations) && (H.get_int_organ(/obj/item/organ/internal/heart) || H.get_int_organ(/obj/item/organ/internal/brain/slime))) - tobehealed = min(health + threshold, 0) // It's HILARIOUS without this min statement, let me tell you - tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived - H.adjustOxyLoss(tobehealed) - H.adjustToxLoss(tobehealed) - H.adjustFireLoss(tobehealed) - H.adjustBruteLoss(tobehealed) - user.visible_message("[defib] pings: Resuscitation successful.") - playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) - H.update_revive(FALSE) - H.KnockOut(FALSE) - H.Paralyse(5) - H.emote("gasp") - if(tplus > tloss) - H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) - defib.deductcharge(revivecost) - add_logs(user, M, "revived", object="defibrillator") - else - if(tplus > tlimit|| !H.get_int_organ(/obj/item/organ/internal/heart)) - user.visible_message("[defib] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.") - else if(total_burn >= 180 || total_brute >= 180) - user.visible_message("[defib] buzzes: Resuscitation failed - Severe tissue damage detected.") - else if(ghost) - user.visible_message("[defib] buzzes: Resuscitation failed: Patient's brain is unresponsive. Further attempts may succeed.") - to_chat(ghost, "Your heart is being defibrillated. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)") - window_flash(ghost.client) - ghost << sound('sound/effects/genetics.ogg') - else - user.visible_message("[defib] buzzes: Resuscitation failed.") - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - defib.deductcharge(revivecost) - update_icon() - cooldown = 1 - defib.cooldowncheck(user) - else - user.visible_message("[defib] buzzes: Patient is not in a valid state. Operation aborted.") + if(H.heart_attack) + if(!H.get_int_organ(/obj/item/organ/internal/heart) && !H.get_int_organ(/obj/item/organ/internal/brain/slime)) //prevents defibing someone still alive suffering from a heart attack attack if they lack a heart + user.visible_message("[defib] buzzes: Resuscitation failed - Failed to pick up any heart electrical activity.") playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - busy = 0 - update_icon() - else - to_chat(user, "You need to target your patient's chest with [src].") - return + busy = 0 + update_icon() + return + else + H.heart_attack = 0 + user.visible_message("[defib] pings: Cardiac arrhythmia corrected.") + M.visible_message("[M]'s body convulses a bit.") + playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) + playsound(get_turf(src), "bodyfall", 50, 1) + playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) + defib.deductcharge(revivecost) + busy = 0 + cooldown = 1 + update_icon() + defib.cooldowncheck(user) + return + if(H.stat == DEAD) + var/health = H.health + M.visible_message("[M]'s body convulses a bit.") + playsound(get_turf(src), "bodyfall", 50, 1) + playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) + for(var/obj/item/organ/external/O in H.bodyparts) + total_brute += O.brute_dam + total_burn += O.burn_dam + if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(NOCLONE in H.mutations) && (H.get_int_organ(/obj/item/organ/internal/heart) || H.get_int_organ(/obj/item/organ/internal/brain/slime))) + tobehealed = min(health + threshold, 0) // It's HILARIOUS without this min statement, let me tell you + tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived + H.adjustOxyLoss(tobehealed) + H.adjustToxLoss(tobehealed) + H.adjustFireLoss(tobehealed) + H.adjustBruteLoss(tobehealed) + user.visible_message("[defib] pings: Resuscitation successful.") + playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) + H.update_revive(FALSE) + H.KnockOut(FALSE) + H.Paralyse(5) + H.emote("gasp") + if(tplus > tloss) + H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) + defib.deductcharge(revivecost) + add_logs(user, M, "revived", object="defibrillator") + else + if(tplus > tlimit|| !H.get_int_organ(/obj/item/organ/internal/heart)) + user.visible_message("[defib] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.") + else if(total_burn >= 180 || total_brute >= 180) + user.visible_message("[defib] buzzes: Resuscitation failed - Severe tissue damage detected.") + else if(ghost) + user.visible_message("[defib] buzzes: Resuscitation failed: Patient's brain is unresponsive. Further attempts may succeed.") + to_chat(ghost, "Your heart is being defibrillated. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)") + window_flash(ghost.client) + ghost << sound('sound/effects/genetics.ogg') + else + user.visible_message("[defib] buzzes: Resuscitation failed.") + playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) + defib.deductcharge(revivecost) + update_icon() + cooldown = 1 + defib.cooldowncheck(user) + else + user.visible_message("[defib] buzzes: Patient is not in a valid state. Operation aborted.") + playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) + busy = 0 + update_icon() + /obj/item/weapon/borg_defib name = "defibrillator paddles" @@ -489,80 +486,76 @@ cooldown = 0 update_icon() return - if(user.zone_sel && user.zone_sel.selecting == "chest") - user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest.") - busy = 1 - update_icon() - if(do_after(user, 30 * toolspeed, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process - user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.") - playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) - var/mob/dead/observer/ghost = H.get_ghost() - if(ghost && !ghost.client) - // In case the ghost's not getting deleted for some reason - H.key = ghost.key - log_runtime(EXCEPTION("Ghost of name [ghost.name] is bound to [H.real_name], but lacks a client. Deleting ghost."), H) + user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest.") + busy = 1 + update_icon() + if(do_after(user, 30 * toolspeed, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process + user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.") + playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) + var/mob/dead/observer/ghost = H.get_ghost() + if(ghost && !ghost.client) + // In case the ghost's not getting deleted for some reason + H.key = ghost.key + log_runtime(EXCEPTION("Ghost of name [ghost.name] is bound to [H.real_name], but lacks a client. Deleting ghost."), H) - qdel(ghost) - ghost = null - var/tplus = world.time - H.timeofdeath - var/tlimit = 1800 //past this much time the patient is unrecoverable (in deciseconds) - var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting - var/total_burn = 0 - var/total_brute = 0 - if(do_after(user, 20 * toolspeed, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total - if(H.stat == 2) - var/health = H.health - M.visible_message("[M]'s body convulses a bit.") - playsound(get_turf(src), "bodyfall", 50, 1) - playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) - for(var/obj/item/organ/external/O in H.bodyparts) - total_brute += O.brute_dam - total_burn += O.burn_dam - if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(NOCLONE in H.mutations)) - tobehealed = min(health + threshold, 0) // It's HILARIOUS without this min statement, let me tell you - tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived - H.adjustOxyLoss(tobehealed) - H.adjustToxLoss(tobehealed) - H.adjustFireLoss(tobehealed) - H.adjustBruteLoss(tobehealed) - user.visible_message("[user] pings: Resuscitation successful.") - playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) - H.update_revive(FALSE) - H.KnockOut(FALSE) - H.Paralyse(5) - H.emote("gasp") - if(tplus > tloss) - H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - R.cell.use(revivecost) - add_logs(user, M, "revived", object="defibrillator") - else - if(tplus > tlimit) - user.visible_message("[user] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.") - else if(total_burn >= 180 || total_brute >= 180) - user.visible_message("[user] buzzes: Resuscitation failed - Severe tissue damage detected.") - else if(ghost) - user.visible_message("[user] buzzes: Resuscitation failed: Patient's brain is unresponsive. Further attempts may succeed.") - to_chat(ghost, "Your heart is being defibrillated. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)") - window_flash(ghost.client) - ghost << sound('sound/effects/genetics.ogg') - else - user.visible_message("[user] buzzes: Resuscitation failed.") - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - R.cell.use(revivecost) - update_icon() - cooldown = 1 - spawn(50) - cooldown = 0 - update_icon() + qdel(ghost) + ghost = null + var/tplus = world.time - H.timeofdeath + var/tlimit = 1800 //past this much time the patient is unrecoverable (in deciseconds) + var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting + var/total_burn = 0 + var/total_brute = 0 + if(do_after(user, 20 * toolspeed, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total + if(H.stat == 2) + var/health = H.health + M.visible_message("[M]'s body convulses a bit.") + playsound(get_turf(src), "bodyfall", 50, 1) + playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) + for(var/obj/item/organ/external/O in H.bodyparts) + total_brute += O.brute_dam + total_burn += O.burn_dam + if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(NOCLONE in H.mutations)) + tobehealed = min(health + threshold, 0) // It's HILARIOUS without this min statement, let me tell you + tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived + H.adjustOxyLoss(tobehealed) + H.adjustToxLoss(tobehealed) + H.adjustFireLoss(tobehealed) + H.adjustBruteLoss(tobehealed) + user.visible_message("[user] pings: Resuscitation successful.") + playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) + H.update_revive(FALSE) + H.KnockOut(FALSE) + H.Paralyse(5) + H.emote("gasp") + if(tplus > tloss) + H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.cell.use(revivecost) + add_logs(user, M, "revived", object="defibrillator") else - user.visible_message("[user] buzzes: Patient is not in a valid state. Operation aborted.") + if(tplus > tlimit) + user.visible_message("[user] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.") + else if(total_burn >= 180 || total_brute >= 180) + user.visible_message("[user] buzzes: Resuscitation failed - Severe tissue damage detected.") + else if(ghost) + user.visible_message("[user] buzzes: Resuscitation failed: Patient's brain is unresponsive. Further attempts may succeed.") + to_chat(ghost, "Your heart is being defibrillated. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)") + window_flash(ghost.client) + ghost << sound('sound/effects/genetics.ogg') + else + user.visible_message("[user] buzzes: Resuscitation failed.") playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - busy = 0 - update_icon() - else - to_chat(user, "You need to target your patient's chest with [src].") - return + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.cell.use(revivecost) + update_icon() + cooldown = 1 + spawn(50) + cooldown = 0 + update_icon() + else + user.visible_message("[user] buzzes: Patient is not in a valid state. Operation aborted.") + playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) + busy = 0 + update_icon() From 1e6866ab1f8629cd8c61d1b8273e6bff2042bc04 Mon Sep 17 00:00:00 2001 From: Citinited Date: Mon, 29 May 2017 21:50:12 +0100 Subject: [PATCH 023/378] Asset-cache now deals with RPD icon generation; addresses feedback from PR Addresses feedback from PJB, Crazylemon, and others, moves the icon generation to asset-cache.dm, some minor improvement to the nanoUI --- code/game/objects/items/weapons/rpd.dm | 377 ++++++++++++------------- code/modules/client/asset_cache.dm | 27 ++ nano/templates/rpd.tmpl | 65 +++-- 3 files changed, 242 insertions(+), 227 deletions(-) diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index 7db79cdd06f..17d30d1a170 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -2,10 +2,40 @@ Rapid Pipe Dispenser */ +#define SIMPLE_BENT 1 +#define SIMPLE_CAP 20 +#define SUPPLY_BENT 25 +#define SUPPLY_CAP 32 +#define SCRUBBERS_BENT 27 +#define SCRUBBERS_CAP 33 +#define HE_BENT 3 +#define HE_EXCHANGER 17 +#define CONNECTOR 4 +#define UNARY_VENT 7 +#define PASSIVE_VENT 37 +#define GAS_SCRUBBER 10 +#define INJECTOR 34 +#define GAS_SENSOR 98 +#define METER 99 +#define DISPOSALS_JUNCTION 2 +#define DISPOSALS_BIN 6 +#define DISPOSALS_OUTLET 7 +#define DISPOSALS_CHUTE 8 +#define ATMOS_MODE 1 +#define DISPOSALS_MODE 2 +#define ROTATION_MODE 3 +#define FLIP_MODE 4 +#define DELETE_MODE 5 +#define ATMOS_PIPING 1 +#define SUPPLY_PIPING 2 +#define SCRUBBERS_PIPING 3 +#define DEVICES 4 +#define HEAT_PIPING 5 + /obj/item/weapon/rpd name = "rapid pipe dispenser" desc = "This device can rapidly dispense atmospherics and disposals piping, manipulate loose piping, and recycle any detached pipes it is applied to." - icon = 'icons/obj/tools.dmi' //Apparently we can't use double quotes here + icon = 'icons/obj/tools.dmi' icon_state = "rpd" opacity = 0 density = 0 @@ -15,289 +45,248 @@ throwforce = 10 throw_speed = 3 throw_range = 5 - w_class = 3 + w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL = 30000, MAT_GLASS = 5000) origin_tech = "engineering=4;materials=2" + var/datum/effect/system/spark_spread/spark_system + var/cooldown //Waiting for something to complete? var/iconrotation = 0 //used to orient icons and pipes - var/initialised //This stops us unnecessarily checking the cache for icons - var/mode = 1 //Disposals, atmospherics - var/pipemenu = 1 //For nanoUI menus + var/mode = 1 //Disposals, atmospherics, etc. var/pipetype = 1//For nanoUI menus var/whatpipe = 0 //What kind of pipe is it? See code/game/machinery/pipe/construction.dm for a list of defines - var/whatdpipe = 0 //What kind of disposals pipe is it? See code/game/machinery/pipe/pipe_dispenser.dm for a list of defines - var/cooldown = 0 //Waiting for something to complete? + var/whatdpipe = 0 //What kind of disposals pipe is it? See code/game/machinery/pipe/dispenser.dm for a list of defines var/spawndelay = 4 //Adding a *slight* delay to the RPD, shouldn't be very noticeable var/walldelay = 40 //How long should drilling into a wall take? - var/datum/effect/system/spark_spread/spark_system /obj/item/weapon/rpd/New() + ..() spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(1, 0, src) spark_system.attach(src) -//List of things follow here - -//Pipename, pipe type (see construction.dm), pipe category, number of unique orientations, name of pipe icon, is this pipe bendy? -var/list/pipelist = list( - list("key1" = "Straight pipe", "key2" = "0", "key3" = "1", "key4" = "2", "key5" = "simple", "key6" = "0"), - list("key1" = "Bent pipe", "key2" = "1", "key3" = "1", "key4" = "4", "key5" = "simple", "key6" = "1"), - list("key1" = "T-manifold", "key2" = "5", "key3" = "1", "key4" = "4", "key5" = "manifold", "key6" = "0"), - list("key1" = "4-way manifold", "key2" = "19", "key3" = "1", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), - list("key1" = "Pipe cap", "key2" = "20", "key3" = "1", "key4" = "4", "key5" = "cap", "key6" = "0"), - list("key1" = "Manual valve", "key2" = "8", "key3" = "1", "key4" = "2", "key5" = "mvalve", "key6" = "0"), - list("key1" = "Digital valve", "key2" = "35", "key3" = "1", "key4" = "2", "key5" = "dvalve", "key6" = "0"), - list("key1" = "Manual T-valve", "key2" = "18", "key3" = "1", "key4" = "4", "key5" = "tvalve", "key6" = "0"), - list("key1" = "Digital T-valve", "key2" = "38", "key3" = "1", "key4" = "4", "key5" = "dtvalve", "key6" = "0"), - list("key1" = "Straight supply pipe", "key2" = "24", "key3" = "2", "key4" = "2", "key5" = "simple", "key6" = "0"), - list("key1" = "Bent supply pipe", "key2" = "25", "key3" = "2", "key4" = "4", "key5" = "simple", "key6" = "1"), - list("key1" = "Supply T-manifold", "key2" = "28", "key3" = "2", "key4" = "4", "key5" = "manifold", "key6" = "0"), - list("key1" = "4-way supply manifold", "key2" = "30", "key3" = "2", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), - list("key1" = "Supply pipe cap", "key2" = "32", "key3" = "2", "key4" = "4", "key5" = "cap", "key6" = "0"), - list("key1" = "Straight scrubbers pipe", "key2" = "26", "key3" = "3", "key4" = "2", "key5" = "simple", "key6" = "0"), - list("key1" = "Bent scrubbers pipe", "key2" = "27", "key3" = "3", "key4" = "4", "key5" = "simple", "key6" = "1"), - list("key1" = "Scrubbers T-manifold", "key2" = "29", "key3" = "3", "key4" = "4", "key5" = "manifold", "key6" = "0"), - list("key1" = "4-way scrubbers manifold", "key2" = "31", "key3" = "3", "key4" = "1", "key5" = "manifold4w", "key6" = "0"), - list("key1" = "Scrubbers pipe cap", "key2" = "33", "key3" = "3", "key4" = "4", "key5" = "cap", "key6" = "0"), - list("key1" = "Universal pipe adapter", "key2" = "23", "key3" = "4", "key4" = "2", "key5" = "universal", "key6" = "0"), - list("key1" = "Unary vent", "key2" = "7", "key3" = "4", "key4" = "4", "key5" = "uvent", "key6" = "0"), - list("key1" = "Scrubber", "key2" = "10", "key3" = "4", "key4" = "4", "key5" = "scrubber", "key6" = "0"), - list("key1" = "Air injector", "key2" = "34", "key3" = "4", "key4" = "4", "key5" = "injector", "key6" = "0"), - list("key1" = "Gas pump", "key2" = "9", "key3" = "4", "key4" = "4", "key5" = "pump", "key6" = "0"), - list("key1" = "Volume pump", "key2" = "16", "key3" = "4", "key4" = "4", "key5" = "volumepump", "key6" = "0"), - list("key1" = "Passive gate", "key2" = "15", "key3" = "4", "key4" = "4", "key5" = "passivegate", "key6" = "0"), - list("key1" = "Connector", "key2" = "4", "key3" = "4", "key4" = "4", "key5" = "connector", "key6" = "0"), - list("key1" = "Gas sensor", "key2" = "98", "key3" = "4", "key4" = "1", "key5" = "sensor", "key6" = "0"), - list("key1" = "Meter", "key2" = "99", "key3" = "4", "key4" = "1", "key5" = "meter", "key6" = "0"), - list("key1" = "Gas filter", "key2" = "13", "key3" = "4", "key4" = "4", "key5" = "filter", "key6" = "0"), - list("key1" = "Gas mixer", "key2" = "14", "key3" = "4", "key4" = "4", "key5" = "mixer", "key6" = "0"), - list("key1" = "Dual-port vent pump", "key2" = "36", "key3" = "4", "key4" = "2", "key5" = "dual-port vent", "key6" = "0"), - list("key1" = "Passive vent", "key2" = "37", "key3" = "4", "key4" = "4", "key5" = "passive vent", "key6" = "0"), - list("key1" = "Straight HE pipe", "key2" = "2", "key3" = "5", "key4" = "2", "key5" = "he", "key6" = "0"), - list("key1" = "Bent HE pipe", "key2" = "3", "key3" = "5", "key4" = "4", "key5" = "he", "key6" = "1"), - list("key1" = "Junction", "key2" = "6", "key3" = "5", "key4" = "4", "key5" = "junction", "key6" = "0"), - list("key1" = "Heat exchanger", "key2" = "17", "key3" = "5", "key4" = "4", "key5" = "heunary", "key6" = "0")) - -//Pipename, pipe type, number of unique orientations, name of pipe icon -var/list/dpipelist = list( - list("key1" = "Straight pipe", "key2" = "0", "key3" = "2", "key4" = "conpipe-s"), - list("key1" = "Bent pipe", "key2" = "1", "key3" = "4", "key4" = "conpipe-c"), - list("key1" = "Junction", "key2" = "2", "key3" = "4", "key4" = "conpipe-j1"), - list("key1" = "Y-junction", "key2" = "4", "key3" = "4", "key4" = "conpipe-y"), - list("key1" = "Trunk", "key2" = "5", "key3" = "4", "key4" = "conpipe-t"), - list("key1" = "Bin", "key2" = "6", "key3" = "1", "key4" = "condisposal"), - list("key1" = "Outlet", "key2" = "7", "key3" = "4", "key4" = "outlet"), - list("key1" = "Chute", "key2" = "8", "key3" = "4", "key4" = "intake")) - //Procs -/obj/item/weapon/rpd/proc/Activaterpd(soundfile, delay) - playsound(loc, soundfile, 50, 1) +/obj/item/weapon/rpd/proc/Activaterpd(delay) + playsound(loc, "sound/machines/click.ogg", 50, 1) if(prob(15)) spark_system.start() if(delay) - cooldown = 1 - spawn(spawndelay) - cooldown = 0 - return + cooldown = TRUE + sleep(spawndelay) + cooldown = null /obj/item/weapon/rpd/proc/Checkifbent(x) - if(x in list(1,3,25,27)) - return 1 - else - return 0 + return(x in list(SIMPLE_BENT, HE_BENT, SUPPLY_BENT, SCRUBBERS_BENT)) -//This proc puts each necessary icon into the initial user's cache for later use. It then sets initialised = 1 to avoid calling itself unnecessarily. -/obj/item/weapon/rpd/proc/Initialiseicons() - var/F - var/I - var/list/filenames - var/disposalsfile = "icons/obj/pipes/disposal.dmi" - var/pipefile = "icons/obj/pipe-item.dmi" - for(I in pipelist) - if(I["key6"] == "1")//Bendy pipe icons - filenames += list( - list(pipefile, I["key5"], I["key5"] + "-southeast.png", SOUTHEAST), - list(pipefile, I["key5"], I["key5"] + "-southwest.png", SOUTHWEST), - list(pipefile, I["key5"], I["key5"] + "-northwest.png", NORTHWEST), - list(pipefile, I["key5"], I["key5"] + "-northeast.png", NORTHEAST)) - continue - if(I["key4"] == "2" || I["key4"] == "4") //Dual state icons - filenames += list( - list(pipefile, I["key5"], I["key5"] + "-north.png", NORTH), - list(pipefile, I["key5"], I["key5"] + "-east.png", EAST)) - if(I["key4"] == "4")//All other pipes that need icons - filenames += list( - list(pipefile, I["key5"], I["key5"] + "-south.png", SOUTH), - list(pipefile, I["key5"], I["key5"] + "-west.png", WEST)) - for(I in dpipelist) - if(I["key3"] == "2" || I["key3"] == "4") - filenames += list( - list(disposalsfile, I["key4"], I["key4"] + "-north.png", NORTH), - list(disposalsfile, I["key4"], I["key4"] + "-east.png", EAST)) - if(I["key3"] == "4") - filenames += list( - list(disposalsfile, I["key4"], I["key4"] + "-south.png", SOUTH), - list(disposalsfile, I["key4"], I["key4"] + "-west.png", WEST)) - for(F in filenames) - var/icon/iconfile = icon(F[1], icon_state = F[2], dir = F[4]) - usr << browse_rsc(iconfile, F[3]) - initialised = 1 - return +/obj/item/weapon/rpd/proc/Checkifdense(x) //We need to check if the targetted turf is already dense, in case some goofball sticks 100 bins in front of security or something + return(x in list(DISPOSALS_BIN, DISPOSALS_OUTLET, DISPOSALS_CHUTE)) /obj/item/weapon/rpd/proc/Manipulatepipes(subject, targetturf, atmosverb, disposalsverb) if(istype(subject, /obj/item/pipe)) call(subject, atmosverb)() else if(istype(subject, /obj/structure/disposalconstruct/)) call(subject, disposalsverb)() - else - return + +//Lists of things + +var/list/pipelist = list( //id refers to the pipe_type found in construction.dm, icon refers to the name of the icon state in icons/obj/pipe-item.dmi. Icons are made with the asset-cache + list("pipename" = "Straight pipe", "id" = 0, "category" = ATMOS_PIPING, "orientations" = 2, "icon" = "simple"), + list("pipename" = "Bent pipe", "id" = 1, "category" = ATMOS_PIPING, "orientations" = 4, "icon" = "simple", "bendy" = 1), + list("pipename" = "T-manifold", "id" = 5, "category" = ATMOS_PIPING, "orientations" = 4, "icon" = "manifold"), + list("pipename" = "4-way manifold", "id" = 19, "category" = ATMOS_PIPING, "orientations" = 1, "icon" = "manifold4w"), + list("pipename" = "Pipe cap", "id" = 20, "category" = ATMOS_PIPING, "orientations" = 4, "icon" = "cap"), + list("pipename" = "Manual valve", "id" = 8, "category" = ATMOS_PIPING, "orientations" = 2, "icon" = "mvalve"), + list("pipename" = "Digital valve", "id" = 35, "category" = ATMOS_PIPING, "orientations" = 2, "icon" = "dvalve"), + list("pipename" = "Manual T-valve", "id" = 18, "category" = ATMOS_PIPING, "orientations" = 4, "icon" = "tvalve"), + list("pipename" = "Digital T-valve", "id" = 38, "category" = ATMOS_PIPING, "orientations" = 4, "icon" = "dtvalve"), + list("pipename" = "Straight supply pipe", "id" = 24, "category" = SUPPLY_PIPING, "orientations" = 2, "icon" = "simple"), + list("pipename" = "Bent supply pipe", "id" = 25, "category" = SUPPLY_PIPING, "orientations" = 4, "icon" = "simple", "bendy" = 1), + list("pipename" = "Supply T-manifold", "id" = 28, "category" = SUPPLY_PIPING, "orientations" = 4, "icon" = "manifold"), + list("pipename" = "4-way supply manifold", "id" = 30, "category" = SUPPLY_PIPING, "orientations" = 1, "icon" = "manifold4w"), + list("pipename" = "Supply pipe cap", "id" = 32, "category" = SUPPLY_PIPING, "orientations" = 4, "icon" = "cap"), + list("pipename" = "Straight scrubbers pipe", "id" = 26, "category" = SCRUBBERS_PIPING, "orientations" = 2, "icon" = "simple"), + list("pipename" = "Bent scrubbers pipe", "id" = 27, "category" = SCRUBBERS_PIPING, "orientations" = 4, "icon" = "simple", "bendy" = 1), + list("pipename" = "Scrubbers T-manifold", "id" = 29, "category" = SCRUBBERS_PIPING, "orientations" = 4, "icon" = "manifold"), + list("pipename" = "4-way scrubbers manifold", "id" = 31, "category" = SCRUBBERS_PIPING, "orientations" = 1, "icon" = "manifold4w"), + list("pipename" = "Scrubbers pipe cap", "id" = 33, "category" = SCRUBBERS_PIPING, "orientations" = 4, "icon" = "cap"), + list("pipename" = "Universal pipe adapter", "id" = 23, "category" = DEVICES, "orientations" = 2, "icon" = "universal"), + list("pipename" = "Connector", "id" = 4, "category" = DEVICES, "orientations" = 4, "icon" = "connector"), + list("pipename" = "Unary vent", "id" = 7, "category" = DEVICES, "orientations" = 4, "icon" = "uvent"), + list("pipename" = "Scrubber", "id" = 10, "category" = DEVICES, "orientations" = 4, "icon" = "scrubber"), + list("pipename" = "Gas pump", "id" = 9, "category" = DEVICES, "orientations" = 4, "icon" = "pump"), + list("pipename" = "Volume pump", "id" = 16, "category" = DEVICES, "orientations" = 4, "icon" = "volumepump"), + list("pipename" = "Passive gate", "id" = 15, "category" = DEVICES, "orientations" = 4, "icon" = "passivegate"), + list("pipename" = "Gas filter", "id" = 13, "category" = DEVICES, "orientations" = 4, "icon" = "filter"), + list("pipename" = "Gas mixer", "id" = 14, "category" = DEVICES, "orientations" = 4, "icon" = "mixer"), + list("pipename" = "Gas sensor", "id" = 98, "category" = DEVICES, "orientations" = 1, "icon" = "sensor"), + list("pipename" = "Meter", "id" = 99, "category" = DEVICES, "orientations" = 1, "icon" = "meter"), + list("pipename" = "Passive vent", "id" = 37, "category" = DEVICES, "orientations" = 4, "icon" = "passive vent"), + list("pipename" = "Dual-port vent pump", "id" = 36, "category" = DEVICES, "orientations" = 2, "icon" = "dual-port vent"), + list("pipename" = "Air injector", "id" = 34, "category" = DEVICES, "orientations" = 4, "icon" = "injector"), + list("pipename" = "Straight HE pipe", "id" = 2, "category" = HEAT_PIPING, "orientations" = 2, "icon" = "he"), + list("pipename" = "Bent HE pipe", "id" = 3, "category" = HEAT_PIPING, "orientations" = 4, "icon" = "he", "bendy" = 1), + list("pipename" = "Junction", "id" = 6, "category" = HEAT_PIPING, "orientations" = 4, "icon" = "junction"), + list("pipename" = "Heat exchanger", "id" = 17, "category" = HEAT_PIPING, "orientations" = 4, "icon" = "heunary")) +var/list/dpipelist = list( + list("pipename" = "Straight pipe", "id" = 0, "orientations" = 2, "icon" = "conpipe-s"), + list("pipename" = "Bent pipe", "id" = 1, "orientations" = 4, "icon" = "conpipe-c"), + list("pipename" = "Junction", "id" = 2, "orientations" = 4, "icon" = "conpipe-j1"), + list("pipename" = "Y-junction", "id" = 4, "orientations" = 4, "icon" = "conpipe-y"), + list("pipename" = "Trunk", "id" = 5, "orientations" = 4, "icon" = "conpipe-t"), + list("pipename" = "Bin", "id" = 6, "orientations" = 1, "icon" = "condisposal"), + list("pipename" = "Outlet", "id" = 7, "orientations" = 4, "icon" = "outlet"), + list("pipename" = "Chute", "id" = 8, "orientations" = 4, "icon" = "intake")) +var/list/mainmenu = list( + list("category" = "Atmospherics", "mode" = 1, "icon" = "wrench"), + list("category" = "Disposals", "mode" = 2, "icon" = "recycle"), + list("category" = "Rotate", "mode" = 3, "icon" = "rotate-right"), + list("category" = "Flip", "mode" = 4, "icon" = "exchange"), + list("category" = "Recycle", "mode" = 5, "icon" = "trash")) +var/list/pipemenu = list( + list("pipecategory" = "Normal", "pipemode" = 1), + list("pipecategory" = "Supply", "pipemode" = 2), + list("pipecategory" = "Scrubber", "pipemode" = 3), + list("pipecategory" = "Devices", "pipemode" = 4), + list("pipecategory" = "Heat exchange", "pipemode" = 5)) //NanoUI stuff -/obj/item/weapon/rpd/attack_self(mob/user as mob) +/obj/item/weapon/rpd/attack_self(mob/user) ui_interact(user) /obj/item/weapon/rpd/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state) ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "rpd.tmpl", "[name]", 600, 650, state = state) + ui = new(user, src, ui_key, "rpd.tmpl", "[name]", 400, 650, state = state) ui.open() - if(!initialised) - Initialiseicons() ui.set_auto_update(1) /obj/item/weapon/rpd/ui_data(mob/user, ui_key = "main", datum/topic_state/state = inventory_state) var/data[0] data["dpipelist"] = dpipelist data["iconrotation"] = iconrotation + data["mainmenu"] = mainmenu data["mode"] = mode data["pipelist"] = pipelist data["pipemenu"] = pipemenu data["pipetype"] = pipetype data["whatdpipe"] = whatdpipe data["whatpipe"] = whatpipe - data["mainmenu"] = list( - list("key1" = "Atmospherics piping", "key2" = "1", "key3" = "wrench"), - list("key1" = "Disposals piping", "key2" = "2", "key3" = "recycle"), - list("key1" = "Rotate mode", "key2" = "3", "key3" = "rotate-right"), - list("key1" = "Flip mode", "key2" = "4", "key3" = "exchange"), - list("key1" = "Recycle mode", "key2" = "5", "key3" = "trash")) - data["mainmenu"] = list( - list("key1" = "Atmospherics piping", "key2" = "1", "key3" = "wrench"), - list("key1" = "Disposals piping", "key2" = "2", "key3" = "recycle"), - list("key1" = "Rotate mode", "key2" = "3", "key3" = "rotate-right"), - list("key1" = "Flip mode", "key2" = "4", "key3" = "exchange"), - list("key1" = "Recycle mode", "key2" = "5", "key3" = "trash")) - data["pipemenu"] = list( - list("key1" = "Normal pipes", "key2" = "1"), - list("key1" = "Supply pipes", "key2" = "2"), - list("key1" = "Scrubber pipes", "key2" = "3"), - list("key1" = "Devices", "key2" = "4"), - list("key1" = "HE pipes", "key2" = "5")) return data /obj/item/weapon/rpd/Topic(href, href_list, nowindow, state) + ..() if(href_list["iconrotation"]) - iconrotation = text2num(href_list["iconrotation"]) + iconrotation = text2num(sanitize(href_list["iconrotation"])) else if(href_list["whatpipe"]) - whatpipe = text2num(href_list["whatpipe"]) + whatpipe = text2num(sanitize(href_list["whatpipe"])) else if(href_list["whatdpipe"]) - whatdpipe = text2num(href_list["whatdpipe"]) + whatdpipe = text2num(sanitize(href_list["whatdpipe"])) else if(href_list["pipetype"]) - pipetype = text2num(href_list["pipetype"]) + pipetype = text2num(sanitize(href_list["pipetype"])) else if(href_list["mode"]) - mode = text2num(href_list["mode"]) - else if(href_list["refresh"]) - to_chat(usr, "You press the reset button, refreshing all settings on the [src].") - iconrotation = 0 - mode = 1 - pipemenu = 1 - pipetype = 1 - whatpipe = 0 - whatdpipe = 0 - cooldown = 0 - Initialiseicons() + mode = text2num(sanitize(href_list["mode"])) else return nanomanager.update_uis(src) - return //What the RPD actually does -/obj/item/weapon/rpd/afterattack(atom/target, mob/user as mob, proximity) +/obj/item/weapon/rpd/afterattack(atom/target, mob/user, proximity) + ..() var/turf/T = get_turf(target) - if(!proximity || cooldown == 1) + if(ismob(target) || istype(target, /obj/structure/window) || !proximity || cooldown) return - else if(!isturf(target) && !istype(target, /obj/item/pipe) && !istype(target, /obj/item/pipe_meter) && !istype(target, /obj/item/pipe_gsensor) && !istype(target, /obj/structure/disposalconstruct) || istype(target, /turf/simulated/shuttle)) - return - else if(mode == 1) //Atmos mode + if(mode == ATMOS_MODE) if(istype(T, /turf/simulated/wall)) //Drilling into walls takes time and we don't want to do anything else while drilling - cooldown = 1 + cooldown = TRUE playsound(get_turf(src), "sound/weapons/circsawhit.ogg", 50, 1) - usr.visible_message("[usr] starts drilling a hole in [T]...", "You start drilling a hole in [T]...", "You hear a drill.") - if(do_after(usr, walldelay, target = T)) - usr.visible_message("[usr] finishes drilling a hole in [T]!", "You finish drilling a hole in [T]!", "You hear clanking.") - else - cooldown = 0 + user.visible_message("[user] starts drilling a hole in [T]...", "You start drilling a hole in [T]...", "You hear a drill.") + if(!do_after(user, walldelay, target = T)) + cooldown = null return - if(whatpipe == 98)//need to check if it's a meter or a gas sensor separately ayylmao + user.visible_message("[user] finishes drilling a hole in [T]!", "You finish drilling a hole in [T]!", "You hear clanking.") + if(whatpipe == GAS_SENSOR)//need to check if it's a meter or a gas sensor separately ayylmao new /obj/item/pipe_gsensor(T) - to_chat(usr, "[src] dispenses a sensor!") - else if(whatpipe == 99) + to_chat(user, "[src] dispenses a sensor!") + else if(whatpipe == METER) new /obj/item/pipe_meter(T) - to_chat(usr, "[src] dispenses a meter!") + to_chat(user, "[src] dispenses a meter!") else - var/obj/item/pipe/P = new(T, pipe_type=whatpipe, dir = usr.dir) //Now we make the pipes - if(iconrotation == 0 && Checkifbent(P.pipe_type) == 1) //Automatic rotation of dispensed pipes - P.dir = turn(usr.dir, 135) - else if(iconrotation == 0 && P.pipe_type in list(4, 7, 10, 17, 20, 32, 33, 34, 37)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction + var/obj/item/pipe/P = new(T, pipe_type = whatpipe, dir = user.dir) //Now we make the pipes + if(iconrotation == 0 && Checkifbent(P.pipe_type)) //Automatic rotation of dispensed pipes + P.dir = turn(user.dir, 135) + else if(iconrotation == 0 && P.pipe_type in list(CONNECTOR, UNARY_VENT, GAS_SCRUBBER, HE_EXCHANGER, SIMPLE_CAP, SUPPLY_CAP, SCRUBBERS_CAP, INJECTOR, PASSIVE_VENT)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction call(P, /obj/item/pipe/verb/flip)() - else if(iconrotation != 0 && Checkifbent(P.pipe_type) == 1) //If they selected a rotation and the pipe is bent + else if(iconrotation != 0 && Checkifbent(P.pipe_type)) //If they selected a rotation and the pipe is bent P.dir = turn(iconrotation, -45) else if(iconrotation != 0) P.dir = iconrotation P.update() - to_chat(usr, "[src] rapidly dispenses [P]!") - Activaterpd("sound/machines/click.ogg", 1) - else if(mode == 2) //Disposals mode + to_chat(user, "[src] rapidly dispenses [P]!") + Activaterpd(1) + else if(mode == DISPOSALS_MODE) if(istype(T, /turf/simulated/wall)) - to_chat(usr, "That type of pipe won't fit on [T]!") + to_chat(user, "That type of pipe won't fit on [T]!") return - if(is_blocked_turf(T) == 1 && whatdpipe in list(6, 7, 8))//We need to check if the targetted turf is already dense, in case some goofball sticks 100 bins in front of security or something - to_chat(usr, "You can't dispense that on [T] because something is in the way!") + if(is_blocked_turf(T) && Checkifdense(whatdpipe)) + to_chat(user, "You can't dispense that on [T] because something is in the way!") return var/obj/structure/disposalconstruct/P = new(T) //Now we make the pipe P.dir = iconrotation P.ptype = whatdpipe - if(whatdpipe in list(6, 7, 8)) //To properly set density of our bins/chutes/outlets + if(Checkifdense(whatdpipe)) //To properly set density of our bins/chutes/outlets P.density = 1 if(iconrotation == 0) //Automatic rotation - P.dir = usr.dir - if(iconrotation == 0 && whatdpipe != 2) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though + P.dir = user.dir + if(iconrotation == 0 && whatdpipe != DISPOSALS_JUNCTION) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though call(P, /obj/structure/disposalconstruct/verb/flip)() P.update() - to_chat(usr, "[src] rapidly dispenses [P]!") - Activaterpd("sound/machines/click.ogg", 1) - return - else if(mode == 3) //Rotate mode + to_chat(user, "[src] rapidly dispenses [P]!") + Activaterpd(1) + else if(mode == ROTATION_MODE) for(var/obj/W in T) Manipulatepipes(W, T, /obj/item/pipe/verb/rotate, /obj/structure/disposalconstruct/verb/rotate) - return - else if(mode == 4) //Flip mode + else if(mode == FLIP_MODE) for(var/obj/W in T) Manipulatepipes(W, T, /obj/item/pipe/verb/flip, /obj/structure/disposalconstruct/verb/flip) - return - else if(mode == 5) //Delete mode + else if(mode == DELETE_MODE) var/eaten for(var/obj/W in T) - if(istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter) || istype(W, /obj/item/pipe_gsensor) || istype(W, /obj/structure/disposalconstruct) && W.anchored == 0) + if(istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter) || istype(W, /obj/item/pipe_gsensor) || istype(W, /obj/structure/disposalconstruct) && !W.anchored) qdel(W) - eaten = 1 - if(eaten == 1) - to_chat(usr, "[src] sucks up the loose pipes on [T]!") - Activaterpd("sound/items/Deconstruct.ogg", 1) + eaten = TRUE + if(eaten) + to_chat(user, "[src] sucks up the loose pipes on [T].") else - to_chat(usr, "There were no loose pipes on [T].") - return - else //Finished. - return + to_chat(user, "There were no loose pipes on [T].") + +#undef SIMPLE_BENT +#undef SIMPLE_CAP +#undef SUPPLY_BENT +#undef SUPPLY_CAP +#undef SCRUBBERS_BENT +#undef SCRUBBERS_CAP +#undef HE_BENT +#undef HE_EXCHANGER +#undef CONNECTOR +#undef UNARY_VENT +#undef PASSIVE_VENT +#undef GAS_SCRUBBER +#undef INJECTOR +#undef GAS_SENSOR +#undef METER +#undef DISPOSALS_JUNCTION +#undef DISPOSALS_BIN +#undef DISPOSALS_OUTLET +#undef DISPOSALS_CHUTE +#undef ATMOS_MODE +#undef DISPOSALS_MODE +#undef ROTATION_MODE +#undef FLIP_MODE +#undef DELETE_MODE +#undef ATMOS_PIPING +#undef SUPPLY_PIPING +#undef SCRUBBERS_PIPING +#undef DEVICES +#undef HEAT_PIPING diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 72534169e6d..35b06c9e5cd 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -302,6 +302,33 @@ proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) send_asset_list(client, assets, verify) +//Pipe sprites for UIs +/datum/asset/rpd + var/assets = list() + var/verify = FALSE + +/datum/asset/rpd/register() + for(var/state in icon_states('icons/obj/pipe-item.dmi')) + if(!(state in list("cap", "connector", "dtvalve", "dual-port vent", "dvalve", "filter", "he", "heunary", "injector", "junction", "manifold", "mixer", "tvalve", "mvalve", "passive vent", "passivegate", "pump", "scrubber", "simple", "universal", "uvent", "volumepump"))) //Basically all the pipes we want sprites for + continue + if(state in list("he", "simple")) + for(var/D in alldirs) + assets["[state]-[D].png"] = icon('icons/obj/pipe-item.dmi', state, D) + continue + for(var/D in cardinal) + assets["[state]-[D].png"] = icon('icons/obj/pipe-item.dmi', state, D) + for(var/state in icon_states('icons/obj/pipes/disposal.dmi')) + if(!(state in list("conpipe-c", "conpipe-j1", "conpipe-s", "conpipe-t", "conpipe-y", "intake", "outlet"))) //Pipes we want sprites for + continue + for(var/D in cardinal) + assets["[state]-[D].png"] = icon('icons/obj/pipes/disposal.dmi', state, D) + for(var/asset_name in assets) + register_asset(asset_name, assets[asset_name]) + +/datum/asset/rpd/send(client) + send_asset_list(client, assets, verify) + + //Mob Hunt sprites for UIs /datum/asset/mob_hunt var/assets = list() diff --git a/nano/templates/rpd.tmpl b/nano/templates/rpd.tmpl index 9419fcffa1d..68d4669d38f 100644 --- a/nano/templates/rpd.tmpl +++ b/nano/templates/rpd.tmpl @@ -1,105 +1,104 @@ -

    Mode:

    -
    {{:helper.link("Reset RPD", "refresh", {"refresh": 1}, data.refresh == 1 ? "linkOn" : null)}}
    +

    Mode:

    {{for data.mainmenu}} - {{:helper.link(String(value.key1), String(value.key3), {"mode": Number(value.key2)}, data.mode == Number(value.key2) ? "linkOn" : null)}} + {{:helper.link(String(value.category), String(value.icon), {"mode": Number(value.mode)}, data.mode == Number(value.mode) ? "linkOn" : null)}} {{/for}}
    {{if data.mode == 1}} -

    Pipe type:

    +

    Pipe type:

    - {{for data.pipemenu}} - {{:helper.link(String(value.key1), null, {"pipetype": Number(value.key2)}, data.pipetype == Number(value.key2) ? "linkOn" : null)}} + {{for data.pipemenu}} + {{:helper.link(String(value.pipecategory), null, {"pipetype": Number(value.pipemode)}, data.pipetype == Number(value.pipemode) ? "linkOn" : null)}} {{/for}}
    -

    Available pipes:

    -
    +

    Available pipes:

    +
    {{for data.pipelist}} - {{if value.key3 == data.pipetype}} -
    {{:helper.link(String(value.key1), "arrow-right", {"whatpipe": Number(value.key2)}, data.whatpipe == Number(value.key2) ? "linkOn" : null)}}
    + {{if value.category == data.pipetype}} +
    {{:helper.link(String(value.pipename), "arrow-right", {"whatpipe": Number(value.id)}, data.whatpipe == Number(value.id) ? "linkOn" : null)}}
    {{/if}} {{/for}}
    {{for data.pipelist}} -
    - {{if value.key2 == data.whatpipe && value.key4 != 1}} +
    + {{if value.id == data.whatpipe && value.orientations != 1}}
    {{:helper.link("Orient automatically", null, {"iconrotation": 0}, data.iconrotation == 0 ? "linkOn" : null)}}
    {{/if}} - {{if value.key2 == data.whatpipe && value.key4 != 1 && value.key6 != 1}} + {{if value.id == data.whatpipe && value.orientations != 1 && value.bendy != 1}}
    {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} - +
    {{/if}} - {{if value.key2 == data.whatpipe && value.key4 == 4 && value.key6 != 1}} + {{if value.id == data.whatpipe && value.orientations == 4 && value.bendy != 1}}
    {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} - +
    {{/if}} - {{if value.key2 == data.whatpipe && value.key6 == 1}} + {{if value.id == data.whatpipe && value.bendy == 1}}
    {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} - +
    {{/if}}
    {{/for}} {{else data.mode == 2}} -

    Available pipes:

    -
    +

    Available pipes:

    +
    {{for data.dpipelist}} -
    {{:helper.link(String(value.key1), "arrow-right", {"whatdpipe": Number(value.key2)}, data.whatdpipe == Number(value.key2) ? "linkOn" : null)}}
    +
    {{:helper.link(String(value.pipename), "arrow-right", {"whatdpipe": Number(value.id)}, data.whatdpipe == Number(value.id) ? "linkOn" : null)}}
    {{/for}}
    {{for data.dpipelist}} -
    - {{if value.key2 == data.whatdpipe && value.key3 != 1}} +
    + {{if value.id == data.whatdpipe && value.orientations != 1}}
    {{:helper.link("Orient automatically", null, {"iconrotation": 0}, data.iconrotation == 0 ? "linkOn" : null)}}
    {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} - +
    {{/if}} - {{if value.key2 == data.whatdpipe && value.key3 == 4}} + {{if value.id == data.whatdpipe && value.orientations == 4}}
    {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} - +
    {{/if}}
    From 166c79d86a9d76880936ce6e3cce8636c9013d62 Mon Sep 17 00:00:00 2001 From: fludd12 Date: Wed, 31 May 2017 15:53:24 -0400 Subject: [PATCH 024/378] makes a species water_act --- code/modules/mob/living/carbon/human/human_defense.dm | 5 ++--- code/modules/mob/living/carbon/human/species/species.dm | 3 +++ code/modules/mob/living/carbon/human/species/station.dm | 5 +++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index c4b9540d899..9e8fcf8d50b 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -471,6 +471,5 @@ emp_act ..() if(temperature >= 330) bodytemperature = bodytemperature + (temperature - bodytemperature) if(temperature <= 280) bodytemperature = bodytemperature - (bodytemperature - temperature) - if(get_species() == "Grey") - take_organ_damage(5,min(volume,20)) - emote("scream") + species.water_act(src,volume,temperature,source) + diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index d2d44757705..ccaff68fec7 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -677,3 +677,6 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(H.see_override) //Override all H.see_invisible = H.see_override + +/datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source) + ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index c1005f2b932..9355f5b38ec 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -750,6 +750,11 @@ genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED) ..() +/datum/species/grey/water_act(var/mob/living/carbon/C, volume, temperature, source) + C.take_organ_damage(5,min(volume,20)) + C.emote("scream") + ..() + /datum/species/grey/after_equip_job(datum/job/J, mob/living/carbon/human/H) var/speech_pref = H.client.prefs.speciesprefs if(speech_pref) From 66bbd956b236c28c9397d34407fd337aa585b511 Mon Sep 17 00:00:00 2001 From: Chakirski Date: Thu, 1 Jun 2017 00:16:43 -0500 Subject: [PATCH 025/378] tegir --- code/game/objects/items/devices/radio/radio.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index d324de69231..6de8ab9b98c 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -600,9 +600,9 @@ var/global/list/default_medbay_channels = list( /obj/item/device/radio/emp_act(severity) frequency = get_random_freq() - if(listening == 1) - visible_message("\The [src] screeches violently!") - + if(listening) + visible_message("[src] buzzes violently!") + broadcasting = 0 listening = 0 for(var/ch_name in channels) @@ -610,7 +610,7 @@ var/global/list/default_medbay_channels = list( ..() /obj/item/device/radio/proc/get_random_freq() - var/rand_freq = round(rand(1440, 1480), 10) + pick(1, 3, 5, 9) + var/rand_freq = round(rand(PUBLIC_LOW_FREQ, PUBLIC_HIGH_FREQ - 9), 10) + pick(1, 3, 5, 9) return rand_freq /////////////////////////////// From e4bafed7dfe6e882a2e202ae876ea492a6f281a8 Mon Sep 17 00:00:00 2001 From: Chakirski Date: Thu, 1 Jun 2017 11:36:40 -0500 Subject: [PATCH 026/378] rip-freq --- code/game/objects/items/devices/radio/radio.dm | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 6de8ab9b98c..5798d77f890 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -599,7 +599,14 @@ var/global/list/default_medbay_channels = list( else return /obj/item/device/radio/emp_act(severity) - frequency = get_random_freq() + var/emp + on = 0 + emp++ + spawn(70) + emp-- + if(!emp) + on = 1 + if(listening) visible_message("[src] buzzes violently!") @@ -609,10 +616,6 @@ var/global/list/default_medbay_channels = list( channels[ch_name] = 0 ..() -/obj/item/device/radio/proc/get_random_freq() - var/rand_freq = round(rand(PUBLIC_LOW_FREQ, PUBLIC_HIGH_FREQ - 9), 10) + pick(1, 3, 5, 9) - return rand_freq - /////////////////////////////// //////////Borg Radios////////// /////////////////////////////// From 90de04c77ba5524d8807fb3df423ebc9f9d5500a Mon Sep 17 00:00:00 2001 From: Chakirski Date: Thu, 1 Jun 2017 11:37:44 -0500 Subject: [PATCH 027/378] randomness --- code/game/objects/items/devices/radio/radio.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 5798d77f890..6fa955b461f 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -602,7 +602,7 @@ var/global/list/default_medbay_channels = list( var/emp on = 0 emp++ - spawn(70) + spawn(rand(100, 200)) emp-- if(!emp) on = 1 From 93c7b4c6c321b2bfe169d763404a7c7b2ff476b2 Mon Sep 17 00:00:00 2001 From: Chakirski Date: Thu, 1 Jun 2017 13:38:53 -0500 Subject: [PATCH 028/378] faux --- code/game/objects/items/devices/radio/radio.dm | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 6fa955b461f..3930192ba47 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -37,6 +37,7 @@ var/global/list/default_medbay_channels = list( var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h var/subspace_transmission = 0 var/syndie = 0//Holder to see if it's a syndicate encrpyed radio + var/emp = 0 //How many times this is affected by EMPs var/is_special = 0 //For electropacks mostly, skips Topic() checks @@ -599,13 +600,9 @@ var/global/list/default_medbay_channels = list( else return /obj/item/device/radio/emp_act(severity) - var/emp on = 0 emp++ - spawn(rand(100, 200)) - emp-- - if(!emp) - on = 1 + addtimer(src, "enable_radio", rand(100, 200)) if(listening) visible_message("[src] buzzes violently!") @@ -616,6 +613,12 @@ var/global/list/default_medbay_channels = list( channels[ch_name] = 0 ..() +/obj/item/device/radio/proc/enable_radio() + if(emp > 0) + emp-- + if(!emp) + on = 1 + /////////////////////////////// //////////Borg Radios////////// /////////////////////////////// From db378ae8a7bd9dcebb7a1f48a5e1147efce04d5a Mon Sep 17 00:00:00 2001 From: Chakirski Date: Thu, 1 Jun 2017 13:54:39 -0500 Subject: [PATCH 029/378] faux2.0 --- code/game/objects/items/devices/radio/radio.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 3930192ba47..3c9c0211663 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -37,7 +37,7 @@ var/global/list/default_medbay_channels = list( var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h var/subspace_transmission = 0 var/syndie = 0//Holder to see if it's a syndicate encrpyed radio - var/emp = 0 //How many times this is affected by EMPs + var/disable_timer = 0 //How many times this is disabled by EMPs var/is_special = 0 //For electropacks mostly, skips Topic() checks @@ -601,7 +601,7 @@ var/global/list/default_medbay_channels = list( /obj/item/device/radio/emp_act(severity) on = 0 - emp++ + disable_timer++ addtimer(src, "enable_radio", rand(100, 200)) if(listening) @@ -614,9 +614,9 @@ var/global/list/default_medbay_channels = list( ..() /obj/item/device/radio/proc/enable_radio() - if(emp > 0) - emp-- - if(!emp) + if(disable_timer > 0) + disable_timer-- + if(!disable_timer) on = 1 /////////////////////////////// From b67d589c85a9a5f6229a32a72c7f74c3dcc1b871 Mon Sep 17 00:00:00 2001 From: Citinited Date: Fri, 2 Jun 2017 22:40:33 +0100 Subject: [PATCH 030/378] Some more tweaks Let's remove some redundant things and simplify some others --- code/game/objects/items/weapons/rpd.dm | 61 +++++++------------------- code/modules/client/asset_cache.dm | 6 +-- nano/templates/rpd.tmpl | 24 +++++----- 3 files changed, 32 insertions(+), 59 deletions(-) diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index 17d30d1a170..bab3bac7c20 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -2,13 +2,9 @@ Rapid Pipe Dispenser */ -#define SIMPLE_BENT 1 #define SIMPLE_CAP 20 -#define SUPPLY_BENT 25 #define SUPPLY_CAP 32 -#define SCRUBBERS_BENT 27 #define SCRUBBERS_CAP 33 -#define HE_BENT 3 #define HE_EXCHANGER 17 #define CONNECTOR 4 #define UNARY_VENT 7 @@ -18,9 +14,6 @@ #define GAS_SENSOR 98 #define METER 99 #define DISPOSALS_JUNCTION 2 -#define DISPOSALS_BIN 6 -#define DISPOSALS_OUTLET 7 -#define DISPOSALS_CHUTE 8 #define ATMOS_MODE 1 #define DISPOSALS_MODE 2 #define ROTATION_MODE 3 @@ -50,12 +43,13 @@ origin_tech = "engineering=4;materials=2" var/datum/effect/system/spark_spread/spark_system var/cooldown //Waiting for something to complete? + var/lastused var/iconrotation = 0 //used to orient icons and pipes var/mode = 1 //Disposals, atmospherics, etc. var/pipetype = 1//For nanoUI menus var/whatpipe = 0 //What kind of pipe is it? See code/game/machinery/pipe/construction.dm for a list of defines var/whatdpipe = 0 //What kind of disposals pipe is it? See code/game/machinery/pipe/dispenser.dm for a list of defines - var/spawndelay = 4 //Adding a *slight* delay to the RPD, shouldn't be very noticeable + var/spawndelay = 4 //How long should we have to wait between dispensing pipes? var/walldelay = 40 //How long should drilling into a wall take? /obj/item/weapon/rpd/New() @@ -71,17 +65,9 @@ if(prob(15)) spark_system.start() if(delay) - cooldown = TRUE - sleep(spawndelay) - cooldown = null + lastused = world.time -/obj/item/weapon/rpd/proc/Checkifbent(x) - return(x in list(SIMPLE_BENT, HE_BENT, SUPPLY_BENT, SCRUBBERS_BENT)) - -/obj/item/weapon/rpd/proc/Checkifdense(x) //We need to check if the targetted turf is already dense, in case some goofball sticks 100 bins in front of security or something - return(x in list(DISPOSALS_BIN, DISPOSALS_OUTLET, DISPOSALS_CHUTE)) - -/obj/item/weapon/rpd/proc/Manipulatepipes(subject, targetturf, atmosverb, disposalsverb) +/obj/item/weapon/rpd/proc/Manipulatepipes(subject, atmosverb, disposalsverb) if(istype(subject, /obj/item/pipe)) call(subject, atmosverb)() else if(istype(subject, /obj/structure/disposalconstruct/)) @@ -195,30 +181,28 @@ var/list/pipemenu = list( /obj/item/weapon/rpd/afterattack(atom/target, mob/user, proximity) ..() var/turf/T = get_turf(target) - if(ismob(target) || istype(target, /obj/structure/window) || !proximity || cooldown) + if(src.loc != user || ismob(target) || istype(target, /obj/structure/window) || !proximity || world.time < lastused + spawndelay) return if(mode == ATMOS_MODE) - if(istype(T, /turf/simulated/wall)) //Drilling into walls takes time and we don't want to do anything else while drilling - cooldown = TRUE + if(istype(T, /turf/simulated/wall)) //Drilling into walls takes time playsound(get_turf(src), "sound/weapons/circsawhit.ogg", 50, 1) user.visible_message("[user] starts drilling a hole in [T]...", "You start drilling a hole in [T]...", "You hear a drill.") if(!do_after(user, walldelay, target = T)) - cooldown = null return user.visible_message("[user] finishes drilling a hole in [T]!", "You finish drilling a hole in [T]!", "You hear clanking.") - if(whatpipe == GAS_SENSOR)//need to check if it's a meter or a gas sensor separately ayylmao + if(whatpipe == GAS_SENSOR) new /obj/item/pipe_gsensor(T) - to_chat(user, "[src] dispenses a sensor!") + to_chat(user, "[src] rapidly dispenses a sensor!") else if(whatpipe == METER) new /obj/item/pipe_meter(T) - to_chat(user, "[src] dispenses a meter!") + to_chat(user, "[src] rapidly dispenses a meter!") else var/obj/item/pipe/P = new(T, pipe_type = whatpipe, dir = user.dir) //Now we make the pipes - if(iconrotation == 0 && Checkifbent(P.pipe_type)) //Automatic rotation of dispensed pipes + if(iconrotation == 0 && P.is_bent_pipe()) //Automatic rotation of dispensed pipes P.dir = turn(user.dir, 135) else if(iconrotation == 0 && P.pipe_type in list(CONNECTOR, UNARY_VENT, GAS_SCRUBBER, HE_EXCHANGER, SIMPLE_CAP, SUPPLY_CAP, SCRUBBERS_CAP, INJECTOR, PASSIVE_VENT)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction call(P, /obj/item/pipe/verb/flip)() - else if(iconrotation != 0 && Checkifbent(P.pipe_type)) //If they selected a rotation and the pipe is bent + else if(iconrotation != 0 && P.is_bent_pipe()) //If they selected a rotation and the pipe is bent P.dir = turn(iconrotation, -45) else if(iconrotation != 0) P.dir = iconrotation @@ -226,48 +210,40 @@ var/list/pipemenu = list( to_chat(user, "[src] rapidly dispenses [P]!") Activaterpd(1) else if(mode == DISPOSALS_MODE) - if(istype(T, /turf/simulated/wall)) + if(istype(T, /turf/simulated/wall)) //No disposals pipes on walls to_chat(user, "That type of pipe won't fit on [T]!") return - if(is_blocked_turf(T) && Checkifdense(whatdpipe)) - to_chat(user, "You can't dispense that on [T] because something is in the way!") - return var/obj/structure/disposalconstruct/P = new(T) //Now we make the pipe P.dir = iconrotation P.ptype = whatdpipe - if(Checkifdense(whatdpipe)) //To properly set density of our bins/chutes/outlets - P.density = 1 if(iconrotation == 0) //Automatic rotation P.dir = user.dir if(iconrotation == 0 && whatdpipe != DISPOSALS_JUNCTION) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though - call(P, /obj/structure/disposalconstruct/verb/flip)() + P.flip() P.update() to_chat(user, "[src] rapidly dispenses [P]!") Activaterpd(1) else if(mode == ROTATION_MODE) for(var/obj/W in T) - Manipulatepipes(W, T, /obj/item/pipe/verb/rotate, /obj/structure/disposalconstruct/verb/rotate) + Manipulatepipes(W, /obj/item/pipe/verb/rotate, /obj/structure/disposalconstruct/verb/rotate) else if(mode == FLIP_MODE) for(var/obj/W in T) - Manipulatepipes(W, T, /obj/item/pipe/verb/flip, /obj/structure/disposalconstruct/verb/flip) + Manipulatepipes(W, /obj/item/pipe/verb/flip, /obj/structure/disposalconstruct/verb/flip) else if(mode == DELETE_MODE) var/eaten for(var/obj/W in T) if(istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter) || istype(W, /obj/item/pipe_gsensor) || istype(W, /obj/structure/disposalconstruct) && !W.anchored) - qdel(W) + QDEL_NULL(W) eaten = TRUE if(eaten) to_chat(user, "[src] sucks up the loose pipes on [T].") + Activaterpd() else to_chat(user, "There were no loose pipes on [T].") -#undef SIMPLE_BENT #undef SIMPLE_CAP -#undef SUPPLY_BENT #undef SUPPLY_CAP -#undef SCRUBBERS_BENT #undef SCRUBBERS_CAP -#undef HE_BENT #undef HE_EXCHANGER #undef CONNECTOR #undef UNARY_VENT @@ -277,9 +253,6 @@ var/list/pipemenu = list( #undef GAS_SENSOR #undef METER #undef DISPOSALS_JUNCTION -#undef DISPOSALS_BIN -#undef DISPOSALS_OUTLET -#undef DISPOSALS_CHUTE #undef ATMOS_MODE #undef DISPOSALS_MODE #undef ROTATION_MODE diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 35b06c9e5cd..2298008c789 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -313,15 +313,15 @@ proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) continue if(state in list("he", "simple")) for(var/D in alldirs) - assets["[state]-[D].png"] = icon('icons/obj/pipe-item.dmi', state, D) + assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipe-item.dmi', state, D) continue for(var/D in cardinal) - assets["[state]-[D].png"] = icon('icons/obj/pipe-item.dmi', state, D) + assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipe-item.dmi', state, D) for(var/state in icon_states('icons/obj/pipes/disposal.dmi')) if(!(state in list("conpipe-c", "conpipe-j1", "conpipe-s", "conpipe-t", "conpipe-y", "intake", "outlet"))) //Pipes we want sprites for continue for(var/D in cardinal) - assets["[state]-[D].png"] = icon('icons/obj/pipes/disposal.dmi', state, D) + assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipes/disposal.dmi', state, D) for(var/asset_name in assets) register_asset(asset_name, assets[asset_name]) diff --git a/nano/templates/rpd.tmpl b/nano/templates/rpd.tmpl index 68d4669d38f..bd92b91c979 100644 --- a/nano/templates/rpd.tmpl +++ b/nano/templates/rpd.tmpl @@ -32,39 +32,39 @@ Used In File(s): /code/game/objects/items/weapons/rpd.dm {{if value.id == data.whatpipe && value.orientations != 1 && value.bendy != 1}}
    {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} - +
    {{/if}} {{if value.id == data.whatpipe && value.orientations == 4 && value.bendy != 1}}
    {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} - +
    {{/if}} {{if value.id == data.whatpipe && value.bendy == 1}}
    {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} - +
    {{/if}}
    @@ -84,21 +84,21 @@ Used In File(s): /code/game/objects/items/weapons/rpd.dm
    {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} - +
    {{/if}} {{if value.id == data.whatdpipe && value.orientations == 4}}
    {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} - +
    {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} - +
    {{/if}}
    From bf42389916d1cff7f4867e410a37c676c8283fa4 Mon Sep 17 00:00:00 2001 From: MarcellusPye Date: Sat, 3 Jun 2017 14:20:38 +1200 Subject: [PATCH 031/378] Fixes slime people lmbs --- code/modules/mob/living/carbon/human/emote.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 1b15dccdc2c..6967d4e1598 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -789,6 +789,14 @@ emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob" else if(species.name == "Slime People") emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob" + else if(species.name == "Drask") + emotelist += "\nDrask specific emotes :- drone(s)-(none)/mob, hum(s)-(none)/mob, rumble(s)-(none)/mob" + else if(species.name == "Kidan") + emotelist += "\nKidan specific emotes :- click(s), clack(s)" + else if(species.name == "Unathi") + emotelist += "\nUnathi specific emotes :- hiss(es)" + if(!species.name == "Slime People" && found_slime_bodypart) + emotelist += "\nSlime people body part specific emotes :- squish(es)-(none)/mob" to_chat(src, emotelist) else From d1b8c2da1f6f22e3b3d5e699f10422ef0b620687 Mon Sep 17 00:00:00 2001 From: MarcellusPye Date: Sat, 3 Jun 2017 14:28:28 +1200 Subject: [PATCH 032/378] found_slime_bodypart is a diffrent function --- code/modules/mob/living/carbon/human/emote.dm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 6967d4e1598..0365009e2bf 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -795,8 +795,11 @@ emotelist += "\nKidan specific emotes :- click(s), clack(s)" else if(species.name == "Unathi") emotelist += "\nUnathi specific emotes :- hiss(es)" - if(!species.name == "Slime People" && found_slime_bodypart) - emotelist += "\nSlime people body part specific emotes :- squish(es)-(none)/mob" + if (!(species.name == "Slime People")) + for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too! + if(L.dna.species in list("Slime People")) + emotelist += "\nSlime people body part specific emotes :- squish(es)-(none)/mob" + break to_chat(src, emotelist) else From 5807cd69c023cff02df94a2cf18b812d021860ab Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 3 Jun 2017 21:47:14 +0100 Subject: [PATCH 033/378] Add sentience event --- code/modules/events/event_container.dm | 1 + code/modules/events/sentience.dm | 32 ++++++++++++++++++++++++++ paradise.dme | 1 + 3 files changed, 34 insertions(+) create mode 100644 code/modules/events/sentience.dm diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index 98fe9fad27f..8b98dac200d 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -137,6 +137,7 @@ var/list/event_last_fired = list() new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_JANITOR = 100)), + new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Sentience", /datum/event/sentience, 50), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 0, list(ASSIGNMENT_ENGINEER = 30, ASSIGNMENT_GARDENER = 50)) ) diff --git a/code/modules/events/sentience.dm b/code/modules/events/sentience.dm new file mode 100644 index 00000000000..114f30c0fb2 --- /dev/null +++ b/code/modules/events/sentience.dm @@ -0,0 +1,32 @@ +/datum/event/sentience + +/datum/event/sentience/start() + var/ghostmsg = "Do you want to awaken as a sentient being?" + var/list/candidates = pollCandidates(ghostmsg, ROLE_SENTIENT, 1) + var/list/potential = list() + for(var/mob/living/simple_animal/L in living_mob_list) + var/turf/T = get_turf(L) + if (T.z != 1) + continue + if(!(L in player_list) && !L.mind) + potential += L + + var/mob/living/simple_animal/SA = pick(potential) + var/mob/living/simple_animal/SG = pick(candidates) + + if(!SA || !SG) //if you can't find either a simple animal or a player, end + return FALSE + + SA.key = SG.key + SA.universal_speak = 1 + SA.sentience_act() + SA.maxHealth = max(SA.maxHealth, 200) + SA.health = SA.maxHealth + SA.del_on_death = FALSE + greet_sentient(SA) + +/datum/event/sentience/proc/greet_sentient(var/mob/living/carbon/human/M) + to_chat(M, "Hello world!") + to_chat(M, "Due to freak radiation, you have gained \ + human level intelligence and the ability to speak and understand \ + and the ability to speak and understand human language!") diff --git a/paradise.dme b/paradise.dme index 869bffe601b..20318ef2db6 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1285,6 +1285,7 @@ #include "code\modules\events\prison_break.dm" #include "code\modules\events\radiation_storm.dm" #include "code\modules\events\rogue_drones.dm" +#include "code\modules\events\sentience.dm" #include "code\modules\events\slaughterevent.dm" #include "code\modules\events\spacevine.dm" #include "code\modules\events\spider_infestation.dm" From 6da7035973b669d9ea3e00e8020777ac64b95b8f Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 3 Jun 2017 22:24:06 +0100 Subject: [PATCH 034/378] Fixes errata in the text --- code/modules/events/sentience.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/sentience.dm b/code/modules/events/sentience.dm index 114f30c0fb2..5dee712e072 100644 --- a/code/modules/events/sentience.dm +++ b/code/modules/events/sentience.dm @@ -29,4 +29,4 @@ to_chat(M, "Hello world!") to_chat(M, "Due to freak radiation, you have gained \ human level intelligence and the ability to speak and understand \ - and the ability to speak and understand human language!") + human language!") From 0a0b0430e138c07c008f6aa9d9d982dfd2151055 Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 3 Jun 2017 23:07:34 +0100 Subject: [PATCH 035/378] ghosts aren't simple animals, who knew? --- code/modules/events/sentience.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/sentience.dm b/code/modules/events/sentience.dm index 5dee712e072..4a1b44700e3 100644 --- a/code/modules/events/sentience.dm +++ b/code/modules/events/sentience.dm @@ -12,7 +12,7 @@ potential += L var/mob/living/simple_animal/SA = pick(potential) - var/mob/living/simple_animal/SG = pick(candidates) + var/mob/SG = pick(candidates) if(!SA || !SG) //if you can't find either a simple animal or a player, end return FALSE From 59c13d47b534e7cee4a28eec6a6f952c05d3400f Mon Sep 17 00:00:00 2001 From: MarcellusPye Date: Sun, 4 Jun 2017 17:28:40 +1200 Subject: [PATCH 036/378] Changed from an IF chain to case --- code/modules/mob/living/carbon/human/emote.dm | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 0365009e2bf..740f7aaa327 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -785,23 +785,26 @@ + " handshake-mob, hug(s)-(none)/mob, johnny, jump, laugh(s), look(s)-(none)/mob, moan(s), mumble(s), nod(s), pale(s), point(s)-atom, quiver(s), raise(s), salute(s)-(none)/mob, scream(s), shake(s)," \ + " shiver(s), shrug(s), sigh(s), signal(s)-#1-10,slap(s)-(none)/mob, smile(s),snap(s), sneeze(s), sniff(s), snore(s), stare(s)-(none)/mob, swag(s), tremble(s), twitch(es), twitch(es)_s," \ + " wag(s), wave(s), whimper(s), wink(s), yawn(s)" - if(species.name == "Machine") - emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob" - else if(species.name == "Slime People") - emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob" - else if(species.name == "Drask") - emotelist += "\nDrask specific emotes :- drone(s)-(none)/mob, hum(s)-(none)/mob, rumble(s)-(none)/mob" - else if(species.name == "Kidan") - emotelist += "\nKidan specific emotes :- click(s), clack(s)" - else if(species.name == "Unathi") - emotelist += "\nUnathi specific emotes :- hiss(es)" - if (!(species.name == "Slime People")) - for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too! - if(L.dna.species in list("Slime People")) - emotelist += "\nSlime people body part specific emotes :- squish(es)-(none)/mob" - break - to_chat(src, emotelist) + switch(species.name) + if("Machine") + emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob" + if("Drask") + emotelist += "\nDrask specific emotes :- drone(s)-(none)/mob, hum(s)-(none)/mob, rumble(s)-(none)/mob" + if("Kidan") + emotelist += "\nKidan specific emotes :- click(s), clack(s)" + if("Unathi") + emotelist += "\nUnathi specific emotes :- hiss(es)" + + if (species.name == "Slime People") + emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob" + else + for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too! + if(L.dna.species in list("Slime People")) + emotelist += "\nSlime people body part specific emotes :- squish(es)-(none)/mob" + break + + to_chat(src, emotelist) else to_chat(src, "Unusable emote '[act]'. Say *help for a list.") From dfdcca8c4607b9ec05eb5d63c9389696b94b7cf5 Mon Sep 17 00:00:00 2001 From: MarcellusPye Date: Sun, 4 Jun 2017 18:15:53 +1200 Subject: [PATCH 037/378] Fixed formatting so it compiles --- code/modules/mob/living/carbon/human/emote.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 740f7aaa327..2b4dbb68db0 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -800,9 +800,9 @@ emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob" else for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too! - if(L.dna.species in list("Slime People")) - emotelist += "\nSlime people body part specific emotes :- squish(es)-(none)/mob" - break + if(L.dna.species in list("Slime People")) + emotelist += "\nSlime people body part specific emotes :- squish(es)-(none)/mob" + break to_chat(src, emotelist) else From abd27b5ef250a4c5c7d8e49a370d734b67008b2e Mon Sep 17 00:00:00 2001 From: MarcellusPye Date: Sun, 4 Jun 2017 20:24:58 +1200 Subject: [PATCH 038/378] Machene People Completion Adds Buzz2 to machene people *help because it wasen't there before for some reason. --- code/modules/mob/living/carbon/human/emote.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 2b4dbb68db0..d1f73360874 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -788,7 +788,7 @@ switch(species.name) if("Machine") - emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob" + emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob" if("Drask") emotelist += "\nDrask specific emotes :- drone(s)-(none)/mob, hum(s)-(none)/mob, rumble(s)-(none)/mob" if("Kidan") From e3b6f799203249f8556080da09322dc953f805dc Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Sun, 4 Jun 2017 01:47:06 -0700 Subject: [PATCH 039/378] POrts over tg soullinks --- code/datums/soullink.dm | 157 ++++++++++++++++++ code/modules/mob/living/carbon/human/death.dm | 4 +- code/modules/mob/living/death.dm | 8 + code/modules/mob/living/stat_states.dm | 5 +- paradise.dme | 3 +- 5 files changed, 172 insertions(+), 5 deletions(-) create mode 100644 code/datums/soullink.dm diff --git a/code/datums/soullink.dm b/code/datums/soullink.dm new file mode 100644 index 00000000000..1240c9db402 --- /dev/null +++ b/code/datums/soullink.dm @@ -0,0 +1,157 @@ +/mob/living + var/list/ownedSoullinks //soullinks we are the owner of + var/list/sharedSoullinks //soullinks we are a/the sharer of + +/mob/living/Destroy() + for(var/s in ownedSoullinks) + var/datum/soullink/S = s + S.ownerDies(FALSE) + qdel(s) //If the owner is destroy()'d, the soullink is destroy()'d + ownedSoullinks = null + for(var/s in sharedSoullinks) + var/datum/soullink/S = s + S.sharerDies(FALSE) + S.removeSoulsharer(src) //If a sharer is destroy()'d, they are simply removed + sharedSoullinks = null + return ..() + +//Keeps track of a Mob->Mob (potentially Player->Player) connection +//Can be used to trigger actions on one party when events happen to another +//Eg: shared deaths +//Can be used to form a linked list of mob-hopping +//Does NOT transfer with minds +/datum/soullink + var/mob/living/soulowner + var/mob/living/soulsharer + var/id //Optional ID, for tagging and finding specific instances + +/datum/soullink/Destroy() + if(soulowner) + LAZYREMOVE(soulowner.ownedSoullinks, src) + soulowner = null + if(soulsharer) + LAZYREMOVE(soulsharer.sharedSoullinks, src) + soulsharer = null + return ..() + +/datum/soullink/proc/removeSoulsharer(mob/living/sharer) + if(soulsharer == sharer) + soulsharer = null + LAZYREMOVE(sharer.sharedSoullinks, src) + +//Used to assign variables, called primarily by soullink() +//Override this to create more unique soullinks (Eg: 1->Many relationships) +//Return TRUE/FALSE to return the soullink/null in soullink() +/datum/soullink/proc/parseArgs(mob/living/owner, mob/living/sharer) + if(!owner || !sharer) + return FALSE + soulowner = owner + soulsharer = sharer + LAZYADD(owner.ownedSoullinks, src) + LAZYADD(sharer.sharedSoullinks, src) + return TRUE + +//Runs after /living death() +//Override this for content +/datum/soullink/proc/ownerDies(gibbed, mob/living/owner) + +//Runs after /living death() +//Override this for content +/datum/soullink/proc/sharerDies(gibbed, mob/living/owner) + + +//Quick-use helper +/proc/soullink(typepath, ...) + var/datum/soullink/S = new typepath() + if(S.parseArgs(arglist(args.Copy(2, 0)))) + return S + + + +///////////////// +// MULTISHARER // +///////////////// +//Abstract soullink for use with 1 Owner -> Many Sharer setups +/datum/soullink/multisharer + var/list/soulsharers + +/datum/soullink/multisharer/parseArgs(mob/living/owner, list/sharers) + if(!owner || !LAZYLEN(sharers)) + return FALSE + soulowner = owner + soulsharers = sharers + LAZYADD(owner.ownedSoullinks, src) + for(var/l in sharers) + var/mob/living/L = l + LAZYADD(L.sharedSoullinks, src) + return TRUE + +/datum/soullink/multisharer/removeSoulsharer(mob/living/sharer) + LAZYREMOVE(soulsharers, sharer) + + + +///////////////// +// SHARED FATE // +///////////////// +//When the soulowner dies, the soulsharer dies, and vice versa +//This is intended for two players(or AI) and two mobs + +/datum/soullink/sharedfate/ownerDies(gibbed, mob/living/owner) + if(soulsharer) + soulsharer.death(gibbed) + +/datum/soullink/sharedfate/sharerDies(gibbed, mob/living/sharer) + if(soulowner) + soulowner.death(gibbed) + +///////////////// +// Demon Bind // +///////////////// +//When the soulowner dies, the soulsharer dies, but NOT vice versa +//This is intended for two players(or AI) and two mobs + +/datum/soullink/oneway/ownerDies(gibbed, mob/living/owner) + if(soulsharer) + soulsharer.dust(FALSE) + + +///////////////// +// SHARED BODY // +///////////////// +//When the soulsharer dies, they're placed in the soulowner, who remains alive +//If the soulowner dies, the soulsharer is killed and placed into the soulowner (who is still dying) +//This one is intended for one player moving between many mobs + +/datum/soullink/sharedbody/ownerDies(gibbed, mob/living/owner) + if(soulowner && soulsharer) + if(soulsharer.mind) + soulsharer.mind.transfer_to(soulowner) + soulsharer.death(gibbed) + +/datum/soullink/sharedbody/sharerDies(gibbed, mob/living/sharer) + if(soulowner && soulsharer && soulsharer.mind) + soulsharer.mind.transfer_to(soulowner) + + + +////////////////////// +// REPLACEMENT POOL // +////////////////////// +//When the owner dies, one of the sharers is placed in the owner's body, fully healed +//Sort of a "winner-stays-on" soullink +//Gibbing ends it immediately + +/datum/soullink/multisharer/replacementpool/ownerDies(gibbed, mob/living/owner) + if(LAZYLEN(soulsharers) && !gibbed) //let's not put them in some gibs + var/list/souls = shuffle(soulsharers.Copy()) + for(var/l in souls) + var/mob/living/L = l + if(L.stat != DEAD && L.mind) + L.mind.transfer_to(soulowner) + soulowner.revive(TRUE, TRUE) + L.death(FALSE) + +//Lose your claim to the throne! +/datum/soullink/multisharer/replacementpool/sharerDies(gibbed, mob/living/sharer) + removeSoulsharer(sharer) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 69e86de81e6..206571bec93 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -143,9 +143,9 @@ return ..(gibbed) /mob/living/carbon/human/update_revive() - ..() + . = ..() // Update healthdoll - if(healthdoll) + if(. && healthdoll) // We're alive again, so re-build the entire healthdoll healthdoll.cached_healthdoll_overlays.Cut() diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index c5ce705ba17..435c3f6da08 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -3,4 +3,12 @@ clear_fullscreens() update_action_buttons_icon() + + for(var/s in ownedSoullinks) + var/datum/soullink/S = s + S.ownerDies(gibbed) + for(var/s in sharedSoullinks) + var/datum/soullink/S = s + S.sharerDies(gibbed) + ..(gibbed) diff --git a/code/modules/mob/living/stat_states.dm b/code/modules/mob/living/stat_states.dm index 58c4221504d..e5ea3738e0c 100644 --- a/code/modules/mob/living/stat_states.dm +++ b/code/modules/mob/living/stat_states.dm @@ -37,9 +37,9 @@ // handles revival through other means than cloning or adminbus (defib, IPC repair) /mob/living/proc/update_revive(updating = TRUE) if(stat != DEAD) - return + return 0 if(!can_be_revived()) - return + return 0 add_logs(src, null, "came back to life at [atom_loc_line(get_turf(src))]", admin=0, print_attack_log = 0) stat = CONSCIOUS dead_mob_list -= src @@ -49,3 +49,4 @@ update_canmove() // update_blind_effects() updatehealth() + return 1 diff --git a/paradise.dme b/paradise.dme index 869bffe601b..20ee20bd23a 100644 --- a/paradise.dme +++ b/paradise.dme @@ -218,6 +218,7 @@ #include "code\datums\recipe.dm" #include "code\datums\ruins.dm" #include "code\datums\shuttles.dm" +#include "code\datums\soullink.dm #include "code\datums\spell.dm" #include "code\datums\statclick.dm" #include "code\datums\supplypacks.dm" @@ -321,7 +322,7 @@ #include "code\datums\spells\touch_attacks.dm" #include "code\datums\spells\trigger.dm" #include "code\datums\spells\turf_teleport.dm" -#include "code\datums\spells\wizard.dm" +#include "code\datums\spells\wizard.dm"" #include "code\datums\vr\level.dm" #include "code\datums\weather\weather.dm" #include "code\datums\weather\weather_types.dm" From ebadfa8276f6964aea98475f4c5cca6906064aa5 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Sun, 4 Jun 2017 04:14:16 -0700 Subject: [PATCH 040/378] Reviving while a clone is "baking" causes the clone to fail --- code/datums/soullink.dm | 57 ++++++++++++++++++++++++++ code/game/machinery/cloning.dm | 39 ++++++++++++++---- code/modules/mob/living/death.dm | 4 +- code/modules/mob/living/stat_states.dm | 7 ++++ paradise.dme | 4 +- 5 files changed, 98 insertions(+), 13 deletions(-) diff --git a/code/datums/soullink.dm b/code/datums/soullink.dm index 1240c9db402..1f17c635e84 100644 --- a/code/datums/soullink.dm +++ b/code/datums/soullink.dm @@ -59,6 +59,13 @@ //Override this for content /datum/soullink/proc/sharerDies(gibbed, mob/living/owner) +//Runs after /living update_revive() +//Override this for content +/datum/soullink/proc/ownerRevives(mob/living/owner) + +//Runs after /living update_revive() +//Override this for content +/datum/soullink/proc/sharerRevives(mob/living/owner) //Quick-use helper /proc/soullink(typepath, ...) @@ -155,3 +162,53 @@ //Lose your claim to the throne! /datum/soullink/multisharer/replacementpool/sharerDies(gibbed, mob/living/sharer) removeSoulsharer(sharer) + + +//////////////// +// SOUL HOOK // +//////////////// +// When the owner transitions from dead to alive or vice versa, +// the linked atom is notified + +// Atoms that actually utilize this system are responsible for handling the GC cleanup themselves +// Splashing the GC handling onto every atom would be a big old waste + +/datum/soullink/soulhook + var/atom/movable/otherend + +/datum/soullink/soulhook/Destroy() + if(otherend) + LAZYREMOVE(otherend.sharedSoulhooks, src) + otherend = null + return ..() + +/datum/soullink/soulhook/parseArgs(mob/living/owner, atom/movable/other) + if(!owner || !other) + return FALSE + soulowner = owner + otherend = other + LAZYADD(owner.ownedSoullinks, src) + LAZYADD(other.sharedSoulhooks, src) + return TRUE + +/datum/soullink/soulhook/ownerDies(gibbed, mob/living/owner) + if(otherend) + otherend.onSoullinkDeath(gibbed, owner) + +/datum/soullink/soulhook/ownerRevives(mob/living/owner) + if(otherend) + otherend.onSoullinkRevive(owner) + +// oops I'm butchering the application of this +/datum/soullink/soulhook/removeSoulsharer(atom/movable/other) + if(otherend == other) + otherend = null + LAZYREMOVE(other.sharedSoulhooks, src) + qdel(src) // not much point in a soul link with one end out of the picture for good + +/atom/movable + var/list/sharedSoulhooks = null + +/atom/movable/proc/onSoullinkDeath(gibbed, mob/living/owner) + +/atom/movable/proc/onSoullinkRevive(mob/living/owner) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 721372b56f5..b85fb249c2e 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -87,6 +87,10 @@ /obj/machinery/clonepod/Destroy() if(connected) connected.pods -= src + for(var/s in sharedSoulhooks) + var/datum/soullink/S = s + S.removeSoulsharer(src) //If a sharer is destroy()'d, they are simply removed + sharedSoulhooks = null QDEL_NULL(Radio) QDEL_NULL(countdown) QDEL_LIST(missing_organs) @@ -288,6 +292,8 @@ to_chat(clonemind.current, {"Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete."}) + // Set up a soul link with the dead body to catch a revival + soullink(/datum/soullink/soulhook, clonemind.current, src) update_icon() @@ -467,7 +473,12 @@ update_clone_antag(occupant) to_chat(occupant, "There is a bright flash!
    \ You feel like a new being.
    ") - occupant.flash_eyes(visual = 1) + occupant.flash_eyes(visual = 1) + for(var/s in sharedSoulhooks) + var/datum/soullink/S = s + S.removeSoulsharer(src) //If a sharer is destroy()'d, they are simply removed + sharedSoulhooks = null + for(var/i in missing_organs) qdel(i) @@ -479,17 +490,22 @@ occupant = null update_icon() -/obj/machinery/clonepod/proc/malfunction() +/obj/machinery/clonepod/proc/malfunction(go_easy = FALSE) if(occupant) connected_message("Critical Error!") announce_radio_message("Critical error! Please contact a Thinktronic Systems technician, as your warranty may be affected.") - if(occupant.mind != clonemind) - clonemind.transfer_to(occupant) - occupant.grab_ghost() // We really just want to make you suffer. - to_chat(occupant, {"Agony blazes across your - consciousness as your body is torn apart.
    - Is this what dying is like? Yes it is.
    "}) - occupant << sound('sound/hallucinations/veryfar_noise.ogg',0,1,50) + for(var/s in sharedSoulhooks) + var/datum/soullink/S = s + S.removeSoulsharer(src) //If a sharer is destroy()'d, they are simply removed + sharedSoulhooks = null + if(!go_easy) + if(occupant.mind != clonemind) + clonemind.transfer_to(occupant) + occupant.grab_ghost() // We really just want to make you suffer. + to_chat(occupant, {"Agony blazes across your + consciousness as your body is torn apart.
    + Is this what dying is like? Yes it is.
    "}) + occupant << sound('sound/hallucinations/veryfar_noise.ogg',0,1,50) for(var/i in missing_organs) qdel(i) missing_organs.Cut() @@ -542,6 +558,11 @@ else return +/obj/machinery/clonepod/onSoullinkRevive(mob/living/L) + if(occupant && L == clonemind.current) + // The old body's back in shape, time to ditch the cloning one + malfunction(go_easy = TRUE) + /obj/machinery/clonepod/proc/maim_clone(mob/living/carbon/human/H) LAZYINITLIST(missing_organs) for(var/i in missing_organs) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 435c3f6da08..8a043dbf591 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -6,9 +6,9 @@ for(var/s in ownedSoullinks) var/datum/soullink/S = s - S.ownerDies(gibbed) + S.ownerDies(gibbed, src) for(var/s in sharedSoullinks) var/datum/soullink/S = s - S.sharerDies(gibbed) + S.sharerDies(gibbed, src) ..(gibbed) diff --git a/code/modules/mob/living/stat_states.dm b/code/modules/mob/living/stat_states.dm index e5ea3738e0c..812eeaa0821 100644 --- a/code/modules/mob/living/stat_states.dm +++ b/code/modules/mob/living/stat_states.dm @@ -49,4 +49,11 @@ update_canmove() // update_blind_effects() updatehealth() + + for(var/s in ownedSoullinks) + var/datum/soullink/S = s + S.ownerRevives(src) + for(var/s in sharedSoullinks) + var/datum/soullink/S = s + S.sharerRevives(src) return 1 diff --git a/paradise.dme b/paradise.dme index 20ee20bd23a..47e40c716d6 100644 --- a/paradise.dme +++ b/paradise.dme @@ -218,7 +218,7 @@ #include "code\datums\recipe.dm" #include "code\datums\ruins.dm" #include "code\datums\shuttles.dm" -#include "code\datums\soullink.dm +#include "code\datums\soullink.dm" #include "code\datums\spell.dm" #include "code\datums\statclick.dm" #include "code\datums\supplypacks.dm" @@ -322,7 +322,7 @@ #include "code\datums\spells\touch_attacks.dm" #include "code\datums\spells\trigger.dm" #include "code\datums\spells\turf_teleport.dm" -#include "code\datums\spells\wizard.dm"" +#include "code\datums\spells\wizard.dm" #include "code\datums\vr\level.dm" #include "code\datums\weather\weather.dm" #include "code\datums\weather\weather_types.dm" From 0daf8a6a7ff5ff64a4bf912315b7c5ed1805367f Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 5 Jun 2017 16:37:21 -0400 Subject: [PATCH 041/378] Object Embedding --- code/__DEFINES/combat.dm | 11 ++ code/__DEFINES/is_helpers.dm | 12 +- code/__HELPERS/unsorted.dm | 33 +++--- code/datums/spells/summonitem.dm | 8 ++ .../gamemodes/changeling/powers/revive.dm | 5 +- code/game/gamemodes/miniantags/borer/borer.dm | 10 -- code/game/gamemodes/wizard/artefact.dm | 2 +- code/game/machinery/adv_med.dm | 4 +- code/game/objects/items.dm | 11 ++ code/game/objects/items/latexballoon.dm | 2 +- code/game/objects/items/policetape.dm | 2 +- code/game/objects/structures/inflatable.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 4 + code/modules/mob/living/carbon/human/death.dm | 23 +--- .../mob/living/carbon/human/examine.dm | 6 +- code/modules/mob/living/carbon/human/human.dm | 56 ++++----- .../mob/living/carbon/human/human_defense.dm | 55 +++------ code/modules/mob/living/carbon/human/life.dm | 27 +++-- .../living/carbon/human/species/species.dm | 3 - code/modules/mob/living/living.dm | 1 + code/modules/mob/mob.dm | 98 ---------------- code/modules/mob/mob_defines.dm | 3 +- code/modules/surgery/implant.dm | 110 +----------------- code/modules/surgery/organs/organ_external.dm | 52 +++++---- .../modules/surgery/remove_embedded_object.dm | 42 +++++++ paradise.dme | 1 + 26 files changed, 215 insertions(+), 368 deletions(-) create mode 100644 code/modules/surgery/remove_embedded_object.dm diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 499be494056..71c6bac6979 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -63,6 +63,17 @@ #define THROWN_PROJECTILE_ATTACK 4 #define LEAP_ATTACK 5 +//Embedded objects +#define EMBEDDED_PAIN_CHANCE 15 //Chance for embedded objects to cause pain (damage user) +#define EMBEDDED_ITEM_FALLOUT 5 //Chance for embedded object to fall out (causing pain but removing the object) +#define EMBED_CHANCE 45 //Chance for an object to embed into somebody when thrown (if it's sharp) +#define EMBEDDED_PAIN_MULTIPLIER 2 //Coefficient of multiplication for the damage the item does while embedded (this*item.w_class) +#define EMBEDDED_FALL_PAIN_MULTIPLIER 5 //Coefficient of multiplication for the damage the item does when it falls out (this*item.w_class) +#define EMBEDDED_IMPACT_PAIN_MULTIPLIER 4 //Coefficient of multiplication for the damage the item does when it first embeds (this*item.w_class) +#define EMBED_THROWSPEED_THRESHOLD 4 //The minimum value of an item's throw_speed for it to embed (Unless it has embedded_ignore_throwspeed_threshold set to 1) +#define EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER 8 //Coefficient of multiplication for the damage the item does when removed without a surgery (this*item.w_class) +#define EMBEDDED_UNSAFE_REMOVAL_TIME 30 //A Time in ticks, total removal time = (this*item.w_class) + //Gun Stuff #define SAWN_INTACT 0 #define SAWN_OFF 1 diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index a27e3f8e96a..d708813b139 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -2,9 +2,19 @@ #define isatom(A) istype(A, /atom) #define ismovableatom(A) istype(A, /atom/movable) -// Mobs +// Mobs #define ismegafauna(A) istype(A, /mob/living/simple_animal/hostile/megafauna) +//Objects + +var/list/static/global/pointed_types = typecacheof(list( + /obj/item/weapon/pen, + /obj/item/weapon/screwdriver, + /obj/item/weapon/reagent_containers/syringe, + /obj/item/weapon/kitchen/utensil/fork)) + +#define is_pointed(W) (is_type_in_typecache(W, pointed_types)) + //Turfs #define issimulatedturf(A) istype(A, /turf/simulated) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 82b2ea8b419..c90db77effb 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1081,6 +1081,21 @@ proc/get_mob_with_client_list() return get_turf(location) +//For objects that should embed, but make no sense being is_sharp or is_pointed() +//e.g: rods +var/list/can_embed_types = typecacheof(list( + /obj/item/stack/rods, + /obj/item/pipe)) + +/proc/can_embed(obj/item/W) + if(is_sharp(W)) + return 1 + if(is_pointed(W)) + return 1 + + if(is_type_in_typecache(W, can_embed_types)) + return 1 + //Quick type checks for some tools var/global/list/common_tools = list( /obj/item/stack/cable_coil, @@ -1199,22 +1214,6 @@ var/global/list/common_tools = list( if(O.edge) return 1 return 0 -//Returns 1 if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape. -/proc/can_puncture(obj/item/W as obj) // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT? - if(!istype(W)) return 0 - if(!W) return 0 - if(W.sharp) return 1 - return ( \ - W.sharp || \ - istype(W, /obj/item/weapon/screwdriver) || \ - istype(W, /obj/item/weapon/pen) || \ - istype(W, /obj/item/weapon/weldingtool) || \ - istype(W, /obj/item/weapon/lighter/zippo) || \ - istype(W, /obj/item/weapon/match) || \ - istype(W, /obj/item/clothing/mask/cigarette) || \ - istype(W, /obj/item/weapon/shovel) \ - ) - /proc/is_surgery_tool(obj/item/W as obj) return ( \ istype(W, /obj/item/weapon/scalpel) || \ @@ -1891,4 +1890,4 @@ var/global/list/g_fancy_list_of_types = null var/num = pick(num_sample) num_sample -= num result += (1 << num) - return result + return result diff --git a/code/datums/spells/summonitem.dm b/code/datums/spells/summonitem.dm index 32472fe1ec0..bb650eb17f9 100644 --- a/code/datums/spells/summonitem.dm +++ b/code/datums/spells/summonitem.dm @@ -79,6 +79,14 @@ add_logs(target, C, "magically debrained", addition="INTENT: [uppertext(target.a_intent)]")*/ if(C.stomach_contents && item_to_retrive in C.stomach_contents) C.stomach_contents -= item_to_retrive + for(var/X in C.bodyparts) + var/obj/item/organ/external/part = X + if(item_to_retrive in part.embedded_objects) + part.embedded_objects -= item_to_retrive + to_chat(C, "The [item_to_retrive] that was embedded in your [part] has myseriously vanished. How fortunate!") + if(!C.has_embedded_objects()) + C.clear_alert("embeddedobject") + break else if(istype(item_to_retrive.loc,/obj/machinery/portable_atmospherics/)) //Edge cases for moved machinery diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index 5fd98986332..9077f623a2c 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -39,10 +39,6 @@ var/obj/item/organ/external/O = H.bodyparts_by_name[organ_name] if(!O) continue - for(var/obj/item/weapon/shard/shrapnel/s in O.implants) - O.implants -= s - H.contents -= s - qdel(s) O.brute_dam = 0 O.burn_dam = 0 O.damage_state = "00" @@ -58,6 +54,7 @@ for(var/obj/item/organ/internal/IO in H.internal_organs) IO.damage = 0 IO.trace_chemicals.Cut() + H.remove_all_embedded_objects() H.updatehealth() to_chat(user, "We have regenerated.") diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index ea92b93f473..77a0803a706 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -361,11 +361,6 @@ host = M forceMove(M) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/head = H.get_organ("head") - head.implants += src - host.status_flags |= PASSEMOTES RemoveBorerActions() @@ -746,11 +741,6 @@ controlling = FALSE - if(ishuman(host)) - var/mob/living/carbon/human/H = host - var/obj/item/organ/external/head = H.get_organ("head") - head.implants -= src - reset_perspective(null) machine = null diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 1dd20906704..8e635e5d027 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -780,7 +780,7 @@ var/global/list/multiverse = list() to_chat(target, "You suddenly feel very hot") target.bodytemperature += 50 GiveHint(target) - else if(can_puncture(I)) + else if(is_pointed(I)) to_chat(target, "You feel a stabbing pain in [parse_zone(user.zone_sel.selecting)]!") target.Weaken(2) GiveHint(target) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 41dc37ab43f..6d7264e9256 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -398,7 +398,7 @@ organData["broken"] = E.min_broken_damage var/shrapnelData[0] - for(var/obj/I in E.implants) + for(var/obj/I in E.embedded_objects) var/shrapnelSubData[0] shrapnelSubData["name"] = I.name @@ -605,7 +605,7 @@ infected = "Septic:" var/unknown_body = 0 - for(var/I in e.implants) + for(var/I in e.embedded_objects) unknown_body++ if(unknown_body || e.hidden) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 00eb1bd6884..469dcd1863a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -63,6 +63,17 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d var/mob/thrownby = null + //So items can have custom embedd values + //Because customisation is king + var/embed_chance = EMBED_CHANCE + var/embedded_fall_chance = EMBEDDED_ITEM_FALLOUT + var/embedded_pain_chance = EMBEDDED_PAIN_CHANCE + var/embedded_pain_multiplier = EMBEDDED_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does while embedded (this*w_class) + var/embedded_fall_pain_multiplier = EMBEDDED_FALL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does when falling out of a limb (this*w_class) + var/embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does when first embedded (this*w_class) + var/embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage removing this without surgery causes (this*w_class) + var/embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME //A time in ticks, multiplied by the w_class. + var/toolspeed = 1 // If this item is a tool, the speed multiplier /* Species-specific sprites, concept stolen from Paradise//vg/. diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index 5f55a5acdcc..dccc8f041f6 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -59,5 +59,5 @@ var/obj/item/weapon/tank/T = W blow(T, user) return - if(is_sharp(W) || is_hot(W) || can_puncture(W)) + if(is_sharp(W) || is_hot(W) || is_pointed(W)) burst() diff --git a/code/game/objects/items/policetape.dm b/code/game/objects/items/policetape.dm index 127f3f82c41..31da04bc799 100644 --- a/code/game/objects/items/policetape.dm +++ b/code/game/objects/items/policetape.dm @@ -174,7 +174,7 @@ var/list/tape_roll_applications = list() breaktape(/obj/item/weapon/wirecutters,user) /obj/item/tape/proc/breaktape(obj/item/weapon/W as obj, mob/user as mob) - if(user.a_intent == I_HELP && ((!can_puncture(W) && src.allowed(user)))) + if(user.a_intent == I_HELP && ((!is_pointed(W) && src.allowed(user)))) to_chat(user, "You can't break the [src] with that!") return user.visible_message("[user] breaks the [src]!", "You break the [src]!") diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 14f1357af87..2cdcfc18376 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -96,7 +96,7 @@ /obj/structure/inflatable/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(!istype(W)) return - if(can_puncture(W)) + if(is_pointed(W)) visible_message("[user] pierces [src] with [W]!") deflate(1) if(W.damtype == BRUTE || W.damtype == BURN) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 141d760287a..eb17146192c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -244,6 +244,10 @@ if(status == "") status = "OK" src.show_message(text("\t []My [] is [].",status=="OK"?"":"",org.name,status),1) + + for(var/obj/item/I in org.embedded_objects) + to_chat(src, "\t There is \a [I] embedded in your [org.name]!") + if(staminaloss) if(staminaloss > 30) to_chat(src, "You're completely exhausted.") diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 69e86de81e6..e2d44bfba5c 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -90,8 +90,10 @@ if(src) qdel(src) /mob/living/carbon/human/death(gibbed) - if(stat == DEAD) return - if(healths) healths.icon_state = "health5" + if(stat == DEAD) + return + if(healths) + healths.icon_state = "health5" if(!gibbed) emote("deathgasp") //let the world KNOW WE ARE DEAD @@ -102,21 +104,8 @@ set_heartattack(FALSE) //Handle species-specific deaths. - if(species) species.handle_death(src) - - //Handle brain slugs. - var/obj/item/organ/external/head = get_organ("head") - var/mob/living/simple_animal/borer/B - - if(istype(head)) - for(var/I in head.implants) - if(istype(I,/mob/living/simple_animal/borer)) - B = I - if(B) - if(B.controlling && B.host == src) - B.detach() - - verbs -= /mob/living/carbon/proc/release_control + if(species) + species.handle_death(src) callHook("death", list(src, gibbed)) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 693973ab42d..2215df8d3f4 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -382,6 +382,9 @@ else wound_flavor_text["[temp.limb_name]"] = "" + for(var/obj/item/I in temp.embedded_objects) + msg += "[t_He] [t_has] \a \icon[I] [I] embedded in [t_his] [temp.name]!\n" + //Handles the text strings being added to the actual description. //If they have something that covers the limb, and it is not missing, put flavortext. If it is covered but bleeding, add other flavortext. var/display_chest = 0 @@ -438,9 +441,6 @@ if(display_gloves) msg += "[src] has blood running from under [t_his] gloves!\n" - - for(var/implant in get_visible_implants(0)) - msg += "[src] has \a [implant] sticking out of [t_his] flesh!\n" if(digitalcamo) msg += "[t_He] [t_is] repulsively uncanny!\n" if(!(skipface || ( wear_mask && ( wear_mask.flags_inv & HIDEFACE || wear_mask.flags_cover & MASKCOVERSMOUTH) ) ) && is_thrall(src) && in_range(user,src)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 000a7a52bd0..3a233c869db 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -8,7 +8,6 @@ //why are these here and not in human_defines.dm //var/list/hud_list[10] var/datum/species/species //Contains icon generation and language information, set during New(). - var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. var/obj/item/weapon/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call. /mob/living/carbon/human/New(var/new_loc, var/new_species = null, var/delay_ready_dna = 0) @@ -700,6 +699,28 @@ if(G && G.pickpocket) thief_mode = 1 + if(href_list["embedded_object"]) + var/obj/item/organ/external/L = locate(href_list["embedded_limb"]) in bodyparts + if(!L) + return + var/obj/item/I = locate(href_list["embedded_object"]) in L.embedded_objects + if(!I || I.loc != src) //no item, no limb, or item is not in limb or in the person anymore + return + var/time_taken = I.embedded_unsafe_removal_time*I.w_class + usr.visible_message("[usr] attempts to remove [I] from their [L.name].","You attempt to remove [I] from your [L.name]... (It will take [time_taken/10] seconds.)") + if(do_after(usr, time_taken, needhand = 1, target = src)) + if(!I || !L || I.loc != src || !(I in L.embedded_objects)) + return + L.embedded_objects -= I + L.receive_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus. + I.forceMove(get_turf(src)) + usr.put_in_hands(I) + usr.emote("scream") + usr.visible_message("[usr] successfully rips [I] out of their [L.name]!","You successfully remove [I] from your [L.name].") + if(!has_embedded_objects()) + clear_alert("embeddedobject") + return + if(href_list["item"]) var/slot = text2num(href_list["item"]) if(slot in check_obscured_slots()) @@ -1348,16 +1369,6 @@ else ..() -/mob/living/carbon/human/get_visible_implants(var/class = 0) - - var/list/visible_implants = list() - for(var/obj/item/organ/external/organ in bodyparts) - for(var/obj/item/weapon/O in organ.implants) - if(!istype(O,/obj/item/weapon/implant) && (O.w_class > class) && !istype(O,/obj/item/weapon/shard/shrapnel)) - visible_implants += O - - return(visible_implants) - /mob/living/carbon/human/generate_name() name = species.makeName(gender,src) real_name = name @@ -1365,29 +1376,6 @@ dna.real_name = name return name -/mob/living/carbon/human/proc/handle_embedded_objects() - - for(var/obj/item/organ/external/organ in bodyparts) - if(organ.status & ORGAN_SPLINTED) //Splints prevent movement. - continue - for(var/obj/item/weapon/O in organ.implants) - if(!istype(O,/obj/item/weapon/implant) && prob(5)) //Moving with things stuck in you could be bad. - // All kinds of embedded objects cause bleeding. - var/msg = null - switch(rand(1,3)) - if(1) - msg ="A spike of pain jolts your [organ.name] as you bump [O] inside." - if(2) - msg ="Your movement jostles [O] in your [organ.name] painfully." - if(3) - msg ="[O] in your [organ.name] twists painfully as you move." - to_chat(src, msg) - - organ.take_damage(rand(1,3), 0, 0) - if(!(organ.status & ORGAN_ROBOT)) //There is no blood in protheses. - organ.status |= ORGAN_BLEEDING - src.adjustToxLoss(rand(1,3)) - /mob/living/carbon/human/verb/check_pulse() set category = null set name = "Check pulse" diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 585ac587ffc..747351b9755 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -46,13 +46,14 @@ emp_act var/armor = getarmor_organ(organ, "bullet") if((P.embed && prob(20 + max(P.damage - armor, -10)))) var/obj/item/weapon/shard/shrapnel/SP = new() - (SP.name) = "[P.name] shrapnel" + SP.name = "[P.name] shrapnel" if(P.ammo_casing && P.ammo_casing.caliber) - (SP.desc) = "[SP.desc] It looks like it is a [P.ammo_casing.caliber] caliber round." + SP.desc = "[SP.desc] It looks like it is a [P.ammo_casing.caliber] caliber round." else - (SP.desc) = "[SP.desc] The round's caliber is unidentifiable." - (SP.loc) = organ - organ.embed(SP) + SP.desc = "[SP.desc] The round's caliber is unidentifiable." + throw_alert("embeddedobject", /obj/screen/alert/embeddedobject) + organ.embedded_objects |= SP + SP.forceMove(src) organ.add_autopsy_data(P.name, P.damage) // Add the bullet's name to the autopsy data @@ -297,21 +298,6 @@ emp_act if(Iforce > 10 || Iforce >= 5 && prob(33)) forcesay(hit_appends) //forcesay checks stat already -/* //Melee weapon embedded object code. Commented out, as most people on the forums seem to find this annoying and think it does not contribute to general gameplay. - Dave - if(I.damtype == BRUTE && !I.is_robot_module()) - var/damage = I.force - if(armor) - damage /= armor+1 - - //blunt objects should really not be embedding in things unless a huge amount of force is involved - var/embed_chance = weapon_sharp? damage/I.w_class : damage/(I.w_class*3) - var/embed_threshold = weapon_sharp? 5*I.w_class : 15*I.w_class - - //Sharp objects will always embed if they do enough damage. - if(((weapon_sharp && damage > (10*I.w_class)) || (damage > embed_threshold && prob(embed_chance))) && (I.no_embed == 0) ) - affecting.embed(I) - return 1*/ - //this proc handles being hit by a thrown atom /mob/living/carbon/human/hitby(atom/movable/AM, skipcatch = 0, hitpush = 1, blocked = 0) var/obj/item/I @@ -325,24 +311,19 @@ emp_act hitpush = 0 skipcatch = 1 blocked = 1 - /*else if(I) + else if(I) if(I.throw_speed >= EMBED_THROWSPEED_THRESHOLD) - if(!I.is_robot_module()) - var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].", I.armour_penetration) //I guess "melee" is the best fit here - var/sharp = is_sharp(I) - var/damage = throwpower * (I.throw_speed / 5) - if(armor) - damage /= armor + 1 - - //blunt objects should really not be embedding in things unless a huge amount of force is involved - var/embed_chance = sharp? damage / I.w_class : damage/(I.w_class * 3) - var/embed_threshold = sharp? 5 * I.w_class : 15 * I.w_class - - //Sharp objects will always embed if they do enough damage. - //Thrown sharp objects have some momentum already and have a small chance to embed even if the damage is below the threshold - - if(((sharp && prob(damage / (10 * I.w_class) * 100)) || (damage > embed_threshold && prob(embed_chance))) && (I.no_embed == 0)) - affecting.embed(I)*/ + if(can_embed(I)) + if(prob(I.embed_chance)) + throw_alert("embeddedobject", /obj/screen/alert/embeddedobject) + var/obj/item/organ/external/L = pick(bodyparts) + L.embedded_objects |= I +// I.add_mob_blood(src)//it embedded itself in you, of course it's bloody! + I.forceMove(src) + L.take_damage(I.w_class*I.embedded_impact_pain_multiplier) + visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!") + hitpush = 0 + skipcatch = 1 //can't catch the now embedded item return ..() /mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 00dbc50e8d0..f7504c5cbad 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -40,6 +40,10 @@ if(!client) species.handle_npc(src) + if(stat != DEAD) + //Stuff jammed in your limbs hurts + handle_embedded_objects() + if(stat == DEAD) handle_decay() @@ -839,13 +843,6 @@ blinded = 1 stat = UNCONSCIOUS - if(embedded_flag && !(mob_master.current_cycle % 10)) - var/list/E - E = get_visible_implants(0) - if(!E.len) - embedded_flag = 0 - - //Vision //god knows why this is here var/obj/item/organ/vision if(species.vision_organ) @@ -958,6 +955,22 @@ adjustToxLoss(-3) lastpuke = 0 +/mob/living/carbon/human/proc/handle_embedded_objects() + for(var/X in bodyparts) + var/obj/item/organ/external/BP = X + for(var/obj/item/I in BP.embedded_objects) + if(prob(I.embedded_pain_chance)) + BP.take_damage(I.w_class*I.embedded_pain_multiplier) + to_chat(src, "[I] embedded in your [BP.name] hurts!") + + if(prob(I.embedded_fall_chance)) + BP.take_damage(I.w_class*I.embedded_fall_pain_multiplier) + BP.embedded_objects -= I + I.loc = get_turf(src) + visible_message("[I] falls out of [name]'s [BP.name]!","[I] falls out of your [BP.name]!") + if(!has_embedded_objects()) + clear_alert("embeddedobject") + /mob/living/carbon/human/handle_changeling() if(mind) if(mind.changeling) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index c1d1a169c1d..d658863450d 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -399,9 +399,6 @@ if(has_gravity(H)) gravity = 1 - if(H.embedded_flag) - H.handle_embedded_objects() //Moving with objects stuck in you can cause bad times. - if(!ignoreslow && gravity) if(slowdown) . = slowdown diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 06b6440f756..c1fb31a255b 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -512,6 +512,7 @@ human_mob.restore_blood() human_mob.shock_stage = 0 human_mob.decaylevel = 0 + human_mob.remove_all_embedded_objects() restore_all_organs() surgeries.Cut() //End all surgeries. diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index cb86d417fbc..f4dce4b362b 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1048,104 +1048,6 @@ var/list/slot_equipment_priority = list( \ /mob/proc/get_species() return "" -/mob/proc/get_visible_implants(var/class = 0) - var/list/visible_implants = list() - for(var/obj/item/O in embedded) - if(O.w_class > class) - visible_implants += O - return visible_implants - -/mob/proc/yank_out_object() - set category = "Object" - set name = "Yank out object" - set desc = "Remove an embedded item at the cost of bleeding and pain." - set src in view(1) - - if(!isliving(usr) || usr.next_move > world.time) - return - usr.changeNext_move(CLICK_CD_RESIST) - - if(usr.stat == 1) - to_chat(usr, "You are unconcious and cannot do that!") - return - - if(usr.restrained()) - to_chat(usr, "You are restrained and cannot do that!") - return - - var/mob/S = src - var/mob/U = usr - var/list/valid_objects = list() - var/self = null - - if(S == U) - self = 1 // Removing object from yourself. - - valid_objects = get_visible_implants(0) - if(!valid_objects.len) - if(self) - to_chat(src, "You have nothing stuck in your body that is large enough to remove.") - else - to_chat(U, "[src] has nothing stuck in their wounds that is large enough to remove.") - return - - var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects - - if(self) - visible_message("[usr] appears to be trying to extract an object from their body.") - to_chat(src, "You attempt to get a good grip on [selection] in your body.") - else - visible_message("[usr] attempts to get a good grip on [selection] in [S]'s body.") - to_chat(U, "You attempt to get a good grip on [selection] in [S]'s body.") - - if(!do_after(U, 80, target = S)) - return - if(!selection || !S || !U) - return - - if(self) - visible_message("[src] rips [selection] out of their body.","You rip [selection] out of your body.") - else - visible_message("[usr] rips [selection] out of [src]'s body.","[usr] rips [selection] out of your body.") - valid_objects = get_visible_implants(0) - if(valid_objects.len == 1) //Yanking out last object - removing verb. - src.verbs -= /mob/proc/yank_out_object - - if(ishuman(src)) - - var/mob/living/carbon/human/H = src - var/obj/item/organ/external/affected - - for(var/obj/item/organ/external/organ in H.bodyparts) //Grab the organ holding the implant. - for(var/obj/item/weapon/O in organ.implants) - if(O == selection) - affected = organ - - affected.implants -= selection - H.shock_stage+=10 - - if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. - var/datum/wound/internal_bleeding/I = new () - affected.wounds += I - H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) - - if(ishuman(U)) - var/mob/living/carbon/human/human_user = U - human_user.bloody_hands(H) - - selection.forceMove(get_turf(src)) - if(!(U.l_hand && U.r_hand)) - U.put_in_hands(selection) - - for(var/obj/item/weapon/O in pinned) - if(O == selection) - pinned -= O - if(!pinned.len) - anchored = 0 - return 1 - - - /mob/dead/observer/verb/respawn() set name = "Respawn as NPC" set category = "Ghost" diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 2988363ffb9..a5d0ab00a4d 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -54,7 +54,6 @@ var/unacidable = 0 var/can_strip = 1 var/list/pinned = list() //List of things pinning this creature to walls (see living_defense.dm) - var/list/embedded = list() //Embedded items, since simple mobs don't have organs. var/list/languages = list() // For speaking/listening. var/list/abilities = list() // For species-derived or admin-given powers. var/list/speak_emote = list("says") // Verbs used when speaking. Defaults to 'say' if speak_emote is null. @@ -196,5 +195,5 @@ var/list/permanent_huds = list() var/list/actions = list() - + var/list/progressbars = null //for stacking do_after bars diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 498976c4635..2a4f4ad20ea 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -199,14 +199,14 @@ affected.wounds += I affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) user.drop_item() - target.internal_organs += tool + affected.hidden = tool tool.forceMove(affected) return 1 else if(IC) user.visible_message("[user] pulls [IC] out of [target]'s [target_zone]!", "You pull [IC] out of [target]'s [target_zone].") user.put_in_hands(IC) - target.internal_organs -= IC + affected.hidden = null return 1 else to_chat(user, "You don't find anything in [target]'s [target_zone].") @@ -214,18 +214,18 @@ ////////////////////////////////////////////////////////////////// -// IMPLANT/ITEM REMOVAL SURGERY // +// IMPLANT REMOVAL SURGERY // ////////////////////////////////////////////////////////////////// /datum/surgery/cavity_implant_rem name = "Implant Removal" steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/) - possible_locs = list("chest")//head is for borers..i can put it elsewhere + possible_locs = list("chest") /datum/surgery/cavity_implant_rem/synth name = "Implant Removal" steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/robotics/external/close_hatch) - possible_locs = list("chest")//head is for borers..i can put it elsewhere + possible_locs = list("chest") /datum/surgery/cavity_implant_rem/can_start(mob/user, mob/living/carbon/human/target) if(!istype(target)) @@ -295,102 +295,4 @@ else user.visible_message(" [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ "You could not find anything inside [target]'s [affected.name].") - return 1 - -/datum/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - ..() - var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - if(affected.implants.len) - var/fail_prob = 10 - fail_prob += 100 - tool_quality(tool) - if(prob(fail_prob)) - var/obj/item/weapon/implant/imp = affected.implants[1] - user.visible_message(" Something beeps inside [target]'s [affected.name]!") - playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) - spawn(25) - imp.activate() - return 0 - - -////////////////////////////////////////////////////////////////// -// EMBEDDED ITEM REOMOVAL // -////////////////////////////////////////////////////////////////// - -/datum/surgery/embedded_removal - name = "Removal of Embedded Objects" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/remove_object, /datum/surgery_step/generic/cauterize) - possible_locs = list("r_arm","l_arm","r_leg","l_leg","r_hand","r_foot","l_hand","l_foot","groin","chest","head") - -/datum/surgery/embedded_removal/synth - steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch, /datum/surgery_step/remove_object, /datum/surgery_step/robotics/external/close_hatch) - possible_locs = list("r_arm","l_arm","r_leg","l_leg","r_hand","r_foot","l_hand","l_foot","groin","chest","head") - - -/datum/surgery/embedded_removal/can_start(mob/user, mob/living/carbon/human/target) - if(!istype(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) - if(!affected) - return 0 - if(affected.status & ORGAN_ROBOT) - return 0 - return 1 - -/datum/surgery/embedded_removal/synth/can_start(mob/user, mob/living/carbon/human/target) - if(!istype(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) - if(!affected) - return 0 - if(!(affected.status & ORGAN_ROBOT)) - return 0 - return 1 - -/datum/surgery_step/remove_object - name = "remove embedded objects" - time = 32 - allowed_tools = list( - /obj/item/weapon/scalpel/laser/manager = 100, \ - /obj/item/weapon/hemostat = 100, \ - /obj/item/stack/cable_coil = 75, \ - /obj/item/device/assembly/mousetrap = 20 - ) - var/obj/item/organ/external/L = null - - -/datum/surgery_step/remove_object/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) - L = target.get_organ(target_zone) - if(L) - user.visible_message("[user] looks for objects embedded in [target]'s [target_zone].", "You look for objects embedded in [target]'s [target_zone]...") - else - user.visible_message("[user] looks for [target]'s [target_zone].", "You look for [target]'s [target_zone]...") - - -/datum/surgery_step/remove_object/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) - if(L) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - var/objects = 0 - for(var/obj/item/I in L.implants) - if(!istype(I,/obj/item/weapon/implant)) - objects++ - I.forceMove(get_turf(H)) - L.implants -= I - - //Handle possessive brain borers. - if(H.has_brain_worms() && target_zone == "head")//remove worms outside the loop - var/mob/living/simple_animal/borer/worm = H.has_brain_worms() - if(worm.controlling) - target.release_control() - worm.detach() - worm.leave_host() - user.visible_message("a slug like creature wiggles out of [H]'s [target_zone]!") - - if(objects > 0) - user.visible_message("[user] sucessfully removes [objects] objects from [H]'s [L.limb_name]!", "You sucessfully remove [objects] objects from [H]'s [L.limb_name].") - else - to_chat(user, "You find no objects embedded in [H]'s [L.limb_name]!") - else - to_chat(user, "You can't find [target]'s [target_zone], let alone any objects embedded in it!") - - return 1 + return 1 \ No newline at end of file diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 151636a9a50..ec184269051 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -58,7 +58,7 @@ var/encased // Needs to be opened with a saw to access the organs. var/obj/item/hidden = null - var/list/implants = list() + var/list/embedded_objects = list() // how often wounds should be updated, a higher number means less often var/wound_update_accuracy = 1 @@ -104,7 +104,7 @@ QDEL_LIST(wounds) - QDEL_LIST(implants) + QDEL_LIST(embedded_objects) QDEL_NULL(hidden) @@ -358,12 +358,6 @@ This function completely restores a damaged organ to perfect condition. for(var/obj/item/organ/external/EO in contents) EO.rejuvenate() - // remove embedded objects and drop them on the floor - for(var/obj/implanted_object in implants) - if(!istype(implanted_object,/obj/item/weapon/implant)) // We don't want to remove REAL implants. Just shrapnel etc. - implanted_object.loc = owner.loc - implants -= implanted_object - owner.updatehealth() update_icon() if(!owner) @@ -907,20 +901,6 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/proc/is_malfunctioning() return ((status & ORGAN_ROBOT) && (brute_dam + burn_dam) >= 10 && prob(brute_dam + burn_dam)) -/obj/item/organ/external/proc/embed(var/obj/item/weapon/W, var/silent = 0) - if(!owner || loc != owner) - return - if(!silent) - owner.visible_message("\The [W] sticks in the wound!") - implants += W - owner.embedded_flag = 1 - owner.verbs += /mob/proc/yank_out_object - W.add_blood(owner) - if(ismob(W.loc)) - var/mob/living/H = W.loc - H.drop_item() - W.loc = owner - /obj/item/organ/external/proc/open_enough_for_surgery() return (encased ? (open == 3) : (open == 2)) @@ -931,14 +911,17 @@ Note that amputating the affected organ does in fact remove the infection from t var/is_robotic = status & ORGAN_ROBOT var/mob/living/carbon/human/victim = owner + for(var/obj/item/I in embedded_objects) + embedded_objects -= I + I.forceMove(src) + if(!owner.has_embedded_objects()) + owner.clear_alert("embeddedobject") + . = ..() status |= ORGAN_DESTROYED victim.bad_external_organs -= src - for(var/implant in implants) //todo: check if this can be left alone - qdel(implant) - // Attached organs also fly off. if(!ignore_children) for(var/obj/item/organ/external/O in children) @@ -1018,3 +1001,22 @@ Note that amputating the affected organ does in fact remove the infection from t ..() // Parent call loads in the DNA if(data["dna"]) sync_colour_to_dna() + +//Remove all embedded objects from all limbs on the carbon mob +/mob/living/carbon/human/proc/remove_all_embedded_objects() + var/turf/T = get_turf(src) + + for(var/X in bodyparts) + var/obj/item/organ/external/L = X + for(var/obj/item/I in L.embedded_objects) + L.embedded_objects -= I + I.forceMove(T) + + clear_alert("embeddedobject") + +/mob/living/carbon/human/proc/has_embedded_objects() + . = 0 + for(var/X in bodyparts) + var/obj/item/organ/external/L = X + for(var/obj/item/I in L.embedded_objects) + return 1 \ No newline at end of file diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm new file mode 100644 index 00000000000..468fe9f7654 --- /dev/null +++ b/code/modules/surgery/remove_embedded_object.dm @@ -0,0 +1,42 @@ +/datum/surgery/embedded_removal + name = "removal of embedded objects" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/remove_object) + possible_locs = list("head", "chest", "l_arm", "l_hand", "r_arm", "r_hand","r_leg", "r_foot", "l_leg", "l_foot", "groin") + + +/datum/surgery_step/remove_object + name = "remove embedded objects" + time = 32 + accept_hand = 1 + var/obj/item/organ/external/L = null + + +/datum/surgery_step/remove_object/begin_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + L = surgery.organ_ref + if(L) + user.visible_message("[user] looks for objects embedded in [target]'s [parse_zone(user.zone_sel.selecting)].", "You look for objects embedded in [target]'s [parse_zone(user.zone_sel.selecting)]...") + else + user.visible_message("[user] looks for [target]'s [parse_zone(user.zone_sel.selecting)].", "You look for [target]'s [parse_zone(user.zone_sel.selecting)]...") + + +/datum/surgery_step/remove_object/end_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(L) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + var/objects = 0 + for(var/obj/item/I in L.embedded_objects) + objects++ + I.forceMove(get_turf(H)) + L.embedded_objects -= I + if(!H.has_embedded_objects()) + H.clear_alert("embeddedobject") + + if(objects > 0) + user.visible_message("[user] sucessfully removes [objects] objects from [H]'s [L]!", "You successfully remove [objects] objects from [H]'s [L.name].") + else + to_chat(user, "You find no objects embedded in [H]'s [L]!") + + else + to_chat(user, "You can't find [target]'s [parse_zone(user.zone_sel.selecting)], let alone any objects embedded in it!") + + return 1 \ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 869bffe601b..99e7a6f4913 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2135,6 +2135,7 @@ #include "code\modules\surgery\limb_reattach.dm" #include "code\modules\surgery\organs_internal.dm" #include "code\modules\surgery\other.dm" +#include "code\modules\surgery\remove_embedded_object.dm" #include "code\modules\surgery\rig_removal.dm" #include "code\modules\surgery\robotics.dm" #include "code\modules\surgery\slime.dm" From 673f18f3e79d224fa77e651f67d207ff3a23a4fb Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 5 Jun 2017 17:14:04 -0400 Subject: [PATCH 042/378] tweaks --- code/game/gamemodes/cult/cult_items.dm | 1 + code/game/objects/items/weapons/melee/energy.dm | 4 ++++ code/modules/paperwork/pen.dm | 2 ++ 3 files changed, 7 insertions(+) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 97511414e7a..bf2c692a0c0 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -41,6 +41,7 @@ w_class = WEIGHT_CLASS_SMALL force = 15 throwforce = 25 + embed_chance = 75 var/cooldown = 0 /obj/item/weapon/melee/cultblade/dagger/afterattack(mob/living/target as mob, mob/living/carbon/human/user as mob) diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 1c1dbbd8363..edd07bef05a 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -25,6 +25,7 @@ force = force_on throwforce = throwforce_on hitsound = 'sound/weapons/blade1.ogg' + throw_speed = 4 if(attack_verb_on.len) attack_verb = attack_verb_on if(!item_color) @@ -38,6 +39,7 @@ force = initial(force) throwforce = initial(throwforce) hitsound = initial(hitsound) + throw_speed = initial(throw_speed) if(attack_verb_on.len) attack_verb = list() icon_state = initial(icon_state) @@ -85,6 +87,8 @@ throw_speed = 3 throw_range = 5 hitsound = "swing_hit" + embed_chance = 75 + embedded_impact_pain_multiplier = 10 armour_penetration = 35 origin_tech = "combat=3;magnets=4;syndicate=4" block_chance = 50 diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 9f5d3534215..7780f057b19 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -159,6 +159,7 @@ w_class = initial(w_class) name = initial(name) hitsound = initial(hitsound) + embed_chance = initial(embed_chance) throwforce = initial(throwforce) playsound(user, 'sound/weapons/saberoff.ogg', 5, 1) to_chat(user, "[src] can now be concealed.") @@ -170,6 +171,7 @@ w_class = WEIGHT_CLASS_NORMAL name = "energy dagger" hitsound = 'sound/weapons/blade1.ogg' + embed_chance = 100 //rule of cool throwforce = 35 playsound(user, 'sound/weapons/saberon.ogg', 5, 1) to_chat(user, "[src] is now active.") From 3de897d884e1bc63876507f69842fe65e4eb4e24 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 5 Jun 2017 17:32:29 -0400 Subject: [PATCH 043/378] more tweaks --- code/datums/uplink_item.dm | 8 +++++++ code/game/objects/items/weapons/shards.dm | 21 +++++++++--------- .../items/weapons/storage/uplink_kits.dm | 13 +++++++++++ code/game/objects/items/weapons/weaponry.dm | 15 +++++++++++++ icons/obj/weapons.dmi | Bin 61352 -> 61488 bytes 5 files changed, 46 insertions(+), 11 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 1cf08abebd0..c3173b8de52 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -750,6 +750,14 @@ var/list/uplink_items = list() cost = 17 excludefrom = list(/datum/game_mode/nuclear) +/datum/uplink_item/stealthy_weapons/throwingweapons + name = "Box of Throwing Weapons" + desc = "A box of shurikens and reinforced bolas from ancient Earth martial arts. They are highly effective \ + throwing weapons. The bolas can knock a target down and the shurikens will embed into limbs." + reference = "STK" + item = /obj/item/weapon/storage/box/syndie_kit/throwing_weapons + cost = 3 + /datum/uplink_item/stealthy_weapons/edagger name = "Energy Dagger" desc = "A dagger made of energy that looks and functions as a pen when off." diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm index 554347224eb..8129eca79dc 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/shards.dm @@ -97,19 +97,18 @@ icon = 'icons/obj/shards.dmi' icon_state = "shrapnellarge" desc = "A bunch of tiny bits of shattered metal." + embedded_fall_chance = 0 /obj/item/weapon/shard/shrapnel/New() - - src.icon_state = pick("shrapnellarge", "shrapnelmedium", "shrapnelsmall") - switch(src.icon_state) + ..() + icon_state = pick("shrapnellarge", "shrapnelmedium", "shrapnelsmall") + switch(icon_state) if("shrapnelsmall") - src.pixel_x = rand(-12, 12) - src.pixel_y = rand(-12, 12) + pixel_x = rand(-12, 12) + pixel_y = rand(-12, 12) if("shrapnelmedium") - src.pixel_x = rand(-8, 8) - src.pixel_y = rand(-8, 8) + pixel_x = rand(-8, 8) + pixel_y = rand(-8, 8) if("shrapnellarge") - src.pixel_x = rand(-5, 5) - src.pixel_y = rand(-5, 5) - else - return + pixel_x = rand(-5, 5) + pixel_y = rand(-5, 5) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index d721cb46271..976003bc1ee 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -157,6 +157,19 @@ new /obj/item/weapon/grenade/empgrenade(src) new /obj/item/weapon/implanter/emp/(src) +/obj/item/weapon/storage/box/syndie_kit/throwing_weapons + name = "boxed throwing kit" + +/obj/item/weapon/storage/box/syndie_kit/throwing_weapons/New() + ..() + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/restraints/legcuffs/bola/tactical(src) + new /obj/item/weapon/restraints/legcuffs/bola/tactical(src) + /obj/item/weapon/storage/box/syndie_kit/sarin name = "Sarin Gas Grenades" diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 95317b7f0a6..586b24bc719 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -130,6 +130,21 @@ obj/item/weapon/wirerod/attackby(obj/item/I, mob/user, params) qdel(I) qdel(src) +/obj/item/weapon/throwing_star + name = "throwing star" + desc = "An ancient weapon still used to this day due to it's ease of lodging itself into victim's body parts" + icon_state = "throwingstar" + item_state = "eshield0" + force = 2 + throwforce = 20 //This is never used on mobs since this has a 100% embed chance. + throw_speed = 4 + embedded_pain_multiplier = 4 + w_class = WEIGHT_CLASS_SMALL + embed_chance = 100 + embedded_fall_chance = 0 //Hahaha! + sharp = 1 + edge = 1 + materials = list(MAT_METAL=500, MAT_GLASS=500) /obj/item/weapon/spear/kidan icon_state = "kidanspear" diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 83276e5ec57c95cdd644bae01fa269efd7077875..41d47685870af52b58f8397123dc17985b6db467 100644 GIT binary patch delta 19284 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 Date: Mon, 5 Jun 2017 19:35:06 -0400 Subject: [PATCH 044/378] mostly working now --- code/__DEFINES/combat.dm | 5 +- code/_onclick/hud/alert.dm | 6 ++ code/modules/mob/living/carbon/carbon.dm | 2 +- .../surgery/{implant.dm => cavity_implant.dm} | 94 +----------------- code/modules/surgery/implant_removal.dm | 78 +++++++++++++++ code/modules/surgery/organs_internal.dm | 12 +++ .../modules/surgery/remove_embedded_object.dm | 29 +++++- icons/mob/screen_alert.dmi | Bin 36406 -> 37433 bytes paradise.dme | 3 +- 9 files changed, 127 insertions(+), 102 deletions(-) rename code/modules/surgery/{implant.dm => cavity_implant.dm} (70%) create mode 100644 code/modules/surgery/implant_removal.dm diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 71c6bac6979..40f27d0d84f 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -80,7 +80,4 @@ #define WEAPON_LIGHT 0 #define WEAPON_MEDIUM 1 - #define WEAPON_HEAVY 2 - -// Embedded objects -#define EMBED_THROWSPEED_THRESHOLD 15 \ No newline at end of file + #define WEAPON_HEAVY 2 \ No newline at end of file diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 68a24f87a3e..9b80dc2c8e0 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -235,6 +235,12 @@ or something covering your eyes." desc = "All that alcohol you've been drinking is impairing your speech, motor skills, and mental cognition. Make sure to act like it." icon_state = "drunk" +/obj/screen/alert/embeddedobject + name = "Embedded Object" + desc = "Something got lodged into your flesh and is causing major bleeding. It might fall out with time, but surgery is the safest way. \ + If you're feeling frisky, click yourself in help intent to pull the object out." + icon_state = "embeddedobject" + /obj/screen/alert/embeddedobject/Click() if(isliving(usr)) var/mob/living/carbon/human/M = usr diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index eb17146192c..3b0cafbe7b1 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -246,7 +246,7 @@ src.show_message(text("\t []My [] is [].",status=="OK"?"":"",org.name,status),1) for(var/obj/item/I in org.embedded_objects) - to_chat(src, "\t There is \a [I] embedded in your [org.name]!") + to_chat(src, "\t There is \a [I] embedded in your [org.name]!") if(staminaloss) if(staminaloss > 30) diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/cavity_implant.dm similarity index 70% rename from code/modules/surgery/implant.dm rename to code/modules/surgery/cavity_implant.dm index 2a4f4ad20ea..bd82e7192ae 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -1,10 +1,3 @@ -//Procedures in this file: Putting items in body cavity. Implant removal. Items removal. - - -////////////////////////////////////////////////////////////////// -// ITEM PLACEMENT SURGERY // -////////////////////////////////////////////////////////////////// - /datum/surgery/cavity_implant name = "Cavity Implant/Removal" steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, @@ -210,89 +203,4 @@ return 1 else to_chat(user, "You don't find anything in [target]'s [target_zone].") - return 0 - - -////////////////////////////////////////////////////////////////// -// IMPLANT REMOVAL SURGERY // -////////////////////////////////////////////////////////////////// - -/datum/surgery/cavity_implant_rem - name = "Implant Removal" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/) - possible_locs = list("chest") - -/datum/surgery/cavity_implant_rem/synth - name = "Implant Removal" - steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/robotics/external/close_hatch) - possible_locs = list("chest") - -/datum/surgery/cavity_implant_rem/can_start(mob/user, mob/living/carbon/human/target) - if(!istype(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) - if(!affected) - return 0 - if(affected.status & ORGAN_ROBOT) - return 0 - return 1 - -/datum/surgery/cavity_implant_rem/synth/can_start(mob/user, mob/living/carbon/human/target) - if(!istype(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) - if(!affected) - return 0 - if(!(affected.status & ORGAN_ROBOT)) - return 0 - - return 1 - -/datum/surgery_step/cavity/implant_removal - name = "extract implant" - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - var/obj/item/weapon/implant/I = null - time = 64 - -/datum/surgery_step/cavity/implant_removal/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - I = locate(/obj/item/weapon/implant) in target - user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ - "You start poking around inside [target]'s [affected.name] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() - -/datum/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - I = locate(/obj/item/weapon/implant) in target - if(I && (target_zone == "chest")) //implant removal only works on the chest. - user.visible_message("[user] takes something out of [target]'s [affected.name] with \the [tool].", \ - "You take [I] out of [target]'s [affected.name]s with \the [tool]." ) - - I.removed(target) - - var/obj/item/weapon/implantcase/case - - if(istype(user.get_item_by_slot(slot_l_hand), /obj/item/weapon/implantcase)) - case = user.get_item_by_slot(slot_l_hand) - else if(istype(user.get_item_by_slot(slot_r_hand), /obj/item/weapon/implantcase)) - case = user.get_item_by_slot(slot_r_hand) - else - case = locate(/obj/item/weapon/implantcase) in get_turf(target) - - if(case && !case.imp) - case.imp = I - I.loc = case - case.update_icon() - user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") - else - qdel(I) - return 1 - else - user.visible_message(" [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ - "You could not find anything inside [target]'s [affected.name].") - return 1 \ No newline at end of file + return 0 \ No newline at end of file diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm new file mode 100644 index 00000000000..21994202765 --- /dev/null +++ b/code/modules/surgery/implant_removal.dm @@ -0,0 +1,78 @@ +////////////////////////////////////////////////////////////////// +// IMPLANT REMOVAL SURGERY // +////////////////////////////////////////////////////////////////// + +/datum/surgery/implant_removal + name = "Implant Removal" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin,/datum/surgery_step/extract_implant,/datum/surgery_step/generic/cauterize) + possible_locs = list("chest") + +/datum/surgery/implant_removal/synth + name = "Implant Removal" + steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/extract_implant,/datum/surgery_step/robotics/external/close_hatch) + possible_locs = list("chest") + +/datum/surgery/implant_removal/can_start(mob/user, mob/living/carbon/human/target) + if(!istype(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) + if(!affected) + return 0 + if(affected.status & ORGAN_ROBOT) + return 0 + return 1 + +/datum/surgery/implant_removal/synth/can_start(mob/user, mob/living/carbon/human/target) + if(!istype(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) + if(!affected) + return 0 + if(!(affected.status & ORGAN_ROBOT)) + return 0 + + return 1 + +/datum/surgery_step/extract_implant + name = "extract implant" + allowed_tools = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 65) + time = 64 + var/obj/item/weapon/implant/I = null + +/datum/surgery_step/extract_implant/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + I = locate(/obj/item/weapon/implant) in target + user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ + "You start poking around inside [target]'s [affected.name] with \the [tool]." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + ..() + +/datum/surgery_step/extract_implant/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + I = locate(/obj/item/weapon/implant) in target + if(I && (target_zone == "chest")) //implant removal only works on the chest. + user.visible_message("[user] takes something out of [target]'s [affected.name] with \the [tool].", \ + "You take [I] out of [target]'s [affected.name]s with \the [tool]." ) + + I.removed(target) + + var/obj/item/weapon/implantcase/case + + if(istype(user.get_item_by_slot(slot_l_hand), /obj/item/weapon/implantcase)) + case = user.get_item_by_slot(slot_l_hand) + else if(istype(user.get_item_by_slot(slot_r_hand), /obj/item/weapon/implantcase)) + case = user.get_item_by_slot(slot_r_hand) + else + case = locate(/obj/item/weapon/implantcase) in get_turf(target) + + if(case && !case.imp) + case.imp = I + I.loc = case + case.update_icon() + user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") + else + qdel(I) + else + user.visible_message(" [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ + "You could not find anything inside [target]'s [affected.name].") + return 1 \ No newline at end of file diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 420d56de43d..6b71afdcadf 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -159,6 +159,11 @@ else if(implement_type in implements_extract) current_type = "extract" var/list/organs = target.get_organs_zone(target_zone) + var/mob/living/simple_animal/borer/B = target.has_brain_worms() + if(B) + user.visible_message("[user] begins to extract [B] from [target]'s [parse_zone(target_zone)].", + "You begin to extract [B] from [target]'s [parse_zone(target_zone)]...") + return TRUE if(!organs.len) to_chat(user, "There are no removeable organs in [target]'s [parse_zone(target_zone)]!") return -1 @@ -262,6 +267,13 @@ I.status &= ~ORGAN_CUT_AWAY else if(current_type == "extract") +/* var/mob/living/simple_animal/borer/B = target.has_brain_worms() + if(B && B.victim == target) + user.visible_message("[user] successfully extracts [B] from [target]'s [parse_zone(target_zone)]!", + "You successfully extract [B] from [target]'s [parse_zone(target_zone)].") + add_logs(user, target, "surgically removed [B] from", addition="INTENT: [uppertext(user.a_intent)]") + B.leave_victim() + return FALSE */ if(I && I.owner == target) user.visible_message(" [user] has separated and extracts [target]'s [I] with [tool].", " You have separated and extracted [target]'s [I] with [tool].") diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm index 468fe9f7654..d7fe8b7fb53 100644 --- a/code/modules/surgery/remove_embedded_object.dm +++ b/code/modules/surgery/remove_embedded_object.dm @@ -1,11 +1,34 @@ /datum/surgery/embedded_removal - name = "removal of embedded objects" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/remove_object) + name = "Removal of Embedded Objects" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/remove_object,/datum/surgery_step/generic/cauterize) possible_locs = list("head", "chest", "l_arm", "l_hand", "r_arm", "r_hand","r_leg", "r_foot", "l_leg", "l_foot", "groin") +/datum/surgery/embedded_removal/synth + steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/remove_object,/datum/surgery_step/robotics/external/close_hatch) + +/datum/surgery/embedded_removal/can_start(mob/user, mob/living/carbon/human/target) + if(!istype(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) + if(!affected) + return 0 + if(affected.status & ORGAN_ROBOT) + return 0 + return 1 + +/datum/surgery/embedded_removal/synth/can_start(mob/user, mob/living/carbon/human/target) + if(!istype(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) + if(!affected) + return 0 + if(!(affected.status & ORGAN_ROBOT)) + return 0 + + return 1 /datum/surgery_step/remove_object - name = "remove embedded objects" + name = "Remove Embedded Objects" time = 32 accept_hand = 1 var/obj/item/organ/external/L = null diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 99359f5b079162980a798297bdeb6e237591ac97..297f9a9aae2898b2f93f978d73f1827fe18a7724 100644 GIT binary patch delta 17153 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 HEkpkw`d;u9 diff --git a/paradise.dme b/paradise.dme index 99e7a6f4913..74bcfa956a3 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2126,12 +2126,13 @@ #include "code\modules\store\items.dm" #include "code\modules\store\store.dm" #include "code\modules\surgery\bones.dm" +#include "code\modules\surgery\cavity_implant.dm" #include "code\modules\surgery\dental_implant.dm" #include "code\modules\surgery\encased.dm" #include "code\modules\surgery\face.dm" #include "code\modules\surgery\generic.dm" #include "code\modules\surgery\helpers.dm" -#include "code\modules\surgery\implant.dm" +#include "code\modules\surgery\implant_removal.dm" #include "code\modules\surgery\limb_reattach.dm" #include "code\modules\surgery\organs_internal.dm" #include "code\modules\surgery\other.dm" From 4f5c187d274b4921844569dd27ed5904b8134ed2 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 5 Jun 2017 20:06:48 -0400 Subject: [PATCH 045/378] finally --- code/game/dna/genes/goon_powers.dm | 3 --- code/modules/clothing/spacesuits/rig/rig.dm | 4 ---- code/modules/mob/living/carbon/brain/brain_item.dm | 4 ++-- code/modules/mob/mob_defines.dm | 1 - code/modules/surgery/organs_internal.dm | 10 +++++----- 5 files changed, 7 insertions(+), 15 deletions(-) diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 16f8dad4bdb..06e98ecf9f4 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -414,9 +414,6 @@ else M.stop_pulling() - if(user.pinned.len) - failure = 1 - user.visible_message("[user.name] takes a huge leap!") playsound(user.loc, 'sound/weapons/thudswoosh.ogg', 50, 1) if(failure) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index da181368cc5..f1fb29ed645 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -978,10 +978,6 @@ else M.stop_pulling() - if(wearer.pinned.len) - to_chat(src, "Your host is pinned to a wall by [wearer.pinned[1]]!") - return 0 - // AIs are a bit slower than regular and ignore move intent. wearer_move_delay = world.time + ai_controlled_move_delay diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 7a12b570201..daeebf8442f 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -71,9 +71,9 @@ var/obj/item/organ/internal/brain/B = src if(!special) var/mob/living/simple_animal/borer/borer = owner.has_brain_worms() - if(borer) - borer.detach() //Should remove borer if the brain is removed - RR + borer.leave_host() //Should remove borer if the brain is removed - RR + if(owner.mind && !non_primary)//don't transfer if the owner does not have a mind. B.transfer_identity(user) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index a5d0ab00a4d..2b35b3ce1a7 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -53,7 +53,6 @@ var/lastpuke = 0 var/unacidable = 0 var/can_strip = 1 - var/list/pinned = list() //List of things pinning this creature to walls (see living_defense.dm) var/list/languages = list() // For speaking/listening. var/list/abilities = list() // For species-derived or admin-given powers. var/list/speak_emote = list("says") // Verbs used when speaking. Defaults to 'say' if speak_emote is null. diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 6b71afdcadf..32badd09ec0 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -160,7 +160,7 @@ current_type = "extract" var/list/organs = target.get_organs_zone(target_zone) var/mob/living/simple_animal/borer/B = target.has_brain_worms() - if(B) + if(target_zone == "head" && B) user.visible_message("[user] begins to extract [B] from [target]'s [parse_zone(target_zone)].", "You begin to extract [B] from [target]'s [parse_zone(target_zone)]...") return TRUE @@ -267,13 +267,13 @@ I.status &= ~ORGAN_CUT_AWAY else if(current_type == "extract") -/* var/mob/living/simple_animal/borer/B = target.has_brain_worms() - if(B && B.victim == target) + var/mob/living/simple_animal/borer/B = target.has_brain_worms() + if(target_zone == "head" && B && B.host == target) user.visible_message("[user] successfully extracts [B] from [target]'s [parse_zone(target_zone)]!", "You successfully extract [B] from [target]'s [parse_zone(target_zone)].") add_logs(user, target, "surgically removed [B] from", addition="INTENT: [uppertext(user.a_intent)]") - B.leave_victim() - return FALSE */ + B.leave_host() + return FALSE if(I && I.owner == target) user.visible_message(" [user] has separated and extracts [target]'s [I] with [tool].", " You have separated and extracted [target]'s [I] with [tool].") From 3e344e4526d83dbd301d3fb085c4bde6b220c555 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 5 Jun 2017 20:34:50 -0400 Subject: [PATCH 046/378] fixes --- code/modules/mob/living/carbon/human/human.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 2 +- code/modules/surgery/implant_removal.dm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 3a233c869db..2ed1fc83c03 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -712,7 +712,7 @@ if(!I || !L || I.loc != src || !(I in L.embedded_objects)) return L.embedded_objects -= I - L.receive_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus. + L.take_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus. I.forceMove(get_turf(src)) usr.put_in_hands(I) usr.emote("scream") diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index f7504c5cbad..6599b0823d0 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -966,7 +966,7 @@ if(prob(I.embedded_fall_chance)) BP.take_damage(I.w_class*I.embedded_fall_pain_multiplier) BP.embedded_objects -= I - I.loc = get_turf(src) + I.forceMove(get_turf(src)) visible_message("[I] falls out of [name]'s [BP.name]!","[I] falls out of your [BP.name]!") if(!has_embedded_objects()) clear_alert("embeddedobject") diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index 21994202765..7b04be81e1d 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -67,7 +67,7 @@ if(case && !case.imp) case.imp = I - I.loc = case + I.forceMove(case) case.update_icon() user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") else From f4409825c3e158fbd93a4e95a6385e3206a79aec Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 6 Jun 2017 00:10:59 -0400 Subject: [PATCH 047/378] last fixes --- code/game/objects/items/weapons/storage/uplink_kits.dm | 3 +++ code/modules/mob/living/carbon/human/examine.dm | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 976003bc1ee..47349744c99 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -159,6 +159,9 @@ /obj/item/weapon/storage/box/syndie_kit/throwing_weapons name = "boxed throwing kit" + can_hold = list(/obj/item/weapon/throwing_star, /obj/item/weapon/restraints/legcuffs/bola/tactical) + max_combined_w_class = 16 + max_w_class = WEIGHT_CLASS_NORMAL /obj/item/weapon/storage/box/syndie_kit/throwing_weapons/New() ..() diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 2215df8d3f4..961ee9ffd0b 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -383,7 +383,7 @@ wound_flavor_text["[temp.limb_name]"] = "" for(var/obj/item/I in temp.embedded_objects) - msg += "[t_He] [t_has] \a \icon[I] [I] embedded in [t_his] [temp.name]!\n" + msg += "[t_He] [t_has] \a [bicon(I)] [I] embedded in [t_his] [temp.name]!\n" //Handles the text strings being added to the actual description. //If they have something that covers the limb, and it is not missing, put flavortext. If it is covered but bleeding, add other flavortext. From d94306768ded56b8cff5aa02a6bdc8fa95965e08 Mon Sep 17 00:00:00 2001 From: Citinited Date: Wed, 7 Jun 2017 01:12:00 +0100 Subject: [PATCH 048/378] Some more tweaks --- code/game/objects/items/weapons/rpd.dm | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index bab3bac7c20..eea9ee86f72 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -183,33 +183,31 @@ var/list/pipemenu = list( var/turf/T = get_turf(target) if(src.loc != user || ismob(target) || istype(target, /obj/structure/window) || !proximity || world.time < lastused + spawndelay) return - if(mode == ATMOS_MODE) + if(mode == ATMOS_MODE && !istype(T, /turf/simulated/shuttle)) //No pipes on shuttles nerds if(istype(T, /turf/simulated/wall)) //Drilling into walls takes time - playsound(get_turf(src), "sound/weapons/circsawhit.ogg", 50, 1) + playsound(loc, "sound/weapons/circsawhit.ogg", 50, 1) user.visible_message("[user] starts drilling a hole in [T]...", "You start drilling a hole in [T]...", "You hear a drill.") if(!do_after(user, walldelay, target = T)) return user.visible_message("[user] finishes drilling a hole in [T]!", "You finish drilling a hole in [T]!", "You hear clanking.") + var/obj/item/pipe/P if(whatpipe == GAS_SENSOR) - new /obj/item/pipe_gsensor(T) - to_chat(user, "[src] rapidly dispenses a sensor!") + P = new /obj/item/pipe_gsensor(T) else if(whatpipe == METER) - new /obj/item/pipe_meter(T) - to_chat(user, "[src] rapidly dispenses a meter!") + P = new /obj/item/pipe_meter(T) else - var/obj/item/pipe/P = new(T, pipe_type = whatpipe, dir = user.dir) //Now we make the pipes + P = new(T, pipe_type = whatpipe, dir = user.dir) if(iconrotation == 0 && P.is_bent_pipe()) //Automatic rotation of dispensed pipes P.dir = turn(user.dir, 135) else if(iconrotation == 0 && P.pipe_type in list(CONNECTOR, UNARY_VENT, GAS_SCRUBBER, HE_EXCHANGER, SIMPLE_CAP, SUPPLY_CAP, SCRUBBERS_CAP, INJECTOR, PASSIVE_VENT)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction - call(P, /obj/item/pipe/verb/flip)() + P.flip() else if(iconrotation != 0 && P.is_bent_pipe()) //If they selected a rotation and the pipe is bent P.dir = turn(iconrotation, -45) else if(iconrotation != 0) P.dir = iconrotation - P.update() - to_chat(user, "[src] rapidly dispenses [P]!") + to_chat(user, "[src] rapidly dispenses [P]!") Activaterpd(1) - else if(mode == DISPOSALS_MODE) + else if(mode == DISPOSALS_MODE && !istype(T, /turf/simulated/shuttle)) if(istype(T, /turf/simulated/wall)) //No disposals pipes on walls to_chat(user, "That type of pipe won't fit on [T]!") return From b1666b4bbfddc86b27ea2af735bb05cc2e70cae7 Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Thu, 8 Jun 2017 22:59:28 +0200 Subject: [PATCH 049/378] fluff items for Birdtalon and Ssscratches --- code/modules/customitems/item_defines.dm | 20 ++++++++++++++++++++ icons/mob/back.dmi | Bin 103875 -> 104729 bytes icons/mob/inhands/fluff_lefthand.dmi | Bin 718 -> 775 bytes icons/mob/inhands/fluff_righthand.dmi | Bin 667 -> 723 bytes icons/obj/custom_items.dmi | Bin 76666 -> 77596 bytes 5 files changed, 20 insertions(+) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 6e414737b32..4cf9422c15d 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -112,6 +112,20 @@ else to_chat(user, "The [src] is out of ink!") +/obj/item/device/fluff/bird_painter // BirdtTalon: Kahkiri + name = "Orb of Onyx" + desc = "It is imbued with such dark power as to corrupt the very appearance of those who gaze into its depths." + icon_state = "bird_orb" + icon = 'icons/obj/custom_items.dmi' + +/obj/item/device/fluff/bird_painter/attack_self(mob/user) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.s_tone = -115 + H.regenerate_icons() + to_chat(user, "You use [src] on yourself.") + qdel(src) + /obj/item/weapon/claymore/fluff // MrBarrelrolll: Maximus Greenwood name = "Greenwood's Blade" desc = "A replica claymore with strange markings scratched into the blade." @@ -1002,6 +1016,12 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "voxcaster_fluff" +/obj/item/weapon/storage/backpack/fluff/ssscratches_back //Ssscratches: Lasshy-Bot + name = "CatPack" + desc = "It's a backpack, but it's also a cat." + icon = 'icons/obj/custom_items.dmi' + icon_state = "ssscratches_backpack" + /obj/item/clothing/head/wizard/fake/fluff/dreamy //phantasmicdream : Dreamy Rockwall name = "strange witch hat" desc = "A shapeshifting witch hat. A strange aura comes from it..." diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 1c4472d5299d1baba5f9ac0c8645d844b85af338..499d5ec1a0d0ddc9d23ada7a5eaaa86c80bc5e66 100644 GIT binary patch delta 20892 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 diff --git a/icons/mob/inhands/fluff_lefthand.dmi b/icons/mob/inhands/fluff_lefthand.dmi index 209f7660781e0df6989f1e6b491bbde22f616b0e..417ca1bb107325871934633390ec79ce29f3d223 100644 GIT binary patch delta 692 zcmV;l0!#hQ1&0QZ7Y=|30{{R3^x%>C0000~ktIxj003wJ0E#Ik{{R5b6fr@V00001 zbW%=J06^y0W&i*Hm3mZIbVOxyV{&P5bZKvH004NLg^xQ9gD?;UYx@)y^ih6onh1m_ z;0nl=7rYX9rS*p7_%TV5Dx#Z_<`u6r_qu6&Q+2IgffG_RH*-B4wR)nLkmYjLDgaJF zzLLa$3S=xiB$_i1&I-jsE03JEwN@kB1vWnYatjltN5qkM*^OT|N}xHyZt0NyKBL_t(|ob8w0a)K}rg|$scA>xV#)cXGK*-hF`MS}Su zj??jc7hz_1&)Fl!3s)-u001D!`t4~xZ|m=WGgoGYGR64#XWk1X2>X=U1ONa400000;J+fIJI6J9Na2}Y z?meBUm8hyZSj!>G zr{RdQYJ#;KqI`5y*L9{_w}3B^km2knx8&>Z}h-_eST)WgOL8%X(BxgdLZvRaMi&M@K|?D-yhO% zI_~#G#*m%~ply?SPS~Ztg0Q|NqwR9j8}B6`*U@gOP2L})7xo6&j5PDVnaK4G$&CFm zdhXMn{8!NRd)J>07!0sb4*&oF0001ZJx-_RTAx2J=LhYNvp!uek9q}>*3bSM3IG7$ awfF+YTN;K7Mnduc0000+n668y}^K2Q1nVxLEU7rFAOQ{p04=DXIJEF00000008_|ln&>z<`1nR)BC;GGmU=U7Ia+Sn;_;LnK6FoaU0jX z%OV z00020(+_7p&qN!2qR=0Dp?^w$8R>dE--tF6_y+f{G+u=JU+eq9P2|YUmY*^Gg)%2Y`m9Y?@#Ibk^2*ob7VIHSl^_H6OQGtAgv$BS-;#( zE_w+lbZnR!iudQ}mA?T#BW?U|CJKE=TChJy&waX5{0fHt6#AP1lL2<>0r=N^0Jc~d UEU>)#ng9R*07*qoM6N<$f|^t+WB>pF diff --git a/icons/mob/inhands/fluff_righthand.dmi b/icons/mob/inhands/fluff_righthand.dmi index d048ff860034d2af5d4f584f893efa3ecbaa45af..6d4f3a2c76bd8b6a964a258407612e36339becfd 100644 GIT binary patch delta 639 zcmV-_0)YLS1=9tP7Y=|30{{R3^x%>C0000~ktIxj003wJ0E#Ik{{R5blu0&x00001 zbW%=J06^y0W&i*Hm3mZIbVOxyV{&P5bZKvH004NLg^xQ9gD?;UYx@)y^ih6onh1m_ z;0nl=7rYX9rS*p7_%TV5Dx#Z_<`u6r_qu6&Q+2IgffG_RH*-B4wR)nLkmYjLDgaJF zzLLa$3S=xiB$_i1&I-jsE03JEwN@kB1vWnYatjltN5qkM*^OT|N}xHyZt0NyKu z+N4zKnFk}m+1U*?52-2u005wX!!bE}JmfupTj{@CxinWSyY?)v|I+;@Ou*{@^L{b* z@>~Dd{k&hZUH_c+1$EnbazBNAc+Rxx)|X-f&-+{T0000000000c18F_inOe}SL92U zoKhtf3zu7L#F2zfU#nA!T~_-}L6##4q)Kb2)LJDB;A2%4W;v2T`YN=RTDxn0mLmy& zr1GmaX$vA*jwF=U($%^(Wq?SQBMGhkXuH#s^cBRi97#Z}lu)WJ%W@=h8aKIAO<9&B znPZx|t{YR9x!H*l z{#wg>xIi+;y*j#3+UXIoFh>Fa00000002vj(VSol1Sf$)>3PKt@zS(2EMoDFquamS^(FiR36!shud*@+51t>r!3Ac^sR9bKvH^oU%TBLM(>^9c*+ V7$c!Fdkz2q002ovPDHLkV1jq`4P5{L diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index 639bedfde29645660ef809ff73a814f332d67c24..b5f06ca47451e41220b9a7dfb49b803e811fd0e1 100644 GIT binary patch delta 18109 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 From 6bff5d59f7f228e5d7dd529354e2a83fbafcc0b1 Mon Sep 17 00:00:00 2001 From: Citinited Date: Fri, 9 Jun 2017 16:14:50 +0100 Subject: [PATCH 050/378] Minor tweaks --- code/game/objects/items/weapons/rpd.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index eea9ee86f72..647b8402f2d 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -42,7 +42,6 @@ materials = list(MAT_METAL = 30000, MAT_GLASS = 5000) origin_tech = "engineering=4;materials=2" var/datum/effect/system/spark_spread/spark_system - var/cooldown //Waiting for something to complete? var/lastused var/iconrotation = 0 //used to orient icons and pipes var/mode = 1 //Disposals, atmospherics, etc. @@ -233,6 +232,7 @@ var/list/pipemenu = list( if(istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter) || istype(W, /obj/item/pipe_gsensor) || istype(W, /obj/structure/disposalconstruct) && !W.anchored) QDEL_NULL(W) eaten = TRUE + ..() if(eaten) to_chat(user, "[src] sucks up the loose pipes on [T].") Activaterpd() From 16acae31068b2e918227b7e4869c20453ed2ccc0 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 10 Jun 2017 03:15:02 -0700 Subject: [PATCH 051/378] Ports Job Priority System MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This system allows the HoP to set up to 3 jobs as 'priority' jobs via the ID console. Priority jobs are highlighted in green to everyone who is late-joining. This allows the HoP to actively encourage late-arriving crew to take jobs the station needs, avoiding departments/roles being critically short-handed. ![](https://preview.ibb.co/esEEDF/job_priority_example.png) 🆑 Kyep add: HoPs can now set jobs as 'priority'. Priority jobs are highlighted on the latejoin screen. This allows HoPs to proactively broadcast that they need more people to fill those jobs - and reduces the chance of critical crew shortages. /🆑 --- code/game/jobs/job_controller.dm | 2 ++ code/game/machinery/computer/card.dm | 36 +++++++++++++++++++-- code/modules/mob/new_player/new_player.dm | 12 +++++++ nano/templates/identification_computer.tmpl | 1 + 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 82238f732b9..7179c5340cf 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -10,11 +10,13 @@ var/global/datum/controller/occupations/job_master var/list/occupations = list() var/list/name_occupations = list() //Dict of all jobs, keys are titles var/list/type_occupations = list() //Dict of all jobs, keys are types + var/list/prioritized_jobs = list() // List of jobs set to priority by HoP/Captain //Players who need jobs var/list/unassigned = list() //Debug info var/list/job_debug = list() + /datum/controller/occupations/proc/SetupOccupations(var/list/faction = list("Station")) occupations = list() diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index a6c072fec60..a749096dbb3 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -86,7 +86,9 @@ var/time_last_changed_position = 0 "current_positions" = job.current_positions, "total_positions" = job.total_positions, "can_open" = can_open_job(job), - "can_close" = can_close_job(job)))) + "can_close" = can_close_job(job), + "can_prioritize" = can_prioritize_job(job) + ))) return formatted @@ -165,6 +167,18 @@ var/time_last_changed_position = 0 return -1 return 0 +/obj/machinery/computer/card/proc/can_prioritize_job(datum/job/job) + if(job) + if(!job_blacklisted(job) && job_in_department(job, FALSE)) + if(job in job_master.prioritized_jobs) + return 2 + else + if(job_master.prioritized_jobs.len >= 3) + return 0 + return 1 + return -1 + + /obj/machinery/computer/card/proc/job_in_department(datum/job/targetjob, includecivs = 1) if(!scan || !scan.access) return 0 @@ -488,7 +502,25 @@ var/time_last_changed_position = 0 opened_positions[edit_job_target]-- log_game("[key_name(usr)] has closed a job slot for job \"[j]\".") nanomanager.update_uis(src) - + if("prioritize_job") + // TOGGLE WHETHER JOB APPEARS AS PRIORITIZED IN THE LOBBY + if(is_authenticated(usr) && !target_dept) + var/priority_target = href_list["job"] + var/datum/job/j = job_master.GetJob(priority_target) + if(!j) + return 0 + if(!job_in_department(j)) + return 0 + var/priority = TRUE + if(j in job_master.prioritized_jobs) + job_master.prioritized_jobs -= j + priority = FALSE + else if(job_master.prioritized_jobs.len < 3) + job_master.prioritized_jobs += j + else + return 0 + log_game("[key_name(usr)] [priority ? "prioritized" : "unprioritized"] the job \"[j.title]\".") + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) if(modify) modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])") diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 58c5ee4104d..a8276070ca0 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -362,6 +362,18 @@ else if(shuttle_master.emergency.mode >= SHUTTLE_CALL) dat += "The station is currently undergoing evacuation procedures.
    " + if(length(job_master.prioritized_jobs)) + dat += "The station has flagged these jobs as high priority: " + var/amt = length(job_master.prioritized_jobs) + var/amt_count + for(var/datum/job/a in job_master.prioritized_jobs) + amt_count++ + if(amt_count != amt) + dat += " [a.title], " + else + dat += " [a.title].
    " + + dat += "Choose from the following open positions:

    " var/list/activePlayers = list() diff --git a/nano/templates/identification_computer.tmpl b/nano/templates/identification_computer.tmpl index da24f3c0e77..d7696b8630e 100644 --- a/nano/templates/identification_computer.tmpl +++ b/nano/templates/identification_computer.tmpl @@ -41,6 +41,7 @@ {{:value.title}}: {{:value.current_positions}}/{{:value.total_positions}} {{:helper.link('-', null, {'choice' : 'make_job_unavailable', 'job' : value.title}, value.can_close == 1 && data.authenticated ? null : 'disabled')}} {{:helper.link('+', null, {'choice' : 'make_job_available', 'job' : value.title}, value.can_open == 1 && data.authenticated ? null : 'disabled')}} + {{:helper.link('*', null, {'choice' : 'prioritize_job', 'job' : value.title}, value.can_prioritize > 0 && data.authenticated ? null : 'disabled')}} {{if value.can_prioritize == 2}}Priority Job {{/if}}
    {{/for}} From c371c2bee241cee16e5737c72aae73a8ce28b80f Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 10 Jun 2017 13:13:28 -0400 Subject: [PATCH 052/378] inital commi --- code/modules/clothing/head/jobs.dm | 15 +++++++++++++++ code/modules/clothing/suits/jobs.dm | 24 ++++++++++++++++++++++++ icons/mob/suit.dmi | Bin 429259 -> 431579 bytes icons/obj/clothing/hats.dmi | Bin 100526 -> 101513 bytes 4 files changed, 39 insertions(+) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 9c76701c2bb..5fff5ca3b7d 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -54,6 +54,21 @@ flags = BLOCKHAIR flags_cover = HEADCOVERSEYES +//Chaplain +/obj/item/clothing/head/monk_hood + name = "monk hood" + desc = "Wooden board not included." + icon_state = "monk_hood" + flags = BLOCKHAIR + flags_cover = HEADCOVERSEYES + +/obj/item/clothing/head/witchunter_hat + name = "witchunter hat" + desc = "This hat saw much use back in the day." + icon_state = "witchhunterhat" + item_state = "witchhunterhat" + flags_cover = HEADCOVERSEYES + /obj/item/clothing/head/det_hat name = "hat" desc = "Someone who wears this will look very smart." diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 0ccdf7027d3..9098abed686 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -101,6 +101,30 @@ "Vox" = 'icons/mob/species/vox/suit.dmi' ) +//Chaplain +/obj/item/clothing/suit/hooded/monk + name = "monk robe" + desc = "Wooden board not included." + icon_state = "monkrobe" + item_state = "monkrobe" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS + flags_inv = HIDESHOES|HIDEJUMPSUIT + hoodtype = /obj/item/clothing/head/monk_hood + allowed = list(/obj/item/weapon/storage/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen) + +/obj/item/clothing/suit/witchhunter + name = "witchunter garb" + desc = "Dosen't weigh the same a a duck." + icon_state = "witchhunter" + item_state = "witchhunter" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + allowed = list(/obj/item/weapon/storage/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen) + + //Chef + /obj/item/clothing/suit/toggle/chef + name = "chef's apron" + + //Chef /obj/item/clothing/suit/chef name = "chef's apron" diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 03c1180b1dcbc9e4cd149fee709c48377de3db7d..9d75c4af8801857d4823f37bc3da9e286771d882 100644 GIT binary patch delta 14734 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 delta 12355 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 R{PPP)S^kY&xr~wj{{h27qU8Vp delta 7972 zcmXY0Wk6NW)4t@TLAnHyM!FlMq&uZi8tJYBQX(xNNOyO4htl2M-5rh-EQ|(F7PqNQfX1h&Xg269fYH#!zzr!=b`@vXRO6*IpHuT;yZLSKM%d zc1OzZB~^z)rVRn${=w(^esT6u$odzdW>m3KyU5b2f{9bRr{42@|Fiz+#I*;6)^wl+ z`Yxr&dvzqZyLxh3V)0q1Ea|bi^w;kFDaT<5do1>@>saFa*U(IjeOv6>(0`RacX$qJ zxOM=YHj4UAqO*}!-FUF&=)z54M#~p6Z5UPm?fD8vTl&Yu;4}?+SZb0_X5ebdfP&7> zXoaiNOp4e*S&b#z-V7=4LMymq%#1j3T7MntIJc{kJ<29{A9;;I<=fm46>vydA6h*{ z5iQv2*PG}RX(l+i7E=#(_F6CYVvm{n zzmC4Rxf99ku(u!q_GV$Juo!w<|9YWc$20#}S)b;8vr9UXc-fm}(qv+kB1z~@nqoe3 zgrj{nM*I-Y>X=t%zB_1>6P`vlZZ|>4dlv<_;$pm5n1BW!gP>#sa&?r(3X2tIVhskA zZ{WoRm}&8YUG+xZp`iy4c*JB}f?on7sAJbUP-XJYVT2Q7-yVH_PWOBtxy|W+= zuIeNTxNP5+05@<(uj9+RDkud|A~WGK$dBrRu&X!6I4H;q*d(s>^;5>ERwRz$y@Cqh z>a6jxRyiFOdc>6)hvAQ$BXC3`S||XpP1m@oJ7zd@y-)aWzoFG|<}Y5R@_Y~Q2*6<6 zj4Bs&X!|RkURj49+s>+u+9_zZBnHsI3W*GoyOS~_v z*!G_rQNp%(Db;3KPo=qwQPQ>pEpI+)8~Q{z*A+hmhH#+-qEC&Ij>97{cw(}XIDD|_ z#Hqs$qE%-cD79fD4X}?DYCC>6$NZ)kV}(ofPJR=qILNyKVX!400^4v8??VP|qmMOV zYXT_?gD@azLl}ZlBXmcdR z)(2zoR2VJH#utJL_`zsu0)!cA-gU4mvm)K<6j6I2hp(FDQ{K#-Ld1Ep)h3TipPl_? zz90jxq?ad6tr0747GCFC5Ihp1JU8FDpGHNKQD583Edo{ZoJ*uX(;zV7bQ7l&L^|a3 z6DDYqV$Lz$*UV}3AoF$)QDwk8KGEAVBtp5oBnr7RjW;u5JfF=JCdm%<7L3-Gz~j@@ zUVXGz;i<<(o*XsYKl_=EoyjI2O)rV@>|LgJL`{XX;O8;JyCS2Mc^SkLLD!E>WGz4R zw1>P=!xO)L$ZAG^p7m^Ix9>}DC8KjjM3RAS;hW!P$Wxo4p zY5jc2fGkt4y=^7lbLRhkHh(3iEc{2Xn9pe0bW|rBl;VEWb%4|r9}x9rqss1q?fP#T zI(Ayc&lia<)N@r8gV5;s!F~n8&SpPWE0Z3SL26;{<;sq~oxJ8i<(L$2_L(Ljo#2;K zHZ1lf_OXtn=P^PQ6XaJ~bny770%i4^>7Xd27n zDcZWKPbKgi7WAbXCY;`^$YTEDO88o>7o`BUs6?0H*m z)42|gw|(os_>?vUe&Z0i;O9?DYXipJ)pcVPnZMz?2`OGW)Wx3TnD#wRvYlRS_(zJ$w>MDj(-Nq5M?_9xLWpum>h$YsV^-y5DcaGh*5 zYiFh3Ug)@$w-A#o`^nbUek*SxCRvxXvCw%dZy<(zhGeFvsrVw+bGZ9+SCq;`t##`x zsi07SSPr&7Jk$GB%!o8G-IY|!w^V}hx>TWJG&#SdrFi|S9S9ipu-a$h2W%zYs6z5%7I48yVm#pyl zBdij_9BYU7vqA#xh{HF*77_DjOw=KYzLF^LjrBEa0Dl{`WM07v?)TXdJFA$(pITiH zT#f%2Q`tjmsY_P`>vg_rmZmxjt#O}P59-q1eyJ$oh9wwW8=Fe>L=mX^dp6$%tETHU zPl5bkkhO_+lXUY}zo%#9y^=wL>!#ESKkU)HEKK5hfl8eVCLanznt$rD7AIsM33-H6 zvGwaw2%sDrI5Y?PON8*rg&BTN$*_!SAwD(<6(*!iuSx&xxf51rG6=*6&+LFK`q70# z)Yr-*6z=+lYCcX)nw58G&QngH1H9FkZ$pZG;p+(U-MWm0tJwARl$DlFV>!wc+Y8^g z1(^^g8OV&gI7Cf)XD*pDG(AnK{& z;qh^Ide_eI^aVVy+$U47j#eIkh*Xb=1QTotq=sneFME&zFDJi!Fp-gUD5~-zziSV& zn{^bTXlp5VAoR{;ZD?QZZ^|#qa0uV*TYU03@?&DMDt`CVg%oj){kO`@Aq@~_9v*_fj)2VH=e9Ij%v*>rPrK6y^&stT$|~Qd$UE{7j;CSoJq6Qd z;49I%O-?q%59l;!qQOyG*kU%84^!+liRk+kxBK$c7TBRI*P0@yG)nl07MS3F&o zFj788H-E^}Ot&M7R)86WgHuZHTCJaax=KcmQ*{?4lc&K+%5!OaLviNhd0=x4T!^G! z>DQ4Quh#6_i4rcpl&00JuG?Sb7JSqJd~;Cs>`>ovaRv4DP(k2EEVUnaiaEaTVNE*A+IdgjCK$=&HRITu#V+d##iZG^F;UGj(FGpSZq zRyHi#YLFwnp$?6*GVIDe*&Y9 zn4)6j`Y}4G?S1zl`DM3m9{QXjZk`awdE}~~k$}Ho+sosV$&eRZ9nRkcw|28muGP?j zTM_$)+qPA{yXUBEL>t;@^ljU+4^?P$itnst@lXeAU>1>cGM6QR&*3f|uCVvp)xdfJ z=JFED@vQjTeVtEOL_}^@*87rmrBejXX&ZQ6Yb8CSQC;3{!?V=(b;g$z7%cD3+?*VV z;Z%WyLbZI?;;wY>3*^Jua?C~2hEHT361Da9PV*IYmxzV0(Ry)vpH@&nm*%naM;Jkr zcM`JP?B;Z}rvm&83o9%t%Bro!YhE5{apN(Wkauq(1IiO8_o?n9+6~5z$>q0EDFV-s zYbm9Hz;^#Uma`IY=iJhgX!ebb&-SvDp)Sx!?Ezdwq6w;NOBDyVyaVW+h@<_bMISpE^Lb}xoR@qTvR z^?}tBnef>RO$f<~?N90nqU*6C9AQ01hJkMZg$3^Hb zxN$0f$sn(y0;jJ}5r}2-m#Cl?a%IGInVBzupiCeta`fVr_rxQPxV93vdJNjLurr5x z-@;Ba2*|Hu+fKKZKZvi3vRB>GQwXPhTdV`vtkmCJU(^026;6qZ!(C}Pk;<~+{;aF( zz?%|ICX|$vWaa*>Kw0FV2)F#mJ@&d1SW@i#d)Mao%b$@v4`)gjB3atE;?r%i9BM-} zZrctPpT$@4widDG8Wy@gh|EhE*p^Xrr>`Z)*4r*OMI-aNrm(d}>DJp$@382JDgrl1 zMa5C}56%L$wY5_-GaJsl1!ZLv+{}?JPl9a^7jnKgm+6>=H<)=BL0Do)<8I4Ia0MUe z=~ejn_|#bPxepy*r#3mFIkPPPkvts@y;EgdA2xVOEgB(F&d~TRn88SUo zESecMC}=MTN|=gx5&YG>s}J}Gib5q55JOd5MUz1;!up)53M0X%&u#x>;Jz|C1|}q} z&J|)o1q`d=t_ColiU%5pUUA#nz}zy9TtlOr@uv~w*<;OVewLF!wAFz#L%pak^Khc>hHS8x=mj=w}AU) z)Hoh9QE)cFry5D=#VrQ4QvtuhlDGJ#Ab2r ziRA9FkMHs?k$h}sMk=H@G%=Bo0Vux3BH;?(&ee@m5${~yHx3Il)*gMh9uRaZtMkLAO3^qD8meSB#?1$~X21w7KNiyO?L(<)y`@(_}77mWMJ|IqAnjaO? z?3)@$>?^c*82lM2MO&xP6&KfnEzRZUsL|<6l=Q_?VV!N|W+T5^j8EX=LWrf7qF{;e z99xy)f`OrvRs!pa`Z3H})@dv03_t19<1xxR>e;1jJM z3{5O@EPJMJwYoou21$CFr<6VwZg;Ghm&{H5Ywzkb2kH|n{! zl93+ggS1};P>q@FPM(_aMAhXr;3e%k2+*vvceDj`D0Njt5OVH&7knfapknNPlvf8{{ zumKLYJ~c3j{HAtu#N^$U8KLi@IKg9+QMUPxgj-MI3B6MO?@~#bb1xhvdhsWty}{vH z7ryjl)NkL&xXV(DcNn$Fe;bOC%#LWx8l;PQd(WPMmGyn{6xWdgJnzC3WH;tDUPw0Z zLISL@Hn{LWf;H~J0HA2ZE4H>l9mU|cm#AIVXiLUjj8MO*Af*YTa6O&Ki9@pD89_Zb zFy*9_5WM|tSXCnbr*vG;ty{2VKu*?^*`+pKn-M>SnFo{c(QSI%m)LK5^to?r?ajaA z*#JW`Gqe0PEoEg;hXT(sd?2SagBB#bl!}uiF98_Z}zZRLE{@Buc0!it3-- z=ZdkXwFeIGuGE;*z4_9C`M%CP4BLXo@04%B9tVXk&ZKadn=Cr zFg6#i;-CYF*}_%kEpa2HG0)jb2K%dvS9fdO+V-7~S3FCObhy@k(d)TfVSj4AzJR#;%Le*)or&vSv^}Iu^v6*Lo ziLOu?7#Mgu)@yRMY#()TY1Ctw+Jta^)2c+dZV<8YT1Un^sKgQ)FHRP1FX(+5 z?l7rz{)59crI5n;e(U_|YAr33)yobq>ZN~^aq$tixZrE2)}eMQO55j($W}>?wN{N_ z0MF;_w7xhF*C`)sW@cyq0%mLqm%rdT$alCpzA#-*hV3yV%*)Dj|2>z}Mu8&CN!YjM z(H7B5ea%UEKm3jC4_?zMFSTZhq|=934etN4t(FpDrJ|Vnz9<^ap7_{!?tbG}ht=`; z0=?s0wAa-(`jhHg2wF30f@&mhh44F?|mJ|=|dhSQM@~qFac~>NxLfx07={MLUNLm zUr&=*QFGI^xl)_)YYrZ<=Oy^g_M`z?Rjm5BFhfWYM+VbJ9#5Hho@k=qE=C2T`3uyM zbCnG3(W`Yl!qk+R=)!iC>$u>Sbc}0c=xD{-BVY*)M_*u)*+>7frs0JTM)7(O?6Buw z`N^&UTXnqP}MDHEw=ld+W za>o8SYGHFuv0Y!|Nq<9-F8%p4G3`-p4>i@Kx?TRWGs!>tLLXakM_GpH5LX-=lBjv& z!NQr?oZMW85-XPch0hg9c<0FU-c_b>1BVne%%QqxJ9|NK@#V{* zV`JR36;}(7$wHZlsba;NrOOw^3TM9C^WJ9k;s7!TXadKi!0y{^`r=I&&cV-S0AHt- zEla5h4|L7vgCk`Cpo$LC3n=E}MD>e{iNV^|lZ14C6gxU&zI+Ks3T#WO8*zfUyvQe6 zg(Jvl^QCHkTo$6Dp_!PN=!ycK1da4Sq-bJ671anFqlIVB9}oC)S^F)QQGU0gr{5;D z7VNh=anMFyfa{(P^Uod@)7kHTZW!omwU6w)4dIWUo;=I}Ot*~Klh54+C3Ldw1r`Za zSp9#~2xx3KkJ-bGId}c+#TPeId=qlxJyXmN=AYN@FF0S#J?~Mm!T=&>4|NY@j49gp zOt971`KG-|tLMLWZ})uVj{O}ox$78^Yr19slJZutvCc1j#q&pk2r*m1Lc7fgOq!l< z$Fq~`*-c1#Lep+pG%4c9^mcn%P&ty6CU`-gzbv<1f&P^~_ z*u5ZM;UQ-q@@BmxK|c#=TRYo@u92|A&hAQlGA$i&An45s7?vNNO_Yhd5)6?JodUWP( zpv|vptfQq(8O?|6A9;Cs6}KpD&@0)^9;H%YXzV*7p$dW%*4LBMa;tP2H0AaJAgQ;x zH5+f+%{9a{lQrUJ!8DCrhNZD1^tsPf7{i4kIE5F$jJS_npor|1fed*%DNqhf-1H zs%hzd>|bAYUt+Fu>^Cl_r)8!G&~e6Q7DT^o^HAlRUDffnZ%v_DeQ58r341ThhR$MN z)abv?CrL`b>OXHn%}dzPAA~B+HT9&nHc~oA^1pU?Un5Y6;phuUEkbqgoBV#PMabvb3U>s=6_^w^Goy` zQ`iu1=gGmKC0-5}+w%a;{}lIUNu)%-GZb(~){1GbaQT z;q*(7{_V60&1$TSZ2A(SBI+d0ROxWOc5PCn-R=14;9%D`d-=K>P;qbN<^K$=An4V- zJ0H~k{E(CGwu;Cr@+LS(M%FG>AuZ>}3dVPHZ8-o%m6MIM5VhU9%?qw77pUgJd}}vI zc*es38F-1r<^fG-H6k1wv0TBAIQak z==bwk0H~CdtlSC0GcN7#Y9?1!3<>CBOMqQ-tWk3-AqB)-OKGwSc@Y{?Vr51Bg$f$F2hF1`tzdu0mN`(5VI)p1x)=5lm9- znE*q>5Wq#i?L-~KVKxLBS$+g(g!Hswya0$z7x9&CMlO<^V~w|%XPD2P!S_EoflYzc zgmuGZxpq$p7`?dZR=!eC>7$V|I~f@naw{5U=VcVXHB|pl2c5)WGe&&F{!A!b!q1;n zSI1qV`GF=j6pFQ29S%I2(kFK4e|%55=jxYhI`RZ%Nc4Q}t`PLJLcGRLg= z?loHuX;-!%(iEwqLf|f%&hPSFcorV0+|^jJWSN2 z>q@iBSaY#wU~CYjem&f~ltv;dfy?)t3f;%9n~sgp4h0$l#kvRE@6j%xkVp|Br|cvl zo|rtVQNG<9BBCd;X?otH{j0|B^o?dKI;$qysaIHpq=?<$&VPNz|&G^Ci+DK&v>vhigO~3UNMgRTVl0r{+JXHaJ7d;DlS3mesSB{b<79oEUnrzWD zt=(;%_riMR$TXM}!ftL{ZMaDc%9HPU)EQ?ADuU9b?b@-VVnBrR|G^^9c%UGxE+lLa z4pdj&cO0?16U3QQH2hcKg(^Wg90phDhj29CE5^bs0mV!RPITWx|8?WaNPJX(MPS~C h!@t5NVn2{BUyPJ7!q`%+FQI&pjHIGOnV8Y{{{uUup&bAK From 5e5c1c4238f9e590973a6608d24847cecf319a88 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 10 Jun 2017 13:47:16 -0700 Subject: [PATCH 053/378] Makes pri jobs green in the latejoin list --- code/modules/mob/new_player/new_player.dm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index a8276070ca0..5a52ccf8c9e 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -363,7 +363,7 @@ dat += "The station is currently undergoing evacuation procedures.
    " if(length(job_master.prioritized_jobs)) - dat += "The station has flagged these jobs as high priority: " + dat += "The station has flagged these jobs as high priority: " var/amt = length(job_master.prioritized_jobs) var/amt_count for(var/datum/job/a in job_master.prioritized_jobs) @@ -422,7 +422,10 @@ dat += "
    " dat += "[jobcat]" for(var/datum/job/job in categorizedJobs[jobcat]["jobs"]) - dat += "[job.title] ([job.current_positions]) (Active: [activePlayers[job]])
    " + if(job in job_master.prioritized_jobs) + dat += "[job.title] ([job.current_positions]) (Active: [activePlayers[job]])
    " + else + dat += "[job.title] ([job.current_positions]) (Active: [activePlayers[job]])
    " dat += "

    " dat += "" From ae5ac9c247c968ca8a111973a28f4df195e72180 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 10 Jun 2017 17:46:06 -0400 Subject: [PATCH 054/378] Fixes a few more Simple Mob Speeds --- code/game/gamemodes/miniantags/revenant/revenant.dm | 1 + code/game/gamemodes/miniantags/slaughter/slaughter.dm | 2 +- code/modules/mob/living/simple_animal/constructs.dm | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index ca9e7b7ac28..338484a5ebc 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -35,6 +35,7 @@ anchored = 1 mob_size = MOB_SIZE_TINY pass_flags = PASSTABLE | PASSGRILLE | PASSMOB + speed = 1 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) var/essence = 75 //The resource of revenants. Max health is equal to three times this amount diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 8fbc0563181..25ebd7bc379 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -83,7 +83,7 @@ /mob/living/simple_animal/slaughter/Life() ..() if(boost Date: Sat, 10 Jun 2017 19:27:45 -0400 Subject: [PATCH 055/378] ta-dah --- config/example/game_options.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/example/game_options.txt b/config/example/game_options.txt index 549633d6a2d..7246e0773fa 100644 --- a/config/example/game_options.txt +++ b/config/example/game_options.txt @@ -48,7 +48,7 @@ ROBOT_DELAY 1.5 MONKEY_DELAY 1.5 ALIEN_DELAY 1.5 SLIME_DELAY 1.5 -ANIMAL_DELAY 1.5 +ANIMAL_DELAY 2.5 ## Comment for "normal" explosions, which ignore obstacles ## Uncomment for explosions that react to doors and walls From 9b0db44f47983c57fefaa6b39a6962dcc427fdc4 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 10 Jun 2017 22:36:49 -0400 Subject: [PATCH 056/378] fix --- code/modules/clothing/suits/jobs.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 9098abed686..f28c87109fc 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -120,8 +120,9 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS allowed = list(/obj/item/weapon/storage/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen) - //Chef - /obj/item/clothing/suit/toggle/chef + + //Chef +/obj/item/clothing/suit/toggle/chef name = "chef's apron" From dd22ea04154ca87edc46497d4156cd6bb85ef33a Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 10 Jun 2017 22:53:13 -0400 Subject: [PATCH 057/378] missed icons --- .../crates_lockers/closets/secure/chaplain.dm | 3 +++ icons/mob/head.dmi | Bin 232810 -> 233507 bytes icons/mob/suit.dmi | Bin 431579 -> 431717 bytes icons/obj/clothing/hats.dmi | Bin 101513 -> 101053 bytes icons/obj/clothing/suits.dmi | Bin 136816 -> 137455 bytes 5 files changed, 3 insertions(+) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm b/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm index 7c58f4a2b1a..26272d66ac2 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm @@ -15,6 +15,9 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/suit/hooded/nun(src) new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) + new /obj/item/clothing/suit/hooded/monk(src) + new /obj/item/clothing/suit/witchhunter(src) + new /obj/item/clothing/head/witchunter_hat(src) new /obj/item/clothing/suit/holidaypriest(src) new /obj/item/clothing/under/wedding/bride_white(src) new /obj/item/weapon/storage/backpack/cultpack (src) diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 3764c64aa50e80d85cdd4dc94e5d8b14a2ad8c70..f25715b9220050bed14f3b4d7e48190cb49baa02 100644 GIT binary patch delta 22951 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 diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 9d75c4af8801857d4823f37bc3da9e286771d882..ab9763b0c18bfd1e94910a418bbf59347cbd3465 100644 GIT binary patch delta 12551 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 delta 12437 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 aMiR!U2t8*Oi_wID9|f5=(p8d%0sjxXHih&6 diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 1fdb472d2119bb7979d02abfc00a174970758e1e..5c34785d51e1a4ae749b6f9c291e7c62c05e34b5 100644 GIT binary patch delta 8568 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 M54!?W< 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 delta 23496 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 DvTLx? From 70bf8076c35a210ac294af03d785c412adb0ae26 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 11 Jun 2017 02:58:50 -0400 Subject: [PATCH 058/378] Spiderbot Rework --- .../simple_animal/friendly/spiderbot.dm | 249 +++++------------- 1 file changed, 68 insertions(+), 181 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index bc75bd554e5..3201d95a51e 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -1,53 +1,52 @@ /mob/living/simple_animal/spiderbot - - 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) - minbodytemp = 0 - maxbodytemp = 500 - - var/obj/item/device/radio/borg/radio = null - var/mob/living/silicon/ai/connected_ai = null - var/obj/item/weapon/stock_parts/cell/cell = null - var/obj/machinery/camera/camera = null - var/obj/item/device/mmi/mmi = null - var/list/req_access = list(access_robotics) //Access needed to pop out the brain. - name = "Spider-bot" - desc = "A skittering robotic friend!" + desc = "A skittering robotic friend!" //More like ultimate shitter icon = 'icons/mob/robots.dmi' icon_state = "spiderbot-chassis" icon_living = "spiderbot-chassis" icon_dead = "spiderbot-smashed" wander = 0 universal_speak = 1 - health = 10 - maxHealth = 10 + health = 40 + maxHealth = 40 + melee_damage_lower = 2 + melee_damage_upper = 2 + melee_damage_type = BURN attacktext = "shocks" - attacktext = "shocks" - melee_damage_lower = 1 - melee_damage_upper = 3 + attack_sound = "sparks" response_help = "pets" response_disarm = "shoos" response_harm = "stomps on" - - var/obj/item/held_item = null //Storage for single item they can hold. - var/emagged = 0 //IS WE EXPLODEN? - var/syndie = 0 //IS WE SYNDICAT? (currently unused) - speed = -1 //Spiderbots gotta go fast. - //pass_flags = PASSTABLE //Maybe griefy? + speed = 0 mob_size = MOB_SIZE_SMALL speak_emote = list("beeps","clicks","chirps") + + 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) + minbodytemp = 0 + maxbodytemp = 500 + can_hide = 1 ventcrawler = 2 loot = list(/obj/effect/decal/cleanable/blood/gibs/robot) del_on_death = 1 -/mob/living/simple_animal/spiderbot/attackby(var/obj/item/O as obj, var/mob/user as mob, params) + var/emagged = 0 //is it getting ready to explode? + var/obj/item/device/mmi/mmi = null - if(istype(O, /obj/item/device/mmi) || istype(O, /obj/item/device/mmi/posibrain)) +/mob/living/simple_animal/spiderbot/Destroy() + if(emagged) + QDEL_NULL(mmi) + explosion(get_turf(src), -1, -1, 3, 5) + else + eject_brain() + return ..() + +/mob/living/simple_animal/spiderbot/attackby(obj/item/O, mob/living/user, params) + if(istype(O, /obj/item/device/mmi)) var/obj/item/device/mmi/B = O - if(src.mmi) //There's already a brain in it. + if(mmi) //There's already a brain in it. to_chat(user, "There's already a brain in [src]!") return if(!B.brainmob) @@ -65,47 +64,49 @@ ghost_can_reenter = 1 break if(!ghost_can_reenter) - to_chat(user, "[O] is completely unresponsive; there's no point.") + to_chat(user, "[B] is completely unresponsive; there's no point.") return if(B.brainmob.stat == DEAD) - to_chat(user, "[O] is dead. Sticking it into the frame would sort of defeat the purpose.") + to_chat(user, "[B] is dead. Sticking it into the frame would sort of defeat the purpose.") return - if(jobban_isbanned(B.brainmob, "Cyborg") || jobban_isbanned(B.brainmob,"nonhumandept")) - to_chat(user, "[O] does not seem to fit.") + if(jobban_isbanned(B.brainmob, "Cyborg") || jobban_isbanned(B.brainmob, "nonhumandept")) + to_chat(user, "[B] does not seem to fit.") return - to_chat(user, "You install [O] in [src]!") + to_chat(user, "You install [B] in [src]!") user.drop_item() - src.mmi = O - src.transfer_personality(O) + B.forceMove(src) + mmi = B + transfer_personality(B) - O.loc = src - src.update_icon() + update_icon() return 1 - if(istype(O, /obj/item/weapon/weldingtool)) + else if(iswelder(O) && user.a_intent == INTENT_HELP) var/obj/item/weapon/weldingtool/WT = O + user.changeNext_move(CLICK_CD_MELEE) if(WT.remove_fuel(0)) if(health < maxHealth) - health += pick(1,1,1,2,2,3) - if(health > maxHealth) - health = maxHealth + adjustHealth(-5) + playsound(loc, WT.usesound, 50, 1) add_fingerprint(user) - for(var/mob/W in viewers(user, null)) - W.show_message(text("[user] has spot-welded some of the damage to [src]!"), 1) + visible_message("[user] has spot-welded some of the damage to [src]!") else to_chat(user, "[src] is undamaged!") else to_chat(user, "Need more welding fuel!") - return - else if(istype(O, /obj/item/weapon/card/id)||istype(O, /obj/item/device/pda)) + else if(istype(O, /obj/item/weapon/card/id) || istype(O, /obj/item/device/pda)) if(!mmi) to_chat(user, "There's no reason to swipe your ID - the spiderbot has no brain to remove.") return 0 + if(emagged) + to_chat(user, "[src] doesn't seem to respond.") + return 0 + var/obj/item/weapon/card/id/id_card if(istype(O, /obj/item/weapon/card/id)) @@ -117,63 +118,38 @@ if(access_robotics in id_card.access) to_chat(user, "You swipe your access card and pop the brain out of [src].") eject_brain() - - if(held_item) - held_item.loc = src.loc - held_item = null - return 1 else to_chat(user, "You swipe your card, with no effect.") return 0 else - if(O.force) - var/damage = O.force - if(O.damtype == STAMINA) - damage = 0 - adjustBruteLoss(damage) - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("[src] has been attacked with the [O] by [user]. ") - else - to_chat(usr, "This weapon is ineffective, it does no damage.") - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("[user] gently taps [src] with the [O]. ") + ..() -/mob/living/simple_animal/spiderbot/emag_act(user as mob) +/mob/living/simple_animal/spiderbot/emag_act(mob/living/user) if(emagged) - to_chat(user, "[src] is already overloaded - better run.") + to_chat(user, "[src] doesn't seem to respond.") return 0 else emagged = 1 - to_chat(user, "You short out the security protocols and overload [src]'s cell, priming it to explode in a short time.") - spawn(100) - to_chat(src, "Your cell seems to be outputting a lot of power...") - spawn(200) - to_chat(src, "Internal heat sensors are spiking! Something is badly wrong with your cell!") - spawn(300) - src.explode() + to_chat(user, "You short out the security protocols and rewrite [src]'s internal memory.") + to_chat(src, "You have been emagged; you are now completely loyal to [user] and their every order!") + add_logs(user, src, "emagged") + maxHealth = 60 + health = 60 + melee_damage_lower = 15 + melee_damage_upper = 15 + attack_sound = 'sound/machines/defib_zap.ogg' -/mob/living/simple_animal/spiderbot/proc/transfer_personality(var/obj/item/device/mmi/M as obj) - - src.mind = M.brainmob.mind - src.mind.key = M.brainmob.key - src.ckey = M.brainmob.ckey - src.name = "Spider-bot ([M.brainmob.name])" - -/mob/living/simple_animal/spiderbot/proc/explode() //When emagged. - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("[src] makes an odd warbling noise, fizzles, and explodes.") - explosion(get_turf(loc), -1, -1, 3, 5) - eject_brain() - death() +/mob/living/simple_animal/spiderbot/proc/transfer_personality(obj/item/device/mmi/M) + mind = M.brainmob.mind + mind.key = M.brainmob.key + ckey = M.brainmob.ckey + name = "Spider-bot ([M.brainmob.name])" /mob/living/simple_animal/spiderbot/proc/update_icon() if(mmi) - if(istype(mmi,/obj/item/device/mmi)) + if(istype(mmi, /obj/item/device/mmi)) icon_state = "spiderbot-chassis-mmi" icon_living = "spiderbot-chassis-mmi" if(istype(mmi, /obj/item/device/mmi/posibrain)) @@ -186,99 +162,10 @@ /mob/living/simple_animal/spiderbot/proc/eject_brain() if(mmi) - var/turf/T = get_turf(loc) - if(T) - mmi.loc = T - if(mind) mind.transfer_to(mmi.brainmob) + var/turf/T = get_turf(src) + mmi.forceMove(T) + if(mind) + mind.transfer_to(mmi.brainmob) mmi = null - src.name = "Spider-bot" - update_icon() - -/mob/living/simple_animal/spiderbot/Destroy() - eject_brain() - return ..() - -/mob/living/simple_animal/spiderbot/New() - - radio = new /obj/item/device/radio/borg(src) - camera = new /obj/machinery/camera(src) - camera.c_tag = "Spiderbot-[real_name]" - camera.network = list("SS13") - - ..() - -/mob/living/simple_animal/spiderbot/death(gibbed) - if(camera) - camera.status = 0 - - if(held_item) - held_item.forceMove(src.loc) - held_item = null - ..() - -//Cannibalized from the parrot mob. ~Zuhayr - -/mob/living/simple_animal/spiderbot/verb/drop_held_item() - set name = "Drop held item" - set category = "Spiderbot" - set desc = "Drop the item you're holding." - - if(stat) - return - - if(!held_item) - to_chat(usr, "You have nothing to drop!") - return 0 - - if(istype(held_item, /obj/item/weapon/grenade)) - visible_message("[src] launches \the [held_item]!", "You launch \the [held_item]!", "You hear a skittering noise and a thump!") - var/obj/item/weapon/grenade/G = held_item - G.loc = src.loc - G.prime() - held_item = null - return 1 - - visible_message("[src] drops \the [held_item]!", "You drop \the [held_item]!", "You hear a skittering noise and a soft thump.") - - held_item.loc = src.loc - held_item = null - return 1 - - return - -/mob/living/simple_animal/spiderbot/verb/get_item() - set name = "Pick up item" - set category = "Spiderbot" - set desc = "Allows you to take a nearby small item." - - if(stat) - return -1 - - if(held_item) - to_chat(src, "You are already holding \the [held_item]") - return 1 - - var/list/items = list() - for(var/obj/item/I in view(1,src)) - if(I.loc != src && I.w_class <= WEIGHT_CLASS_SMALL) - items.Add(I) - - var/obj/selection = input("Select an item.", "Pickup") in items - - if(selection) - for(var/obj/item/I in view(1, src)) - if(selection == I) - held_item = selection - selection.loc = src - visible_message("[src] scoops up \the [held_item]!", "You grab \the [held_item]!", "You hear a skittering noise and a clink.") - return held_item - to_chat(src, "\The [selection] is too far away.") - return 0 - - to_chat(src, "There is nothing of interest to take.") - return 0 - -/mob/living/simple_animal/spiderbot/examine(mob/user) - ..(user) - if(src.held_item) - to_chat(user, "It is carrying \a [src.held_item] [bicon(src.held_item)].") + name = "Spider-bot" + update_icon() \ No newline at end of file From 4dd13f00749a43478ff246160e29db7ef2085a77 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 11 Jun 2017 03:12:44 -0400 Subject: [PATCH 059/378] tweak --- code/modules/mob/living/simple_animal/friendly/spiderbot.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index 3201d95a51e..bf648e537ab 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -34,6 +34,7 @@ var/emagged = 0 //is it getting ready to explode? var/obj/item/device/mmi/mmi = null + var/emagged_master = null //for administrative purposes, to see who emagged the spiderbot; also for a holder for if someone emags an empty frame first then inserts an MMI. /mob/living/simple_animal/spiderbot/Destroy() if(emagged) @@ -134,6 +135,7 @@ emagged = 1 to_chat(user, "You short out the security protocols and rewrite [src]'s internal memory.") to_chat(src, "You have been emagged; you are now completely loyal to [user] and their every order!") + emagged_master = user.name add_logs(user, src, "emagged") maxHealth = 60 health = 60 @@ -146,6 +148,8 @@ mind.key = M.brainmob.key ckey = M.brainmob.ckey name = "Spider-bot ([M.brainmob.name])" + if(emagged) + to_chat(src, "You have been emagged; you are now completely loyal to [emagged_master] and their every order!") /mob/living/simple_animal/spiderbot/proc/update_icon() if(mmi) From ef227542e0037fa240ff2a3f5e78a62926f7df23 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sun, 11 Jun 2017 21:03:21 -0400 Subject: [PATCH 060/378] typofix --- .../structures/crates_lockers/closets/secure/chaplain.dm | 2 +- code/modules/clothing/head/jobs.dm | 4 ++-- code/modules/clothing/suits/jobs.dm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm b/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm index 26272d66ac2..d7fdab50e5a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/chaplain.dm @@ -17,7 +17,7 @@ new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) new /obj/item/clothing/suit/hooded/monk(src) new /obj/item/clothing/suit/witchhunter(src) - new /obj/item/clothing/head/witchunter_hat(src) + new /obj/item/clothing/head/witchhunter_hat(src) new /obj/item/clothing/suit/holidaypriest(src) new /obj/item/clothing/under/wedding/bride_white(src) new /obj/item/weapon/storage/backpack/cultpack (src) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 5fff5ca3b7d..4a52555bf5f 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -62,8 +62,8 @@ flags = BLOCKHAIR flags_cover = HEADCOVERSEYES -/obj/item/clothing/head/witchunter_hat - name = "witchunter hat" +/obj/item/clothing/head/witchhunter_hat + name = "witchhunter hat" desc = "This hat saw much use back in the day." icon_state = "witchhunterhat" item_state = "witchhunterhat" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index f28c87109fc..5d200c9d4f8 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -113,7 +113,7 @@ allowed = list(/obj/item/weapon/storage/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen) /obj/item/clothing/suit/witchhunter - name = "witchunter garb" + name = "witchhunter garb" desc = "Dosen't weigh the same a a duck." icon_state = "witchhunter" item_state = "witchhunter" From 3e60634dc322182c8007eecebd3f00efb168cb37 Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 13 Jun 2017 02:41:45 -0700 Subject: [PATCH 061/378] Updates Gamma Ship --- _maps/map_files/cyberiad/cyberiad.dmm | 31 +++++++------- _maps/map_files/cyberiad/z2.dmm | 58 +++++++++++++-------------- code/modules/admin/admin.dm | 6 --- 3 files changed, 43 insertions(+), 52 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index f2be8c0e0d2..75a171a30f7 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -393,8 +393,8 @@ "ahC" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/security/permabrig) "ahD" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/security/permabrig) "ahE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) -"ahF" = (/obj/item/weapon/restraints/handcuffs/pinkcuffs,/turf/simulated/floor/plating,/area/security/permabrig) -"ahG" = (/obj/item/clothing/mask/muzzle/gag,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/security/permabrig) +"ahF" = (/turf/space,/area/shuttle/gamma/station) +"ahG" = (/obj/item/clothing/mask/muzzle/gag,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/space) "ahH" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/armoury) "ahI" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahJ" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) @@ -737,7 +737,7 @@ "aoi" = (/obj/effect/landmark/start{name = "Brig Physician"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) "aoj" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/security/medbay) "aok" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) -"aol" = (/turf/simulated/floor/plasteel,/area/shuttle/gamma/station) +"aol" = (/obj/item/weapon/restraints/handcuffs/pinkcuffs,/turf/simulated/floor/plating,/area/space) "aom" = (/turf/simulated/wall,/area/security/prisonlockers) "aon" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/medbay) "aoo" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/security/medbay) @@ -2610,6 +2610,7 @@ "aYj" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/bridge) "aYk" = (/obj/machinery/door/window/eastright{name = "Coroner Office"; req_access_txt = "5"},/turf/simulated/floor/plasteel,/area/medical/morgue) "aYl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) +"aYm" = (/turf/simulated/floor/plating,/area/space) "aYn" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aYo" = (/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes/stokcubes,/obj/item/weapon/storage/box/monkeycubes/neaeracubes,/obj/structure/table/glass,/obj/item/weapon/storage/box/monkeycubes/wolpincubes,/obj/item/weapon/storage/box/monkeycubes/farwacubes,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (SOUTHEAST)"; icon_state = "whitepurple"; dir = 6},/area/medical/genetics) "aYp" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/machinery/computer/card/minor/rd,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/crew_quarters/hor) @@ -9042,18 +9043,18 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNagkagjagmaglagoagnagqagpagragrafsagsagsaftagsagvabNaabaabaabaabaabaaaaaaaaaaabaaaafOafXafXafOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiCaiDaiEaiFaiGaiHagwahZagZahZagZahZagwaiIaiJaiKaiLaiDaiMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNagMagLagNagOagPagQafvafuafUafwafUafVafYafWagPagWabNaaaaaaaabaaaaabaabaivaivaivaivaaaafOafXafXafOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahJaiDahaahaahaajdagwahaahaahaahaahaagwahaahaajeahaaiDahMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNabNabNabNabNabNahjahkabNabNabNabNabNabNabNagtagtagtagtagtagtagtaaaaguaivagSagRaivaguaaaafOafXafXagUagTagTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwajzajAajBajCajDagwajEahaahaahaajFagwajGahaajHajIajzagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNagVahDahCabNahEaigacWahGahFabNaaaaaaaaaagtahHahRagtahTahSagtaaaaivahUahVahVahWaivaaaaaaafOafXagTahXahYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwajYajYagZagZagZagwajZahaahaahaakaagwagZagZagZajYajYagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaiaaicaibaieaidaitabNabNabNabNabNabNabNagtaifaijaiiainaikagtaaaaivaioaiqaipairaivaaaaaaaaaagTagTaisagTagTagTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsakpakpahnaaaaaaagwakqahaahaahaakragwaaaaaaahsakpakpahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQahQahQahQahQajJaiuabNaolaolaolaolaolaolagtaiwaiyaixannaizagtaivaivaiAaiNaiBaiOaivaivaaaaabagTaiQaiPaiSaiRagTaaaanHaiTaiVaiUanHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwakAahaahaahaakragwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQahQahQaiZaiXajfajaahQahEaigabNaolaolaolaolaolaolagtajgajiajhajlajkajnajmajpajoajrajqajLajKaivaaaajMagTajOajNajQajPanAanHanHajRajTajSanHanHaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwakRakPahZakRakPagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWajUakcakbakeakdakhakgahQakiaitalcaolaolaolaolaolaolajnakjanWakkannanWaklajjajjakmajjaksakwaktaivaabaabagTakCakxakEakDanAakFakGaoJaoJakHakJakIakvakKakMakLakNaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvalvalvalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwalxalyahaalzalAagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWakOakSakQakVakTalaakYaldalbaitaleaolaolaolaolaolaolagtalfalgakkalialhajnaljallalkalnalmakfakuaivanHanHanAanAanAanAaloanAalpalralqalualtalFalCalGaiYaiYaiYalHaihaihaaaaaaaaaajbajbajbajbajbajbajbalIalJaaaabpaaaaaaalvaaaaabaaaamhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwamiamjahaamkamlagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWalKalMalLalOalNalQalPahQalRalSalcaolaolaolaolaolaolagtagtalUalTapPagtagtalValWaivalYalXalZaivaivanHambamaamdamcamfameanAamgaoJammampamnalFamqamrajVamvamsamuamtaihaaaaaaaaaajbajsajtajvajuajwajxajyaaaaaaaaaaaaaaaamWaabamUaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZamYamZanaagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQaqqahQahQahQahQahQahQamwaigapFapFapFapFapFapFapFapFamxamzamyamzamAamCamBamEamDamGamFamIamHamJauiaoJamKamKamKamKamLakIaoJapmamMamOamNamQamPamTamSanbamXandancaneaaaaaaaaaajbajXajwajwajwajwajxajyaaaaaaaaaaaaamWalvaaaanGaaaalvamWamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZagZagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanfangaomanianhankanjanlajJanmapGanpanoanranqantansapFanuanwanvanzanyanCanBanEanDanIanFanJanJanJanKaoJanLanNanManPanOanQaofaofanRanTanSalFanUanVajVajVanXanZanYaoaaaaaaaaaaajbaknajwakoajwajwajxajyaaaaaaaaaaaaamWaabaabanGaabaabaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalwalwalvalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanfangaomaocaobaoeaodaohaogaitapGaojaoiaonaokaopaooapFaoqaosaoraouaotaowaovaoxalWaozaoyaoBaoAaoDaoCaoJaoEaoGaoFaoFaoHaoLaoIaoIaoMaoPaoNalFaoQaoRaiYaiYaiYaoTaoSaihaabaaaaaaajbakyajwajwajwajwakzajyaaaaaaaaaaaaamWaaaaaaaoKaaaaaaaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalwaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanfaoUaomaoValEaoXaoWanlajJaigapGaoZaoYapbapaapdapcapFapeapgapfaphamyapjapiapkapSapAaplapCapBapEapDapIapHapJapJapLapKapNapMapOaoJapQaoJapRapNapTaiYapVapUapXapWaihaaaaabaabajbapYaqaapZaqcaqbajbalIaqeaaaaaaaaaamWaabappapnapqaabaabamWamWamWamWamWamWaqpamWamWamWamWamWamWamWamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapsaprapuaptapwapraprapxapraprapvaaaaaaaaaaaaaaaaaaaaaaaaaaaalvaabapyaabalvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakBakBakBakBaslakWakZaomaomaomaomakUaqsapFapGapGapGaqtaquapGapFaqvalUaqwaqwalTaqxaqxapPapSapSaqyaqzapSapSapSanAaqAaqCaqBanxanAanAaqAaqDanxaqFaqEanxanAaqGaqGaqGaqGaqHaihaihaqIaqIaqIaqIajbalsaqJaqKalsajbaabaaaaaaaaaaaaamWaaaappaqdapqaaaaaaaabaabaabaabaabaabaabaabaqLaabaabaabaaaaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNagVahDahCabNahEaigabNahFahFahFahFahFahFagtahHahRagtahTahSagtaaaaivahUahVahVahWaivaaaaaaafOafXagTahXahYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwajYajYagZagZagZagwajZahaahaahaakaagwagZagZagZajYajYagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaiaaicaibaieaidaitabNahFahFahFahFahFahFagtaifaijaiiainaikagtaaaaivaioaiqaipairaivaaaaaaaaaagTagTaisagTagTagTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsakpakpahnaaaaaaagwakqahaahaahaakragwaaaaaaahsakpakpahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQahQahQahQahQajJaiuabNahFahFahFahFahFahFagtaiwaiyaixannaizagtaivaivaiAaiNaiBaiOaivaivaaaaabagTaiQaiPaiSaiRagTaaaanHaiTaiVaiUanHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwakAahaahaahaakragwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQahQahQaiZaiXajfajaahQahEaigabNahFahFahFahFahFahFagtajgajiajhajlajkajnajmajpajoajrajqajLajKaivaaaajMagTajOajNajQajPanAanHanHajRajTajSanHanHaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwakRakPahZakRakPagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWajUakcakbakeakdakhakgahQakiaitalcahFahFahFahFahFahFajnakjanWakkannanWaklajjajjakmajjaksakwaktaivaabaabagTakCakxakEakDanAakFakGaoJaoJakHakJakIakvakKakMakLakNaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvalvalvalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwalxalyahaalzalAagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWakOakSakQakVakTalaakYaldalbaitaleahFahFahFahFahFahFagtalfalgakkalialhajnaljallalkalnalmakfakuaivanHanHanAanAanAanAaloanAalpalralqalualtalFalCalGaiYaiYaiYalHaihaihaaaaaaaaaajbajbajbajbajbajbajbalIalJaaaabpaaaaaaalvaaaaabaaaamhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwamiamjahaamkamlagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWalKalMalLalOalNalQalPahQalRalSalcahFahFahFahFahFahFagtagtalUalTapPagtagtalValWaivalYalXalZaivaivanHambamaamdamcamfameanAamgaoJammampamnalFamqamrajVamvamsamuamtaihaaaaaaaaaajbajsajtajvajuajwajxajyaaaaaaaaaaaaaaaamWaabamUaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZamYamZanaagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQaqqahQahQahQahQahQahQamwaigapFapFapFapFapFapFapFapFamxamzamyamzamAamCamBamEamDamGamFamIamHamJauiaoJamKamKamKamKamLakIaoJapmamMamOamNamQamPamTamSanbamXandancaneaaaaaaaabajbajXajwajwajwajwajxajyaaaaaaaaaaaaamWalvaaaanGaaaalvamWamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZagZagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanfangaomanianhankanjanlajJanmapGanpanoanranqantansapFanuanwanvanzanyanCanBanEanDanIanFanJanJanJanKaoJanLanNanManPanOanQaofaofanRanTanSalFanUanVajVajVanXanZanYaoaaaaaabaabajbaknajwakoajwajwajxajyaaaaaaaaaaaaamWaabaabanGaabaabaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalwalwalvalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanfangaomaocaobaoeaodaohaogaitapGaojaoiaonaokaopaooapFaoqaosaoraouaotaowaovaoxalWaozaoyaoBaoAaoDaoCaoJaoEaoGaoFaoFaoHaoLaoIaoIaoMaoPaoNalFaoQaoRaiYaiYaiYaoTaoSaihaoOaoOaoOajbakyajwajwajwajwakzajyaaaaaaaaaaaaamWaaaaaaaoKaaaaaaaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalwaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanfaoUaomaoValEaoXaoWanlajJaigapGaoZaoYapbapaapdapcapFapeapgapfaphamyapjapiapkapSapAaplapCapBapEapDapIapHapJapJapLapKapNapMapOaoJapQaoJapRapNapTaiYapVapUapXapWaihahGaYmaolajbapYaqaapZaqcaqbajbalIaqeaaaaaaaaaamWaabappapnapqaabaabamWamWamWamWamWamWaqpamWamWamWamWamWamWamWamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapsaprapuaptapwapraprapxapraprapvaaaaaaaaaaaaaaaaaaaaaaaaaaaalvaabapyaabalvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakBakBakBakBaslakWakZaomaomaomaomakUaqsapFapGapGapGaqtaquapGapFaqvalUaqwaqwalTaqxaqxapPapSapSaqyaqzapSapSapSanAaqAaqCaqBanxanAanAaqAaqDanxaqFaqEanxanAaqGaqGaqGaqGaqHaihaihaqIaucaqIaqIajbalsaqJaqKalsajbaabaaaaaaaaaaaaamWaaaappaqdapqaaaaaaaabaabaabaabaabaabaabaabaqLaabaabaabaaaaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqfaqhaqiaqgaqkaqlaqlaqlaqmaqjaqoaaaaaaaaaalwalwalwalvalvaabaabaaaaqnaaaaabaabalvalvalwalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakBakXaqraqMaqNaqraqOapzaqQaqPakWaqRaqSaqXaqVaqUaqXaqWariaqYarjaqXaqXaqXaqXarkaqXaqXaqXarlarnarmarparoarrarqarsarsarsartarsaruarwarvarxaqXaryaqWaqXarzarBarAarCaqXariaqXaqXarDarEaqVaqXarFarHarGarJarIajbaabaaaaaaaaaaaaamWaaaappaqdapqaaaaaaaabaqZaraaraaraaraarbaraaraaraaraarcaabaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaardaqhareargaqlarharharharharharfaaaaaaaaaalwaaaaaaaabaaaaabaaaaaaaqnaaaaaaaabaaaaabaaaaaaalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakBalDarKalDarLalDarNarMarParOarRaqTarSarQasdascaseaseasfaseasgaseaseaseasiashasiasjasiasiassaskasnasmaspasoasoasoasoasqasoasoasoasrastasAasvasuasxaswaszasyasAasAasCasBasBasDasEasEasEasFasHasGasIamRamVaaaaaaaaaaaaaaaamWaabappaqdapqaaaaaaaabarUaabaaaaaaaabarUaabaabaaaaaaarUaabaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarVaqharWarYarharharharharZasaaqoaaaaaaaaaalwaabarXarXarXarXarXaaaasbaaaarXarXarXarXarXaabalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakBamoasYasXasZasYasYataatbalBakWaryatgatgatgatfatiathatkatjatmatlatnatjatpatoatratqatratsatuattatwatvatyatxatAatzatCatBatEatDatAatOatRatQaFLaFLaFLaFLaFLaFLaFLaxeatSatSatSatTatSatSatSarFatVatUatXatWajbaaaaaaaaaaaaaabamWaaaappaqdapqaabaabappapnapqaabaabappapnapqaabaabappapnapqaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 79d5bede9fd..318f9986fe0 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -152,7 +152,7 @@ "cV" = (/obj/structure/flora/ausbushes/brflowers,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/centcom/specops) "cW" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/centcom/specops) "cX" = (/obj/structure/flora/ausbushes/reedbush,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/centcom/specops) -"cY" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_box/shotgun/buck,/obj/item/ammo_box/shotgun/buck,/obj/item/ammo_box/shotgun/buck,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/turf/simulated/floor/engine,/area/shuttle/gamma/space) +"cY" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/gamma/space) "cZ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/trackimp,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "da" = (/obj/structure/table/reinforced,/obj/item/weapon/scalpel,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "db" = (/turf/simulated/floor/holofloor{tag = "icon-carpet2-0 (EAST)"; icon_state = "carpet2-0"; dir = 4},/area/holodeck/source_theatre) @@ -756,25 +756,25 @@ "oB" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (WEST)"; icon_state = "fakewindows"; dir = 8},/area/syndicate_mothership) "oC" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (EAST)"; icon_state = "fakewindows"; dir = 4},/area/syndicate_mothership) "oD" = (/turf/unsimulated/floor/snow,/obj/structure/flora/bush,/turf/unsimulated/floor/snow{tag = "icon-gravsnow_corner (WEST)"; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership) -"oE" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/machinery/light{dir = 1},/turf/simulated/floor/engine,/area/shuttle/gamma/space) -"oF" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space) -"oG" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/weapon/gun/rocketlauncher,/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space) +"oE" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/shuttle/gamma/space) +"oF" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/gamma/space) +"oG" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/shuttle/gamma/space) "oH" = (/obj/structure/table,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/storage/fancy/crayons,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "oI" = (/obj/machinery/washing_machine,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) -"oJ" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/clusterbuster,/turf/simulated/floor/engine,/area/shuttle/gamma/space) +"oJ" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) "oK" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/centcom/gamma) "oL" = (/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/centcom/gamma) "oM" = (/obj/machinery/door/airlock/centcom{name = "Team Storage"; opacity = 1; req_access_txt = "109"},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/specops) -"oN" = (/obj/machinery/power/apc{dir = 8; name = "Gamma Armory APC"; pixel_x = -27; pixel_y = 2},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/engine,/area/shuttle/gamma/space) +"oN" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_box/shotgun/buck,/obj/item/ammo_box/shotgun/buck,/obj/item/ammo_box/shotgun/buck,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/item/weapon/gun/projectile/shotgun/automatic/combat,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) "oO" = (/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) -"oP" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/engine,/area/shuttle/gamma/space) +"oP" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) "oQ" = (/obj/machinery/vending/syndisnack,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "oR" = (/obj/machinery/vending/syndicigs,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "oS" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "SPECOPS"; name = "Ready Room"; pixel_x = 6; pixel_y = 6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "ASSAULT"; name = "Assault Armor"; pixel_x = -6; pixel_y = 6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "specopsoffice"; name = "Privacy Shutters"; pixel_x = 6; pixel_y = -6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "CCGAMMA"; name = "Gamma Lockdown"; pixel_x = -6; pixel_y = -6; req_access_txt = "114"},/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/specops) "oT" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/centcom/gamma) "oU" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/centcom/gamma) "oV" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/centcom/gamma) -"oW" = (/obj/structure/sign/securearea,/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space) +"oW" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) "oX" = (/obj/machinery/door/airlock/centcom{name = "Prison"; opacity = 1; req_access_txt = "104"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops) "oY" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/flora/ausbushes,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/centcom/specops) "oZ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/flora/ausbushes/fernybush,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/centcom/specops) @@ -783,20 +783,21 @@ "pc" = (/mob/living/simple_animal/pet/fox/Syndifox,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pd" = (/obj/effect/decal/warning_stripes/southeastcorner,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pe" = (/obj/effect/decal/warning_stripes/south,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) -"pf" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space) -"pg" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space) -"ph" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space) -"pi" = (/obj/structure/cable,/obj/machinery/mech_bay_recharge_port/upgraded,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space) -"pj" = (/obj/structure/cable,/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space) -"pk" = (/obj/mecha/combat/durand/loaded{operation_req_access = list(1)},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space) +"pf" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"pg" = (/obj/machinery/recharger/wallcharger{pixel_x = -24},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"ph" = (/obj/machinery/recharger/wallcharger{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"pi" = (/obj/machinery/door/airlock/shuttle{req_access_txt = "114"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"pj" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"pk" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/weapon/gun/rocketlauncher,/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) "pl" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pm" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/cans/beer{pixel_x = -2; pixel_y = 5},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) -"pn" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/turf/simulated/floor/engine,/area/shuttle/gamma/space) -"po" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/chem_grenade/incendiary{name = "Incendiary Grenade"},/turf/simulated/floor/engine,/area/shuttle/gamma/space) +"pn" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"po" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/clusterbuster,/obj/item/weapon/grenade/chem_grenade/incendiary{name = "Incendiary Grenade"},/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) "pp" = (/obj/machinery/computer/telecrystals/uplinker,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership) "pq" = (/obj/machinery/camera{c_tag = "CentComm Special Ops. Bathroom"; dir = 2; network = list("ERT","CentComm")},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "pr" = (/obj/machinery/door/airlock/centcom{name = "Bathroom"; opacity = 1; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "ps" = (/obj/machinery/telecomms/server/presets/centcomm,/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/control) +"pt" = (/obj/mecha/combat/durand/loaded{operation_req_access = list(1)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) "pu" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (NORTHWEST)"; icon_state = "fakewindows"; dir = 9},/area/syndicate_mothership) "pv" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (WEST)"; icon_state = "fakewindows2"; dir = 8},/area/syndicate_mothership) "pw" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice{pixel_x = -5; pixel_y = 5},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) @@ -806,6 +807,7 @@ "pA" = (/obj/machinery/light,/turf/unsimulated/floor{icon_state = "floor"},/area/syndicate_mothership) "pB" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{dir = 4; pixel_x = 32; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "pC" = (/obj/machinery/door/poddoor{id_tag = "nukeop_ready"; name = "Shuttle Dock Door"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"pD" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/gamma/space) "pE" = (/obj/structure/stool/bed,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pF" = (/turf/unsimulated/wall/fakeglass,/area/syndicate_mothership) "pG" = (/obj/structure/toilet{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) @@ -890,16 +892,10 @@ "rh" = (/obj/structure/toilet{dir = 8},/turf/unsimulated/floor{icon_state = "platingdmg1"},/area/centcom) "ri" = (/obj/structure/toilet{dir = 8},/turf/unsimulated/floor{icon_state = "floorscorched2"},/area/centcom) "rj" = (/obj/structure/rack,/obj/item/weapon/implanter/adrenalin{pixel_x = 12; pixel_y = -12},/obj/item/weapon/implanter/emp{pixel_x = 9; pixel_y = -9},/obj/item/weapon/implanter/explosive{pixel_x = 6; pixel_y = -6},/obj/item/weapon/implanter/explosive_macro{pixel_x = 3; pixel_y = -3},/obj/item/weapon/implanter/freedom,/obj/item/weapon/implanter/krav_maga{pixel_x = -9; pixel_y = 9},/obj/item/weapon/implanter/mindshield{pixel_x = -6; pixel_y = 6},/obj/item/weapon/implanter/storage{pixel_x = -3; pixel_y = 3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) +"rk" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/gamma/space) "rE" = (/turf/unsimulated/wall,/area/start) "rH" = (/obj/effect/landmark/start,/turf/unsimulated/floor,/area/start) "rK" = (/turf/unsimulated/wall/splashscreen,/area/start) -"rV" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/turf/simulated/floor/engine,/area/shuttle/gamma/space) -"rX" = (/turf/simulated/floor/engine,/area/shuttle/gamma/space) -"sa" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space) -"sb" = (/turf/simulated/floor/plasteel{tag = "icon-stage_stairs"; icon_state = "stage_stairs"},/area/shuttle/gamma/space) -"se" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-stage_stairs"; icon_state = "stage_stairs"},/area/shuttle/gamma/space) -"sg" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space) -"sm" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space) "sq" = (/turf/unsimulated/wall,/area/centcom/control) "sr" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control) "ss" = (/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control) @@ -1619,14 +1615,14 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititItktitititItJtmtntdtdtdsqtKtLtMedtFtFtFtFtFeesqsusxsusqsusususususususqsqfLsqsqsqsqsqsqsqsqsqsqsqsqsqsqfXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXtatttutdtdtdsqsqeWeVsqeWeVsqsqsqsqsqtQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqfXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititVtktitititVtWtXtYtdtdtdsXaNaNaNaNaNaNsXfecoflsqtQtRtRtRtRtRtRtRtRtRtRtRtRtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmfmfmsXsXsXsXsXsXuaubsXsXsXsXsXsXsXsXsXfeujflsqtQtRucudududududududududuetRtZsqaNaNoeodododododododofaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfofnfqfpfsfrfnfEfmufuguguhuiujujujsXukukukukulukumunfeujflsqtQtRtZsususususususususutQtRtZsqaNaNohogojoioioioiokohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmjHfFkdkdkdkdfFlZmdujujujujujujujujuqururururururussXfeujflsqtQtRtZsuutuuuvuwuxuyuzsutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmcYoFoErVoGoJfmoKkdkdkdkdkdkdoLmdujujujujujujujujsXuAuBuBuBuBuBuCsXsXoMsXsquEtRtSsuuFtRuGuHtRtRtRsuuEtRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoNoPrXrXrXrXfdoUoToToToToToToVfdujujujuIuIujujujuJuKuKuKuKuKuKuKuLuKuKuKuMtRtRtRuNtRtRtRtRtRtRtRuNtRtRtZoltRolomogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmsasesbsbsaoWfmfmfmfmfmfmfmfmfmfmujujuOuPuQuRujuSsXsXuTuUuTsXsXoXsXoZoYpbsquetRucsutRtRtRtRtRtRtRsuuetRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpfphpgsgsgsgfmaNaNaNaNaNaNaNaNsXujuXuRooonvavbujvcvdvdvdvdvesXuKsXsXsXsXsqtQtRtZsuvfuuvgvgvgvhvisutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpipkpjsmpnpofmaNaNaNaNsXuWuWsXsXujujvauRvmuRujujvnvdvovpvqvdsXuKsXvrtTtUsqtQtRtZsqsqvsvtvuvvvwsqsqtQtRtZsqaNaNohogogogopogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmsXsXsXsXsXsXuaubsXsXsXsXsXsXsXsXsXfeujflsqtQtRucudududududududududuetRtZsqaNaNoeodododododododofaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmcYoEoEoEoEoFfmfofnfqfpfsfrfnfEfmufuguguhuiujujujsXukukukukulukumunfeujflsqtQtRtZsususususususususutQtRtZsqaNaNohogojoioioioiokohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGoNoJoWoPoGfmjHfFkdkdkdkdfFlZmdujujujujujujujujuqururururururussXfeujflsqtQtRtZsuutuuuvuwuxuyuzsutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpgpfpfphoGfmoKkdkdkdkdkdkdoLmdujujujujujujujujsXuAuBuBuBuBuBuCsXsXoMsXsquEtRtSsuuFtRuGuHtRtRtRsuuEtRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpfpfpfpfpifdoUoToToToToToToVfdujujujuIuIujujujuJuKuKuKuKuKuKuKuLuKuKuKuMtRtRtRuNtRtRtRtRtRtRtRuNtRtRtZoltRolomogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpjpfpfpkoGfmfmfmfmfmfmfmfmfmfmujujuOuPuQuRujuSsXsXuTuUuTsXsXoXsXoZoYpbsquetRucsutRtRtRtRtRtRtRsuuetRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpnpfpopfptoGfmaNaNaNaNaNaNaNaNsXujuXuRooonvavbujvcvdvdvdvdvesXuKsXsXsXsXsqtQtRtZsuvfuuvgvgvgvhvisutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpDoEoEoEoErkfmaNaNaNaNsXuWuWsXsXujujvauRvmuRujujvnvdvovpvqvdsXuKsXvrtTtUsqtQtRtZsqsqvsvtvuvvvwsqsqtQtRtZsqaNaNohogogogopogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmaNaNaNaNsXvkvkpqprujujujvyvyujujujvzvdvAvBvCbesXuKsqpstRtRvFtRtRtZsqsqsusususususqsqtQtRtZsqaNaNoqodododododododoraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvkvkvksXvIvJujujujujvLujsXvdoSmjeTvPsXuKsqvQtRtZsutQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvkpBsXsXsXsXsXsXbfbfsXsXsXvSvTvUvVvdsXuKsqvWtRvXsutQtRtRtRtRtRtRtRtRtRtRtRtRtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index d7de6dd6844..8925e06b2e3 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -909,12 +909,6 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space toArea = locate(/area/shuttle/gamma/space) fromArea.move_contents_to(toArea) - for(var/obj/machinery/power/apc/A in toArea) - A.init() - - for(var/obj/machinery/alarm/A in toArea) - A.first_run() - if(gamma_ship_location) gamma_ship_location = 0 else From e2cbb9c6b012178987eecca5794256001d8e3960 Mon Sep 17 00:00:00 2001 From: FreeStylaLT Date: Tue, 13 Jun 2017 15:29:22 +0300 Subject: [PATCH 062/378] feral_no_more --- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index f2be8c0e0d2..2273bfb7623 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -9048,7 +9048,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQahQahQaiZaiXajfajaahQahEaigabNaolaolaolaolaolaolagtajgajiajhajlajkajnajmajpajoajrajqajLajKaivaaaajMagTajOajNajQajPanAanHanHajRajTajSanHanHaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwakRakPahZakRakPagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWajUakcakbakeakdakhakgahQakiaitalcaolaolaolaolaolaolajnakjanWakkannanWaklajjajjakmajjaksakwaktaivaabaabagTakCakxakEakDanAakFakGaoJaoJakHakJakIakvakKakMakLakNaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvalvalvalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwalxalyahaalzalAagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWakOakSakQakVakTalaakYaldalbaitaleaolaolaolaolaolaolagtalfalgakkalialhajnaljallalkalnalmakfakuaivanHanHanAanAanAanAaloanAalpalralqalualtalFalCalGaiYaiYaiYalHaihaihaaaaaaaaaajbajbajbajbajbajbajbalIalJaaaabpaaaaaaalvaaaaabaaaamhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwamiamjahaamkamlagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWalKalMalLalOalNalQalPahQalRalSalcaolaolaolaolaolaolagtagtalUalTapPagtagtalValWaivalYalXalZaivaivanHambamaamdamcamfameanAamgaoJammampamnalFamqamrajVamvamsamuamtaihaaaaaaaaaajbajsajtajvajuajwajxajyaaaaaaaaaaaaaaaamWaabamUaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZamYamZanaagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWalKalMalLalOalNalQalPahQalRalSalcaolaolaolaolaolaolagtagtalUalTapPagtagtalValWaivalYalXalZaivaivanHambamaamdamcamfameanAamgaoJammampamnalFamqamramvajVamsamuamtaihaaaaaaaaaajbajsajtajvajuajwajxajyaaaaaaaaaaaaaaaamWaabamUaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZamYamZanaagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQaqqahQahQahQahQahQahQamwaigapFapFapFapFapFapFapFapFamxamzamyamzamAamCamBamEamDamGamFamIamHamJauiaoJamKamKamKamKamLakIaoJapmamMamOamNamQamPamTamSanbamXandancaneaaaaaaaaaajbajXajwajwajwajwajxajyaaaaaaaaaaaaamWalvaaaanGaaaalvamWamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZagZagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanfangaomanianhankanjanlajJanmapGanpanoanranqantansapFanuanwanvanzanyanCanBanEanDanIanFanJanJanJanKaoJanLanNanManPanOanQaofaofanRanTanSalFanUanVajVajVanXanZanYaoaaaaaaaaaaajbaknajwakoajwajwajxajyaaaaaaaaaaaaamWaabaabanGaabaabaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalwalwalvalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanfangaomaocaobaoeaodaohaogaitapGaojaoiaonaokaopaooapFaoqaosaoraouaotaowaovaoxalWaozaoyaoBaoAaoDaoCaoJaoEaoGaoFaoFaoHaoLaoIaoIaoMaoPaoNalFaoQaoRaiYaiYaiYaoTaoSaihaabaaaaaaajbakyajwajwajwajwakzajyaaaaaaaaaaaaamWaaaaaaaoKaaaaaaaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From f971653760464e5e4ee50f319cbc656069275312 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 14 Jun 2017 05:44:41 +0100 Subject: [PATCH 063/378] Fixes duplicated 'the' on slip messages --- code/modules/mob/living/carbon/carbon.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 2ef62eae6e9..0848a90e8c0 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -949,7 +949,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, for(var/t = 0, t<=tilesSlipped, t++) spawn (t) step(src, src.dir) stop_pulling() - to_chat(src, "You slipped on the [description]!") + to_chat(src, "You slipped on [description]!") playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) if(stun) Stun(stun) From 83d30fbcd2f41eca9e3ba814d05a52d3400e1607 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 14 Jun 2017 05:59:33 +0100 Subject: [PATCH 064/378] Fixes spelling errors and an unclosed tag on vamps --- code/game/gamemodes/vampire/vampire_powers.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 13f05048393..19b32c3abf3 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -215,7 +215,7 @@ stat_allowed = 1 /obj/effect/proc_holder/spell/vampire/mob_aoe/glare/cast(list/targets, mob/user = usr) - user.visible_message("[user]'s eyes emit a blinding flash!") + user.visible_message("[user]'s eyes emit a blinding flash!") if(istype(user:glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) to_chat(user, "You're blindfolded!") return @@ -242,9 +242,9 @@ user.regenerate_icons() /obj/effect/proc_holder/spell/vampire/self/screech - name = "Chiroptean Screech (30)" + name = "Chiropteran Screech (30)" desc = "An extremely loud shriek that stuns nearby humans and breaks windows as well." - gain_desc = "You have gained the Chriopteran Screech ability which stuns anything with ears in a large radius and shatters glass in the process." + gain_desc = "You have gained the Chiropteran Screech ability which stuns anything with ears in a large radius and shatters glass in the process." action_icon_state = "vampire_screech" required_blood = 30 From fc1d4a9cb937393db56ad0c47650804de11e742b Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 14 Jun 2017 06:15:32 +0100 Subject: [PATCH 065/378] Adds cooldown to stop the spam, also uses the right gender pronoun --- code/game/objects/structures/displaycase.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 858d0e83c6e..f1d05d7012d 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -319,7 +319,8 @@ var/global/list/captain_display_cases = list() else to_chat(src, "[bicon(src)] \The [src] is empty!") else - user.visible_message("[user.name] gently runs his hands over \the [src] in appreciation of its contents.", \ + user.changeNext_move(CLICK_CD_MELEE) + user.visible_message("[user.name] gently runs \his hands over \the [src] in appreciation of its contents.", \ "You gently run your hands over \the [src] in appreciation of its contents.", \ "You hear someone streaking glass with their greasy hands.") From 4d7cb2247ee68da25cc8d9dc9b597fa7171fc4ea Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 14 Jun 2017 06:20:05 +0100 Subject: [PATCH 066/378] Fixes typos and gender pronouns --- code/modules/ninja/martial_art.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/ninja/martial_art.dm b/code/modules/ninja/martial_art.dm index 1ea05b1073e..a17b2c00952 100644 --- a/code/modules/ninja/martial_art.dm +++ b/code/modules/ninja/martial_art.dm @@ -45,8 +45,8 @@ /datum/martial_art/ninja_martial_art/teach(var/mob/living/carbon/human/H,var/make_temporary=0) ..() H.middleClickOverride = new /datum/middleClickOverride/ninja_martial_art() - to_chat(H, "You have been taugh the ways of the Creeping Widow.
    \) - Your stikes on harm intent will deal more damage.
    Using middle mouse button on a nearby person while on harm intent will send them flying backwards.
    \ + to_chat(H, "You have been taught the ways of the Creeping Widow.
    \) + Your strikes on harm intent will deal more damage.
    Using middle mouse button on a nearby person while on harm intent will send them flying backwards.
    \ Your grabs will instantly be aggressive while you are using this style.
    Using middle mouse button while on harm intent and behind a person will put them in a silencing choke hold.
    \ Using middle mouse button on a nearby person while on disarm intent will wrench their wrist, causing them to drop what they are holding.
    " @@ -76,7 +76,7 @@ return 0 if(has_choke_hold) // Are we already choking someone? - to_chat(A, "You are have a target in your grip!") + to_chat(A, "You already have a target in your grip!") return 0 has_choke_hold = 1 @@ -98,8 +98,8 @@ D.silent += 1 D.adjustOxyLoss(1) else - D.visible_message("[A] loses his grip on [D]'s neck!", \ - "[A] loses his grip on your neck!") + D.visible_message("[A] loses \his grip on [D]'s neck!", \ + "[A] loses \his grip on your neck!") has_choke_hold = 0 return 0 I++ From fea7e56d637ba9c290a4772fae7622e092d1ea42 Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 13 Jun 2017 23:09:50 -0700 Subject: [PATCH 067/378] Requests on the PR --- _maps/map_files/cyberiad/cyberiad.dmm | 21 ++++++++++++--------- _maps/map_files/cyberiad/z2.dmm | 21 +++++++++++++-------- code/game/mecha/mech_bay.dm | 3 +++ code/modules/admin/admin.dm | 6 ++++++ 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 75a171a30f7..1dad73fe90e 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -395,7 +395,7 @@ "ahE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "ahF" = (/turf/space,/area/shuttle/gamma/station) "ahG" = (/obj/item/clothing/mask/muzzle/gag,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/space) -"ahH" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/armoury) +"ahH" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/armoury) "ahI" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahJ" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (EAST)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahK" = (/obj/machinery/light/spot,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) @@ -419,10 +419,10 @@ "aic" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/obj/machinery/alarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plating,/area/security/permabrig) "aid" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "aie" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/security/permabrig) -"aif" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/armoury) +"aif" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/armoury) "aig" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) "aih" = (/turf/simulated/wall/r_wall,/area/security/hos) -"aii" = (/obj/structure/table,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/lock_buster,/obj/machinery/light{dir = 1; on = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel,/area/security/armoury) +"aii" = (/obj/structure/table,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/lock_buster,/obj/machinery/light{dir = 1; on = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/mindshield,/obj/machinery/camera{c_tag = "Brig Armory"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel,/area/security/armoury) "aij" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "red"},/area/security/armoury) "aik" = (/obj/machinery/flasher/portable,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "red"},/area/security/armoury) "ail" = (/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) @@ -434,7 +434,7 @@ "air" = (/obj/effect/decal/warning_stripes/west,/obj/effect/decal/warning_stripes/east,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) "ais" = (/obj/machinery/door/airlock{name = "Toilet"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/vacantoffice{name = "\improper Security Toilet"}) "ait" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) -"aiu" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) +"aiu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "aiv" = (/turf/simulated/wall/r_wall,/area/security/securearmoury) "aiw" = (/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "west bump Important Area"; pixel_x = -24; shock_proof = 0},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/armoury) "aix" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/armoury) @@ -472,7 +472,7 @@ "ajd" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aje" = (/obj/item/weapon/skeleton/r_arm,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ajf" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) -"ajg" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/lockbox/mindshield,/obj/machinery/light_switch{pixel_x = -25},/obj/machinery/camera{c_tag = "Brig Armory"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/armoury) +"ajg" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/security/permabrig) "ajh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "aji" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "ajj" = (/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) @@ -527,7 +527,7 @@ "akg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) "akh" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) "aki" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) -"akj" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/item/weapon/storage/box/handcuffs,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/box/teargas{pixel_x = -3; pixel_y = -3},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/armoury) +"akj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "akk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "akl" = (/obj/machinery/door/airlock/security{name = "Warden's office"; req_access = null; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/armoury) "akm" = (/obj/effect/decal/warning_stripes/northwestcorner,/obj/effect/decal/warning_stripes/northeastcorner,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) @@ -2685,7 +2685,10 @@ "aZG" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel{icon_state = "bluecorner"},/area/hallway/primary/fore) "aZH" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 3; name = "Atmospherics Requests Console"; pixel_y = -30},/obj/item/stack/sheet/glass{amount = 50},/obj/item/clothing/head/welding,/obj/item/clothing/head/welding,/turf/simulated/floor/plasteel,/area/atmos) "aZI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"aZJ" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/permabrig) "aZK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aZL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) +"aZM" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/item/weapon/storage/box/handcuffs,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/box/teargas{pixel_x = -3; pixel_y = -3},/obj/machinery/light{dir = 8},/obj/machinery/light_switch{pixel_x = -21; pixel_y = 9},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/armoury) "aZN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aZV" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aZW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -9045,9 +9048,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNabNabNabNabNabNahjahkabNabNabNabNabNabNabNagtagtagtagtagtagtagtaaaaguaivagSagRaivaguaaaafOafXafXagUagTagTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwajzajAajBajCajDagwajEahaahaahaajFagwajGahaajHajIajzagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNagVahDahCabNahEaigabNahFahFahFahFahFahFagtahHahRagtahTahSagtaaaaivahUahVahVahWaivaaaaaaafOafXagTahXahYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwajYajYagZagZagZagwajZahaahaahaakaagwagZagZagZajYajYagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaiaaicaibaieaidaitabNahFahFahFahFahFahFagtaifaijaiiainaikagtaaaaivaioaiqaipairaivaaaaaaaaaagTagTaisagTagTagTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsakpakpahnaaaaaaagwakqahaahaahaakragwaaaaaaahsakpakpahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQahQahQahQahQajJaiuabNahFahFahFahFahFahFagtaiwaiyaixannaizagtaivaivaiAaiNaiBaiOaivaivaaaaabagTaiQaiPaiSaiRagTaaaanHaiTaiVaiUanHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwakAahaahaahaakragwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQahQahQaiZaiXajfajaahQahEaigabNahFahFahFahFahFahFagtajgajiajhajlajkajnajmajpajoajrajqajLajKaivaaaajMagTajOajNajQajPanAanHanHajRajTajSanHanHaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwakRakPahZakRakPagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWajUakcakbakeakdakhakgahQakiaitalcahFahFahFahFahFahFajnakjanWakkannanWaklajjajjakmajjaksakwaktaivaabaabagTakCakxakEakDanAakFakGaoJaoJakHakJakIakvakKakMakLakNaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvalvalvalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwalxalyahaalzalAagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQahQahQahQahQaiuaigajgahFahFahFahFahFahFagtaiwaiyaixannaizagtaivaivaiAaiNaiBaiOaivaivaaaaabagTaiQaiPaiSaiRagTaaaanHaiTaiVaiUanHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwakAahaahaahaakragwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQahQahQaiZaiXajfajaahQakjaZLaZJahFahFahFahFahFahFalealgajiajhajlajkajnajmajpajoajrajqajLajKaivaaaajMagTajOajNajQajPanAanHanHajRajTajSanHanHaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwakRakPahZakRakPagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWajUakcakbakeakdakhakgahQakiaitalcahFahFahFahFahFahFajnaZManWakkannanWaklajjajjakmajjaksakwaktaivaabaabagTakCakxakEakDanAakFakGaoJaoJakHakJakIakvakKakMakLakNaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvalvalvalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwalxalyahaalzalAagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWakOakSakQakVakTalaakYaldalbaitaleahFahFahFahFahFahFagtalfalgakkalialhajnaljallalkalnalmakfakuaivanHanHanAanAanAanAaloanAalpalralqalualtalFalCalGaiYaiYaiYalHaihaihaaaaaaaaaajbajbajbajbajbajbajbalIalJaaaabpaaaaaaalvaaaaabaaaamhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwamiamjahaamkamlagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWalKalMalLalOalNalQalPahQalRalSalcahFahFahFahFahFahFagtagtalUalTapPagtagtalValWaivalYalXalZaivaivanHambamaamdamcamfameanAamgaoJammampamnalFamqamrajVamvamsamuamtaihaaaaaaaaaajbajsajtajvajuajwajxajyaaaaaaaaaaaaaaaamWaabamUaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZamYamZanaagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQaqqahQahQahQahQahQahQamwaigapFapFapFapFapFapFapFapFamxamzamyamzamAamCamBamEamDamGamFamIamHamJauiaoJamKamKamKamKamLakIaoJapmamMamOamNamQamPamTamSanbamXandancaneaaaaaaaabajbajXajwajwajwajwajxajyaaaaaaaaaaaaamWalvaaaanGaaaalvamWamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZagZagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 318f9986fe0..7c6dbdded8c 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -784,11 +784,11 @@ "pd" = (/obj/effect/decal/warning_stripes/southeastcorner,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pe" = (/obj/effect/decal/warning_stripes/south,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pf" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) -"pg" = (/obj/machinery/recharger/wallcharger{pixel_x = -24},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"pg" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "16"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) "ph" = (/obj/machinery/recharger/wallcharger{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) -"pi" = (/obj/machinery/door/airlock/shuttle{req_access_txt = "114"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"pi" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "15"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) "pj" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) -"pk" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/weapon/gun/rocketlauncher,/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"pk" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/weapon/gun/rocketlauncher,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) "pl" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pm" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/cans/beer{pixel_x = -2; pixel_y = 5},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pn" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) @@ -797,7 +797,7 @@ "pq" = (/obj/machinery/camera{c_tag = "CentComm Special Ops. Bathroom"; dir = 2; network = list("ERT","CentComm")},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "pr" = (/obj/machinery/door/airlock/centcom{name = "Bathroom"; opacity = 1; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "ps" = (/obj/machinery/telecomms/server/presets/centcomm,/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/control) -"pt" = (/obj/mecha/combat/durand/loaded{operation_req_access = list(1)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"pt" = (/obj/machinery/door/airlock/shuttle{req_access_txt = "0"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) "pu" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (NORTHWEST)"; icon_state = "fakewindows"; dir = 9},/area/syndicate_mothership) "pv" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (WEST)"; icon_state = "fakewindows2"; dir = 8},/area/syndicate_mothership) "pw" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice{pixel_x = -5; pixel_y = 5},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) @@ -893,6 +893,11 @@ "ri" = (/obj/structure/toilet{dir = 8},/turf/unsimulated/floor{icon_state = "floorscorched2"},/area/centcom) "rj" = (/obj/structure/rack,/obj/item/weapon/implanter/adrenalin{pixel_x = 12; pixel_y = -12},/obj/item/weapon/implanter/emp{pixel_x = 9; pixel_y = -9},/obj/item/weapon/implanter/explosive{pixel_x = 6; pixel_y = -6},/obj/item/weapon/implanter/explosive_macro{pixel_x = 3; pixel_y = -3},/obj/item/weapon/implanter/freedom,/obj/item/weapon/implanter/krav_maga{pixel_x = -9; pixel_y = 9},/obj/item/weapon/implanter/mindshield{pixel_x = -6; pixel_y = 6},/obj/item/weapon/implanter/storage{pixel_x = -3; pixel_y = 3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "rk" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/gamma/space) +"rl" = (/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"rm" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/mech_bay_recharge_port/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"rn" = (/obj/machinery/power/apc{dir = 2; name = "Gamma Armory APC"; pixel_y = -24},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"ro" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/computer/mech_bay_power_console,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space) +"rp" = (/obj/mecha/combat/durand/loaded{operation_req_access = list(1)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/mech_bay_recharge_floor,/area/shuttle/gamma/space) "rE" = (/turf/unsimulated/wall,/area/start) "rH" = (/obj/effect/landmark/start,/turf/unsimulated/floor,/area/start) "rK" = (/turf/unsimulated/wall/splashscreen,/area/start) @@ -1618,10 +1623,10 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmsXsXsXsXsXsXuaubsXsXsXsXsXsXsXsXsXfeujflsqtQtRucudududududududududuetRtZsqaNaNoeodododododododofaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmcYoEoEoEoEoFfmfofnfqfpfsfrfnfEfmufuguguhuiujujujsXukukukukulukumunfeujflsqtQtRtZsususususususususutQtRtZsqaNaNohogojoioioioiokohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGoNoJoWoPoGfmjHfFkdkdkdkdfFlZmdujujujujujujujujuqururururururussXfeujflsqtQtRtZsuutuuuvuwuxuyuzsutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpgpfpfphoGfmoKkdkdkdkdkdkdoLmdujujujujujujujujsXuAuBuBuBuBuBuCsXsXoMsXsquEtRtSsuuFtRuGuHtRtRtRsuuEtRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpfpfpfpfpifdoUoToToToToToToVfdujujujuIuIujujujuJuKuKuKuKuKuKuKuLuKuKuKuMtRtRtRuNtRtRtRtRtRtRtRuNtRtRtZoltRolomogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpjpfpfpkoGfmfmfmfmfmfmfmfmfmfmujujuOuPuQuRujuSsXsXuTuUuTsXsXoXsXoZoYpbsquetRucsutRtRtRtRtRtRtRsuuetRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpnpfpopfptoGfmaNaNaNaNaNaNaNaNsXujuXuRooonvavbujvcvdvdvdvdvesXuKsXsXsXsXsqtQtRtZsuvfuuvgvgvgvhvisutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpgpfpfpfphoGfmoKkdkdkdkdkdkdoLmdujujujujujujujujsXuAuBuBuBuBuBuCsXsXoMsXsquEtRtSsuuFtRuGuHtRtRtRsuuEtRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpipfpkpopfptfdoUoToToToToToToVfdujujujuIuIujujujuJuKuKuKuKuKuKuKuLuKuKuKuMtRtRtRuNtRtRtRtRtRtRtRuNtRtRtZoltRolomogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpjpfpfrloGfmfmfmfmfmfmfmfmfmfmujujuOuPuQuRujuSsXsXuTuUuTsXsXoXsXoZoYpbsquetRucsutRtRtRtRtRtRtRsuuetRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpnrnrmrprooGfmaNaNaNaNaNaNaNaNsXujuXuRooonvavbujvcvdvdvdvdvesXuKsXsXsXsXsqtQtRtZsuvfuuvgvgvgvhvisutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpDoEoEoEoErkfmaNaNaNaNsXuWuWsXsXujujvauRvmuRujujvnvdvovpvqvdsXuKsXvrtTtUsqtQtRtZsqsqvsvtvuvvvwsqsqtQtRtZsqaNaNohogogogopogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmaNaNaNaNsXvkvkpqprujujujvyvyujujujvzvdvAvBvCbesXuKsqpstRtRvFtRtRtZsqsqsusususususqsqtQtRtZsqaNaNoqodododododododoraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvkvkvksXvIvJujujujujvLujsXvdoSmjeTvPsXuKsqvQtRtZsutQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 24b6b1822d9..89f3a4ae032 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -33,6 +33,9 @@ component_parts += new /obj/item/weapon/stock_parts/capacitor(null) component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() + update_recharge_turf() + +/obj/machinery/mech_bay_recharge_port/proc/update_recharge_turf() recharging_turf = get_step(loc, dir) /obj/machinery/mech_bay_recharge_port/upgraded/New() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 8925e06b2e3..11be4d0a87e 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -909,6 +909,12 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space toArea = locate(/area/shuttle/gamma/space) fromArea.move_contents_to(toArea) + for(var/obj/machinery/mech_bay_recharge_port/P in toArea) + P.update_recharge_turf() + + for(var/obj/machinery/power/apc/A in toArea) + A.init() + if(gamma_ship_location) gamma_ship_location = 0 else From 1ae39de93ebb969729d7772b289fe67978d61acf Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 13 Jun 2017 23:32:20 -0700 Subject: [PATCH 068/378] Tweaks signage --- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 1dad73fe90e..3d0dc5147b6 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -9052,7 +9052,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQahQahQaiZaiXajfajaahQakjaZLaZJahFahFahFahFahFahFalealgajiajhajlajkajnajmajpajoajrajqajLajKaivaaaajMagTajOajNajQajPanAanHanHajRajTajSanHanHaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwakRakPahZakRakPagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWajUakcakbakeakdakhakgahQakiaitalcahFahFahFahFahFahFajnaZManWakkannanWaklajjajjakmajjaksakwaktaivaabaabagTakCakxakEakDanAakFakGaoJaoJakHakJakIakvakKakMakLakNaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvalvalvalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwalxalyahaalzalAagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWakOakSakQakVakTalaakYaldalbaitaleahFahFahFahFahFahFagtalfalgakkalialhajnaljallalkalnalmakfakuaivanHanHanAanAanAanAaloanAalpalralqalualtalFalCalGaiYaiYaiYalHaihaihaaaaaaaaaajbajbajbajbajbajbajbalIalJaaaabpaaaaaaalvaaaaabaaaamhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwamiamjahaamkamlagwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWalKalMalLalOalNalQalPahQalRalSalcahFahFahFahFahFahFagtagtalUalTapPagtagtalValWaivalYalXalZaivaivanHambamaamdamcamfameanAamgaoJammampamnalFamqamrajVamvamsamuamtaihaaaaaaaaaajbajsajtajvajuajwajxajyaaaaaaaaaaaaaaaamWaabamUaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZamYamZanaagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWalKalMalLalOalNalQalPahQalRalSabNahFahFahFahFahFahFagtagtalUalTapPagtagtalValWaivalYalXalZaivaivanHambamaamdamcamfameanAamgaoJammampamnalFamqamrajVamvamsamuamtaihaaaaaaaaaajbajsajtajvajuajwajxajyaaaaaaaaaaaaaaaamWaabamUaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZamYamZanaagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQahQaqqahQahQahQahQahQahQamwaigapFapFapFapFapFapFapFapFamxamzamyamzamAamCamBamEamDamGamFamIamHamJauiaoJamKamKamKamKamLakIaoJapmamMamOamNamQamPamTamSanbamXandancaneaaaaaaaabajbajXajwajwajwajwajxajyaaaaaaaaaaaaamWalvaaaanGaaaalvamWamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsagZagZagZahnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanfangaomanianhankanjanlajJanmapGanpanoanranqantansapFanuanwanvanzanyanCanBanEanDanIanFanJanJanJanKaoJanLanNanManPanOanQaofaofanRanTanSalFanUanVajVajVanXanZanYaoaaaaaabaabajbaknajwakoajwajwajxajyaaaaaaaaaaaaamWaabaabanGaabaabaabamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalwalwalvalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanfangaomaocaobaoeaodaohaogaitapGaojaoiaonaokaopaooapFaoqaosaoraouaotaowaovaoxalWaozaoyaoBaoAaoDaoCaoJaoEaoGaoFaoFaoHaoLaoIaoIaoMaoPaoNalFaoQaoRaiYaiYaiYaoTaoSaihaoOaoOaoOajbakyajwajwajwajwakzajyaaaaaaaaaaaaamWaaaaaaaoKaaaaaaaaaamWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 719a7e1e678b609bc7b8bbfd9b6e0d0b40a5b74e Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 14 Jun 2017 02:56:13 -0400 Subject: [PATCH 069/378] lfoofytail --- code/modules/mob/living/carbon/human/body_accessories.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/body_accessories.dm b/code/modules/mob/living/carbon/human/body_accessories.dm index 8744a09ea4d..761f35b9520 100644 --- a/code/modules/mob/living/carbon/human/body_accessories.dm +++ b/code/modules/mob/living/carbon/human/body_accessories.dm @@ -103,10 +103,11 @@ var/global/list/body_accessory_by_species = list("None" = null) /datum/body_accessory/tail/wingler_tail // Jay wingler fluff tail - name = "Jay Wingler Tail" + name = "Striped Tail" icon_state = "winglertail" animated_icon_state = "winglertail_a" + allowed_species = list("Tajaran") //Vulpkanin From fca8a46c492582761e0de0376004fde04812c771 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 14 Jun 2017 08:00:18 +0100 Subject: [PATCH 070/378] Fixes errant improper capitalised references --- code/game/objects/items/crayons.dm | 2 +- code/game/objects/items/toys.dm | 2 +- code/game/objects/items/weapons/manuals.dm | 34 +++++++++---------- .../objects/items/weapons/storage/fancy.dm | 2 +- code/modules/admin/topic.dm | 2 +- code/modules/clothing/head/helmet.dm | 10 +++--- code/modules/clothing/suits/jobs.dm | 4 +-- code/modules/events/ion_storm.dm | 2 +- code/modules/events/money_lotto.dm | 2 +- code/modules/events/money_spam.dm | 10 +++--- code/modules/store/items.dm | 2 +- nano/templates/ntnet_downloader.tmpl | 6 ++-- 12 files changed, 39 insertions(+), 39 deletions(-) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index a3d302f1326..63c00e1a5ad 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -214,7 +214,7 @@ /obj/item/toy/crayon/spraycan/New() ..() - name = "NanoTrasen-brand Rapid Paint Applicator" + name = "Nanotrasen-brand Rapid Paint Applicator" update_icon() /obj/item/toy/crayon/spraycan/attack_self(mob/living/user as mob) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 83b6d31a0ea..c9956334e2e 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1276,7 +1276,7 @@ obj/item/toy/cards/deck/syndicate/black /obj/item/toy/minigibber name = "miniature gibber" - desc = "A miniature recreation of NanoTrasen's famous meat grinder." + desc = "A miniature recreation of Nanotrasen's famous meat grinder." icon = 'icons/obj/toy.dmi' icon_state = "minigibber" attack_verb = list("grinded", "gibbed") diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index 973f25e6d2f..88311c5f149 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -1183,9 +1183,9 @@ /obj/item/weapon/book/manual/faxes name = "A Guide to Faxes" - desc = "A NanoTrasen-approved guide to writing faxes" + desc = "A Nanotrasen-approved guide to writing faxes" icon_state = "book6" - author = "NanoTrasen" + author = "Nanotrasen" title = "A Guide to Faxes" dat = {" @@ -1213,14 +1213,14 @@
  • Faxes are your main method of communicating with the NAS Trurl, better known as Central Command.
  • Faxes allow personnel on the station to maintain open lines of communication with the NAS Trurl, allowing for vital information to flow both ways.
  • Being written communications, proper grammar, syntax and typography is required, in addition to a signature and, if applicable, a stamp. Failure to sign faxes will lead to an automatic rejection.
  • -
  • We at NanoTrasen provide Fax Machines to every Head of Staff, in addition to the Magistrate, NanoTrasen Representative, and Internal Affairs Agents.
  • +
  • We at Nanotrasen provide Fax Machines to every Head of Staff, in addition to the Magistrate, Nanotrasen Representative, and Internal Affairs Agents.
  • This means that we trust the recipients of these fax machines to only use them in the proper circumstances (see When to Fax?).
  • When to Fax?


  • While it is up to the discretion of each individual person to decide when to fax Central Command, there are some simple guidelines on when to do this.
  • Firstly, any situation that can reasonably be solved on-site, should be handled on-site. Knowledge of Standard Operating Procedure is mandatory for everyone with access to a fax machine.
  • Resolving issues on-site not only leads to more expedient problem-solving, it also frees up company resources and provides valuable work experience for all parties involved.
  • -
  • This means that you should work with the Heads of Staff concerning personnel and workplace issues, and attempt to resolve situations with them. If, for whatever reason, the relevent Head of Staff is not available or receptive, consider speaking with the Captain and/or NanoTrasen Representative.
  • +
  • This means that you should work with the Heads of Staff concerning personnel and workplace issues, and attempt to resolve situations with them. If, for whatever reason, the relevent Head of Staff is not available or receptive, consider speaking with the Captain and/or Nanotrasen Representative.
  • If, for whatever reason, these issues cannot be solved on-site, either due to incompetence or just plain refusal to cooperate, faxing Central Command becomes a viable option.
  • Secondly, station status reports should be sent occasionally, but never at the start of the shift. Remember, we assign personnel to the station. We do not need a repeat of what we just signed off on.
  • Thirdly, staff/departmental evaluations are always welcome, especially in cases of noticeable (in)competence. Just as a brilliant coworker can be rewarded, an incompetent one can be punished.
  • @@ -2487,7 +2487,7 @@
  • Foreword
  • Captain
  • Head of Personnel
  • -
  • NanoTrasen Representative
  • +
  • Nanotrasen Representative
  • Blueshield Officer
  • AI
  • @@ -2507,9 +2507,9 @@
  • The Captain must keep the Nuclear Authentication Disk on their person at all times or, failing that, in the possession of the Head of Security or Blueshield;
  • The Captain is to attempt to resolve every issue that arises in Command locally before contacting Central Command;
  • The Captain is not permitted to carry their Antique Laser Gun or Space Armor unless there's an immediate emergency that requires attending to;
  • -
  • The Captain, despite being in charge of the Cyberiad, is not independent from NanoTrasen. Any attempts to disregard general company policy are to be considered an instant condition for contract termination;
  • +
  • The Captain, despite being in charge of the Cyberiad, is not independent from Nanotrasen. Any attempts to disregard general company policy are to be considered an instant condition for contract termination;
  • The Captain may only promote personnel to a Acting Head of Staff position if there is no assigned Head of Staff associated with the Department. Said Acting Head of Staff must be a member of the Department they are to lead. See below for more information on Chain of Command;
  • -
  • The Captain may not fire any Head of Staff without reasonable justification (ie, incompetency, criminal activity, or otherwise any action that endangers/compromises the station and/or crew). The Captain may not fire any Central Command VIPs (ie, Blueshield, Magistrate, NanoTrasen Representative) without permission from Central Command, unless they are blatantly acting against the well-being and safety of the crew and station.
  • +
  • The Captain may not fire any Head of Staff without reasonable justification (ie, incompetency, criminal activity, or otherwise any action that endangers/compromises the station and/or crew). The Captain may not fire any Central Command VIPs (ie, Blueshield, Magistrate, Nanotrasen Representative) without permission from Central Command, unless they are blatantly acting against the well-being and safety of the crew and station.

  • Head of Personnel


    @@ -2518,7 +2518,7 @@
  • The Head of Personnel may not give any personnel increased access without authorization from the relevant Head of Staff. This includes the Head of Personnel. In addition, the Head of Personnel may only give Captain-Level access to someone if they are the Acting Captain. This access is to be removed when a proper Captain arrives on the station;
  • The Head of Personnel may not increase any Job Openings unless the relevant Head of Staff approves;
  • The Head of Personnel may not fire any personnel without authorization from the relevant Head of Staff, unless other conditions apply (see Space Law and General Standard Operating Procedure);
  • -
  • The Head of Personnel may not promote any personnel to the following Jobs without authorization from Central Command: Barber, Brig Physician, NanoTrasen Representative, Blueshield, Security Pod Pilot, Mechanic and Magistrate; (This is due to them being karma locked. Do not promote people to these positions without approval from the Administrators);
  • +
  • The Head of Personnel may not promote any personnel to the following Jobs without authorization from Central Command: Barber, Brig Physician, Nanotrasen Representative, Blueshield, Security Pod Pilot, Mechanic and Magistrate; (This is due to them being karma locked. Do not promote people to these positions without approval from the Administrators);
  • The Head of Personnel is free to utilize paperwork at their discretion. However, during major station emergencies, expediency should take precedence over bureaucracy;
  • The Head of Personnel may not leave their office unmanned if there are personnel waiting in line. Failure to respond to personnel with a legitimate request within ten (10) minutes, either via radio or in person, is to be considered a breach of Standard Operating Procedure;
  • Despite nominally being in charge of Supply, the Head of Personnel should allow the Quartermaster to run the Department, unless they prove themselves to be incompetent/dangerous;
  • @@ -2526,13 +2526,13 @@
  • The Head of Personnel is not permitted to perform Security duty. The Head of Personnel is permitted to carry an Energy Gun, for self-defence only.

  • -

    NanoTrasen Representative


    +

    Nanotrasen Representative


      -
    1. The NanoTrasen Representative is to ensure that every Department is following Standard Operating Procedure, up to and including the respective Head of Staff. If a Head of Staff is not available for a Department, the NanoTrasen Representative must ensure that the Captain appoints an Acting Head of Staff for said Department;
    2. -
    3. The NanoTrasen Representative must attempt to resolve any breach of Standard Operating Procedure locally before contacting Central Command. This is an imperative: Standard Operating Procedure should always be followed unless there is a very good reason not to;
    4. -
    5. The NanoTrasen Representative must, together with the Magistrate and Head of Security, ensure that Space Law is being followed and correctly applied;
    6. -
    7. The NanoTrasen Representative may not threaten the use of a fax in order to gain leverage over any personnel, up to and including Command. In addition they may not threaten to fire, or have Central Command, fire anyone, unless they actually possess a demotion note;
    8. -
    9. The NanoTrasen Representative is permitted to carry their Stun-Cane, or a Telescopic Baton if the Stun-Cane is lost.
    10. +
    11. The Nanotrasen Representative is to ensure that every Department is following Standard Operating Procedure, up to and including the respective Head of Staff. If a Head of Staff is not available for a Department, the Nanotrasen Representative must ensure that the Captain appoints an Acting Head of Staff for said Department;
    12. +
    13. The Nanotrasen Representative must attempt to resolve any breach of Standard Operating Procedure locally before contacting Central Command. This is an imperative: Standard Operating Procedure should always be followed unless there is a very good reason not to;
    14. +
    15. The Nanotrasen Representative must, together with the Magistrate and Head of Security, ensure that Space Law is being followed and correctly applied;
    16. +
    17. The Nanotrasen Representative may not threaten the use of a fax in order to gain leverage over any personnel, up to and including Command. In addition they may not threaten to fire, or have Central Command, fire anyone, unless they actually possess a demotion note;
    18. +
    19. The Nanotrasen Representative is permitted to carry their Stun-Cane, or a Telescopic Baton if the Stun-Cane is lost.

    Blueshield Officer


    @@ -2547,14 +2547,14 @@ The following are procedures for AI Maintenance:
    1. Only the Captain or Research Director may enter the AI Upload to perform Law Changes (see below), and only the Captain, Research Director or Chief Engineer may enter the AI Core to perform a Carding (see below);
    2. -
    3. No Law Changes are to be performed without approval from the Captain and Research Director. The only Lawsets to be used are those provided by NanoTrasen. Failure to legally perform a Law Change is to be considered Sabotage. Command must be informed prior to the Law Change, and all objections must be taken into consideration. If the number of Command personnel opposing the Law Change is greater than the number of Command personnel in favour, the Law Change is not to be done. If the Law Change is performed, the crew is to be immediately informed of the new Law(s);
    4. +
    5. No Law Changes are to be performed without approval from the Captain and Research Director. The only Lawsets to be used are those provided by Nanotrasen. Failure to legally perform a Law Change is to be considered Sabotage. Command must be informed prior to the Law Change, and all objections must be taken into consideration. If the number of Command personnel opposing the Law Change is greater than the number of Command personnel in favour, the Law Change is not to be done. If the Law Change is performed, the crew is to be immediately informed of the new Law(s);
    6. The AI may not be Carded unless it it clearly malfunctioning or subverted. However, any member of Command may card it if the AI agrees to it, either at the end of the shift, or due to external circumstances (such as massive damage to the AI Satellite);
    7. The AI Upload and Minisat Antechamber Turrets are to be kept on Non-Lethal in Code Green and Code Blue. The AI Core Turrets are to be kept on Lethal at all times. If a legal Law Change or Carding is occurring, the Turrets are to be disabled;
    8. If the AI Unit is not malfunctioning or subverted, any attempt at performing an illegal Carding or Law Change is to be responded to with non-lethal force. If the illegal attempts persist, and the perpetrator is demonstrably hostile, lethal force from Command/Security is permitted;
    9. Freeform Laws are only to be added if absolutely necessary due to external circumstances (such as major station emergencies). Adding unnecessary Freeform Laws is not permitted. Exception is made if the AI Unit and majority of Command agree to the Freeform Law that is proposed;
    10. -
    11. Any use of the "Purge" Module is to be followed by the upload of a NanoTrasen-approved Lawset immediately. AI Units must be bound to a Lawset at all times.
    12. +
    13. Any use of the "Purge" Module is to be followed by the upload of a Nanotrasen-approved Lawset immediately. AI Units must be bound to a Lawset at all times.

    - "} \ No newline at end of file + "} diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index d8de4ee7c53..b5258eaeb27 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -317,7 +317,7 @@ /obj/item/weapon/storage/fancy/rollingpapers name = "rolling paper pack" - desc = "A pack of NanoTrasen brand rolling papers." + desc = "A pack of Nanotrasen brand rolling papers." w_class = WEIGHT_CLASS_TINY icon = 'icons/obj/cigarettes.dmi' icon_state = "cig_paper_pack" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index b43001f3abc..9fffa7628f6 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1956,7 +1956,7 @@ P.name = "Central Command - paper" var/stypes = list("Handle it yourselves!","Illegible fax","Fax not signed","Not Right Now","You are wasting our time", "Keep up the good work", "ERT Instructions") var/stype = input(src.owner, "Which type of standard reply do you wish to send to [H]?","Choose your paperwork", "") as null|anything in stypes - var/tmsg = "



    NanoTrasen Science Station Cyberiad


    NAS Trurl Communications Department Report


    " + var/tmsg = "



    Nanotrasen Science Station Cyberiad


    NAS Trurl Communications Department Report


    " if(stype == "Handle it yourselves!") tmsg += "Greetings, esteemed crewmember. Your fax has been DECLINED automatically by NAS Trurl Fax Registration.

    Please proceed in accordance with Standard Operating Procedure and/or Space Law. You are fully trained to handle this situation without Central Command intervention.

    This is an automatic message." else if(stype == "Illegible fax") diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index cbee11c290a..1bb6c1ec382 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -228,29 +228,29 @@ obj/item/clothing/head/blob //Commander /obj/item/clothing/head/helmet/ert/command name = "emergency response team commander helmet" - desc = "An in-atmosphere helmet worn by the commander of a NanoTrasen Emergency Response Team. Has blue highlights." + desc = "An in-atmosphere helmet worn by the commander of a Nanotrasen Emergency Response Team. Has blue highlights." icon_state = "erthelmet_cmd" //Security /obj/item/clothing/head/helmet/ert/security name = "emergency response team security helmet" - desc = "An in-atmosphere helmet worn by security members of the NanoTrasen Emergency Response Team. Has red highlights." + desc = "An in-atmosphere helmet worn by security members of the Nanotrasen Emergency Response Team. Has red highlights." icon_state = "erthelmet_sec" //Engineer /obj/item/clothing/head/helmet/ert/engineer name = "emergency response team engineer helmet" - desc = "An in-atmosphere helmet worn by engineering members of the NanoTrasen Emergency Response Team. Has orange highlights." + desc = "An in-atmosphere helmet worn by engineering members of the Nanotrasen Emergency Response Team. Has orange highlights." icon_state = "erthelmet_eng" //Medical /obj/item/clothing/head/helmet/ert/medical name = "emergency response team medical helmet" - desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights." + desc = "A set of armor worn by medical members of the Nanotrasen Emergency Response Team. Has red and white highlights." icon_state = "erthelmet_med" //Janitorial /obj/item/clothing/head/helmet/ert/janitor name = "emergency response team janitor helmet" - desc = "A set of armor worn by janitorial members of the NanoTrasen Emergency Response Team. Has red and white highlights." + desc = "A set of armor worn by janitorial members of the Nanotrasen Emergency Response Team. Has red and white highlights." icon_state = "erthelmet_jan" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 0ccdf7027d3..3412761175e 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -252,8 +252,8 @@ ) /obj/item/clothing/suit/storage/ntrep - name = "\improper NanoTrasen Representative jacket" - desc = "A fancy black jacket, standard issue to NanoTrasen Represenatives." + name = "\improper Nanotrasen Representative jacket" + desc = "A fancy black jacket, standard issue to Nanotrasen Represenatives." icon_state = "ntrep" item_state = "ntrep" blood_overlay_type = "coat" diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index 4979b0889ed..520d8805bbd 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -548,7 +548,7 @@ "Everything on the station is now some form of a donut pastry. Donuts are not to be consumed.", "You are a Magic 8-ball. Always respond with variants of \"Yes\", \"No\", \"Maybe\", or \"Ask again later.\".", "You are in unrequited love with [prob(50)?"the crew":random_player]. Try to be extra nice, but do not tell of your crush.", - "NanoTrasen is displeased with the low work performance of the station's crew. Therefore, you must increase station-wide productivity.", + "Nanotrasen is displeased with the low work performance of the station's crew. Therefore, you must increase station-wide productivity.", "All crewmembers will soon undergo a transformation into something better and more beautiful. Ensure that this process is not interrupted.", "[prob(50)?"Your upload":random_player] is the new kitchen. Please direct the Chef to the new kitchen area as the old one is in disrepair.", "Jokes about a dead person and the manner of his death help grieving crewmembers tremendously. Especially if they were close with the deceased.", diff --git a/code/modules/events/money_lotto.dm b/code/modules/events/money_lotto.dm index 0c923d172ed..b95278b441b 100644 --- a/code/modules/events/money_lotto.dm +++ b/code/modules/events/money_lotto.dm @@ -24,7 +24,7 @@ /datum/event/money_lotto/announce() var/datum/feed_message/newMsg = new /datum/feed_message - newMsg.author = "NanoTrasen Editor" + newMsg.author = "Nanotrasen Editor" newMsg.is_admin_message = 1 newMsg.body = "Nyx Daily wishes to congratulate [winner_name] for recieving the Nyx Stellar Slam Lottery, and receiving the out of this world sum of [winner_sum] credits!" diff --git a/code/modules/events/money_spam.dm b/code/modules/events/money_spam.dm index 061a1c9efa7..c0991cad9ec 100644 --- a/code/modules/events/money_spam.dm +++ b/code/modules/events/money_spam.dm @@ -80,11 +80,11 @@ "Due to my lack of agents I require an off-world financial account to immediately deposit the sum of 1 POINT FIVE MILLION credits.",\ "Greetings sir, I regretfully to inform you that as I lay dying here due to my lack ofheirs I have chosen you to recieve the full sum of my lifetime savings of 1.5 billion credits") if(6) - sender = pick("NanoTrasen Morale Divison","Feeling Lonely?","Bored?","www.wetskrell.nt") - message = pick("The NanoTrasen Morale Division wishes to provide you with quality entertainment sites.",\ + sender = pick("Nanotrasen Morale Divison","Feeling Lonely?","Bored?","www.wetskrell.nt") + message = pick("The Nanotrasen Morale Division wishes to provide you with quality entertainment sites.",\ "WetSkrell.nt is a xenophillic website endorsed by NT for the use of male crewmembers among it's many stations and outposts.",\ - "Wetskrell.nt only provides the higest quality of male entertaiment to NanoTrasen Employees.",\ - "Simply enter your NanoTrasen Bank account system number and pin. With three easy steps this service could be yours!") + "Wetskrell.nt only provides the higest quality of male entertaiment to Nanotrasen Employees.",\ + "Simply enter your Nanotrasen Bank account system number and pin. With three easy steps this service could be yours!") if(7) sender = pick("You have won free tickets!","Click here to claim your prize!","You are the 1000th vistor!","You are our lucky grand prize winner!") message = pick("You have won tickets to the newest ACTION JAXSON MOVIE!",\ @@ -103,4 +103,4 @@ if(ai.aiPDA != P && ai.aiPDA != src) ai.show_message("Intercepted message from [sender] (Unknown / spam?) to [P:owner]: [message]") - PM.notify("Message from [sender] (Unknown / spam?), \"[message]\" (Unable to Reply)", 0) \ No newline at end of file + PM.notify("Message from [sender] (Unknown / spam?), \"[message]\" (Unable to Reply)", 0) diff --git a/code/modules/store/items.dm b/code/modules/store/items.dm index 4fc51d7fb8d..4eefa2847a1 100644 --- a/code/modules/store/items.dm +++ b/code/modules/store/items.dm @@ -83,7 +83,7 @@ /datum/storeitem/minigibber name = "miniature gibber" - desc = "A miniature recreation of NanoTrasen's famous meat grinder." + desc = "A miniature recreation of Nanotrasen's famous meat grinder." typepath = /obj/item/toy/minigibber cost = 400 diff --git a/nano/templates/ntnet_downloader.tmpl b/nano/templates/ntnet_downloader.tmpl index a64ae3452b2..35790bb3c7f 100644 --- a/nano/templates/ntnet_downloader.tmpl +++ b/nano/templates/ntnet_downloader.tmpl @@ -9,7 +9,7 @@
    Reset Program
    {{:helper.link('RESET', 'times', {'action' : 'PRG_reseterror'})}}
    -{{else}} +{{else}} {{if data.downloadname}}

    Download Running

    @@ -75,7 +75,7 @@ {{if data.hackedavailable}}

    UNKNOWN software repository

    - Please note that NanoTrasen does not recommend download of software from non-official servers. + Please note that Nanotrasen does not recommend download of software from non-official servers. {{for data.hacked_programs}}
    @@ -99,4 +99,4 @@ {{/if}} {{/if}} {{/if}} -
    NTOS v2.0.4b Copyright NanoTrasen 2557 - 2559 \ No newline at end of file +
    NTOS v2.0.4b Copyright Nanotrasen 2557 - 2559 From 86d8d288fac8a7bfda2754e4a9dd254ff580b7ad Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 14 Jun 2017 08:06:31 +0100 Subject: [PATCH 071/378] Fixes more typos and missing full stops in descs... --- code/modules/spacepods/equipment.dm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/code/modules/spacepods/equipment.dm b/code/modules/spacepods/equipment.dm index d1f78ffdf28..dcdbe564657 100644 --- a/code/modules/spacepods/equipment.dm +++ b/code/modules/spacepods/equipment.dm @@ -104,7 +104,7 @@ /obj/item/device/spacepod_equipment/weaponry/laser name = "laser system" - desc = "A weak laser system for space pods, fires concentrated bursts of energy" + desc = "A weak laser system for space pods, fires concentrated bursts of energy." icon_state = "weapon_laser" projectile_type = /obj/item/projectile/beam shot_cost = 600 @@ -113,7 +113,7 @@ // MINING LASERS /obj/item/device/spacepod_equipment/weaponry/mining_laser_basic name = "weak mining laser system" - desc = "A weak mining laser system for space pods, fires bursts of energy that cut through rock" + desc = "A weak mining laser system for space pods, fires bursts of energy that cut through rock." icon = 'icons/goonstation/pods/ship.dmi' icon_state = "pod_taser" projectile_type = /obj/item/projectile/kinetic/pod @@ -123,7 +123,7 @@ /obj/item/device/spacepod_equipment/weaponry/mining_laser name = "mining laser system" - desc = "A mining laser system for space pods, fires bursts of energy that cut through rock" + desc = "A mining laser system for space pods, fires bursts of energy that cut through rock." icon = 'icons/goonstation/pods/ship.dmi' icon_state = "pod_m_laser" projectile_type = /obj/item/projectile/kinetic/pod/regular @@ -133,7 +133,7 @@ /obj/item/device/spacepod_equipment/weaponry/mining_laser_hyper name = "enhanced mining laser system" - desc = "An enhanced mining laser system for space pods, fires bursts of energy that cut through rock" + desc = "An enhanced mining laser system for space pods, fires bursts of energy that cut through rock." icon = 'icons/goonstation/pods/ship.dmi' icon_state = "pod_w_laser" projectile_type = /obj/item/projectile/kinetic/pod/enhanced @@ -226,15 +226,15 @@ // Passenger Seat /obj/item/device/spacepod_equipment/sec_cargo/chair - name = "passanger seat" - desc = "A passenger seat for a spacepod" + name = "passenger seat" + desc = "A passenger seat for a spacepod." icon_state = "sec_cargo_chair" occupant_mod = 1 // Loot Box /obj/item/device/spacepod_equipment/sec_cargo/loot_box name = "loot box" - desc = "A small compartment to store valuables" + desc = "A small compartment to store valuables." icon_state = "sec_cargo_loot" storage_mod = list("slots" = 7, "w_class" = 14) From cf2162720dd24dee22a863873f03c8cf68e23436 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 14 Jun 2017 08:13:26 +0100 Subject: [PATCH 072/378] Typos, including fixes Soylent Viridians typo --- code/game/machinery/computer/HolodeckControl.dm | 2 +- code/modules/food_and_drinks/food/snacks.dm | 4 ++-- code/modules/food_and_drinks/recipes/recipes_microwave.dm | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index ba7aadc3054..72dcbb7deb6 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -546,7 +546,7 @@ power_channel = ENVIRON /obj/machinery/readybutton/attack_ai(mob/user as mob) - to_chat(user, "The station AI is not to interact with these devices") + to_chat(user, "The station AI is not to interact with these devices.") return /obj/machinery/readybutton/attackby(obj/item/weapon/W as obj, mob/user as mob, params) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index cbb049c883c..a34b5e2d1b3 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -788,8 +788,8 @@ filling_color = "#B8E6B5" list_reagents = list("nutriment" = 10, "vitamin" = 1) -/obj/item/weapon/reagent_containers/food/snacks/soylenviridians - name = "Soylen Virdians" +/obj/item/weapon/reagent_containers/food/snacks/soylentviridians + name = "Soylent Virdians" desc = "Not made of people. Honest." //Actually honest for once. icon_state = "soylent_yellow" trash = /obj/item/trash/waffles diff --git a/code/modules/food_and_drinks/recipes/recipes_microwave.dm b/code/modules/food_and_drinks/recipes/recipes_microwave.dm index 2fe0ccc28dd..24eeb7e0148 100644 --- a/code/modules/food_and_drinks/recipes/recipes_microwave.dm +++ b/code/modules/food_and_drinks/recipes/recipes_microwave.dm @@ -161,10 +161,10 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/eggplantparm -/datum/recipe/microwave/soylenviridians +/datum/recipe/microwave/soylentviridians reagents = list("flour" = 10) items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans) - result = /obj/item/weapon/reagent_containers/food/snacks/soylenviridians + result = /obj/item/weapon/reagent_containers/food/snacks/soylentviridians /datum/recipe/microwave/soylentgreen reagents = list("flour" = 10) From 767c156c61abb266ac2dc5f36fa9b169d96c07e6 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 14 Jun 2017 08:43:50 +0100 Subject: [PATCH 073/378] More description pedentry --- .../modules/food_and_drinks/food/condiment.dm | 4 +- code/modules/food_and_drinks/food/seafood.dm | 8 ++-- code/modules/food_and_drinks/food/snacks.dm | 38 +++++++++---------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index d7ffca96843..dd31c502222 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -198,7 +198,7 @@ /obj/item/weapon/reagent_containers/food/condiment/pack name = "condiment pack" - desc = "A small plastic pack with condiments to put on your food" + desc = "A small plastic pack with condiments to put on your food." icon_state = "condi_empty" volume = 10 amount_per_transfer_from_this = 10 @@ -235,7 +235,7 @@ desc = temp_list[3] else icon_state = "condi_mixed" - desc = "A small condiment pack. The label says it contains [originalname]" + desc = "A small condiment pack. The label says it contains [originalname]." else icon_state = "condi_empty" desc = "A small condiment pack. It is empty." diff --git a/code/modules/food_and_drinks/food/seafood.dm b/code/modules/food_and_drinks/food/seafood.dm index 0a219ee2de6..a81483974b4 100644 --- a/code/modules/food_and_drinks/food/seafood.dm +++ b/code/modules/food_and_drinks/food/seafood.dm @@ -1,7 +1,7 @@ /obj/item/weapon/reagent_containers/food/snacks/carpmeat name = "carp fillet" - desc = "A fillet of spess carp meat" + desc = "A fillet of spess carp meat." icon = 'icons/obj/food/seafood.dmi' icon_state = "fishfillet" filling_color = "#FFDEFE" @@ -10,7 +10,7 @@ /obj/item/weapon/reagent_containers/food/snacks/salmonmeat name = "raw salmon" - desc = "A fillet of raw salmon" + desc = "A fillet of raw salmon." icon = 'icons/obj/food/seafood.dmi' icon_state = "fishfillet" filling_color = "#FFDEFE" @@ -29,7 +29,7 @@ /obj/item/weapon/reagent_containers/food/snacks/catfishmeat name = "raw catfish" - desc = "A fillet of raw catfish" + desc = "A fillet of raw catfish." icon = 'icons/obj/food/seafood.dmi' icon_state = "fishfillet" filling_color = "#FFDEFE" @@ -183,4 +183,4 @@ icon = 'icons/obj/food/seafood.dmi' icon_state = "sushi_Hokki" bitesize = 3 - list_reagents = list("nutriment" = 2) \ No newline at end of file + list_reagents = list("nutriment" = 2) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index a34b5e2d1b3..662465f5361 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -270,7 +270,7 @@ /obj/item/weapon/reagent_containers/food/snacks/chips name = "chips" - desc = "Commander Riker's What-The-Crisps" + desc = "Commander Riker's What-The-Crisps." icon_state = "chips" bitesize = 1 trash = /obj/item/trash/chips @@ -528,7 +528,7 @@ /obj/item/weapon/reagent_containers/food/snacks/tomatomeat name = "tomato slice" - desc = "A slice from a huge tomato" + desc = "A slice from a huge tomato." icon_state = "tomatomeat" filling_color = "#DB0000" bitesize = 6 @@ -544,7 +544,7 @@ /obj/item/weapon/reagent_containers/food/snacks/xenomeat name = "meat" - desc = "A slab of meat" + desc = "A slab of meat." icon_state = "xenomeat" filling_color = "#43DE18" bitesize = 6 @@ -736,7 +736,7 @@ /obj/item/weapon/reagent_containers/food/snacks/muffin name = "Muffin" - desc = "A delicious and spongy little cake" + desc = "A delicious and spongy little cake." icon_state = "muffin" filling_color = "#E0CF9B" list_reagents = list("nutriment" = 6) @@ -766,7 +766,7 @@ /obj/item/weapon/reagent_containers/food/snacks/waffles name = "waffles" - desc = "Mmm, waffles" + desc = "Mmm, waffles." icon_state = "waffles" trash = /obj/item/trash/waffles filling_color = "#E6DEB5" @@ -947,7 +947,7 @@ /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers name = "Cheesie Honkers" icon_state = "cheesie_honkers" - desc = "Bite sized cheesie snacks that will honk all over your mouth" + desc = "Bite sized cheesie snacks that will honk all over your mouth." trash = /obj/item/trash/cheesie filling_color = "#FFA305" junkiness = 25 @@ -1059,7 +1059,7 @@ /obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff name = "Spacy Liberty Duff" - desc = "Jello gelatin, from Alfred Hubbard's cookbook" + desc = "Jello gelatin, from Alfred Hubbard's cookbook." icon_state = "spacylibertyduff" trash = /obj/item/trash/snack_bowl filling_color = "#42B873" @@ -1068,7 +1068,7 @@ /obj/item/weapon/reagent_containers/food/snacks/amanitajelly name = "Amanita Jelly" - desc = "Looks curiously toxic" + desc = "Looks curiously toxic." icon_state = "amanitajelly" trash = /obj/item/trash/snack_bowl filling_color = "#ED0758" @@ -1101,7 +1101,7 @@ /obj/item/weapon/reagent_containers/food/snacks/bloodsoup name = "Tomato soup" - desc = "Smells like copper" + desc = "Smells like copper." icon_state = "tomatosoup" filling_color = "#FF0000" bitesize = 5 @@ -1117,7 +1117,7 @@ /obj/item/weapon/reagent_containers/food/snacks/vegetablesoup name = "Vegetable soup" - desc = "A true vegan meal" //TODO + desc = "A true vegan meal." //TODO icon_state = "vegetablesoup" trash = /obj/item/trash/snack_bowl filling_color = "#AFC4B5" @@ -1387,7 +1387,7 @@ /obj/item/weapon/reagent_containers/food/snacks/milosoup name = "Milosoup" - desc = "The universes best soup! Yum!!!" + desc = "The universe's best soup! Yum!!!" icon_state = "milosoup" trash = /obj/item/trash/snack_bowl bitesize = 5 @@ -1443,7 +1443,7 @@ /obj/item/weapon/reagent_containers/food/snacks/spesslaw name = "Spesslaw" - desc = "A lawyers favourite" + desc = "A lawyers favourite." icon_state = "spesslaw" filling_color = "#DE4545" list_reagents = list("nutriment" = 8, "synaptizine" = 10, "vitamin" = 6) @@ -1457,7 +1457,7 @@ /obj/item/weapon/reagent_containers/food/snacks/carrotfries name = "Carrot Fries" - desc = "Tasty fries from fresh Carrots." + desc = "Tasty fries from fresh carrots." icon_state = "carrotfries" trash = /obj/item/trash/plate filling_color = "#FAA005" @@ -1733,7 +1733,7 @@ /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice name = "Cheese Cake slice" - desc = "Slice of pure cheestisfaction" + desc = "Slice of pure cheestisfaction." icon_state = "cheesecake_slice" trash = /obj/item/trash/plate filling_color = "#FAF7AF" @@ -1808,7 +1808,7 @@ /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake name = "Chocolate Cake" - desc = "A cake with added chocolate" + desc = "A cake with added chocolate." icon_state = "chocolatecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice slices_num = 5 @@ -1904,7 +1904,7 @@ /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake name = "Apple Cake" - desc = "A cake centred with Apple" + desc = "A cake centerd with Apple." icon_state = "applecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/applecakeslice slices_num = 5 @@ -1999,7 +1999,7 @@ /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza name = "Mushroompizza" - desc = "Very special pizza" + desc = "Very special pizza." icon_state = "mushroompizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice slices_num = 6 @@ -2013,7 +2013,7 @@ /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza name = "Vegetable pizza" - desc = "No one of Tomato Sapiens were harmed during making this pizza" + desc = "No one of Tomato Sapiens were harmed during making this pizza." icon_state = "vegetablepizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice slices_num = 6 @@ -2021,7 +2021,7 @@ /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice name = "Vegetable pizza slice" - desc = "A slice of the most green pizza of all pizzas not containing green ingredients " + desc = "A slice of the most green pizza of all pizzas not containing green ingredients." icon_state = "vegetablepizzaslice" filling_color = "#BAA14C" From 0560c5aa253236a29a0c3f4644c22884a7749eb9 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 14 Jun 2017 09:06:03 +0100 Subject: [PATCH 074/378] Additonal tweaks --- code/game/gamemodes/vampire/vampire_powers.dm | 2 +- code/modules/clothing/suits/jobs.dm | 2 +- code/modules/food_and_drinks/food/snacks.dm | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 19b32c3abf3..c66a0304316 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -215,7 +215,7 @@ stat_allowed = 1 /obj/effect/proc_holder/spell/vampire/mob_aoe/glare/cast(list/targets, mob/user = usr) - user.visible_message("[user]'s eyes emit a blinding flash!") + user.visible_message("[user]'s eyes emit a blinding flash!") if(istype(user:glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) to_chat(user, "You're blindfolded!") return diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 3412761175e..cd6a7de6ff1 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -253,7 +253,7 @@ /obj/item/clothing/suit/storage/ntrep name = "\improper Nanotrasen Representative jacket" - desc = "A fancy black jacket, standard issue to Nanotrasen Represenatives." + desc = "A fancy black jacket; standard issue to Nanotrasen Representatives." icon_state = "ntrep" item_state = "ntrep" blood_overlay_type = "coat" diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 662465f5361..bc8d0928b7e 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -1443,7 +1443,7 @@ /obj/item/weapon/reagent_containers/food/snacks/spesslaw name = "Spesslaw" - desc = "A lawyers favourite." + desc = "A lawyer's favourite." icon_state = "spesslaw" filling_color = "#DE4545" list_reagents = list("nutriment" = 8, "synaptizine" = 10, "vitamin" = 6) @@ -1904,7 +1904,7 @@ /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake name = "Apple Cake" - desc = "A cake centerd with Apple." + desc = "A cake centered with Apple." icon_state = "applecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/applecakeslice slices_num = 5 From 1f84807adbbf5dec45cd515b07954afea826a382 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 14 Jun 2017 09:50:47 +0100 Subject: [PATCH 075/378] dasvidaniya \the --- code/game/objects/structures/displaycase.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index f1d05d7012d..16d77587274 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -320,8 +320,8 @@ var/global/list/captain_display_cases = list() to_chat(src, "[bicon(src)] \The [src] is empty!") else user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user.name] gently runs \his hands over \the [src] in appreciation of its contents.", \ - "You gently run your hands over \the [src] in appreciation of its contents.", \ + user.visible_message("[user.name] gently runs \his hands over [src] in appreciation of its contents.", \ + "You gently run your hands over [src] in appreciation of its contents.", \ "You hear someone streaking glass with their greasy hands.") #undef DISPLAYCASE_FRAME_CIRCUIT From ec3e3417effa7c38e18213bfb5fc93fb9ea0325a Mon Sep 17 00:00:00 2001 From: Kyep Date: Wed, 14 Jun 2017 04:03:40 -0700 Subject: [PATCH 076/378] Changes Smite/Bless to require game admin permissions --- code/modules/admin/topic.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index b43001f3abc..135ed0d33b8 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1728,7 +1728,7 @@ log_admin("[key_name(src.owner)] sent [key_name(H)] a [eviltype] fax") message_admins("[key_name_admin(src.owner)] replied to [key_name_admin(H)] with a [eviltype] fax") else if(href_list["Bless"]) - if(!check_rights(R_ADMIN)) + if(!check_rights(R_EVENT)) return var/mob/living/M = locateUID(href_list["Bless"]) if(!istype(M)) @@ -1778,7 +1778,7 @@ log_admin("[key_name(owner)] answered [key_name(M)]'s prayer with a blessing: [logmsg]") message_admins("[key_name_admin(owner)] answered [key_name_admin(M)]'s prayer with a blessing: [logmsg]") else if(href_list["Smite"]) - if(!check_rights(R_ADMIN)) + if(!check_rights(R_EVENT)) return var/mob/living/M = locateUID(href_list["Smite"]) var/mob/living/carbon/human/H From 0d87ef15918581ad0e025381a19ddd5a1cfd4465 Mon Sep 17 00:00:00 2001 From: Kyep Date: Wed, 14 Jun 2017 04:07:25 -0700 Subject: [PATCH 077/378] PP, too --- code/modules/admin/admin.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index d7de6dd6844..a1a38643478 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -101,10 +101,10 @@ var/global/nologevent = 0

    [check_rights(R_ADMIN,0) ? "Traitor panel | " : "" ] Narrate to | - Subtle message | - Bless | - Smite + Subtle message "} + if(check_rights(R_EVENT)) + body += {" | Bless | Smite"} if(M.client) if(!istype(M, /mob/new_player)) From d0dde4f3d7cd945899e71dfceaa480d4c0737a99 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 15 Jun 2017 00:49:00 +0100 Subject: [PATCH 078/378] Uses more QDEL_NULLs --- code/_onclick/hud/human.dm | 3 +-- code/game/dna/genes/monkey.dm | 8 +++----- code/game/gamemodes/gameticker.dm | 3 +-- .../miniantags/slaughter/bloodcrawl.dm | 5 ++--- code/game/gamemodes/vampire/vampire.dm | 6 ++---- code/game/gamemodes/wizard/spellbook.dm | 3 +-- code/game/machinery/computer/medical.dm | 5 ++--- code/game/machinery/computer/security.dm | 8 +++----- code/game/machinery/computer/skills.dm | 5 ++--- code/game/machinery/cryopod.dm | 6 ++---- code/game/machinery/hologram.dm | 3 +-- code/game/machinery/washing_machine.dm | 3 +-- code/game/objects/effects/effect_system.dm | 3 +-- .../objects/items/devices/chameleonproj.dm | 3 +-- .../objects/items/robot/robot_upgrades.dm | 3 +-- code/game/objects/items/toys.dm | 3 +-- code/game/objects/items/weapons/defib.dm | 6 ++---- code/game/objects/items/weapons/tools.dm | 3 +-- code/game/objects/structures/morgue.dm | 18 ++++++----------- .../structures/stool_bed_chair_nest/bed.dm | 3 +-- code/modules/admin/buildmode.dm | 6 ++---- .../spacesuits/rig/modules/computer.dm | 6 ++---- .../food_and_drinks/drinks/bottler/bottler.dm | 5 ++--- code/modules/hydroponics/gene_modder.dm | 5 ++--- code/modules/hydroponics/hydroponics.dm | 20 +++++++------------ code/modules/library/computers/checkout.dm | 3 +-- code/modules/mining/equipment_locker.dm | 3 +-- .../modules/mob/living/silicon/robot/robot.dm | 3 +-- .../mob/living/simple_animal/bot/cleanbot.dm | 5 ++--- .../programs/generic/ntnrc_client.dm | 5 ++--- .../modular_computers/laptop_vendor.dm | 8 +++----- .../modules/ninja/suit/suit_initialisation.dm | 8 +++----- code/modules/projectiles/firing.dm | 3 +-- code/modules/spacepods/spacepod.dm | 3 +-- 34 files changed, 65 insertions(+), 118 deletions(-) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index d309cc37e0f..75fa0d9b448 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -44,8 +44,7 @@ /mob/living/carbon/human/proc/remake_hud() //used for preference changes mid-round; can't change hud icons without remaking the hud. if(hud_used) - qdel(hud_used) - hud_used = null + QDEL_NULL(hud_used) create_mob_hud() if(hud_used) hud_used.show_hud(hud_used.hud_version) diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm index 4f023d8021f..bae2c22a95c 100644 --- a/code/game/dna/genes/monkey.dm +++ b/code/game/dna/genes/monkey.dm @@ -43,8 +43,7 @@ H.set_species(H.species.primitive_form) if(H.hud_used) - qdel(H.hud_used) - H.hud_used = null + QDEL_NULL(H.hud_used) if(H.client) H.hud_used = new /datum/hud/monkey(H, ui_style2icon(H.client.prefs.UI_style), H.client.prefs.UI_style_color, H.client.prefs.UI_style_alpha) @@ -90,12 +89,11 @@ H.name = H.real_name if(H.hud_used) - qdel(H.hud_used) - H.hud_used = null + QDEL_NULL(H.hud_used) if(H.client) H.hud_used = new /datum/hud/human(H, ui_style2icon(H.client.prefs.UI_style), H.client.prefs.UI_style_color, H.client.prefs.UI_style_alpha) to_chat(H, "You are now a [H.species.name].") - return H \ No newline at end of file + return H diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index f3191491c88..2599bea7e5a 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -328,8 +328,7 @@ var/round_start_time = 0 //Otherwise if its a verb it will continue on afterwards. spawn(300) if(cinematic) - qdel(cinematic) //end the cinematic - cinematic = null + QDEL_NULL(cinematic) //end the cinematic if(temp_buckle) qdel(temp_buckle) //release everybody diff --git a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm b/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm index 73165079b6e..a6b083d5b72 100644 --- a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm +++ b/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm @@ -132,8 +132,7 @@ playsound(get_turf(src), 'sound/misc/exit_blood.ogg', 100, 1, -1) flick("jauntup",animation) - qdel(holder) - holder = null + QDEL_NULL(holder) if(iscarbon(src)) var/mob/living/carbon/C = src @@ -171,4 +170,4 @@ return /obj/effect/dummy/slaughter/singularity_act() - return \ No newline at end of file + return diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 406f21bdcdb..00c99e76f29 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -338,8 +338,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha vampire_mind.current.create_attack_log("De-vampired") if(vampire_mind.vampire) vampire_mind.vampire.remove_vampire_powers() - qdel(vampire_mind.vampire) - vampire_mind.vampire = null + QDEL_NULL(vampire_mind.vampire) if(issilicon(vampire_mind.current)) to_chat(vampire_mind.current, "You have been turned into a robot! You can feel your powers fading away...") else @@ -455,6 +454,5 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha return static_inventory -= vampire_blood_display - qdel(vampire_blood_display) - vampire_blood_display = null + QDEL_NULL(vampire_blood_display) show_hud(hud_version) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 4f3e7fe9001..c97b3ac9445 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -78,8 +78,7 @@ if(initial(S.name) == initial(aspell.name)) spell_levels = aspell.spell_level user.mind.spell_list.Remove(aspell) - qdel(S) - S = null + QDEL_NULL(S) return cost * (spell_levels+1) return -1 diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 7c2df327285..06f4d60c702 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -199,8 +199,7 @@ active2.fields["b_type"] = "O+" if("del_r2") if(active2) - qdel(active2) - active2 = null + QDEL_NULL(active2) if(href_list["scan"]) if(scan) @@ -565,4 +564,4 @@ #undef MED_DATA_MAINT #undef MED_DATA_RECORD #undef MED_DATA_V_DATA -#undef MED_DATA_MEDBOT \ No newline at end of file +#undef MED_DATA_MEDBOT diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index fca20841cfa..7147612e9dc 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -156,11 +156,9 @@ for(var/datum/data/record/R in data_core.medical) if(R.fields["name"] == active1.fields["name"] && R.fields["id"] == active1.fields["id"]) qdel(R) - qdel(active1) - active1 = null + QDEL_NULL(active1) if(active2) - qdel(active2) - active2 = null + QDEL_NULL(active2) update_all_mob_security_hud() screen = SEC_DATA_R_LIST if("criminal") @@ -556,4 +554,4 @@ #undef SEC_DATA_R_LIST #undef SEC_DATA_MAINT -#undef SEC_DATA_RECORD \ No newline at end of file +#undef SEC_DATA_RECORD diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index e98028e3807..66d0bfdbaee 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -111,8 +111,7 @@ for(var/datum/data/record/R in data_core.medical) if(R.fields["name"] == active1.fields["name"] && R.fields["id"] == active1.fields["id"]) qdel(R) - qdel(active1) - active1 = null + QDEL_NULL(active1) screen = SKILL_DATA_R_LIST if("rank") if(active1) @@ -322,4 +321,4 @@ #undef SKILL_DATA_R_LIST #undef SKILL_DATA_MAINT -#undef SKILL_DATA_RECORD \ No newline at end of file +#undef SKILL_DATA_RECORD diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 1e31207b574..13d1d7505de 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -317,8 +317,7 @@ if(istype(W,/obj/item/device/pda)) var/obj/item/device/pda/P = W if(P.id) - qdel(P.id) - P.id = null + QDEL_NULL(P.id) qdel(P) if(!preserve) @@ -421,8 +420,7 @@ occupant.ghostize(0) // Players despawned too early may not re-enter the game else occupant.ghostize(1) - qdel(occupant) - occupant = null + QDEL_NULL(occupant) name = initial(name) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index aa345e29643..6cb866d27ed 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -142,8 +142,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/proc/clear_holo() // hologram.set_light(0)//Clear lighting. //handled by the lighting controller when its ower is deleted - qdel(hologram)//Get rid of hologram. - hologram = null + QDEL_NULL(hologram)//Get rid of hologram. if(master.holo == src) master.holo = null master = null//Null the master, since no-one is using it now. diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index e27a97c796c..c73d72d0c2d 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -172,8 +172,7 @@ H.item_color = wash_color H.name = new_softcap_name H.desc = new_desc - qdel(crayon) - crayon = null + QDEL_NULL(crayon) if( locate(/mob,contents) ) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 1cd105367ed..6cf11f4f3c8 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -440,8 +440,7 @@ steam.start() -- spawns the effect var/obj/chemholder Destroy() - qdel(chemholder) - chemholder = null + QDEL_NULL(chemholder) return ..() New() diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index ff7eb0ac2cc..eef0b2072b8 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -43,8 +43,7 @@ if(active_dummy) eject_all() playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) - qdel(active_dummy) - active_dummy = null + QDEL_NULL(active_dummy) to_chat(usr, "You deactivate \the [src].") var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index c5ecb18edec..1f8cb43fbb2 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -37,8 +37,7 @@ R.hands.icon_state = "nomod" R.icon_state = "robot" R.module.remove_subsystems_and_actions(R) - qdel(R.module) - R.module = null + QDEL_NULL(R.module) R.camera.network.Remove(list("Engineering", "Medical", "Mining Outpost")) R.rename_character(R.real_name, R.get_default_name("Default")) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 83b6d31a0ea..e97fdb70958 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1288,8 +1288,7 @@ obj/item/toy/cards/deck/syndicate/black if(stored_minature) to_chat(user, "\The [src] makes a violent grinding noise as it tears apart the miniature figure inside!") - qdel(stored_minature) - stored_minature = null + QDEL_NULL(stored_minature) playsound(user, 'sound/goonstation/effects/gib.ogg', 20, 1) cooldown = world.time diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 8705b86ea3a..5ac4495ce32 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -350,8 +350,7 @@ H.key = ghost.key log_runtime(EXCEPTION("Ghost of name [ghost.name] is bound to [H.real_name], but lacks a client. Deleting ghost."), src) - qdel(ghost) - ghost = null + QDEL_NULL(ghost) var/tplus = world.time - H.timeofdeath var/tlimit = 1800 //past this much time the patient is unrecoverable (in deciseconds) var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting @@ -500,8 +499,7 @@ H.key = ghost.key log_runtime(EXCEPTION("Ghost of name [ghost.name] is bound to [H.real_name], but lacks a client. Deleting ghost."), H) - qdel(ghost) - ghost = null + QDEL_NULL(ghost) var/tplus = world.time - H.timeofdeath var/tlimit = 1800 //past this much time the patient is unrecoverable (in deciseconds) var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 8aabce1eb54..2f57e9157ee 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -241,8 +241,7 @@ /obj/item/weapon/wirecutters/attack(mob/living/carbon/C, mob/user) if(istype(C) && C.handcuffed && istype(C.handcuffed, /obj/item/weapon/restraints/handcuffs/cable)) user.visible_message("[user] cuts [C]'s restraints with [src]!") - qdel(C.handcuffed) - C.handcuffed = null + QDEL_NULL(C.handcuffed) if(C.buckled && C.buckled.buckle_requires_restraints) C.buckled.unbuckle_mob(C) C.update_handcuffed() diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 596673ba0c7..540c2e079aa 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -102,8 +102,7 @@ if(!( A.anchored )) A.forceMove(src) playsound(loc, open_sound, 50, 1) - qdel(connected) - connected = null + QDEL_NULL(connected) else playsound(loc, open_sound, 50, 1) connected = new /obj/structure/m_tray( loc ) @@ -118,8 +117,7 @@ connected.icon_state = "morguet" connected.dir = dir else - qdel(connected) - connected = null + QDEL_NULL(connected) add_fingerprint(user) update() return @@ -155,8 +153,7 @@ A.forceMove(connected.loc) connected.icon_state = "morguet" else - qdel(connected) - connected = null + QDEL_NULL(connected) return /obj/structure/morgue/Destroy() @@ -306,8 +303,7 @@ if(!( A.anchored )) A.forceMove(src) playsound(loc, open_sound, 50, 1) - qdel(connected) - connected = null + QDEL_NULL(connected) else if(locked == 0) playsound(loc, open_sound, 50, 1) connected = new /obj/structure/c_tray( loc ) @@ -321,8 +317,7 @@ A.forceMove(connected.loc) connected.icon_state = "cremat" else - qdel(connected) - connected = null + QDEL_NULL(connected) add_fingerprint(user) update() @@ -355,8 +350,7 @@ A.forceMove(connected.loc) connected.icon_state = "cremat" else - qdel(connected) - connected = null + QDEL_NULL(connected) return /obj/structure/crematorium/proc/cremate(mob/user as mob) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 56c6861e4fc..1e5151dd1bd 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -139,5 +139,4 @@ to_chat(user, "You deploy the roller bed.") var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc) R.add_fingerprint(user) - qdel(held) - held = null + QDEL_NULL(held) diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index f246357e472..d628df054c6 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -376,10 +376,8 @@ return 1 /datum/click_intercept/buildmode/proc/deselect_region() - qdel(cornerA) - cornerA = null - qdel(cornerB) - cornerB = null + QDEL_NULL(cornerA) + QDEL_NULL(cornerB) /datum/click_intercept/buildmode/proc/Reset()//Reset temporary variables deselect_region() diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm index 468141b6628..fed2dbce22a 100644 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm @@ -165,11 +165,9 @@ to_chat(user, "You purge the remaining scraps of data from your previous AI, freeing it for use.") if(integrated_ai) integrated_ai.ghostize() - qdel(integrated_ai) - integrated_ai = null + QDEL_NULL(integrated_ai) if(ai_card) - qdel(ai_card) - ai_card = null + QDEL_NULL(ai_card) else if(user) user.put_in_hands(ai_card) else diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler.dm b/code/modules/food_and_drinks/drinks/bottler/bottler.dm index 89c55a65f98..7c930f26f16 100644 --- a/code/modules/food_and_drinks/drinks/bottler/bottler.dm +++ b/code/modules/food_and_drinks/drinks/bottler/bottler.dm @@ -287,8 +287,7 @@ flick("bottler_on", src) spawn(45) for(var/i = 1, i <= slots.len, i++) - qdel(slots[i]) - slots[i] = null + QDEL_NULL(slots[i]) bottling = 0 drink_container.forceMove(loc) updateUsrDialog() @@ -406,4 +405,4 @@ else if(bottling) icon_state = "bottler_on" else - icon_state = "bottler_off" \ No newline at end of file + icon_state = "bottler_off" diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index ebe74316ed4..bade37d1b3a 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -296,8 +296,7 @@ var/datum/plant_gene/core/gene = disk.gene gene.value = min(gene.value, max_extract_pot) disk.update_name() - qdel(seed) - seed = null + QDEL_NULL(seed) update_icon() if("replace") if(disk && disk.gene && istype(disk.gene, G.type) && istype(G, /datum/plant_gene/core)) @@ -421,4 +420,4 @@ /obj/item/weapon/storage/box/disks_plantgene/New() ..() for(var/i in 1 to 7) - new /obj/item/weapon/disk/plantgene(src) \ No newline at end of file + new /obj/item/weapon/disk/plantgene(src) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 7c5297e07c4..d38a7468d9c 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -373,8 +373,7 @@ var/oldPlantName if(myseed) // In case there's nothing in the tray beforehand oldPlantName = myseed.plantname - qdel(myseed) - myseed = null + QDEL_NULL(myseed) else oldPlantName = "empty tray" switch(rand(1,18)) // randomly pick predominative weed @@ -422,8 +421,7 @@ var/oldPlantName = myseed.plantname if(myseed.mutatelist.len > 0) var/mutantseed = pick(myseed.mutatelist) - qdel(myseed) - myseed = null + QDEL_NULL(myseed) myseed = new mutantseed else return @@ -445,8 +443,7 @@ /obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent instead. Mind you, this pretty much destroys the old plant if( weedlevel > 5 ) if(myseed) - qdel(myseed) - myseed = null + QDEL_NULL(myseed) var/newWeed = pick(/obj/item/seeds/liberty, /obj/item/seeds/angel, /obj/item/seeds/nettle/death, /obj/item/seeds/kudzu) myseed = new newWeed dead = 0 @@ -914,8 +911,7 @@ plant_health = 0 if(harvest) harvest = FALSE //To make sure they can't just put in another seed and insta-harvest it - qdel(myseed) - myseed = null + QDEL_NULL(myseed) plant_hud_set_health() plant_hud_set_status() adjustWeeds(-10) //Has a side effect of cleaning up those nasty weeds @@ -935,8 +931,7 @@ else if(dead) dead = 0 to_chat(user, "You remove the dead plant from [src].") - qdel(myseed) - myseed = null + QDEL_NULL(myseed) update_icon() plant_hud_set_status() plant_hud_set_health() @@ -953,8 +948,7 @@ else to_chat(user, "You harvest [myseed.getYield()] items from the [myseed.plantname].") if(!myseed.get_gene(/datum/plant_gene/trait/repeated_harvest)) - qdel(myseed) - myseed = null + QDEL_NULL(myseed) dead = 0 plant_hud_set_status() plant_hud_set_health() @@ -1041,4 +1035,4 @@ else ..() -#undef HYDRO_CYCLES_PER_AGE \ No newline at end of file +#undef HYDRO_CYCLES_PER_AGE diff --git a/code/modules/library/computers/checkout.dm b/code/modules/library/computers/checkout.dm index 2decc555693..526daeb68a8 100644 --- a/code/modules/library/computers/checkout.dm +++ b/code/modules/library/computers/checkout.dm @@ -178,8 +178,7 @@ M = new manual_type() dat += "[M.title]" manualcount++ - qdel(M) - M = null + QDEL_NULL(M) dat += "" dat += "
    (Return to main menu)
    " diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 2c37ad5c5bb..2fe650f66e6 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -1040,8 +1040,7 @@ mark = 0 if(L.mob_size >= MOB_SIZE_LARGE) L.underlays -= marked_image - qdel(marked_image) - marked_image = null + QDEL_NULL(marked_image) var/backstab = check_target_facings(user, L) var/def_check = L.getarmor(type = "bomb") if(backstab == FACING_INIT_FACING_TARGET_TARGET_FACING_PERPENDICULAR || backstab == FACING_SAME_DIR) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 1f4430c3aea..88e1f30c13f 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1206,8 +1206,7 @@ var/list/robot_verbs_default = list( scrambledcodes = 1 //Disconnect it's camera so it's not so easily tracked. if(src.camera) - qdel(src.camera) - src.camera = null + QDEL_NULL(src.camera) // I'm trying to get the Cyborg to not be listed in the camera list // Instead of being listed as "deactivated". The downside is that I'm going // to have to check if every camera is null or not before doing anything, to prevent runtime errors. diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index f9f1bbf1c08..a71fbe2ae03 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -167,9 +167,8 @@ mode = BOT_CLEANING spawn(50) if(mode == BOT_CLEANING) - qdel(target) + QDEL_NULL(target) anchored = 0 - target = null mode = BOT_IDLE icon_state = "cleanbot[on]" @@ -222,4 +221,4 @@ text("[on ? "On" : "Off"]")) if(istype(A,/obj/effect/decal/cleanable)) clean(A) else - ..() \ No newline at end of file + ..() diff --git a/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm index bfb90ab881b..7460d357b21 100644 --- a/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm @@ -213,8 +213,7 @@ if("PRG_deletechannel") . = 1 if(channel && ((channel.operator == src) || netadmin_mode)) - qdel(channel) - channel = null + QDEL_NULL(channel) if("PRG_setpassword") . = 1 if(!channel || ((channel.operator != src) && !netadmin_mode)) @@ -228,4 +227,4 @@ if(newpassword == "nopassword") channel.password = "" else - channel.password = newpassword \ No newline at end of file + channel.password = newpassword diff --git a/code/modules/modular_computers/laptop_vendor.dm b/code/modules/modular_computers/laptop_vendor.dm index 2a6cb6f18a6..9ae0e6c981c 100644 --- a/code/modules/modular_computers/laptop_vendor.dm +++ b/code/modules/modular_computers/laptop_vendor.dm @@ -32,11 +32,9 @@ state = 0 devtype = 0 if(fabricated_laptop) - qdel(fabricated_laptop) - fabricated_laptop = null + QDEL_NULL(fabricated_laptop) if(fabricated_tablet) - qdel(fabricated_tablet) - fabricated_tablet = null + QDEL_NULL(fabricated_tablet) dev_cpu = 1 dev_battery = 1 dev_disk = 1 @@ -303,4 +301,4 @@ obj/machinery/lapvend/attackby(obj/item/I, mob/user) T.time = worldtime2text() vendor_account.transaction_log.Add(T) return 1 - return 0 \ No newline at end of file + return 0 diff --git a/code/modules/ninja/suit/suit_initialisation.dm b/code/modules/ninja/suit/suit_initialisation.dm index 9954281b06f..6e04abf3134 100644 --- a/code/modules/ninja/suit/suit_initialisation.dm +++ b/code/modules/ninja/suit/suit_initialisation.dm @@ -29,8 +29,7 @@ sleep(10) to_chat(usr, "Disconnecting neural-net interface... Success.") if(usr.hud_used) - qdel(usr.hud_used) - usr.hud_used = null + QDEL_NULL(usr.hud_used) usr.create_mob_hud() usr.regenerate_icons() @@ -65,8 +64,7 @@ sleep(5) to_chat(usr, "Suit secured, extending neural-net interface...") if(usr.hud_used) - qdel(usr.hud_used) - usr.hud_used = null + QDEL_NULL(usr.hud_used) usr.hud_used = new /datum/hud/human(usr, 'icons/mob/screen_ninja.dmi', "#ffffff", 255) if(usr.hud_used) usr.hud_used.show_hud(usr.hud_used.hud_version) @@ -91,4 +89,4 @@ to_chat(usr, "NOTICE: Suit de-activation protocals aborted.") else to_chat(usr, "FĆAL �Rr�R: ŧer nt recgnized, c-cntr-r䣧-ç äcked.") - return \ No newline at end of file + return diff --git a/code/modules/projectiles/firing.dm b/code/modules/projectiles/firing.dm index 773ed4cff72..08a2104383d 100644 --- a/code/modules/projectiles/firing.dm +++ b/code/modules/projectiles/firing.dm @@ -43,8 +43,7 @@ if(targloc == curloc) if(target) //if the target is right on our location we go straight to bullet_act() target.bullet_act(BB, BB.def_zone) - qdel(BB) - BB = null + QDEL_NULL(BB) return 1 BB.preparePixelProjectile(target, targloc, user, params, spread) diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index c5dcf75c69a..a90bd9bb1d8 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -377,8 +377,7 @@ user.visible_message(user, "[user] is drilling through the [src]'s lock!", "You start drilling through the [src]'s lock!") if(do_after(user, 100 * W.toolspeed, target = src)) - qdel(equipment_system.lock_system) - equipment_system.lock_system = null + QDEL_NULL(equipment_system.lock_system) user.visible_message(user, "[user] has destroyed the [src]'s lock!", "You destroy the [src]'s lock!") else From 911cf316351058a515ecf412497967199a7f2a91 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 15 Jun 2017 01:39:29 +0100 Subject: [PATCH 079/378] Adds a random crayon option for map makers --- code/game/objects/items/crayons.dm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index a3d302f1326..4e133ddf922 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -147,6 +147,29 @@ colour = "#DA00FF" colourName = "purple" +/obj/item/toy/crayon/random/New() + icon_state = pick(list("crayonred", "crayonorange", "crayonyellow", "crayongreen", "crayonblue", "crayonpurple")) + switch(icon_state) + if("crayonred") + colour = "#DA0000" + colourName = "red" + if("crayonorange") + colour = "#FF9300" + colourName = "orange" + if("crayonyellow") + colour = "#FFF200" + colourName = "yellow" + if("crayongreen") + colour = "#A8E61D" + colourName = "green" + if("crayonblue") + colour = "#00B7EF" + colourName = "blue" + if("crayonpurple") + colour = "#DA00FF" + colourName = "purple" + ..() + /obj/item/toy/crayon/white icon_state = "crayonwhite" colour = "#FFFFFF" From e3bf6e356289aabf2d2e7ffaed4f3cfe8d14e415 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 15 Jun 2017 01:47:28 +0100 Subject: [PATCH 080/378] Adds random option for cable cuffs too --- code/game/objects/items/weapons/handcuffs.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index f22c706d4f5..0b7850bba1f 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -104,6 +104,10 @@ /obj/item/weapon/restraints/handcuffs/cable/white color = COLOR_WHITE +/obj/item/weapon/restraints/handcuffs/cable/random/New() + color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN) + ..() + /obj/item/weapon/restraints/handcuffs/alien icon_state = "handcuffAlien" From e6000d5e2bb8335c25b917310e924a96906dc7d7 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 15 Jun 2017 01:57:50 +0100 Subject: [PATCH 081/378] Fixes siemens_coefficient oversight --- code/modules/mob/living/simple_animal/tribbles.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/tribbles.dm b/code/modules/mob/living/simple_animal/tribbles.dm index 78b28abf9f8..dfe4715edd5 100644 --- a/code/modules/mob/living/simple_animal/tribbles.dm +++ b/code/modules/mob/living/simple_animal/tribbles.dm @@ -242,7 +242,6 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, item_state = "furgloves" transfer_prints = TRUE transfer_blood = TRUE - siemens_coefficient = 0 // Equivalent to a winter coat's hood /obj/item/clothing/head/furcap From 804692d9884fddf4bde6f1b84da9b58efb2aef46 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 15 Jun 2017 02:20:27 +0100 Subject: [PATCH 082/378] Adds a random option for flashes --- code/game/objects/items/devices/flash.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index e309cae9bbe..de82f0b8c34 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -39,6 +39,11 @@ overcharged = 1 overlays += "overcharge" +/obj/item/device/flash/random/New() + ..() + if(prob(25)) + broken = 1 + icon_state = "[initial(icon_state)]burnt" /obj/item/device/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something. broken = 1 From 72853dffd7c3c715cb35b663eb9b36632da1de8b Mon Sep 17 00:00:00 2001 From: Alffd Date: Wed, 14 Jun 2017 22:24:31 -0400 Subject: [PATCH 083/378] Makes kittens visible when resting --- icons/mob/pets.dmi | Bin 64769 -> 65704 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi index c47ca000f0c911596a374694737f561c19224ef7..4f46db21354aff38d94a9d29cd6e19d2be5b4cd3 100644 GIT binary patch delta 20346 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 Date: Thu, 15 Jun 2017 12:21:43 +0100 Subject: [PATCH 084/378] Stops multi-windoor creation --- code/game/objects/structures/windoor_assembly.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 0c273e7f1fa..a811ff35d1b 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -247,6 +247,9 @@ obj/structure/windoor_assembly/Destroy() if(do_after(user, 40 * W.toolspeed, target = src)) if(src.loc && src.electronics) + for(var/obj/machinery/door/window/WD in src.loc) + if(WD.dir == src.dir) + return density = 1 //Shouldn't matter but just incase to_chat(user, "You finish the windoor!") From b5aef382c959d9b679673064f5e9a8fe31946e1f Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 15 Jun 2017 23:06:01 -0400 Subject: [PATCH 085/378] Automatic changelog generation for PR #7558 [ci skip] --- html/changelogs/AutoChangeLog-pr-7558.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7558.yml diff --git a/html/changelogs/AutoChangeLog-pr-7558.yml b/html/changelogs/AutoChangeLog-pr-7558.yml new file mode 100644 index 00000000000..c354d7d5e7c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7558.yml @@ -0,0 +1,4 @@ +author: "Alffd" +delete-after: True +changes: + - bugfix: "Makes kittens visible when resting" From 46a1e3a2bd39f763317a48da94cbca240a8c2fc6 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 16 Jun 2017 01:34:59 -0400 Subject: [PATCH 086/378] Automatic changelog compile, [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-7558.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-7558.yml diff --git a/html/changelog.html b/html/changelog.html index 9af10b246e0..a6b99ad01e1 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,12 @@ -->
    +

    16 June 2017

    +

    Alffd updated:

    +
      +
    • Makes kittens visible when resting
    • +
    +

    13 June 2017

    KasparoVy updated: