From 36afce275665798594bbc4e30f38b3189f09e1a2 Mon Sep 17 00:00:00 2001 From: Citinited Date: Sun, 26 Mar 2017 06:37:00 +0100 Subject: [PATCH 001/204] 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/204] 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/204] 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/204] 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/204] 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/204] 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/204] 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/204] 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/204] 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/204] 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 zcmb_?by!s4^Y1~Bk`|B#MY>#4S~{egr9)~FkQ9jnf}n(ebc?Wbh_G}@iF7RuBGRP- z3sQR*{eFM<-sic0-u>gxBp zf2P~2i*q81h9U6R3Fc-z3HQ2fNF)rkxQgXAkZSmRc=8HHIDjrjzx-=RH;rwK+!q$b z7zjRX_-hF6-LO$Pe709fg7|ln9`GyhzkJ+2CaA>KKOL#(n!?H3GH*N_Dl8uy{RA zI9x~Fg$qujug>R7rbh_JFr2v%lxFIDy-^VSbT2)@je>AJD294%E^YnaM+TOP#B~TX-o81S4F|3tqWHj5?cP(dcn2zYla%1 zmzFx--Q;08F3b*$Gf#%ERgKGW!VAWsYH);(`eQaYQl6^Z5`20f2P}7QoUGE~w-5MIB%v1OQAzd$WY_ zxq4{Ads*N#VPsrAXU;wLGV8Fy?(e{> zh;kf2{sur3o@6^HzQKY?LwG!>7bCvG5U!^eMWz=8*~kjhQCCma(}1jBuep@ysY81I zu9ZBAxn3i~s7AzGuaU`faUqbHz1|peaQKV_W-rDjCgf0zK8ze3j^iG z1Je~g>e_p~On8r}(i=bt0E9!-|3;SX6%9rjA1EtC#$vll1TUx2Br zaa|+h8ZOs(y9U62NEpVMYm!FtFBb-h_($3iU3(6LAfbP`utCIsNSHdN@L&}p8%dZ7 zM?$@ZZvuiW!ViHE#+i>2pVh`ptn=>jV1-BlfGQUz#xW2~kzL3AIw9BO-=Q#Zg_s6h z{|`NQos1aqb%twpmX{U=@uAqjqmbBpnYUwbsIE_hk4bHe&0oaFtLG>Ejc2kE9Xu zyVS=`SDZZlo_YZQl({fRAo)*blK)lazeI6ks{Ahmu1WhCaS&5?|2Xnr{tr(0=yfsw zW$4Ir!7*F#{$}}ZxQ_aN85HWA@TC9hf?wC-e?%y*k)$W_4;PpjhWw}MFU0iJ3I56b zWq?T(*KYpXf`Qz%VBTL2X84QLYhBk0F>t;6Uk1j~U+aGvdh+;e|HHVpgmLR117qpG zvuiB?F#0#8LD( z0E!2Q@H#dL=p9YeBzPEz`Ty1(HKxeA((K;KabQXp3QK#bBfnWtFs|-eEut=W9WFgg zWgrDNi<91|t5@_;+r^}Z>FIG}8YiX;B1z=c`4H4*(belv7+zihrg8Ft7;IIxhQ+JH zD%NQ1K8kP5$#HTaW^7|brlA2OCAAn02$VT&Nc=UXvqO+{UPB@$3y(3XGhme>c)4C= zh42}dSdopa05XZwNoZ{2I+ORP+y;}kdIjeCH!O{JH}Gd8!UQ%Xvau9KDuKW3Qiee{ z>_GY?C(I3kGzYy#JFjKr8fai6;wKE@Boe1gM8KC=58#pcgLm-~10Tm<(`$E-g<_ft zA@CY=DT~3ho$!BYv5opy-v7I(dvO4O{UHG0m~>VSj+e%MFVy<|f%Hc1D0ybW-BdkD z;%&LONuB6q>qsMyusb2Il&`O4Uoe-p*O;Jqy(LRR+U_+PsEfN)ZzSD)nN^$hxSvQ) z3ku`2|H8=usiPDOr>vcWZeiNEZCSN<3`DJ@Cq;dOCDESD5oEz&2%`!3hH-Khxc4DF zeRcEaDL_C@dzT9$E~lo8X_1&83vi0*OGY8DogCI5N=V5(l2=q#RoBqc(KGm;`^b=x zkiW8zFk?u_zdOZ8%zu~u-YH%ScBeQ8&|28opwUmzXbLnMyoE;7qS1HIXl(R3dQWle zGj0;zk*2G=e;ISCQ7M|$uWzD8vdrS(&yK-KTSe2!+@5guah%LL=W_Q659x&u$)mPb zN42XX`_jtj#Yw5bBZCSd^rfxf8<$PdmjaG;MXnjYXixGohPo(m#=dOhQCK(3p%+`h zQ?AQV6m%P0b(8e?wi9;&s;C`K*fJTXZf?j*D^Ts|D;17= zjAkFLGVY9QYDn|Bk&iIouD-5)nd^<_=8(`HzV{IexR@-~#A3OT$AVZ$5~eDR{zO0pWXu6omy$~TR@=AP2Jcy;QFbRM*vCoHBO_dZ-d ztN_Dn#=M@kt$H*_Pn|m<17?p+EDMCEB^>NzVn{V_;0_3m__Zir>P^qSdnfV=oi!XE zXH^Ty1SE?xe}}bAYf|YiDqZS)s;^~QVF-8N$#cx?s~8JC2rhNd^^?79`Fb{V;UM{7 zZQTO7|77nra-M$Tdx`dGf$5!woOxF*gg%(rx_+D@6t`F1Ct;_>Pw*)2YslGL{)*g; zzg7^nPIGsK`^U)pEhla5ii(xaWq+b7o1jMrI}vC4&TAh{4}#Lm)+4%o8}6C8HEXn1 zNp6cGpR_poh{f9N`xbCEhB#*4%ouvslhzp zA$gq0oQC178syjhV=$muVVpJKXhh)CiZ$_Vf!?l$vcqm#(#8Nct|ubWQgem|e&4?P zlE#`TRNApkyT0(O9KRhT|FS`>;+bN*J%!o*!U2lfyvTSSjTi-1*pO#N^GUuzLdgf=u6{XlOS91++`q!W^W9_=wIMb~2^@-o}%ye%^X&14(W zGR|H&Ay*&f)-6+hNIyWv!I$^;?iDqBWS;-}K=u#Iu#rECsT|oiQf+BBXWE=_wPntt zdS;5PTIkG-uxi>7zdSuqn0DA{Cxz~`$z(Zcc3rK63lmSNx4$NrG}EMle8l4c)rRFy z-PqP|)Zp=bd$sIXMJ|E89Qy<7O6k^=*+>Q_j68KYi_a%M*snsG%h}{HqNQ?qmTwk& z-kx~{Wm%UR$Kl!sh-WtB+!@;Xn#x|plw?|jmY!bzRJ&E3n+nw`X>>9?d@^8em|!g| zyqgu*_ViU2?}kVEUf6mYDEVmsR_*+0Ui0=&jf{!kz2;j$YM3#kdo-r8H*)U} z$~VwI8b=HJ8_*3aBXD_%A02Ii1LWkM!ph=)U0wL2^*n3BQ7O_^1v6UGHRDlXauak} zG0YiNkMC{#2-<)hNNFq(;PP0kPe+(M`RO{o9ew0%tD3fcd#+sDEc4s~bd)#LGc@o3 z+eDg+hGO@7K-`;sw`jfvFm2+-Motk987g&I>E!lY8nLz35eNMUD;Q~R?usH(UYc~) zRA=_QbLiv#LjGXoQF6=2>A7!FXTG8$cdOb_I;}N*s5C`kv?jGdhEYrt_sr)l72SuD z5donJiO4`L>{~z3-Z__LpaOebV+H*o%+J{QicrIGd9I-U_mvdhN{>+7eEaM-Uvm3N zPpTJG9gClv(-Tx4t$f6Xd8rbdu(wYC&OeoONVwC)y}2v9*HZk^kEkK4W}3GC`@&LO zb`(i%e}Sigm-fZV}n`4)w}uQ zNAnNlvzJ222{ATr)oLuf;Y!|LXPzJ;GV7PdgHj}kfh#!uy=j~1@M(qe0kx7zU76-o zR9p#b$1`rP-&=()RUn3vY2bD;mb!0d}k$otTg z7hisMo}uireas_5!(M^@m%&gv91+}U-m194nT4f+$|hadgln|tkjtZBlc1VuC*>A8 z(qn;xxetQMvG!^WQYi;f*?`eabu4t235&Ip1Y~_Hl8K~z&P7d4_s7>fJa^rl7YF8+ zeVKZX&qrvWGkNgTa3t^pNG#KU~(>L!t zH%~R%aF_n@z7^Krb>Oxhb>RI3`Bt#2ah!F)fa*ug!KFPY`gPG-DBYB}DC6f?l#tfb zEq0l={g1(g=ckmQin_>pCfQWa690`i9#fI;<-XLL!qgIc*i>1Y`|kd!?th@Q2=O!< z@6)-osOMyj8Mh*ihF;Lkr&Cda6!D2O;f% z;dNiOa*-9;m4@_zX>YC6>ZmGWk$36!Qv-2Bi{~QE^UNGpdPH3}WqRqA>o3RUjXbZ4 zi}lORv@Rducz5ss9n8R^^XL9dK0o7!oP{m-`phy4mG5__&AYKhmh5L#vZoV1_xC5$ zuD5^gDpOShE@?;xLc)!s*vB_7eiChWOwd@p@Sx1F!fORR%eW7tgzypSxK#TH^*^qTr zp|{M=(tIO&x^&#h5d(tWMa3vx0+Eoy4}RZ6)soxlHDYC})wD=Ih40uvR!Q}#R^ zHMjTl2yEgI7JXZJ7(f+iT=i|%$Xmi6PG*~OerGHSoqOtiY)W4w8Qj;C_F(|^x~_G7 zc)-D#3#4h(sVA-<3Fs*}OL&c9ruQ=5H`5wxvS$2~xN=%uO{Jh8Dv(Rz%bOVUwwpXlw=UYPH31Z_>M}H25%AO_J^g3j}kf^cH#N(SZU6XTuj>d?xS<2UuF8$8BZ=kilaD#?A&RzftX{J8=JEq6u-|u83tzKR%n2t*Ua($_>x9 zL$FWiU7efDRt2r;P6A+-53c-sEKMYv&AK z=IHZ)s;vs`k!RWErf323Wn@}U$*!oI)w)w-D4XW>{pP7z5$p}_jnlgBxkWudiY$%Y zr$b%s@$c!PHw1mLY18$$MIz1uJl~d7fN_vvv#G|}o0npL_Ba$1f4lkF2y4dJp@T1e zeyaC|9eJ0$!T)G-m`J&tYn{Le(d>G5AKS@d|2D#%pVUGni@Nq$Gy^=WvcJ?A8HjKE zcH4b^l|nua+86+;q)(yhfwj*v=;oR=v?;p!ywJhKq0KhYll~mP}MxYZsnq7X@OG?9kfO5($4O`|Z-`o#`GNTdznVBmXf(Big!Qn5Sd?hizNbga(a^riQg|HD{V>I_Zf#A@ z_T!wjyCIe8-RjOA3N=f{LSEc@FDvj14*DkR8@->)J>BefeNNx99RtPp{Yc~3Z1;jo zRyxotqn`r)ab7H>*M*38V1BVs%tz#o%5v4DZ-eEk z3aupSe7jd1*@`nowF4_#@AT;Ux z^i^^!Kj7L(w@(JUl$rX~3qnLlCz_?Vzrhc<-fSPz1}}w{;mD0wJ>3tCM*5DQQafYzYnm5 z1Bx_P@)byY083dz4?0J_o8Y!pH9`iz$z9q_&p<+7Y@Bka&-p+qe63AnDQ)pc>X&VB zd_6SUzo}J8!YD=Rwdh86K51GhqK4v6>nCLGZS4=XBL@j4%`R1Kf~IF0WAM z;)Ki9PFaK)cVobdQpQ}Lx{?NgT|H7cm-yd8wAdt}(uVB6?Agx-nZQq>DU{XM5UcIO=s>?$*;8K#|o6{$e`q(1SXCr>#@R#wo)pXd$s_7TW zbB=u+Jq@cl`KR<~r_b}3{(9q*`cm7-5**UO=Z-b}2*#qki8~C7Gal|tnTgufZLRWT zcjbUlC0hbu?F^Y^3O-c*Dk^$@Q~bdBl2F-cC#f_WRS%?|sBS zUii6Bw3h$Oo%b=piibbO_QeSAQs* zA9(J4u31VfTh4?hY@78Jlkzxk@)_p3sU+;-NxtY$itAmBgQo-q-5B~66`5O_# z1AP(v9p4lB=2zROH5Uoy`T2~DcZ;)vh^w}XBgm@ZH<>t#+BgBj7 zZ&BR1eySKIeK7iGe_C%=5rj!{+Rl5!gn7ny_N4jz9si=jcwkV;ha4}VKOa#+g+?<< z6cqUW5|DfvAj(ge>tC@k4vFSvb5a$#t&eWJV3(dbU?;R+6{)r5QJu})?GxpTB8UH-Mb zHo+*B@6aEGi*hfh!#~^K^w?h>LFAWa=zLiGxMDwN(DRe~BGIxYJ7b?Dxc6e7d)EIL z8%3|2>U4PIC$3R8MY7~?{;(aNsbfonAnoyl`pV!FGC=B7%L(7~MP`Mt>&R?4+f1l= z;|}YPH6Li+?*KX4(T-8M#4QO*F6jI4vwyP7556KKDWL2Oed&9v4u5)AqOEH8Yb@@R zdkx*53GViue~`@Nj{)Z0)=?W8#l|;AL%Gktb8sAQ6EbL)N1SmdAKx=7-_}@_*m0bPSoOc&+}KknfHJ%04JbH) z9;tJ}@YeN-%X953j@hP?KR;FM+>%S*4_OBHZz&Bu8f_(}QssKUs6CmG<_G9TCn$E1 zYP*9$i#~LO-iFiD0T*g}pG~*71K%umuFWXf5tUFO7y|}&S`+V^9g03y2xCc!fMVIz zEZVqhjgw;Cd4T&3Ixey!hFG+ZcvpE9!me~qe=qQ3z>^@Y#Zc=YJsypP1KNsjxWh;) zr<}MnKP$EU(oMGw_M`9o@%pxRQP1cV+#d3PgO{Q8^+(2Ad(=o+5uBK?gg43_IX2L= z)H&*2#uJef{Oy9oC9HY1<;%=Hm*m`IZCIy?rKXSb2`L0-!Pq$A*IuM(RcbGk%_HAo zcr(H-Hnf}jJllZ~IOLM}X&Q^dbPbp1Pnzz#$n`_}yz3~hWQKVU7N=Z3-S1zDf%k#4 zjw`x(4er*k9Mrp7{&&MQ@4kpu7XyP{4zU5ND{x!2YFW!Cj?4o$eN0RO>!bA?z*sga*Oa-GnuT z5t^J#Wy+j^rNtrExfXv6RC7_4brY6Nag*V}>VjU=mx9JHK6a6BM=@uwu`XJt?1Y%c zLxoY3RgF}!z5<8N5Bl##ESd5>Sck+(#FjL+H$|B+Ta6>TKo%+SB3Aq3rrd|?Cu<9%q)# zHYIiOEE7deOV;&zH<(PhGt18j`<1!-W(cu%mpo$qW@5E_t3QGAAsx$sHmy}c7}xN# z+umDG*r{L%k)Q~lkNb>CEQ9N_|^zg@LUr#IC3S&X*1jJkX@;We5#jN>U*cx+BP4- zZR4Nyeop^gi?fN0(8j}J0Lb_t4IP+$!!tW}xi5VS>pcigtq#(LcJ~x+FL_&4DZS=FRx;*TTWVD-kUc*?W~zgWRGkotkS@4vsmZ9; z{>ls|xRV45Z{KCOFYGrP-MvFd84RCKo3-fRQ@c|RhgWWvM@WyXo-`BLOnM`q_85$w zbBG@~7qIqESkmt;8k&$^W|W$6I2$FBE*4Ze@AK0m`(sBEOG3y+z(xV_hc5bNQI@@F zw$tifT`iwUz8OeQ`-eB3dNK{%NyQE_KGQ1~u#kD?D4%G~lLFK25Y@ zw}p)%t%gRdANktVo_eC!-kij;r<<>nAGVx*D9mF=UeWJO5iYC_iMT%vFan>aWmMwu zL&&C#v3hB4er7Uf&(?VjPt&F%B7zPNeaDq^7Y;vd+RxJ!_>;2ulLXe#3odrZ$32{y z+Nl7IBD=&;Vmh+)NL77v=JDdqn!ZLaHzg9tcsI9v(b84Ec|lk9e4n7bh5Pu6Pd{f? z6j9VnjsnlsByXq%h~~^KY~)Y2h&9Xne4a`$q)#@lJ+qaF&HlSLi5Wkj-^{#}@Fgyb z4&j+w)n2;5Y~sMae}4AR@5sK1s)NC`w9Y3`XAJjtcaOr|lB;!asdpRRMJNU^ED4Kd=dC|sI+-Bzu|xYCkyE;Q$T^P{%( zW8EaTTPsBF8$TUC61)OAWMc=w`rl+?S62D=S3 zq<3@Z1hnHW$$uE!hEJMiO+A-^fJhpJ&nfJwf5y_jo~Xdyx|Hn~W`b(W`a>v{%xU3g zHqB*y^q-bQ#T<>S&S@@dS+#H-`I{qJ(n`?5?;9CZ?dY;ARp9)?78-u+v0nzc+Fu0g zi)Oo*ij92G9M1K{vTmc4U8YGJS4;%W+qM{ldtY~byGtexbpA9aBa)AM&z z=g(wQc6sWuS#iDGtePO`IV=R6(gv; zB6ojt{Nv(anUkd2{~a-BA<6Wd%EQ3d_!#0?e6%MKaXfue_^X27;)iR zSivZ0q4g`9Z%z+e$0@}SS+~cz^W42tID_=Q`DNqtSC3rv_yWg5(}i8!p`UW$3CF2( zAMVm}m_I|nl9lx;ZuS3MGdvaWWYRiGWw3X|Z*E>Sg9Mx`2s}$d zLh7#A;=*qLOG@+a1zr-W%Wj+$^lNrn{1 z)LYxX(d=jSspBq%f5sG=ea%t=L`X!ZC_hm2{VM(OiJ{-VTlF5-=EpMty6<~1^bKqG zGkO%H}ax?@W2NEPDn$KZM_oeV`w9JSkvRi~3_j6vyRZ%HXrB z55;^(piH0xnAjcqzV{6bn-6xUGSSLP5`BCh`A%QO&_Iy0S;yFXvPN2Ji+gL+nEpaz zBhQ?G?9vscJ_g3_KKu0J44QH$;P-^~t8Mh#50@VPzN_n%o;;c1XV!!Bc>LKh43*5i3 z^(2}<^0PLp7pwo1!pvymuw-z;pMPxE(a6c1rGER)>>i%`?Q+C%h08`)=A@1E&Sl&R zTOYNXKr7&Jv+Ve*bR+<3zsg1K(i`TePzSGgyn51|9>UgmVl5v4`(lYJ`^Nj~!R+aQ zWpQW(Le5t4g?TytmE!z^p_ezLz}-8B98WEJnoC=x{gZ5TCxkzcJ2X|b(&x6J6xvDj z796Fw1*&2eImw5t`#Y;dtDU1eom@6YTcFM2qIeb&Fv;7Ik%hlO13Pl#-1I^nj<>ut z5d~W(m2l)|(Mkh2p2LIZm;0yZzNivEj(PtR*rbWov7$jf&wN0W{U$)hrk#0TBb9#c zH8#*&gd_ar*yGblDN4%c+&gZ!HszQ;Gr-T(o4WD$`hJjD-uvzE`_}eT>Lf!e-4@89 z)tmwu4|A**Vj3*47XVW`+vWX4=@a6qDdsd4>!md}{qUa7M0yYk#Q8uYsPi}P1a%Xy zvHf_E@SC$DSUFd~PWy=f8;PITwCz(m;_BxYMM;rA{KHi)kMyaD=lWS~-A0Axs=aOn zml-T}ZXDCrI>8ns>P|+ax3jj-yF~J`JRdPF;WRkqI@&IRw}@f}_uxBK)l?BVGuAOq z2<3;2!R{}J))>FKkxx4XPrds^BUzkGW)a4lr?&Q~(x|mL*MG+jr&0*|kg+J_hgJ&p zLmWyRU^F708)_9&;JM3-l}4(xH5E{`Q%uJ8DE!M{K{sEg8S!z&i==Niu%#8rXx(Cn zA>8J`lH&X*Sn-mC`@F!I!e>rd0lpqciOpNj^oe-rN_JC&@gf6&<^*=@s(61xkr z*jA`hYHp#8Fl)apq%qn6Js;yEp2iWIZ%saQ+^M|%gg$O$LRhInt#_`yRievKbAoqo z1ZR1z_}s>6q{1c`CQ*KAkar+}c5zqYPCWEQ7`6Y!M7%&G^uFj zh!kP0*R#slMUZDT>d)Tbau}(VNJg`J$oP9$f)1uC!zOM@>3luq=IwICuC~)(p16Bu z-#U^3#iiEEc}a?X^N7k24%iTR`}tWueO2=IK$JuUk9MF{Z(tZ<%V_c4#n2Nk*C(QD zMZUtaD>k@A4_o|T@r~L~dk*%2(vFg)r-en6zaXT8Wp^^iY4>2alaq%gVasCk_`9WL z=MKTEJ&PwF4n#b2MX5_N2rVy$##X%<r|+$oXYYdy4$8!dP99y?-*8y)l2!H!HUardk>>W&bmU;1(Eg zaqNM%=u7Htc?mtJs4B*uOiFDz8b-sN{8+MPd z023hQ<&B4Jokk?HsPm^K)Q5ggEJ0E_x{zPnozFalp{lv_355CH4~nSVtce_d9JxGE z<*j5Jjygeez2TvH>Jj&2SMCa@=j@bYm5vkK(6A~AegUMpX9sE<9P7T0#RE6Kz0Fh} zouNLIjbE_f8!L*>q=G{jc!}n5an};=w={WEHn=Gq2gW@*tf95Ve;}udK!DZGJ)D1- znhS#X9x__-)DsC!d8pAmYQy`6m8h{&R5&g-Jsr`GHy&Xaun&Q!7}V{wm)NAdK?2&-RJAfRl4}rD^{sY>N(RX6!DSUzO|jsrQ!4g|&opJCqM1J#O5mY9n|DC*((`Y=+7vyh?R>fMb9dxvSy#*JS1M;sX!+)jyrq-6&P?l))!~ZQ&S1BgQQucG@xZbuA1$F!m z)p5F9UyqJ|K6e>e#MtidaMAkx>lI!6w$dN2^G1W5pEZFNg{y^Fx!b7M43*CazX$O? zzSG^NJt(UziGD%MZ_an2tj!a2M8}%0ucQB?I0Ysf`hhjTD!>ec1(-$au#kBVWR=H? zYCM)B;9pf7_RRD?J0uW_NRHxYBYskOi^~Be7N4`B8y;*YU;Qd4&wJd&m{YAWrH!Ji zSizbSbFX7SzeLUBq`13f=5Cf4w-}eJfRolazwIxPM{RVucJ$6!^BC)$%)HwJmBalU z|7u^y1RT~*okk*1ZPK~IaB;r%O;dt0YKEfEnlL|JEOlkAc}*gkwEd5N*3y$MCLxxV zCxpV=nd7*YL{frll&r?3x4iTKsx6i8*4}Dq-cGF%1Xh;quw3sD<~^p_KH2;>1GBf8 z5p>A@nRlz!{>k(NDX-YI_7pm3;2m*NJItA$)!znF&x;(v6HWwSQ_$w`W`kni+u@g; zJR-(BK||=Ai&meuLHT#=0Ts&|qjYg!T$LWMsB*iKp^>jT0dimM;$H^{e?Dyc;*E^~E zg`v3zOmZrQ;82+2Dm(kz`+_M(eSIXYn%!L%uUAeEg6!9jzrKG;$lqzu8K|j`Ll*VB zR!vSllt}=UBiZY7z?8TvOZvN?UgA5|o@SmbCT+QQTDUxyq>AuMK-LHIS?}Io0KB2&wG5`C3;_r7Vn6Ghw z%r)jo3Um^>5d9wAfnLzj(%012(}i9s((mSD@u-bPS9tmB)dyNBY?QqLmmJg{v*HTy zni)E(YJQ4LUOBjbHd1@h;$d!53uo$>f7kE}Cm??*E8=@vezq!ne6m2vJi`SwWV6)+ z`uuiy>4RMTw6wgu*!Qf-tx%%)HcMd9F|!v%duL}oY8ZIOckV!*uW{@Q$~nd{`oW9m2=0t{nnzvY zWmqX#T_y%Qe510X7?|5|@f#4_-P9I|#JN_$(di@p2<( zpW%v_BGF{e>}M}kOE8e0a?$3-kL(XKrgQT-KA3i;DJ$>eslXtz zuQT1gtZtdSFcF4D)Rc_fqOSJHm`W=3WwJYi$0IC{9qbqF=dy(i{Pda|GRlIsVDpyb zRcbx&^m=v-XKTQ$_RL9uxXuL)EZ#kIQ_Xd<2lMqJcI;PbKml@;^p@e1XQvbqDo-wrX{B@^G+8>&8)+(E51 zA5|9wXNaUggA`kFJsWD0Rrr2WJZlv$i&whi|k?D!&gK03q9C*0R+sQ;*h^ zJ~q(xUmDH}v*TIW+1GGwyH&O>NCcWv|_SM4dA* z#W-}oDqyd_vxj%g=9~L5TI@Vy9`YiBnN$Iv=lG#3(T6`7}^-)ouF+6`G)HI4S0z7^C@xPCg^KXHbD zbWV3!BdlC;QT7%G%L5$Ei`IcS6&5O=6G=)vb1q2;la;q(%6yZasb&5OU-=TfSe7z& zDN*ovX4AH{Tr1)M$qzQ{LNpf!n@frVQ~G41XS6RM0!%TJ&)P&dz)bx;-a&)3x8ZLq zHCM+_4xoh+3D*5Sr*p={$ct|F1Lj_#?>7O=TkWaBl&4}v1#eU2iGSBS&X}san)FhdxHU~SbF|XxjuqW0N%nWuOT)BsM3=uE{fbA~gZ}RI-yo)6+ z%+Je)aD>=v0~pqyfm#C=Yac1j0EG2^P8>fTKkxzv8(+jzLKN8pWYUu{h!ZMm)V zRr;BGX?6-JN+H8nf01FxQD%x9s8UK8wTTQp*JO{%RV#e1@r0Yhy|vj-w)u+u&!{!Z z{()`O6+TT&K=Dw4MR&;g4qx#(|84r_Mh5-B2eMkpCHAHAU<+iA!-n=LY-TEyszkf# zQXnnRJcq=SqT!~b7-3rHxS8l9HbGN%)`*633Q4oZ6@SM8p(bzbrwTkuO`R$(mHW=7 zw-j?;u)U=UD){*`d&#oCgr-o+>EZmPuVin<;v0B$?g z-qVpMj4kU9ongA^%?qh~z*8gom)YP#GB!_x`K^6%Fs$1AXjktC%aqK+Uwf_tamn%3 ziC3*py}+#7s0RJq^=W_*#dH-cX>Cl%7Iha)bajPEnZEe#GT z5D^;7!hsthIag;l9`HqjmN_!~D!*3It+x&t$J$K`UHeXp(-eodp#!^nYwMGAOyoO+ zbMGahjU8u~Mq+t%LX{;mlUvEh1NiiZzArmMz{!0JMoSr9Kn{lrRyophnx~donybO3 zM7=Rb-Fll%`?z@UV9WW|XSx_-3W!l=;c6-StWnGHLI>OM(HO9)8ecN)O21>=C?NKW zFb44D1W-aXi~A&;CZ;mp$c~9BN!~oZd>J&TJ)$JB&v^RrWX3Ka002M$a3()IybFG} zsdtBn;I;SHY)#xGFk9~a(3RtN^=|rix8+Ilr090+c*LL7!qMO+4S|Qvmr}AsY_wiE zLr0%IDM>`q6VxeH94E>cU>CTEu7!Cg#8BHJ}*m!7skFE6)RD_O>;A3i?~Qb7}*>{6YuK( zCMb#5-6~1p{^;?D2z@nSITZz}dXaZSUzO_VE85hyjFQT<@?Xmmodi~kP`5?dI2w`! zh2*8^NAOW;e}ODS9XNabSyKLVgV?i}?rdfmTjLOUmVGclT4`>()BFw$1y*BA zWj?hoa3Na=ogX^wFSZwdF^G@1jhQc>JbSJu@u+vpBQ0aO33V1?25t?4M%Btpo``j?@;2|;lbkdL? z_Iak?pPlv~>agXtW^Voc4eKf}s6M@L+4?}}g-af4^$$y2tNdivEW1m~rA6?Oi0;?W zej}kMt`7(Rzp4ju?9Q7%1+(( zRCo3p9$__=`1xVf=2{ROqFx30nF>JJhc z?j19mxg1P%Im)0jMB)y-Kl(9WnyIzsLYklCEsMrWS>6K3>@-49&GD&;xdnV%ZChVo z1cf21ULQB@y{!3G3}m&`l`yef=yKGUE&72w76&z#BS%@<3d>)8b7h`cH1{#frkxHS z1b)d$Na+2(^~v>ec*(|kP5$H~D#2MSf#6GeJyxFPv_5`p=KET6%L-d5gR^$8=mF}t G|kZ^X9AQ8N<>IlL`XzP6vd_K;_Be;Y3pU{dXF1BIt=%3S8n+m1~7nxN`%!>1DJ^< zeE`S-uwdsVeRNlayEL_s%P%uk8Jimripflk8KAR{7asiA3ngYl4FC?na1kUHe^zlE zleDAbO!O>}bhst)6ontF{Z5jgcmJ}r>yySOPOf9z97qx)Txj0_t;`ZZrGtH0MYBZG zL9Zw#&taCQIi7?(Wd)&xBEzUKb&;3(c6&ABeBCrb3e)SgogUNEfl~&+XOe0sZ{EyM(UVGC)qWB z@@Z3wPl_t)>S^dh$=meyecQSF-gEbZj4~tcv;-NoMBJH=Fg=X0q>KFLISN`m#6Ewv zj)H*#Hp%og?jlx(q7RZqi15fNIIzKj1Vxa-%AHcI^5m{#wL^BZePy%DNIl<3J@KC= z5LR)ps{sWLSx^37&t0Q*+yDK8wjbsJXb6@=9!x_X?20<A@d*fi}XDdpF$?gA`4&`~wyYG%Q^q@&@tWnV<&Ig&$E_6Ir{XlB8Lm3d*Unr+Z@b zvN>OrXJ-Gwpz|308iY&kSC0n@9#3R>jj0f4mHy57UC73NRz3xl(XZ!_4$@mf?Hs1E z@XHqrp}s~FS)a>ZP(itv)NIbC7kYok`-d#b&2q+iB;P|lVivQVUJ#fdLCgq@4Y$~v^tkyP8<1O3G3gS10bde|HG51R`J3^IbpZt z3H~DZU!3DXHI&TsGMQbio?T;#Z}g{_=C0TzrJ}Z&hAy?~B(?W6jjiq#(`j+rX?@$7 z`?d?sws)Qf88!dIFn`%*bL+KOSg;3 zDu0~!wY-S%zi^Iy?9lyMOm6JqZEyo+9mkA^?EyBx1EcaztB)e?~`qMu%TtPx^n&F;MM{ zn8vgi1lTkH=mGdx^5l&_=>@AK$rw3%q)I>2fXTJ5ImIUNQAun{DqAeNugP(mGAC3b zsNQ@qc4YR_i%WQBqb$eYJgCF+sSF3?wtq+oxF`ChzE_Jklwj4Tg-Jj~(Wh9N-tK^1vWV`Xf`de6V;8d}JX zI^`3B$#6&b_33bjUNOsx|9){805C9ofB}@R(EnajvGN4~BvNdQAp1f&#TEuIwnlmQ z0HoOZUHtEd`Tt(}UnYcMxB!SMGNf^58i6NT8=+J9h%AhN2EvyCO$Ea?hGSR9D8@m9 z&n0HV0myN|J9ny)DKYJj66vK5MZ+F^YSRkIwvZ7N!zu=4De~6+o)C=hLi^^5EpmWE z>IDKjE*9)p>{avIftgo=u4BBq&V9 zq)E_!8qRo|(ne#;Dj@9w$2QV8olCRDI6(bctN9Rmf4}JqDk?Twt9eHNWI!#X*&5-! z!+zEC0r0LH22kC|YcI>{k&GHGJAjIzo)ttxv=DEpDqKozeL_ z;|19txlj`rK>vkytn)3Q3wnRRO%1x=VbPVx34vQB<%wS&CuFxerj-0G$+|xN5A^-= z{(-TlDTECypg2abI4ZBGAcVfAAwWf7?cIus&E94#{O7zam$1O!Z0&~N?rlrof>qyq zL;z^I1He;j=^g&4sID7Qba1S`3>QXnLpB#4O9{EWGIvDM|C9V-7^n}1{2veHO1$Mi zIS<1B^jiL>|MLH5Zr<4GS(5>v8;d}ojlvT|tJrg?6Y*#n>MsB!0fcqAXyGsHsVSNSQ7 z(9#kB%|R!}Nv}_1Sxi8C5%UKzFCZThBE3N@g<rRzTBnl)m}fg9~d3tCs(}qBJ#C=TBec9}^jJMX{FZ1&DT2b)bF` z&>VklX9ysK&>Vj%R3Vp@N}k|vMQRGvuJoS@Xd-C*e=4Afpke;@fHGJUJPq3xoB8uD z$L65Vzwf^lrO-rB;olc!{2{PwE8;yCY6Xf`VY@S z9vV4*UE{2AWxVGr6_sZbqUVg zD*(tvzb21~9zY2fGH~%cL0|@OBLl(k#JqA_3q}B8GBIF^FOQTb4>e>$!w4iK-bZq- z?1VGs6zJ-0prLsHxCq`s;%fo0vKBpF`?7Nc2q@@TxP>L+ z@0}Z+o1UAUyPPMSJDpoV-xlXq_eeDM(VFBuJZfCuUGCjD*5w-9{<nn?%EXUpHm%@y@Gyo`)}zpag5T2@g| zAF!BUt!v@W>o}mi-H0cc|3K&-aojU5cVKhcF6_ZhfzKl{a@&})Fgmt8_WM1`=`EF@%>AK+Qk-XSW#Tpyl;MdoJ+teDWxZL0O4c)mL(0|!IUW-GbVC$$gTM4R@SZNM;)%koV6rb!N+Yk zxm=2t8xChrn-NguL>rPhV3YLcxT5YK>@rFNF)l1A^CHc)NS~>?-N#Dls_U z4{V*WG~-sdhCWQTxL%?kc46MUugdr7@g<<6n(}QWv3$jOZEi*3Ef*Uc^d>yn(l1c) zwYtVK%B*d6j5K{>n-~|D<=?h1>;Fgtr;JrGHLleup*NJP$+u305nw2ja~y0MFK08U zO~dMM0ML26LSv(sy!8>8SuJG&NO0fPJa(MxP=wctkB*1EA@-kx4jwDO&8# z(9)4aMDOrHcM*{ug52hDg`zX#Bv%-bmVR0~8zDf1J~1YxqmINa0G{$>5pvvb>iM^= zdRPreSXn(58$*oIpc|P?0u7TK<&;e!GsyI@Ie)|{|9HtNkySf)fFJ3?eYJLcd}iip zhfHeDw;4H^@a}Q)4kNO;UzK!iFyI>`8sHOHZK4RKIn#Y4(xSnS4^hB}v{-M7R}>ny z`;t`Q`EBm|Ao`2uy04dq%DH`YEJ~Zb@jSPSK=>(Fr9SEbEVk<_rD&&pa{I+vsh$$D_39=Y1@aRDNCS^%`L=_5dghlM@mox#%7ez3d%buW51{cPahJ5@ zQ1>D}!GV1N0r?ODyajiz!!W)`pmxEIx7+X?-H>BwEFqWkTy>xZA0rf~>XDE{Fo81~ z=F8t%;VlQR&B@rVuIYDB%)X_Q2m;lot(OLSt0OO64@L*X|JYGTcZChdO!}{73&Oya z2Y3Leb~fGXhXNg;w{UEt0Q_y_Q~>bm(zYHI67gpMs#b^aLEs*+mP+^ zR=DP9ZJ&;TMM3M?E6oN{^G<3X+CD{?Dhbl;a_zU2HWo*9!@CKFlSCN1Wo;b1f)K|~ zJ1ut;*FV+4xS4g9149RMHdnP-_za`B5T~#A-8&?Tj*gn*aG7>o14>l+gVtU#FsM{%c6HYkYbvLg!)2DjFdc!KCgfEXr$ zql!Sm0{)U-RrL-kSqCqconV1}4PL;P8ar9Ts~{Nh$K^+bBI{iN6{3x!=r`uvM)tS) zW+8>qPGcvD4PB#uaxJzIijWm%0ed$OWkKidW#wNq!ozW2&&m$2l?LO@x4HI*D7OcD zH_qMgqvB7!=Y}Ejzde1-3%cof;sc*;-`%*QBC^#l3YkqHEAC|3xP8!+-IYB_8;+@d z?A^AGpZIVVH-hiGM6#MdiHq9O;{@5=l}Ar*)-b0nyf%||abRrPJ!&}Kx&QQ<28Y4P z37U$t!%RuxiJ`qb4g)%`@y1fb=mk1st6Kp+loYUxvFDm%$pS5HE*NT7*0I>k-I6w| zJ~(>d{k7%<;=sJ#V+nO8NQn)TlBC=AkijHz&c%+A{-ddQb2}k@d1w)g$wl@7&Ok51vOg*YLJ1vFrFwW6g(*CzMG7L zbduLsx$6v;*4&v*=E-~8A)&B3#jf`O_KvQXoDTsD1yP=Sz_>=ZH@TJ>E-cS|g|5yF zv*60M4guF^xnNb1{M!sy7m_S8KTdj6>6HeKoOys@#O>J)0l|qA#lZXws~U)01-`Is zf7vTHEbzLOf{9sYkB3%?lKPs{BdcOF{hgnRAo}I9g4Jxyj|SIpa-+sUQ_0)Vn zV%a3HBWg9o*kD7ZBWzpbLDZDl%crGciFR7|R5tdlEScX7UyFI!Zik;nc!L-YTx9!= zTa7ga$b~3y*&9nlh%TF7V|tUg9mF!W0VpmDsJ>=vRFpvM)rfT7RURtir>~GgP{A>B zRNXUpt>HL(2F+lQF9ivyr{@7Gtcb2v&osTVtH8D8J!9&i1zrHdnHqHY#{vpU}P_7B|OUybsY$GqZd0HEz3 z?Hmgn9}oO^EM)3ckuN%fBEa!g@5LHLw>AWwIaT&dBW*KE0bMk8@zJ0Py;u|elY{ls zmkCal+g40(1CF~Mj&EB#d^fUCmB}vT|FMNwC~JOt<(#imxBNz=om}C% zn2s-B{&<~`*;gxK;|0ZLICx(ZX{mpTItb@wnJ2Ptx2!gA!^QACD_d zpfyQS;R0|F7-f3QAVZo?EuOqwKlq}aw_n5+s!P=)Pen(3;R3pw;%R5<02~tyBMBPv z?T#rFD$p+#8cYnYgB+283JmT{C>3DE=w4pvzS9#mNbM(tg+4u2YP; zxx#ZAR<`-;u)Mi#;)HPa!j_efTrw5*vOeez4%T zC^O>0!EM2;2x`h3@F{Wrhd^i|cHyV})wXXOJx7h(WE9!;Zx6P~-Z*QOT)KGN$DFmE zTwz&Z#Z~2g^s8*xN)b|AvCbWNy4udq^cY2^ZCI`4%;9{~ul@7t-*%7~P~zx!M~&Lu zC&0vCz`YfP_e|ndw~p20qtOClj8sc;B#&NDhu7hdZQ0-}lPoSI_@>386KjFD$zT|5 zYzV8ZvUBngsd8&>iF>@+%mbk44v)VcHzZ}RU=D*>>S1!qS`kSw3e<=0Py@aqL#jGL zULQKRffh_lk2$fsu#OmHumvY_ZFs{Ct|q5D_y>zt)EAA^ zY_D`P&MyDXr7-a2qEel|ou6a)%*fX2r^q$u25aIj+eDohJC@9tTnSHiXvIppQzrs; zNkTEJYkkinr}9b`CMotD-%9oKKbc!LPj^0EFaP**g5J?yj@e8McCb|-#80j8;Q z=d!V^g)kox9Fum(?*eyGoIufK3ND{exS=gW&$pcyuf&-7;Lf!L-+mn(nnKKHl}dmA z^001Q1DbERkO0Jo`E?+zlDNXvjHg9KHG|w)5ojAg!J*VKPCaQ?r+%iZ?j^iI>$cRh zp`U!4ZU_%^9fnRl(sMY4LJ)=&OrQvcW4p)BfB>Zy+>^$N2I<^uvNZgJYpjaiJ6pA@eahWtXbNgKYtP25y^7!QA2#{0=h_@Jpc zsPWQJ`PD-)q0RAviOc{`DH>r{4DVY9-K2p`T*&;;vO3k~XF5C0caf3wX?~i%=WWw0 zNX~GV|9g&%AM-si>(Mc(BEryUx8KGR)t~O{)x6)okK@=PW;oiwjer>0as63X{tO2@ zt(I_xOx2N|;#{4{8VT1e+v7wfy*cTo0U-1)o;mz-W>US{lceRuZVR%#4mj$k7a7^~r9jAx<3lQe&Lh`)3hVyOsgDZr*i)lA^RO;P~AhI5;bD>Ztn zf+it0R$zmeobDA~fdXe}K~pr3aoy}Z9v3d5I7G0)#b^P%H(y?z;GUL-6gM484~7w? zjT*-nVNle|2EF<}6}kfo~7ue z(tBB0eb0_`L@i#g;?S88q$Fs9ZI(8T!#}HoXwn7<_(*O(l zo20;!@>Ql`vLXrxF}q}i_(;Yn(us?o4o@HqT~WFY{t2a+K*AYH*iZ`g7_c)VnT-yL zpIDunoEt)sl$%ie#1+cxoNJytLsCZUVaAzo0HP>tf%;vl~Voku(M=FY!* zxOxXpyEs1wLRewu=*wzvUg!*ouB$O0%)5Evt|+Igib_K!8`g9|h39g799iC*+?qWO zPjbSYXg>WB{MMt?JZAgEKV;wO;C!F=+gg^SSIiTUWu`*Bz=L;p>}cr91GNu2VswMv z5W$P8ZjG46*;#%vR)|<^$nr8_)ep^UH~5hzXCkL({D2`^_8EsWu*5mCe;67TX-vpH zWf;DS?{DTQ+E&K^PZQ7@oTL_Z%OocDn+ zK(j2in{n8)cEioYp6%(ijVC$z!T6CBmj;POFS^~UyL76oJwwrn12Ti()VzGTgD#_# z)xm>lOslKYL5qy`7TL=mI$NylSv-B~)+IQbTihD;c{8Hw(=fVB9I$`cv*$3Dq+{i; zcp)L!1t-YcxxfC}()t)bM525Z_Y6O0qi9SUl2}Mputi& zoUbwhnP8g&*jSa^wDI)|CR}0(i>zJ@53{mjL{xd$fAJ;NqsFE$ziN=d4T_jbp(4cE zFofL_Ff=c~pg7sP3#b*CP3tVWEg1bxrw8&^-Cgth!qm4Q!;*8kWPfS(-RO-P{s*f# zb^NX6(@~ddmmVHXRI83pCp>H3ajN*fLk%p(W*`3UzxkjR<135D9w#geA>Q8I{HAWc z>*;BSgGO6MjoWx0^O?fP=dyLUK)NZsfU(<+_)}quMfPRnhZq6!`~?Y;%BOFi6fxx+ zF+II0_;5*$WTq_I;!T#piZq9ccH|fF!%&(0Sx5nB*TIrK_p}%k0pX_CW#iiLO7NDM zD~n43pvyuCSWtM@lg4b$V&ne&!(0l+W<8!<7k<29sXmivZ@;_T$UZbaURdx6FlD7q zu$+ry%J2qk_J7B5jrdCTWo(!fW22@&X&^~qb1#$dw?#!WhR!1)qV`N+4$+1pRY0=z zMhXE1laz9s%HA*5IC6ZL@J_UdsG)+U4y#VaJ4B%NXyFOeCy zI_IWyYo#%3!F}2;CW-|M+K;D0;{`u{Sk*X8#ZhgPWlMydATB9Y_2Or-4KW^aMhR3f zQFg+BUboD(!E~uyp*ugSDdp}yVeW@kXd!<2`Ey;;TXSyhwWmH+i85D$Klps@SKs*d zR$jpv)J|R-Ou0imKsCVM>|Tp^=-XbIo2EKdcTqZX>1k=5E`z!sn}t#NsU%5{<2G~- zrOv|oL_H{;{n=%qUZr+!z6Y?QsI&#{Fx%E@09aK@DQ`FY4(-;PqjSK9FwamJ2(rX^BERVC)zrJ_gVhYd}BmIWpgQrrxI3$*zg3g1tZ_W;+?T=bA zPYc%TzQ1@m6t&H=c0+uQZo|FO_fF>-?ad*0^+EZWQD$z#G`+jO$J5b3J*}w*IK)|6 zrlv-W(usJ}-XR62=il{C*OE_Kx;9SOQDFr4^Oq%^PdYYy)@6lFtTx&NvgxW*k0Lds zM;3yNW|*4Tw7mWJ7Mjb-L8{WWRnVPseTeVThJH1}^1aq73SWX8*x-0LEyKJzgw_;y zQYDBmn9_Ip#2P_YS)(zA`xYgEH&dGoAI*`Y*_TEXI|6A@`g(fMiGntdHOz*>4-X^z zV>sBR=EuBq5-VH{az?lsHMrf4j&Kl-{Dsv<_{!`ySpIt2F2^ z8@|X~Wqeaq9QewMlpsrb!ZBhH5}3%?+wt5t>ka8B5Qa)PjI}6g-B=1n$!%7udDbfw z6aYmb1rO^1^tc!u1(VEJ+;>c%^Yh!i&8Mp@$3v={kIL62Nm`9QkAB3>duU;Pq@Ltj zy>^HB`h)dj*>(rg5Sa>_g?n+488(zNPo__MCxCHI>^iFd!^j5}$e3Yh{k1cL-p0T%FE zVB~}a)B12rw1mj86*U?~E*B+6sIvdXIV#@8av|(|m~cVd0LjCSY^Qmo2?L)2ztS&J0C~ZksmFnB@^KK z`Nxo8=4jN2S4?B_)M%k&?g2~2c+YKsd4D=p6KwhO404)lgjKRK=c!Q;19kU|C-}&c zosy+DKe(grjEdQGt7PvN<}_z z$TLKaz;M;pF98m6T%DEza`DaGMI1E5ns^8u8zLJaW71pw1inPGm2N5=jW?o&z!f?a zWAXP3-0_$Q9jEErUE)Tui`4BW77k611WzwFXn3noMDmoVu-dYXY;#Zokbjr3zJ92uA4z@fG z3$8p}LV6@P%dN44C#JWJ&nlA%wBqgDPk*MGyVbkGIBCVytAAegK2&27{O!tKcU5bO z8i!3~Q9s?_J+7fM@qFzCy>7fd#|N}P z=;%R(10BPPa1;PasyD|xxD>}h^qk_lu^wQ{|0=+BOcn%zHt z*?7CHEGhO|$Kl%K;xD`o$wy8j88g!ctvNjkxGO5NU567%p8_ap3m1OeZ|{94$a^Ao zi6{m>gB#clUAc0ga>QHV?_w>_ry983k#*xaa}gF+^U(+p66Wao^w8 zpO*1|je0TOdo)M3Y9Vmb2XTiwmjR6(;?C3 zF>%3hcFxoBcVbU)dXJI-4D#{okU(&*~E zM6^4Oav=-@&!bmI#xxeDJSqGtX$A>XzyZZGH!rSGL9r!3&nl_M^$GMhx`5}+%c<0L z+J!D1MLawPRdkT`g9v|sL@bcMA_4_~934TSZB%K&34CG5g3Hg;J4{HO+Ag%|R92bY zAeGHPt@}ktOxTQJ8xxvc4%diTFCs_I`?qsMl<%pRlhjJn6v!d)T#tleer==Wb}j zi5OhFkEzi&;^1hJ;W|WE!caOvQn{i+EuYily6}I^&GnN~oYrgLv9UcW->}dHt^io|)$_xN8*%noy>;Ml=XJ4X;eKp;e*OAaw zIbfeVCi!V=W7s|KT%S}z>GkHlGB~9~uDJw-cTAd<){gTk6yoR2DDrpR>jTO4g+VoZis};_LJ#{I7 zsco3cT$TOx+Jn4wNwMzHgS6XqGDP@Rew~4%$YHwS&4K#v3zd74KAkrsXnFbQHgnW za08WawKAO^q&sU7j}q(n=7@v%)|d%<^fio@m{K{WppuC<{655)ypRam1_@>5c*m9B z)*OoMbKagmbn|%@YZyPz#Tr|U%Ll;*^7NqVS$}@1f{uo=P{KwXur5jmapw@tdGdMM zdC0lfdBAznx%av6`Q3Aeb8WNcxBXig+m`ilH1W=q0s+$`GM%TyD@-~h@^|eL-QFdw z32vM3bzF6WB{~L40Wjh1AzPhy!~}M)y}j9rDMqgVuuEsS`6;Bmg${&&wO2!|K5XG+ z`5e81ghD6)g#XhJ647g^K<}(r$4V68g^@OSNJ@U|JP%tnG}xlDKMvLBffux2 zcdMS+K+70246nM~1TJynV!)=^U2weXUVC2!Um>(^v@Qg5bV+r6?L}!IGv{=xs|ZX2 za^sm$E2vfphg@jD>f60C$Yur@dl=}>k}{U9j^l#(hpEe4Tb&`NN}l zk8zUcZmXz<5pqsWe$Ci?tM>Obq^GA>Np`RdF+85n;hw6JC=SpJ?mI`fyUu@1P%8fh zV9`8eSN?@O2yYVliZB13U!KmO7w_D!KbOD|BScH%MfV3g1#bfR&t|%wo)?dv&%{hB z3ci&zb8c92#=`*@%>ph1I;Y*EhgRBvQqz_5mGG{BBsFBQGx%Ut;zzWEw2SNb=islN zH50&{7@+f(Zci`GuehAV0AkJ?VQ!l**rg#Dw)xg}UFjeNR^d61mKT3$>ZVtLCnxz5 z#okIeue4%j*01S3wJ#qm2Aa3*qqgqn@iVms*{PCqpb8PLgSL?&`pc-xJ3MWU(FA@_L@9lr>sBO zbe@Yo-fHXWIJ&Pd%L%5sC302Yh0!rPNniW%!(3MO{CK0w6yEIs0MXU%s{n1zNDjLz z<+VNQ)PT{=Ep$b>U$bm*LB-$Vc&ywzkc+*qfYwsEw1U6eKOt;7H-VRyaX9<7c<;Ps z>h8s-=^nQNk5{fdow|z)(-uX1EH7s~Y#t4hqw3SspP>Wm7jIO4!pU} z=b`xUKHiFlPZnV2=7d@&0KO3S2@L#x`TSKnbYI~lZ(rcGUiWRtd`7Ky-R}sp*HCqj zkH#47=4*svbP3{2Q%VS?%WpyC;Ct|WgHQI^Vqnd)nUEZQA7Ei5yXd#sS~@KPLNOpU z?DJj~k%jqq;GxIW&mI$bFhEtXv(vt|@^uIQXK>E03(t}v1ei?8`pPhuwbilTJ!9&x ziok>>qp@BJWJpeXR|mHFi{BA#IUSJNDK~k2_oPqUx0rO6_>sk8^QNoTh^jV=8vKLL z7bvI!ok8=PO+FSJ-@2yu5)F|I0AoU)9o0Ff?<&GHzjW+}KF|B+c0MXdj|-AeR`D

ra+BXQKei!fAp^zpy@mh~pjtA(Z}upbd~x%e$4R^0I4}8IjjR4A9H9mKgsXNr#_cvW!B3}2 zTE_M_dJ#J$z@5S3p)AxFqxF0AQ}WI4G*FbU+vD!{uD09x9H@w1GWb(MYIO63B&8PX zzarA{mT5$P)A*yIOK;2HLvsoAaC&9&tINxLqX@*U8~Lr z`PmS&hseZB3d(*kxeh`2aC5j}(YHB&GQlsP1`bd+6Z7r8XlmP!+J}+~9Ww>Gg)%2} zm+~x~=3yn@2(efdUm2_bBC6)A$hu$B+X z)ly7C+G53L)Fkf=@6)3Y*|X9uJD#nD0Jr<5UamsRr(tz$A|78IF>#_xO%MGx-F;r^Gj3kTcT*Mz0Nq~)aELoC;D8TiSoudg zkHF2{h83~4lb-N|@W*0>Vys>T=)Gn-*v0kN`M1vz*&}BR;>Vge0kRW)9$S(Vf~?5< zOfMeNO#dW3U04b5v({b-5*9h2OHYDsGSI-Bey%A}JwK5>`A)u(XeC(@0hwimJ}YVi*L>kg982v^ zhwfWmoT##I+vhDZ;9X^+DGd|~tn!oWxt2zDkJ)8wVdCu9woJ>*A2BW_7uCd;;~{P6 z@X%!vp@#!%m3SdsLV_Xs7VYz3cL)@25Il|^hR}^1lzF-Nth-c4X0>#$u?>>R#^5?a zXuv>X8-V^l?7(B7sE@-1jet>pAoqliizvW4J~=!yvH&`wPi~4Ej7=@@h8kleKqD=X zeBl`Y#jI=dEJ{*(Y9|YLAfCI3-<19=WMXOPjG@?XAD?Y-MPr4jGl?;)@>0@*{qe=p zAKPyu;yXldg9ye?JFac`!2q24u><@kBX-o``)}GiquwIeL!dc8uQ6Q>+go4m8b{dE zCwM#K+gFeh-WO7E1mZa3*`a#0+aCFI34w~HXZhBHgO~mKHV$4hjvh}q;CK7^ZsfGj zRWmOrLiU?W$cOcqnK`17XN+beN`q4Npojvr3gl1sy+(jF$JVjBM@Dz1fj2Js&yS0r zZ(U(jKff2&z)V$qw*UpoD)!fX_642f-|`EeH&!UB)m;5K%$P4G!rc0bih00l6-J0% zN|LtNMeLfP)3Ec|$5G4Y`F&=d2bAO5%N51#3$FMswVHTehC+Nje0~+{$L-b}RMKNM zu+8@z>i{$Yd8hz)KeccHD;}m=Pk~w-3UZQ*>&~E20BC#6vs95lME?N?jp3s22Ikft z!Que8R%yYK`NGsy5U58Wc#uh%_8hgFe6Sj%c`hSe((Lmd*KV}OlR{3&p)p?etJwLM z>m0&A6FU0}o2ZWnLDC^zjhoZkZPM^dpgY9=G&p#5|JV#Cd^D)9m+E?m#M)NUx&~py zwi6E0noyTY>M=V3#GKZvTEC|kOY$?jRi4EH;Umk8fHu!w#?QCOlnp?xk7(P9@k;xI z$>xnK1Z3gU;~#5}{U^o*IS2O}W*Yr0s~M~c(%|4;&H1eDq2q5%!R+F^YvZmXbmQ>) zX~nsn&p}&o6fGIY*G4x}iPm48vT=>{t1=e0=GPw&bbOCmU-1TSB2bE>ofjFwj92Hj z?zrKJoB6F(BcRKN<>3}ba>?# z#S0NI^qsPDx`CpN*gW2Q47J5cmk*2t*&s>wPW4|Og^*Bv(W_uR`w zbQ2j+4fGGlp0v+=L-;C}zz(_Z!Q8;f@oHX;Y-hWpBT`WPYe;V)j>KmP<4+`mhXdzxY{=BFR`8#n8 zl&x)vOl%aWfP9URAde37OU9?KysIC#5ib-m5}9AAcsDj7@Z#>9emyQopknl~7B{3$ zqu1zv_1_2@Klqsni80xwm8@*H(}O;;FIeLpNlYqQ%Z!0!4?1TUc@yeZTtpjJ^xTlj z#uUQ`Lz9<;UvbfaVF2H4=+7GfddizXdyE6>n3*}8$lCoNUh4=W478xbhu7&(kv$DB z*AC8Z|1P#65`J>{@@n(zmzB|IbJI08d)eQ`_y#e;=hywn{CwTNFNQslJn{Ja(ib*d zB;9@x$of6oIuY^nw9jo3ejCsu(@-i;el%+ZD4Mu0 zYZFi_`uSVuJsT`w*a-EMxAfvUSIgtW{X1YN5y)croa+`Md?vFRlIzB&4t-+`;ehqZ z2zjBUDZ@0D`%Nm2Kpsox8lWA9LBf|nBQo3=Mtw4p0rze1rLB-`n^0 z<~~)-JYRgd*T~BQ3NT*pHL4|@l*{~hPiz!!#^S!HzRV;Y2>-O-aDHTeoHg+4`1?ai&lr;` z0gP$s!Wt5wM4%uTpB^T)rym>uc9XG)X{6pe?E*YPctHe6i>M&(0)wncLwI9tp{qGQ zryuUi4*9XV?o7i`cQeBEFrR$JHDPArjWeH_Yw=&CL2*siy=1yvi zOKeN|Hovv*WRTNGjhQ%=snyEn^S=2x9zI^}#}g2vs{S?bP*23rS>_G`q*V3KolH@% ztzNuu4P8a0iOTSKWOs7-^|)+g{l?M*Z^bJ_ansAoK2-WSETOS-2Iu@eO5yb*J_3^4 zH2K@oK}NTYCMsQs6&4Dr1ap2}FcK~CGXt36Odchf!*o>xJHah_-ri>R_jI`PN(!p+ zU$pC}BCaIbFtX3%N!tQUDCC^M-i7!-e?g=ZiG(BrO6Z0f9gTL$n>E*<;g#e&mzMh7 zWX8XrT%V#pa8bQko$zMhnlVFma;==bd@J{rHX@3lXrwdywo9v2yN}xp&(ptG9ZPF{aUzu zcFw#`SFz5t=zGUGWR;8wpOPU3wln%{y}AAT2W`XF{-T*le(q|?OVyNE*RhbJqaE3{ zDNiap)3kw{@$K`5D<^^9hy5b+Vtc#0hlh(URB8q028qzjrVU9kRyNAK zp0l4;6d!Nn-@mWJ;AqQT!fxr&p?7=VMt$ZpP^;sj-n)JyJMXT)qftgrTt&;*($ Date: Sat, 20 May 2017 14:41:44 +0100 Subject: [PATCH 011/204] 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 012/204] 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 013/204] 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 014/204] 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 015/204] 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 016/204] 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 017/204] 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 66bbd956b236c28c9397d34407fd337aa585b511 Mon Sep 17 00:00:00 2001 From: Chakirski Date: Thu, 1 Jun 2017 00:16:43 -0500 Subject: [PATCH 018/204] 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 019/204] 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 020/204] 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 021/204] 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 022/204] 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 023/204] 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 024/204] 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 025/204] 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 59c13d47b534e7cee4a28eec6a6f952c05d3400f Mon Sep 17 00:00:00 2001 From: MarcellusPye Date: Sun, 4 Jun 2017 17:28:40 +1200 Subject: [PATCH 026/204] 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 027/204] 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 028/204] 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 029/204] 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 030/204] 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 998474fe36691646f53c50510bb666553e3f4d27 Mon Sep 17 00:00:00 2001 From: Vivalas Date: Sun, 4 Jun 2017 21:51:26 -0500 Subject: [PATCH 031/204] Adds security QOL stuff --- code/__HELPERS/mobs.dm | 4 ++ code/game/machinery/computer/security.dm | 4 -- code/game/machinery/doors/brigdoors.dm | 59 ++++++++++++++++-------- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 0abf2ac1af3..f20be8c1c0b 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -464,3 +464,7 @@ proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=nul set hidden = 1 set name = ".mouse" LogMouseMacro(".mouse", params) + +/proc/update_all_mob_security_hud() + for(var/mob/living/carbon/human/H in mob_list) + H.sec_hud_set_security_status() \ No newline at end of file diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 16efcb7de76..fca20841cfa 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -485,10 +485,6 @@ /obj/machinery/computer/secure_data/proc/setTemp(text, list/buttons = list()) temp = list("text" = text, "buttons" = buttons, "has_buttons" = buttons.len > 0) -/obj/machinery/computer/secure_data/proc/update_all_mob_security_hud() - for(var/mob/living/carbon/human/H in mob_list) - H.sec_hud_set_security_status() - /obj/machinery/computer/secure_data/proc/create_record_photo(datum/data/record/R) // basically copy-pasted from the camera code but different enough that it has to be redone var/icon/photoimage = get_record_photo(R) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index a24af37dc72..4ecf6ba3318 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -29,32 +29,48 @@ var/timetoset = 0 // Used to set releasetime upon starting the timer var/obj/item/device/radio/Radio var/printed = 0 + var/datum/data/record/prisoner maptext_height = 26 maptext_width = 32 /obj/machinery/door_timer/proc/print_report() - var/logname = input(usr, "Name of the guilty?","[id] log name") - var/logcharges = stripped_multiline_input(usr, "What have they been charged with?","[id] log charges") + var/logname = input(usr, "Name of the guilty?","[id] log name") + var/logcharges = stripped_multiline_input(usr, "What have they been charged with?","[id] log charges") - if(!logname || !logcharges) - return 0 + if(!logname || !logcharges) + return 0 - for(var/obj/machinery/computer/prisoner/C in prisoncomputer_list) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(C.loc) - P.name = "[id] log - [logname] [worldtime2text()]" - P.info = "
[id] - Brig record



" - P.info += {"
[station_name()] - Security Department

-
Admission data:

- Log generated at: [worldtime2text()]
- Detainee: [logname]
- Duration: [timetoset/10] seconds
- Charge(s): [logcharges]
- Arresting Officer: [usr.name]


- This log file was generated automatically upon activation of a cell timer."} + for(var/obj/machinery/computer/prisoner/C in prisoncomputer_list) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(C.loc) + P.name = "[id] log - [logname] [worldtime2text()]" + P.info = "
[id] - Brig record



" + P.info += {"
[station_name()] - Security Department

+
Admission data:

+ Log generated at: [worldtime2text()]
+ Detainee: [logname]
+ Duration: [timetoset/10] seconds
+ Charge(s): [logcharges]
+ Arresting Officer: [usr.name]


+ This log file was generated automatically upon activation of a cell timer."} - playsound(C.loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) - cell_logs += P - return 1 + playsound(C.loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) + cell_logs += P + + var/datum/data/record/R = find_security_record("name", logname) + Radio.autosay("Detainee [logname] has been incarcerated for [timetoset/10] seconds for the charges of, '[logcharges]'. Arresting Officer: [usr.name].[R ? "" : " Detainee record not found, manual record update required."]", name, "Security", list(z)) + + if(R) + prisoner = R + R.fields["criminal"] = "Incarcerated" + var/mob/living/carbon/human/M = usr + var/rank = "UNKNOWN RANK" + if(istype(M) && M.wear_id) + var/obj/item/weapon/card/id/I = M.wear_id + rank = I.assignment + R.fields["comments"] += "Autogenerated by [name] on [current_date_string] [worldtime2text()]
Sentenced to [timetoset/10] seconds for the charges of \"[logcharges]\" by [rank] [usr.name]." + update_all_mob_security_hud() + + return 1 /obj/machinery/door_timer/initialize() ..() @@ -166,6 +182,10 @@ // Reset releasetime releasetime = 0 printed = 0 + if(prisoner) + prisoner.fields["criminal"] = "Released" + update_all_mob_security_hud() + prisoner = null for(var/obj/machinery/door/window/brigdoor/door in targets) if(!door.density) @@ -294,6 +314,7 @@ timer_start() else timer_end() + Radio.autosay("Timer stopped manually by [usr.name].", name, "Security", list(z)) else if(href_list["tp"]) //adjust timer, close door if not already closed From 837154727b1a06b3e81c351cbd3a2b1e4e646fa3 Mon Sep 17 00:00:00 2001 From: Vivalas Date: Sun, 4 Jun 2017 23:12:02 -0500 Subject: [PATCH 032/204] Fixes and formatting --- code/game/machinery/doors/brigdoors.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 4ecf6ba3318..5045acdafe8 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -57,7 +57,8 @@ cell_logs += P var/datum/data/record/R = find_security_record("name", logname) - Radio.autosay("Detainee [logname] has been incarcerated for [timetoset/10] seconds for the charges of, '[logcharges]'. Arresting Officer: [usr.name].[R ? "" : " Detainee record not found, manual record update required."]", name, "Security", list(z)) + Radio.autosay("Detainee [logname] has been incarcerated for [timetoset/10] seconds for the charges of, '[logcharges]'. \ + Arresting Officer: [usr.name].[R ? "" : " Detainee record not found, manual record update required."]", name, "Security", list(z)) if(R) prisoner = R @@ -67,6 +68,8 @@ if(istype(M) && M.wear_id) var/obj/item/weapon/card/id/I = M.wear_id rank = I.assignment + if(!R.fields["comments"] || !islist(R.fields["comments"])) //copied from security computer code because apparently these need to be initialized + R.fields["comments"] = list() R.fields["comments"] += "Autogenerated by [name] on [current_date_string] [worldtime2text()]
Sentenced to [timetoset/10] seconds for the charges of \"[logcharges]\" by [rank] [usr.name]." update_all_mob_security_hud() From d94306768ded56b8cff5aa02a6bdc8fa95965e08 Mon Sep 17 00:00:00 2001 From: Citinited Date: Wed, 7 Jun 2017 01:12:00 +0100 Subject: [PATCH 033/204] 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 034/204] 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 035/204] 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 036/204] 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 037/204] 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 zcmY*<1z40#_x>U+DJV#;NQlxdrKEs#O6Sro-SsF)ceA7*-60{}Azjkl9ZT2#*Z2GW z*YExIdS-WLo|)P6%-m=AokDBxd4hmK2+a1|7uq4gr~jqNqcs(<9>a%lh^|HWQ9#bK0aeRl<(u2 zd4szT_x*q>35!VKFYs0j3$bPg>`X+U%I(Y2zwEznD5+-)ybE^cKc`U(XY5frRV{!$ z$=wwx2bml7;Ksc{F?cg>q|=`sf2yZ0lfT$2^C+M>LGdH)eymvjM^$4;VYUF8?MFWx z7EnX>zMR>kWzA}ecSGFzX!i<+WYs z=;j7Zyvz25Qdku9GnqXHi~YCJck+G#QP9VDc+-~V=Iq&=QGJ(5nJeJ~7#g^^cot_d zM;fA*d*9uUxU)q~7$aI^*o`Va4wWk~oPkI&-|BoQwR%rZ8C+IRSPW|N?DON2xcE38 zJX4NoRniuCyA4-mhA6)e0h9&^8+T4+8nI^|tNj?w*)2B`DGo@6d+v()-g~w88E^@< zCAs&<)n83XVkJ-0&73|?Sw=pVOMC01-_0z?wj-Gu$|fR9v9+y-oyl)5O589Eoc7G* zREO1Y%YDijyw=R*0;h-1gb6bAFRtlreLY#r!>rB1&3y!X*9I9Ffm=ofwQ35K2I5lT zhUDXtM?7ibp;F9R7I8C==0qWdnJC*|l``>K@FL7|7T?v^{N8Ue1?ygSz#)PvE~rmu&7i+ZxbS;S)a6XGl&Bk2O+n@~ z!Ya0B(a>`u)(ld+0CGE|tdp@a;kGZ8Is{#^zAX6Y$5)iyEc0mIgnJtk40hIz*0_^; zQWz1vh*%85d-5L4TbOx6^{bG2l5|X6)XpsWos?|PwX+?*5iS4gFYB#gERe;73X|^W zChKmJKRUnSSed>PwC*Q&m~4hFKW&aLH|eg8f!>)hTT@cfPeeR{p$lBEyK#9)r-6P-XY+SkUTjM>kiH6jx}Ym_vdq&M zDBd18YmZ)XEclw>x&ONoFbxJ@OF-_E4s?{E58vrO3@JTw-Vf{YSYvGck-yBGYJ{V$ z=D-T33rIs1g$Dy@?WbSkJZcQp8V857A$T7d_0POp3qi&-7!n7)+|SoF2+}?AHTLr{ z3&~xI&D$-4Ja^&nPhUGDV*GC;V6rg>X#oRlkJxNTTgC$!GTy1w=o2t$ug8eY9HQ|( zM9=a{YbotU!zZzYOd`>G%Vl43LYzo~BpxeTsP`txyF>%~gOsc_4|9n0LtW)1Lg80) zef3u^PBbW({jq2b1@G2Q@jEiq?T<>znO?8#&}JD)<@hfTmTJ=OVe|&c6P*CzM41EI z*<_M^mAWg-8M}WqXx3jE|(|u^I@oD+^qX|1f@czwNSSH zbBFt@?~TN^wn@7=h|!O~+2GzDOK_=*Y0*@vNe_CFrDrn2J<W>Xvl%_&dg=|cgky;a>ryG#hd$KnRV%U>0hm>YN9oV= zlDD_<^ekk`R}khb0}ukJ%N@IgsWVOf|*jK!_@_^QDA*c0JAQ)zMM6zwTmq zO9keT5{G}XitLxmQ{csy+v&Z4EKHn_3N#@@J%OQ{<1N=BLoh$-oRXKZqT~**`w7}l zOt2NZ54Ih0*@!$&Y*of8rJ{!2!KbgfRFiiEfw5;)Fgz=%*rCUrTZO(A^&@fw>C*mg zfjYhNf*OUQUOPS=(%LHXamB56C;=|A!Pv?+C9$_0U+i}Pfb5~ipa-nrw;Evn>}>(LjThEixQ z@*;&UtDj3`C5bLQvE6>i%n6Y5X+;E1RcWX!N*O*ah4Boaj*PJMs8E?b#_$6h9dy1@ zBW6^cJ{YYAHJqmx;Nk_-35hSs2r9S;2ZT_A&&6lEd4hqD$Z*B;51t<_n(33!&(w6+NN{ z!`IKeNt`5e{JOW;Z@6%E;E)h}lgMPjA4wJj>a&R#7rky~3e2Ybc=LlC|6S^zz4rD8qs4BMfT^M8YiD076EAlSc*Osh5<97@-@oQ;iH+H&874K#ZLo+UK0&G6fj zj3T8V?A|lX_p>8_mfHR}mAffNF!u+cg;hFf(XC>7 zHEV)5f%kK{R*8tA!KRV5H8ThiCi>uv{F3$KhjVzvPV0a~F8IlluiM+^$fB z1^v3_i{erV{VBl*0)`*;BvcpG?EN#20j#RVi3m-2k+jc}pV@rrLSjXEM zZWmH%#8oQ>39i-DvUX%#fV_*m-Yq)4lNFa=m}-weq0i>nd%{!+kkGWle0@nB z?+1G5QYsm8xFN%g_i^iD%tMlDgW@2cGUb@?sjY%ii}uwpGA|c5AXLR+)qZ5_q z%W|hRzD$#zn{t|qL7YUU4>PMqQFTsu^4_BnTsW&La9h1@dJst43wJE-_4Gscc|Zhe z8JLf{b3Fgt!H_Z z*KGdx)(9`cp|@a0#PG@<4llemtL4+Lu>>3D>9^L`zc(~cG&MC9mM%Kl+Oo~t@HjX);6m1t zt~GRZ@iY@ApZ`3&xDZJ&QBhYp0xZZB^7*py*1dfc>&6} zlQ6eA;+_Z4aI=Njn8mzW(#ZjRDZNnJw`l3ND@j@lU5}EJo~bB3ff%}R7)e?_7w=_QlV#+BmjEtU zH1X271K(7@w6iqv9l{4ugv7X@k&TAz2|S&vGMiK(dwH(qfo~=$ddM2Wedp~(O;0l7 zm*du(imIMUx{$A8L+185-7iLYM(paT-b7vcJ71q;ocZLi4zFd*BJA8kCAF!hk2j3d@1EWTZ zef+p`cMZ=q=ZLWmIdT1d9Ax?SQR_R_2s-VT_)n?ZkebnA6gI*3UMm2pIqae_(TOSH z@k|MYxv8T!Vbtohg;vRmPCsS2XvhW^Nmdx>AmEfH!PvB6tP-HqLL{KQn9y>JhU+AzQ+k=@VgUvdwctUiNdmLYf0nd znj!K_W=}2~Cxi?Y&2U)1~tnF80(^w;{!-0YkPX zJ3RWHf3Z;R20FT{l0YlYfiuS`75$UhuH6gT46g`CPLA6}leBZn`kQmUMRRW#Z_wX*>T8xR z&kV0p>RPu0!;W**F1laR6^4_EcJEoKhFTERGfQl38Q>P>B!;yf9^KN2hKAfnm5w<} zbwR?rYJW7>9Ije2Y~wo9cCCp@R`V(+W@BE1jSBiH0aX@Rq&yCK(+$w~i| z44sJba`t`C8%~><>PNTfg5k*O{N1|4&+6)xhRX%B{ATLlU_rl7ZBpeVYJ%~VqsYh} z$;WyF@t!*2yozpUlU#C=(5P>y{t_z0>`1H9IB%UzcRSFto6JDT$nT5PgU7j=WS@== zOPRUc?7kmksg-H~g~?GLCHl)9{0&7QYtcJpIu%bbA4dvX9?NQH*q@h8^$C=UivhR$#?y`zr%+EswP zZR>JNWy@JzD(-a2C?h9kM3}+#v)~p3BT$LYusLLGsvC$QB>fTbvGX?*5)DMFhQ|qJ z)aw)0be&!Kmn@G=t>fdou!Q@*7{elP8w9YqQ}C!GDasm8J&jFR!0|ce-KVsPENZj!WC$_}WQbn{?}e3uY=A&g3~* z(>m5*7Qo1s)Y##=RVb^jb{<%p@u{8rEcyDvEU{sIFomZ`GhmG@1!-|CO_w(ZQ~b?7 zAffs~KtMOUGbuYS4~I+m+L<)c=M!J1PwEi5>%`*#e+1d9&&2l`Z0L-};-h*Bp+}NjK$OyrR$*bGqN=L@gU?cnKhlfZ4*!Zp-E_b#A}TsL zg|q~gvf}Lne5U3oiq6$!0kcyB#cO2{Rc{voQ{T!@My9-#W(m=~0}4%hvVpxLioFFc z=WSu5NbqyfMi0wAMK6m_Oesk&@v@GdzcqSazAp;mRVwrg!G{71Ba|&`VZ9>j zRbYiUwHJWW%XUw`5v8N{nKt%sGhP*vX)Kb?bYz7>)TFcCEk=e}FS~iiG?Md;u z@$aixr@j0rpEx-?qv!0uCw#euj3S6X+ngS0KS;d4kt#9J43cfBG9yG4HA+m!#Z8ki z8-5WsG4V0z1=H`(w5}=kCi(3kDQZ3E(k4+-0S9|Z%jC6g*Zmc~AB>c^FRY9PuHme>xq>s|r z;>v>@-=^pduqb4M+bcYa?2yyn?PkO+A&!m~N+Kl23V84)$JZ|NQj}^BwI%r;Je}vt z9{NIPFI`usn^fIi-bdLR(r%<8gN*RG>2D_b&U(tUWHA5k%BA;H-mDysJ8jK*6=rUv zt7~ib1Q7`%zYZNm{~8O!lCIapEZ7ZD=R1i_D8Po3U?TL06Y=50$esG(orYm#BGiYB zBy{zi;BB7&mm}N6sOYJ34Q99Njl}yQ$S1Jk@6wr@$N{%Tq}zYDk!Pk~p>e!hR7RdF zq$dkv=PwT9qd*;Hr^;p8)x$wt=hNlglrate(O;LTxE`~r!JrkDuU7a4;Vc`LRaCPa z04l*S>VDsW{=o}~P~MMW_|Rp9j6FaWrkP5A@`mRXPBTevGF1Vzz_1|7j;k2@*}VGpxEHTZ#Tw03L!&fM$5 z@K4PkoL|z&dnIgWSpRZCE!8Yhp`-7-PVAvTXDYaG zoA=Qzn-LW53tHbnM%+jnR#};VGie5kY@WjJIDaK=Wrefvf~mu`+Vag|GSz?KP}r)7 z1M2d;(r#e3+A6$mAZaR1w)QZbf=7O*QTT>}$0jxA0eL4cr%XayJ7xByAs5IMAFRj4 z7{DUoLg2)_v`0GN%#z7Euo;zMioN$4sh>q1tuSMV9#O~)mQV%k?nOT(TU9@uUtF-Y zyr5O^tUdkOI=6^t>&Zhx_i+^mRb413A|jxFKeZ_O~{gu!4w0p{lBK>m)^+ml()1kwJ$zyP*cq5L<*!*|lW!d)dF2DGWUuM%Jn ztVvbXzsOa*lOr8dKmi&qjEZg9TJItsw>@qXVkT(&q7!NA%66!2ktzr>c2ZfcnwI4S zIkR*(xE^)&^SLgM22#IOf#LuQn|}!RnR`W@Ri7O$Hj!2f1+@Y<7klBv6n;Do3akBj zV-=Mp7&#|oSLOU@&T>C`EbH$!yUpUkHfZdtwhEowS5k*-A@6?nx-Q0@@f?b4Yg0t+ z&0VO>!G#Oa2{h8xY6Ye*Ij!HJlOwgv+t)dRq-jMu(C5DKVI9ed3o# z9>Xksh*0Y0yX3aFFI<^#6$)}a8;V^Qoz9j@tg+m5eg{xYjO|yfa{FHO{?h4le10R# z+G6VDatVTG5z?TXAEcRoJ`&UV)VR{WR3Y0@F_LUR9XVG{v>m)1DcHm7%~FiE0JS~k zkS8qx7(#>NjTGW6$fByNt0lbzL{{Z$hKsx7sjRd;E-x-_$Uq)t=R*)_D22@TO6wnI z)yNnhVby|PXY15I5XDKH;QYqnAw%O5$m5Jq7O)-IEB4d+w7}!mR(37Bw2Xef<-NpD zbB1aT|Apf-^IgHmE^UV@%Kb`%+GmSg)W{w9p^u2`b|~BmcTGF@gqsNWHDcqy&^@VqG3rY2jqp0y2s^mew@SRz+ErlpB ze7;uj>Vb52=zMLl$K`o$nF%1pj+=R*= zE&Iu|3>peyt8Kzhd~eG4B9wPM^``*SzJ}BA(R%OYy$3|X8M)5!oVbqSoAn$OKhlP z+0@J+FZyW%18HoR6-b^vJa*Hhahu~UL+*AG$DaW^)Gue~Qu;XT75g2i{(wYz$+C1y zHEEGma%;U|l_`rdR|mdBfRVIA*6chz{X3=Famd_|Ybxe5yIYr*{o!<2JgN&u>2iqNZfK?tZMt>$0+;Vkoy~&=#SrKfq8(=xh7cuF&3wUWZpfLt zpxbhs3Tf3-lLY@d$LhD#SrrQlVMoRUnFE!C&Kxo)ZK!#7zC;2TUn>8A5$GUL>r0qc z!f#h0eC`B#wT=crAyO)la$@tSQ_Mp9{3LSbdr~=OmT+KCIZGXl&biGy7)HUa)w&_v(^iJ zNYAmF&RhFyoi(q^0iAYM2KO>kWLc>NkroEN@WBH=#kKAON=t>wOk|q|>Zed{?k7lh z4;k89Dw9X{grA;5a>?yNO0P8ojSR%EtFcO6m!W8?tLK&Wo0C|3_be{zO=1}dr92_f zUaBZ91@QmUQ+}UsPdV~-HbLXuR)W)%<${RR1gx6G8DABAnRX#PWGYLVSc zJWrSwj)VR-KWoD&26O)}>3p9TvkkZYu34J}4(^kuRuIh=AEZlK>2zsgVq$QAb1rfY zKRvbUqrUM*nTHn~fo+J=cS5GYG(l7&j)2UmU>=Ku%W{~vkq(r&Bv9aOhFP7XL z0lqqV#>+wJ%IdU?4HcXr@Lsnq_aRA9i+$~EIK{GTet-e))FsZ;RE|uyUHlarbv3T~ zd9syLODfM47JWD5D1r2(@O$7?>eRqyfxGz85`kxSRN7eDtBX;r-E1)m$0NRwT zutv4ZP_fqyr78f1*T%FdAs8H))1cn>ceg)tr_|$y%vcEr1O&7rX~l{#ErQ7x$iOwk z)HYP>w7(LxHHf1gX#jKG-$J$|zka71V;#&Wpj%){Mnc6h&Lynrg$!Ad4ets$BCwJ; ze%ISo<+5ijb4@3u*k^4I}L|+g>e0jw(DTAAd!RA#n;w9*>ADe!8 z%b#vKj;p9ieg9|7>bDVwUYYu3`ne%x=xeg5B0;@3=x-auQtV{4fg_qvt_<6I;UzPd zLg~4^*T6j+Ahyw0>vXA_?uAo^*oe%^wja*KbC5ZZxVnvQdFd4aB-S3k%luo(%DJFj zNh`aK*%LSf|L&i%X|KOyX&+QiM*;?Q@3dC`dRA_F?IDvqa@*l}b=5E~F>&vZiH%Ld z-oAqUK$WdH5l~3y4~~7MuzP5BtJYMmxBYw_kwG!BC!}}(GZh94KHr6w}` zP?z~=g$G6snv>i!YbT^Nqdx=UPXd-8px&W)jk79i8jjkNd^wNiAYPh(~Gfn+g_|D?G$G6;x|xyyxjz8ADwdt%XE0B?Ey$(ukD zuLDWT1m~@S)8pYnI+Hk%CDgll0wf~eBf`FA(|xfLft=2AUJXroNmy4Q>A3bk&r_IR z8UgR>kp2lwm$@hc2ITd(2qOuN*<#^8j2pr$(H3T_9NvOOk+xzT(k zMS#M<@lL%IC&j3(;&MrRd`4k(PKO0x#sIlpZSzbn)wZ17>FB|#P$)|4)$*?kP4?t! z4Lek)3{8eG?#AGbT-1Wx(Z>N4d(wDetdS%ibHj$dr;xE3O!gjv6~Mljri9rpoqWL|0B(cF)JGy<53H8KBA z>ewECO6#*A;nPCK{)3Ixl9fCKbg`iRlgm1+DvV~9oclMLPo?zT`#AS9n}i;#H^fv_ z;f?A%{lo`J0-DIoMpRP1*RKT^}6cS7*JMR(b)&nkxBe)9t;_Jfh%Zo*NDRsiyQV$$Vj&x8}^2hgW`a zCp`ymg*LOoB`_cw)M3*cmJ}dS5hvShWKl&$hlOs87?ae}^- z$-WiS=7bbB{Oh&R~GGN_*{CN79nYfS(Y-GJ8bokTr@gezM0uOUu|0AF1Y>3&d-k< z+J&?{Id{Nu5y4R4st+njD0)Z74>@ew0%Z8{6WRT`X(@u+z4XSW@)&9TvPcuWQA*{3V@l+u&Vn(iAky|=3;#-@r{wm;t%~E z6MkJQ=N_*XP$*uY#=Ky_%|I#8#f&+4#j2-)kxeIc?8d+AA{8@np9Ohg1}Q$fp7pk8 zTzcZWuPb~VL1=ss-VwuvEiBH!Upl5AXhF_=dy<)4hQeNkHkUVJX}S6817Q{Ekk=VR z8%W|{81phF|0*k9v+$JoxZwvybI_kO?3)26J|v}!Bwy(UV1ACJ;tR}TPmZlvD;b!* zcq~WvXin39q2$}s%@9>ok5H}=D-KK}vx2_EzGyERQ3f>_jNFpwzrVA1>V=W*LM2(V zg!?nVsJvd^s&)|LC)IbqaM%pu<cau4 zD5&0}%M9vrj{lNhIQK_wllJy~~e#-}Agi zro9|2ceg)*{>1g;A_+X_DryRH@)w17R3K#DSO3{7_zg7vi?ycvBCC4ZCtO}2I-`|d z{WX8-C$~ojr1^tAt#*#Xrg2b+23d`sEZPS`aY%ZbNdSszLLU!xTLi7fjZq0#K1&A) zI^{jZKNs?umqOIQokvvGsHsr$f`3XNi`3hhbJ9Fth!Kqrml>Xw7p=1( zY2#N~EW=Z@w@BRvAW}e0?B%ZM!U?Ix!yuiv?+Yy77p4To`?WojLA{DgM3P%W84{hn zH(y>tj@|CDYy?Ces<)ZNnxE<*`E&W|BC8L{Fch-==cbUqDt`&D1vEFI2IN0xtnd#ROhe6D2Y<~TdFI2!FLj=8MdPcKwcqTISaW zVk`Le%G)0ScugD&wd3dwoI`Yz()IXXp1IdhH%ggygFU(Du2Qf$2&+QnFdwhS#1Nn` z;u&ZtlbDKEe$M(w;#M=a)4#H&rcS!KYG>M^5`vI^CsJ)zPU@7@Z_$l4#gXE)pYu>L zM#+RkipJ0lC_ulLN@(ioVSr+(0p#)IEAw{+kyj8I=F%0~^95Z0&kY(#n$95MP&V}I zivb43HHwA>n)$mmqh*R_=v}U2!9sSApAnDDgEyqK90>c0a@B2*qNI99gN39yPolqeYV=G$MZ?-8|$V~du z^XwNaESTr#^zF{o9H8ckWg}4B3D0|sWB^J@I(OH@ze-5-3i!A1M(y;|jVD>p!67SI z{CQts!o(Z}xxN?m4>w;UA@4C!ZaB(wWki4f}&hL^ExZ)N;@^!qRi z;Zv){*H(kCH!*FU%xf#gCT?y-1D*?ykMfWU_yz8yq@nPrF^hkI9}Qcl0RL<^@ZWW% zO;W_5v$AfJCHPE2(h^Q(M%VUdsynO8dhL~BZc6@hUx9~z8a50w{xk4D#3K>4}Z?H%#IR!KGiy9}j3UB1Z74Nw#7(|<_st&p`CChX{wg#HD@Z%-uChJU^CDz9wT3$`((m}C8Y2E)E# z#`t&?RgVFNd=s<6}7P~kQ9Fe?eVv_$7am7eP&irS2F`KDNlCCegtaol7 zF1Tti4@QVOh}i$Xr4T~yV^E(ywhIUmbZk<)zg41vof$xD(SbfFk)AZ4ctVm{x8@H-e%(VnzU%JD0HqL zJ8$Z;05|spIXnIa+>U2vF^6J3FP|rKB1pIX7j1#qiTaVMn}zBmR-A2rz$F$oGq&Z` met!WCE_v6m`9Dfjcn7e}5(F#bty1S8P7`lcS-qHKs zf8O=3-@5Dm_srR6&U5zn>^Xby&zkZW%+O@aXmSEyY)lXcgg4yJ1Oj2r$1n>3zd|MT zUqz<-kQ%D)>5nT7xW{Kn@3zBqdewn`w;iYig-kXl-e`1nl^ zT#mTgK#Wv5m%o14lnFwbR{L-je@oiKVTh5i?dgr;rjA7pj0}WiO*Z7SgvYu(anRiptNt-{=Fvyls?WPvqGj zX`?CI2zOU0VYX_&OP$B#z?e(=zR+fVT7+h#_Ic-BHAV6ynfoHsylvY#xF?fVcmSs~ zl(mL>E13koS?l+woSs6kr!$L`rLr3vjeMWxwsMGtV>k4BHw&SEz=QjmfmuCmItjzq zA@|Q{mAQ)k+EidmKgM3bRE@88W9w)4SY)CAwrpGWR%@SnrWb0Y+&Pip57*dQD_Vco zM+<$d#4G*5wRZShDA*~%+1B>mYj<{%<0w2=CXE=e1{;M}&#HoCf*e{g7@mtqMm~bS zRDGU(v_JWk<%Gq8b&m5Htja(j;5uJbQ~-JR6fFjtbzHiCz|89 zP?9?+y}K?4qE&DxaS#bbjd!0w34{D`l{!4uVF!s!kFjPVbH!fTdB)Jn8Y28dmhWwr z9n-ewKES1R3rh2Z*wMohNN@k}l3r`gIz2{}+JC2h@uO1{&*NH}+>@vRI6L zy8vfrN`r=E7O!KWH{rZ3vy6&pwC?Vjn~Ce1hqHn);TL8d!1beIj$WohR<%U#;O%OR zuHu&Qe&wIWAn&z6*1Wk7$M-}xwCcPW=wG7@I*GYu6Vgbv6W0Ri=WYdayfw`3@<*;! z^G;HAH$;Sb?TRB-rzktRA~FZF)Ja^NdJ~yG zMvNCQlB1;930z^}wI_=BG{WW|3(==W4ga3iW#b>VF2K`I8M5bffKyp~j&T>v z?Ku9>C0Y}Uy5wH#%Zl^tB$O8ut;**S!7nMDrw5$(_-VBSGsa+1Azu3&EPfOBz9ek3n!^`qaZD z<4vQqYCzkZDebL0=Q&Ac)z$7JO5436v*Etoo=|HiBBP9K*1S&5p_Hpy%(IpZ+*)^y znVN8qea!lP23V4$$8)?7%RW>(dK1x@@_GxCCRnw+BW&%w3Z3bs=0%*!OFtfaj^dJi zd24D#T-iN9<`oiJ;vwmIRbkz=jumg4?z`x%XbGG#Y#B#rO+0}JAe^(CTVaJ$w3*uM zvOA9DADlkFE!tOplor=a*3BeoHvj&f?xEtbW|>nPqyNul)tLUHM+Y@SIBUe~Vdc)j zL)(z79H}$nmac+o32%q&u7M+~4DiBuvYb1X`L-$i&$^OG{PWx<_RoSMz2V#SN#jc- z0x3Z1M+GOVA#>Yrl&bMik?Hc)spc;lTYai^Od|1-OG|5gs(DNz4Wf=3dwr_$Oj4yH zrO7T@TdWr;A$33L12(N@JuAfAJ=KGhm{A_-%DkXYLH*_G;kNA(cU`;mw4Vf*FMJK5%#jO- z72nb5^9aAEe5g1O$xpJyO{_iAr~&b2hyC`OTPtQfo7n?wgy52AHfW}ujRCH~p3dxV z1jjx~c56q$l>$2Y`k08N6gZNG3C6>uo5@%mVRIou=Jg_SRztyd>|(B`obMR=+VU`f z*%NMde))@hqE^>08sGG_T8U>W`c*&g#fg=3TU=~64L^;wgylK;F1A(}ti1SzKVH3n zuFn-9t0C)3;${-FUXzTGUw>IGOMKq;Y!u@_2o}@wHKt8IL&6ExOW1mWK6e(6%GdKY z*BVOaNb+6+O}wST{BH6wahe!SI>|u@pq~4)dk)k`iJ|DigTAWBW8oBJa z=i1d0fKi=~i{gl_|A*Mme_zJ;Zt9d6YajMDOy><_*BYNOlp6-3k2X{M<^F8*eiQqy zZ--UUX!IU0E+$&SU`{q@jPlnJ%1=JQw(qe=6LclN->?~eXI{+%YagcT+%-g&g4Y7! za5HJ`ZjbG%Xs_+;$H`CHm4Zp!cn^bD_q4*_g*(Y|m1@y@M*!OQ_xES}XAKos4`^pj z>*6BxYCi)`u^LXXP=YOhw%>{d%W!(YXXkr#f6$VWQXgrw)xMf^>7c1;*Q#z)t!@ww ziS+mfb^S2On=zZ^IC?_2+nW0ibhTM|Ij*E~_I0+=u*)iv(&?x7eqk|I43CttDINXv z`%HPv9w<6`L}F1KlaJ8(Gj}$gMxSIp>`diz_iJaxY$f*NfWgiX1~zI3I`phi>6>|ULnygUDfANS5(f{u#}HznVtiKy$^%yZun2CP4{uZi1; zEOc1S0;r7E53`=Y1mg1YvYo_5HGzIF9BPB|jFt5*WR<9rAkpJVWdw9s$JgJRjfdHu z_Qm9YNck1k%Rfq@kcquUN^;-b@Jy%ApIMZZl?4UmMt1D>RXBr^ju#3oys627PD{zoEb!>GFRTSv$Ic4PbV)RXvJO4 zdktTL(J`OwXLP&_c&9k-YW)o;12cURo$S#noJE@&YzVHr8zex1`fW{jV@-AVxKmwN zpw3^hIG5y*KCFDb99FnITrO$Tz4k@jRk_w_a?A@03(F}lkDP@7_hCCa&CW%RqBM=m zw!${R!W5JrZSi57+U|6yX4DxvO4kk}BVK_oyDTHDitenGO-=JW_wo{(X&~+1VmdlH z`3G6(b{Y5?Vrb?Hy8Jygpufac6(x>^9 z<5xEZE`^9K4QO;3?lgm#okVy6%j-QM^EWek+Jf9BD1Ez@vPIbxmiU4`H_k4b$B&6) ziRU{2DHsgKme)5j!otK9P-8ZFS|D}bPfjp6kc`~t4>A}PAFLx`fLsRqaT8C&WXQZq z=PvoDU1{}i%16#ZmC!k|&Q=%D#c2S(bWdJ}w8jj|-O3%jwarI-0ReQibFaCYsypPP z`i9}G-sgv`e(qY=Sq5*pKZOoa0NIVt+Xxp%j5PB&?w0N zvfwea&TDQ?+26N(v9MTFSorfXwaOb?0*E(4OzP$&3hVuCMc%(xkGn0WpcVc-*MWh7 zoR2!Cz^#bEDL?0YsvgMwY*+-#gg1Hx0d9Hd3-P*gENo0tj%9i7dO#szOL#TXLP*gF zL!KAoPoQ%w7xZ@-&oMfN8qc1jCn%fH|Iip})jQ=GjxMH%JHsBsfHd`Ybg6EEn4h#nimJ`oo8 zHyAElUc}x{O8{4=R>rpk-dppm?-BTq5IcFSR36t5fOO_)?Zda7lDIi-{_h`)Y|XRF z^MYLLtO-?UWpwIG(b(j8t-17z58!M;Je zjNrSiNSfbpOjb3CyDP*B(k+U@VrpHs1&!|hvog*VULJ_UsW&t%2h5!ApQMA@lX)U} z>{3&zE3rzC;Q!8Z(H+Eehf?bGsYO$N??-d?F9?G5wj|lx3bTZ4^vL0s8H6*AhE%24 zbTu8oe(BL~%78P+;$@ESx0tzC}X9F34sysG8l^BkviyDtWym}!K#c1Qkkyy zvU@7Y9U!e7Am-E@E>JKCvj6#$AJ9Yr{+GdDCu;_7nEp%&BcH|J8L{ps6M zJdE~63)+qExzmKgc7K`xqx8P{7AA!BJ@W&O{Em*vB6`YyeH6V(>)>p&1%%tKjvTMn z?VE@eGCdbBB?(a~IG1u+B3nX~F|PQ9k4D}Y+cV(c0ic3GsXxwe#i8q&;w*5$pPTwB z`=T2}>G(5KlecdTXZD1men%`$zfx2b9}yrmG1=k=F5Uk*#x{-5orv#&p<|JcRk>sM zMOA>{9&;rG`jqI??g3!uQ>K#X37RE6d@B+KCm{P4bc6drlqRx0?af!Kk>2h+%aa3# zXLz(>?{HEvWosPoD)hKCLBU&_>K_cl*KnSryguF3$ zWS^AtB@k1qAOnrw{gxA*D$%cB>2#W%xqioG&jqBf)u^~Ecmpg7iik{ZTQab)1XqXk zh~|V;BDLkWVrvu!TgUL>LFcPvb#{g)kvaJ7*`XcnF$_lNIl8(Qj@N3)YsRUD)@}@8 zs+j%u>kss`l+Qk!7(7>rI^p-#wl?zjFi9h7|1z(jKtn@A*3sy!nIB<69Yucf~$&V6?B$?eY z-1N`g7fSBj)$k|3q!1(*GII92x^}1wztj ze~^)`TZ>D-9moH<3^Ve+v2|(TB%rX>1;F9iyyD`;gV6c;v84m!of!|yk#1T>ICHHN zRKjJ}?N8`8C=~+4!ND`lPGYQ12t;-T=ydFL1hj6vH^TRCEgR%*h0#7^S)OJ7NeVG*Y$kpU3NbFB zJ{zUP#hYQk876s>cvSM^nN>XjMUE7z!XH~RrO8CH!sUi>+gh|y1%|bIjpz^!g$-H&(bv~xvsY*uvVIj z*(**nt+oRnw-NXaCPT@g^5*GERs#n1BHOeQ&9k|z?4Ey&* zh>lJXDF1ab(0#bvGT-LqRxmp_Fu=yi2|aH`*1&Nec1?PM@i~Nq;)Sec*udDq0_gjG zqg#&b8yoiVgo&uDQ?eKX*P=A0iLGb282_Yx& zW>y#B9K4)n89PV~?ZBrHoQ^wHqp@RUUwmbRjYoEQ?%|v5+~kB=G8(!8TRIj2i+9i= zK#r47*eWazTnt=*Wv!vOei8Vn1y@NyPnXNcE6IoIz!@K`F)mGhCxuDZs+cDbpI6rU z04lQcN-HU15tfVzUZB$D6^>1cTiOwR#=@-OP@P1fNTb;jkdS}&fTqtykH(Kivdz$r7INUtjjpQH)-uBJx8cnRe8aY zkpvQSgeNB_$nI`oaWT{l561s68vb$@Y5|oX=VNtCfrITa>*{(u;9DU|N=iUhRaMMy zIxkW_UXUTKe^BKhhJc#NE<$$S;;r_lI$MmvmEcii@i=?F(vi+<;9n5718&(=s2KuY^#k;hG@mL<%E~T6+JV8p?J)<~B`lrZ zd#vE-VN~+=H7N;67MA#@T>(kLO~!XvK zy`F~?S1YiV-<)Z5lKS?wvo7u%kc@XCCeJ?Mx%Q5^iQO7{8KxJOo1IAAOFatwQ(aE= zuhv<_-jHQV}C$RQHQ#;!h#YN6_v~i z=XHz0Vr@a@O>zp~<98YnZT1DC?pXupD^hLb?^f@7`i4rPzPTQn^lP|vG5D6B-C?R` z;N^lzNJ(R&MSh2KfR=H!GsxsaYnV(-6GX)+lF5REfO@DR^}vb(IEgaE!t4!2mk%VQ z^R``}NpHtv=U&a+Y5p4F6MIW@=S-$YV%vbLsE>LQpy8mIIN@4M5w$3fRi}(ww)jN=twnf3NeldW8q=M;2m?!j?C6!5;JflDj6QhN)mlHac0r1 z{%sKkbbrK^l&a-DcS6`3Q-Y9LP*ZKOXJI(>egUzQkiJ8{cqTs0{T^0PRCIE6hY>89 zHF>y%A-l7)6KC`0-j`gb*+O$B$>zV`Eu+#=P3QlgUCfG;=LG z7LK`M@WmN@up_pXSB^Io8dvVqV2 z*ho+{x4u3hFc4jzha5kmJ)2PRoan`i7v@gW$rEVWj+-E{rpe~>&UhMllsY+S9386S zRvFZBsg(ar*m^8%Myj~-CE|P2Yi11Mt{0@lCm27GNtig}u8!SBRO{%o`?n)Izuq=9#ZxoB>WXF5Lu^^Y9Zr8Q1rAQXfj0^K$Tu~vlXuEq2|XKPC$Y~i zr&6@0ac|SMzKqt7X@=)zTB*>%6@z906)(Lf~pXHHeN9~eQya@ zFF~`xsF18*>FL~3BMZZ_$x=O6@bZi!YMc)P6BV#osAFj@tuG9CUC>3Da#>JNP-8ks zhD<7d2mwE7b)Xa>4ewb^;MRMsgZX(lMX30EDqd0NyvY}N59-6(zWtk4~((+NVq}Byf)nlp04{*2S_nSf`6mzUgQ;yx9^Q zF6&~YVC^Mj5*AJf4#woE&lI?@Tx&5~u82&eJ;myL>mj1>6Lk!vM@9bu`1pv1xAT(P zov3kZ_ECPF0ihB5Ui}+JE+7dBAUj{2|L|tmba6*yw~%y38Qza(?c9&&H0{H=?oZd>()=)&2226Sw;t32a_@IUTRB??tFNUb|>4B!Px$^3<5Vi8a%Ezi~u}dp)5s@w~3W`D#fis9E6q)u|5Cl zNR;X~Z3+DPeC9&q>g>#CKE{xenp(98Ll)#Yxw%EI34x~U6dUCXF~o>&RYF4r&rbe{ z)lUl7xSENa)6!;|1{uIEk13wtsFZVJb#LDB(9Ian7yNcpr2|*$l+TPDEOc>+xEE&9 zlj^UG>lPg9AU|Q3MpfFC3%PTbcH8Hus}G&I1Hi_9C-mZDjZT%K__4cw`v*|mNBdLt zF)rs?;p{l_#KB?e)Y+>d9wZgnZQcl>WIVDwCrXl9YUnL|ew<8+aQ4LJV%wD<7qKVE zqFh%q!}Ie59T4A*u-o6{=LJ5!+iRvqWxfl|*d2evaDzdYyeE=nL1o)Ooj4dYxYcc0 z2i&-!#<+m6B3Ikpqf)@Ue!z+*~*PoQQ$~Q`Tnw zG*5LU6a+$BRF;!|U+_T_p$$U9A~9fH;_&h_vWOQldlmXkO<}SVc3HVq2MO9bgPgBD z8Tee2Ln0_L9h;GSq=(P&BJyWfsGK}-J7ZJI1)kV3o>Q`WsFNe~i?waLsBZg0baPzL zqK_S@(nUD*2zUWT_v~G)%+PQTHc#Zavo}nMq8UI=c!w=WfUk1>WO*7|w&qWpxF&ME z+taan7u*AI@u3F`+)+YFDNrMNdNRN4Ehcvjc_z~$Iva514OE$#dY29e$p8>fLt^lP z07y_c4Oj1aoZIvGQGB!@y6=yv*9Y|~Dq*g*4Nj-KWL`|vRxil z8WbXL#y*&3K~ojow_gg1fFjoO=g;S0*-c~Fyb0WZZj(L_64-`@g>^$+o+L(x57W_B zA3xdqOUne1%qu6c`yUqjst%pjw3oqNo$kDe@A^l{1eUh#Bx=IV6>?_52obUXq!HEq+0wDS{#Qz|-n ziy9i8mNwLpAtsyL9CvX(`ZTTG`$y2Pv}38!Nx_WaA(Q^^%md+gVAiL@Ns9|jSdxQ2W0gX@3#j|ESRP zk2!wrV-ok16Mf|SZ%Ry1)<0VL|KX7T2~`6BbDa5~mib?=BEa~cHvE8gqqD~`gicS3 R{PPP)S^kY&xr~wj{{h27qU8Vp delta 7972 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 From 5e5c1c4238f9e590973a6608d24847cecf319a88 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 10 Jun 2017 13:47:16 -0700 Subject: [PATCH 038/204] 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 039/204] 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 17:30:38 -0500 Subject: [PATCH 040/204] qdel memes --- code/game/machinery/doors/brigdoors.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 5045acdafe8..68987b63ebd 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -110,6 +110,7 @@ /obj/machinery/door_timer/Destroy() QDEL_NULL(Radio) targets.Cut() + prisoner = null return ..() //Main door timer loop, if it's timing and time is >0 reduce time by 1. From 44fd7f812b073142db5b936a980765343f476b23 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 10 Jun 2017 19:27:45 -0400 Subject: [PATCH 041/204] 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 042/204] 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 043/204] 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 044/204] 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 045/204] 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 046/204] 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 256d6643d3e1355c90f623e834a37f48ffdc9920 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Mon, 12 Jun 2017 21:39:33 -0400 Subject: [PATCH 047/204] Un-hides emergency cabinet. It was hidden behind a time display. Now it isn't. Resolves #7527. --- _maps/map_files/cyberiad/cyberiad.dmm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index afb8adfa849..f2be8c0e0d2 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -1720,6 +1720,7 @@ "aHd" = (/obj/structure/stool/bed,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aHe" = (/obj/machinery/camera{c_tag = "Fore Primary Hallway West"; dir = 4; network = list("SS13")},/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) "aHf" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"aHg" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) "aHh" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "aHi" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber) "aHj" = (/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,/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber) @@ -2475,7 +2476,7 @@ "aVF" = (/obj/machinery/camera{c_tag = "Bar Storage"; network = list("SS13")},/obj/structure/table/woodentable,/obj/machinery/reagentgrinder,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aVG" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aVH" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/storage/fancy/candle_box/eternal,/obj/item/weapon/storage/fancy/candle_box/eternal,/obj/item/weapon/storage/fancy/candle_box/eternal,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"aVI" = (/obj/structure/closet/walllocker/emerglocker/north,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) +"aVI" = (/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) "aVJ" = (/obj/effect/decal/cleanable/blood/oil/streak,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aVK" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aVL" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/fitness) @@ -2609,7 +2610,6 @@ "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" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) "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) @@ -9114,7 +9114,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSdbKybKxbKpaQZaQZaQZbndaSfaSfbCfbKCbCfbKDbKsbKtbKEbCfblQbKvbKvbKwbKFbKwbKwbKwbKFbKwblQblQbxbbxbbxbbKGbxbbKzbKzbKzbKzbKzbKzbJfbKAbKBbKHbzFbKIbKKbKJbKMbKLbKObKNbKQbKPbKSbKRbKVbKUbKXbKXbLabKZbKTbLbbLfbKWbLgbKYbFCbLhbHDbLibHBbLkbFCaaabLcbLdbLebLnbLdbLdbLdbLdbLpbxvbLqbFObLrbLjbLsbLlbLmbLtbLobEobLvbLubLxbLwbLzbLybLBbLAbGabLDbEtaTHaTLaTKaTNaTMbHQaTObHQaSVbIbbHUbHQbIbbEubIebGqbLNbLEbLPbLSbLQbLIbLTbLKbLLbLMbLUbLObLVbEAbLXbLRbLYbEDbLZbMfbMabIpbLWbMgbEDbKubGGbMhbGHaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSdbMjbMibKpaSeaSebMbbMcaSebMdbCfbMebIBbMlbMkbMnbMmbCfaaaaabaabbMpbMobMobMobMobMobMraaaaaabKBbMtbMsbMubMqbKzbKzbKzbKzbKzbKzbMwbMvbMzbMybMDbMBbMxbDXbzJbzJbMFbMAbzJbzJbMJbMCbMLbMEbMMbMGbMGbMHbMGbMIbMNbMGbMKbKYbFCbMObFEbFEbFEbMPbFCaaabLcbLdbMRbMQbMVbMTbMWbMSbNbbMUbNcbFObNdbEobMXbMYbMZbNabNfbNebNjbNgbNlbNkbNhbNibNnbNmbNqbNpbNrbLFaTQaTPbEtaTRaTTaTSaTUaSVbNAaTVaTWbGvbEubNKbNzbNLbNBbNBbNMbNDbNEbNFbNGbNHbNIbNJbNObNNbEAbNQbLRbNRbEDbNSbNPbNTbIpbIpbNUbEDbIzbGGbNWbGHaaaaaaaaaaaaaabbNXbNZbNVbNZbNVbNZbOaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSdbKpbKpbObaSdaSdbjQaLdaSdaSdbCfbOdbIBbIBbIBbCfbCfbCfaaaaaaaaabOebOcbOcbOfbOcbOcbOeaaaaaabKBbOgbKzbOibOhbOhbOhbOhbOhbOkbOjbOhbOlbOnbOmbOpbOobOrbOqbzJbOtbBnbOvbOsbDXbOwbOubOxbMEbMEbMGbOAbOybOCbOBbODbMGbFBbKYbFCbOEbOHbOFbOObOMbFCaaabOGbLdbOPbOIbOJbOKbOLbOKbOSbONbOXbFObOYbEobOQbOQbORbPabOTbOUbOVbOWbPcbPbbOZbOZbPebPdbPhbPfbEtbNoaUOaTYbEtbEubPgbEubEuaUPbEubEubEubEubPrbPmbGqbPvbLEbLPbPxbNBbNEbPnbPobPobPpbIdbPqbPybPsbPtbIrbPubEDbPzbPwbIpbPHbPBbPJbEDbKubPAbGHbGHaaaaaaaaaaaaaabbPKbPCbPDbPEbPFbPGbPKaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPLbPIbPIbPIbPIbPNbPMbPIbPIbPIbPIbPRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOebOcbOcbOcbOcbOcbOebPTbKBbKBbPUbPObPPbPQbPQbPQbPObKzbJfbKAbKzbKzbKBbPZbPSbQcbQdbPVbQebPXbBnbBnbPYbDXbOwbOubQhbQfbQbbQibQkbOzbQlbQgbQnbMGbQobQjbHmbQpbQqbQmbQsbQrbHsbHtbQtbLdbQvbQubQwbOKbQxbOKbQybONbQzbFObQAbEobQDbQBbQGbQEbQHbQCbQJbQIbQFbQFbQMbQKbQFbQFbQObQNbQPbQLaVyaVxbQTbQSaWIaVIaYmaYlaWObQVbRebQXbRgbRfbGqbRabRbbRcbRjbRibIabRkbPobPobRlbRhbPqbRmbEAbRnbRnbRobEDbRpbRybRqbRzbIpbREbEDbKubRFbGHaaaaaaaaaaaaaaaaabbRrbRsbPDbPFbPDbRtbNVaabaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPLbPIbPIbPIbPIbPNbPMbPIbPIbPIbPIbPRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOebOcbOcbOcbOcbOcbOebPTbKBbKBbPUbPObPPbPQbPQbPQbPObKzbJfbKAbKzbKzbKBbPZbPSbQcbQdbPVbQebPXbBnbBnbPYbDXbOwbOubQhbQfbQbbQibQkbOzbQlbQgbQnbMGbQobQjbHmbQpbQqbQmbQsbQrbHsbHtbQtbLdbQvbQubQwbOKbQxbOKbQybONbQzbFObQAbEobQDbQBbQGbQEbQHbQCbQJbQIbQFbQFbQMbQKbQFbQFbQObQNbQPbQLaVyaVxbQTbQSaWIaHgaVIaYlaWObQVbRebQXbRgbRfbGqbRabRbbRcbRjbRibIabRkbPobPobRlbRhbPqbRmbEAbRnbRnbRobEDbRpbRybRqbRzbIpbREbEDbKubRFbGHaaaaaaaaaaaaaaaaabbRrbRsbPDbPFbPDbRtbNVaabaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPLbRubRvbRwbRxbRGbRHbRAbRGbRBbRCbRDbPIbPIbPRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOebOcbOcbOcbOcbOcbRJbRIbRKbRIbRSbRRbRTbRRbRRbRRbRRbRUbJfbKAbRLbxbbxbbRMbBnbzFbQdbRNbDXbRObRPbRPbRQbNYbRYbRXbRZbRVbRWbSbbSdbScbSabQgbSebMGbMKbKYbFCbSfbShbSgbSlbSkbFCaaabOGbSibSjbSibSibSibSibSibSmbSibSpbFObQAbEobSqbSnbSnbSobSrbOUbStbSsbSvbSubSxbSwbSybSvbSAbSzbSDbSBaWSaWRbSGbSGbSEbSHbSJbSIbSLbSKbSNbSMbSPbSObSRbSQbSQbSSbSUbSTbIabSWbIdbIdbSXbSVbPqbSYbTabSZbTfbTcbTbbTgbTdbTebTjbTebEDbEDbTkbPtbThbTibTibTibTibTibThbPKbPFbPDbPFbPFbPGbPKaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPLbPIbRAbRAbRAbTlbRGbTnbTnbRGbTobRAbRAbTpbWLbPIbPRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOebOcbOcbOcbOcbOcbTtbTrbTqbTrbTubKzbPPbPQbPQbPQbKzbKzbJfbKAbTsbTxbxbbTAbBnbTBbQdbTvbDXbTwbBnbBobBnbPWbOwbTybTzbRVbRWbTCbTEbTDbTKbTFbTLbTGbTHbTIbTJbTJbTNbTMbTPbFCbFCaaabOGbSibTQbTObTSbTRbTVbTTbTWbTUbTXbFObQAbNebTZbTYbUbbUabUcbOUbUebUdbUibUhbUfbUgbUkbUjbUmbUlbUobUnbUqbUpbUsbUrbUubUtbUybUvbUDbQVbUwbQXbUxbUGbGrbUzbUAbUBbUCbUCbIabUIbUEbUFbIabUJbPqbUHbIabUKbUMbULbUObUNbUQbUPbUSbURbUUbUTbUWbUVbUYbUXbUXbUZbVbbVabQabVcbNZbNVbVdbNVbNZbVjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPLbPIbVebVfbVgbVhbVibRGbVkbRAbVlbRAbRAbRAbRAbRAbTlbRGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOebVmbOcbOcbOcbVnbOebPTbKBbKBbVobKzbPPbKzbKzbKzbKzbKzbJfbKAbTsbVpbxbbVrbBnbVqbVsbBnbVwbzEbBnbBnbVtbDXbOwbTybTzbRVbRWbMGbVubVvbVybVxbVzbMHbVBbVAbVDbVCbHsbVEbVFbHsbHtbHtbVGbSibVIbVHbVKbVJbVLbVLbVNbVMbVObFObVPbEobOUbVQbOQbVSbVRbOUbUebVUbVTbVVbVXbVWbVYbVTbUebVZbWebWabWbbWabWcbWabWdbWdbWhbWfbWgbWgbWgbWmbWgbWgbWibWibWjbWkbWjbWjbIabIabIabIabIabWlbWnbLIbIabWobWrbWpbWqbWqbWvbWsbWtbWubWxbWwbWzbWybWBbWAbWAbWCbWEbWDbThbQabQabQabWFbThaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From b3cf6de12efa13542c7b47a66ecc79bcf4b73ec8 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Mon, 12 Jun 2017 23:58:59 -0400 Subject: [PATCH 048/204] Automatic changelog generation for PR #7539 [ci skip] --- html/changelogs/AutoChangeLog-pr-7539.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7539.yml diff --git a/html/changelogs/AutoChangeLog-pr-7539.yml b/html/changelogs/AutoChangeLog-pr-7539.yml new file mode 100644 index 00000000000..2d82f9dd58e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7539.yml @@ -0,0 +1,4 @@ +author: "KasparoVy" +delete-after: True +changes: + - bugfix: "Moves a hidden emergency locker to where it is visible." From d9192a17410ee0cad8a1a4c1d8d20b873c140887 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 13 Jun 2017 01:36:11 -0400 Subject: [PATCH 049/204] Automatic changelog generation for PR #7466 [ci skip] --- html/changelogs/AutoChangeLog-pr-7466.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7466.yml diff --git a/html/changelogs/AutoChangeLog-pr-7466.yml b/html/changelogs/AutoChangeLog-pr-7466.yml new file mode 100644 index 00000000000..1d8d9336859 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7466.yml @@ -0,0 +1,5 @@ +author: "Vivalas" +delete-after: True +changes: + - rscadd: "Brig timers will now update the records of those who are imprisoned in their cell, as long as their name is entered correctly." + - rscadd: "Sentences and arresting officers are announced over the security channel by brig timers, as well as the names of those who end timers manually." From 5131f91725019b95d43ef2bf55d2f60d6a225ca9 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 13 Jun 2017 01:46:13 -0400 Subject: [PATCH 050/204] Automatic changelog compile, [ci skip] --- html/changelog.html | 11 +++++++++++ html/changelogs/.all_changelog.yml | 8 ++++++++ html/changelogs/AutoChangeLog-pr-7466.yml | 5 ----- html/changelogs/AutoChangeLog-pr-7539.yml | 4 ---- 4 files changed, 19 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-7466.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7539.yml diff --git a/html/changelog.html b/html/changelog.html index 8321bac3afd..9af10b246e0 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,17 @@ --> -{{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 062/204] 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 063/204] 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 064/204] 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 065/204] 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 066/204] 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 067/204] 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 068/204] 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 069/204] 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 070/204] 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 071/204] 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 072/204] 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 073/204] 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 074/204] 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 075/204] 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 076/204] 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 077/204] 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:

+

13 June 2017

+

KasparoVy updated:

+
    +
  • Moves a hidden emergency locker to where it is visible.
  • +
+

Vivalas updated:

+
    +
  • Brig timers will now update the records of those who are imprisoned in their cell, as long as their name is entered correctly.
  • +
  • Sentences and arresting officers are announced over the security channel by brig timers, as well as the names of those who end timers manually.
  • +
+

10 June 2017

Alffd updated: