From a4b3ab1ca54995541254cc8651c13cb9d92f1bd3 Mon Sep 17 00:00:00 2001 From: FrickenChris101 Date: Wed, 19 Aug 2015 20:17:59 -0400 Subject: [PATCH 01/23] Flashlight Icon toggle fix Just added additional code to update_brightness call and initialize.. Wasn't properly reflecting light being on or off. --- code/game/objects/items/devices/flashlight.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 2b0f5920ce..c9de89d29c 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -20,7 +20,7 @@ icon_state = "[initial(icon_state)]-on" set_light(brightness_on) else - icon_state = initial(icon_state) + icon_state = "[initial(icon_state)]" set_light(0) /obj/item/device/flashlight/proc/update_brightness(var/mob/user = null) @@ -28,6 +28,7 @@ icon_state = "[initial(icon_state)]-on" set_light(brightness_on) else + icon_state = "[initial(icon_state)]" set_light(0) /obj/item/device/flashlight/attack_self(mob/user) From efc3121f6883e92e9adbfb6cbe928c0db4b69a5c Mon Sep 17 00:00:00 2001 From: mwerezak Date: Wed, 19 Aug 2015 20:38:50 -0400 Subject: [PATCH 02/23] Fixes reinforcing girders through windows, unbalanced span --- code/game/objects/structures/girders.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 98947a2dae..d6c406f07e 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -165,7 +165,7 @@ set src in view(1) var/mob/living/user = usr - if(!istype(user) || !(user.l_hand || user.r_hand)) + if(!istype(user) || !(user.l_hand || user.r_hand) || !Adjacent(user)) return if(reinf_material) @@ -248,7 +248,7 @@ dismantle() else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) - user << "Now slicing apart the girder..." + user << "Now slicing apart the girder..." if(do_after(user,30)) user << "You slice apart the girder!" dismantle() From e30e461843feeb9616e5fa3c9a335ac8531b034b Mon Sep 17 00:00:00 2001 From: Atlantis Date: Thu, 20 Aug 2015 22:23:45 +0200 Subject: [PATCH 03/23] Corrects supermatter fluctuations v2 - Better implementation of #10714 - This fix corrects the issue by merging pipenet process to machinery process to ensure order of execution doesn't change randomly. This shouldn't have any performance effect as pipenet process doesn't have much work anyway (not to be confused with air process that runs ZAS, this one only called process() on each pipenet). Screenshot of profiler (pipenet process highlighted, idle server with one player, engine set up) http://i.imgur.com/ecCg6rS.png - Unlike previous fix, this does not come with various game-affecting side effects, players shouldn't see a change (except for the fact that odd fluctuations introduced by devmerge disappear). Previous fix buffed engine output as side effect, and caused one TEG to generate considerably more than second TEG, which caused TEGs to begin sparking despite overall output being below 1MW. --- baystation12.dme | 1 - code/controllers/Processes/machinery.dm | 9 +++++++++ code/controllers/Processes/pipenet.dm | 15 --------------- 3 files changed, 9 insertions(+), 16 deletions(-) delete mode 100644 code/controllers/Processes/pipenet.dm diff --git a/baystation12.dme b/baystation12.dme index e0333a2e08..d151796b68 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -108,7 +108,6 @@ #include "code\controllers\Processes\mob.dm" #include "code\controllers\Processes\nanoui.dm" #include "code\controllers\Processes\obj.dm" -#include "code\controllers\Processes\pipenet.dm" #include "code\controllers\Processes\Shuttle.dm" #include "code\controllers\Processes\sun.dm" #include "code\controllers\Processes\supply.dm" diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm index b84dfaf943..b7b7923c8f 100644 --- a/code/controllers/Processes/machinery.dm +++ b/code/controllers/Processes/machinery.dm @@ -6,6 +6,7 @@ /datum/controller/process/machinery/doWork() internal_sort() + internal_process_pipenets() internal_process_machinery() internal_process_power() internal_process_power_drain() @@ -57,6 +58,14 @@ processing_power_items.Remove(I) scheck() +/datum/controller/process/machinery/proc/internal_process_pipenets() + for(var/datum/pipe_network/pipeNetwork in pipe_networks) + if(istype(pipeNetwork) && !pipeNetwork.disposed) + pipeNetwork.process() + scheck() + continue + + pipe_networks.Remove(pipeNetwork) /datum/controller/process/machinery/getStatName() return ..()+"([machines.len])" diff --git a/code/controllers/Processes/pipenet.dm b/code/controllers/Processes/pipenet.dm deleted file mode 100644 index 8a5d6a22ca..0000000000 --- a/code/controllers/Processes/pipenet.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/controller/process/pipenet/setup() - name = "pipenet" - schedule_interval = 20 // every 2 seconds - -/datum/controller/process/pipenet/doWork() - for(var/datum/pipe_network/pipeNetwork in pipe_networks) - if(istype(pipeNetwork) && !pipeNetwork.disposed) - pipeNetwork.process() - scheck() - continue - - pipe_networks.Remove(pipeNetwork) - -/datum/controller/process/pipenet/getStatName() - return ..()+"([pipe_networks.len])" \ No newline at end of file From 5811b6021e7fd489fa130063c5b417f15c30418a Mon Sep 17 00:00:00 2001 From: Atlantis Date: Thu, 20 Aug 2015 23:06:52 +0200 Subject: [PATCH 04/23] Machinery controller now reports amounts of powernets and pipenets as well. --- code/controllers/Processes/machinery.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm index b7b7923c8f..7959ee4fa7 100644 --- a/code/controllers/Processes/machinery.dm +++ b/code/controllers/Processes/machinery.dm @@ -68,4 +68,4 @@ pipe_networks.Remove(pipeNetwork) /datum/controller/process/machinery/getStatName() - return ..()+"([machines.len])" + return ..()+"(MCH:[machines.len] PWR:[powernets.len] PIP:[pipe_networks.len])" From db7ba7041596ca8e64279bff48b3d3f8f871fe52 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Wed, 19 Aug 2015 20:42:41 -0400 Subject: [PATCH 05/23] Adds SS13-like interface for reinforcing girders --- code/game/objects/structures/girders.dm | 155 +++++++++++++----------- html/changelogs/HarpyEagle-girders.yml | 18 +++ 2 files changed, 101 insertions(+), 72 deletions(-) create mode 100644 html/changelogs/HarpyEagle-girders.yml diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index d6c406f07e..3cc940478b 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -7,6 +7,7 @@ var/health = 200 var/cover = 50 //how much cover the girder provides against projectiles. var/material/reinf_material + var/reinforcing = 0 /obj/structure/girder/displaced icon_state = "displaced" @@ -47,6 +48,7 @@ health = min(health,initial(health)) state = 0 icon_state = initial(icon_state) + reinforcing = 0 if(reinf_material) reinforce_girder() @@ -77,13 +79,18 @@ user << "You drill through the girder!" dismantle() - else if(istype(W, /obj/item/weapon/screwdriver) && state == 2) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - user << "Now unsecuring support struts..." - if(do_after(user,40)) - if(!src) return - user << "You unsecured the support struts!" - state = 1 + else if(istype(W, /obj/item/weapon/screwdriver)) + if(state == 2) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) + user << "Now unsecuring support struts..." + if(do_after(user,40)) + if(!src) return + user << "You unsecured the support struts!" + state = 1 + else if(anchored && !reinf_material) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) + reinforcing = !reinforcing + user << "\The [src] can now be [reinforcing? "reinforced" : "constructed"]!" else if(istype(W, /obj/item/weapon/wirecutters) && state == 1) playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) @@ -107,59 +114,84 @@ cover = 25 else if(istype(W, /obj/item/stack/material)) - - var/obj/item/stack/S = W - if(S.get_amount() < 2) - return ..() - - var/material/M = S.get_material() - if(!istype(M)) - return ..() - - var/wall_fake - add_hiddenprint(usr) - - if(M.integrity < 50) - user << "This material is too soft for use in wall construction." - return - - user << "You begin adding the plating..." - - if(!do_after(user,40) || !S.use(2)) - return - - if(anchored) - user << "You added the plating!" + if(reinforcing && !reinf_material) + if(!reinforce_with_material(W, user)) + return ..() else - user << "You create a false wall! Push on it to open or close the passage." - wall_fake = 1 + if(!construct_wall(W, user)) + return ..() - var/turf/Tsrc = get_turf(src) - Tsrc.ChangeTurf(/turf/simulated/wall) - var/turf/simulated/wall/T = get_turf(src) - T.set_material(M, reinf_material) - if(wall_fake) - T.can_open = 1 - T.add_hiddenprint(usr) - qdel(src) - return - - else if(istype(W, /obj/item/pipe)) - var/obj/item/pipe/P = W - if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. - user.drop_item() - P.loc = src.loc - user << "You fit the pipe into the [src]!" else - ..() + return ..() + +/obj/structure/girder/proc/construct_wall(obj/item/stack/material/S, mob/user) + if(S.get_amount() < 2) + user << "There isn't enough material here to construct a wall." + return 0 + + var/material/M = name_to_material[S.default_type] + if(!istype(M)) + return 0 + + var/wall_fake + add_hiddenprint(usr) + + if(M.integrity < 50) + user << "This material is too soft for use in wall construction." + return 0 + + user << "You begin adding the plating..." + + if(!do_after(user,40) || !S.use(2)) + return 1 //once we've gotten this far don't call parent attackby() + + if(anchored) + user << "You added the plating!" + else + user << "You create a false wall! Push on it to open or close the passage." + wall_fake = 1 + + var/turf/Tsrc = get_turf(src) + Tsrc.ChangeTurf(/turf/simulated/wall) + var/turf/simulated/wall/T = get_turf(src) + T.set_material(M, reinf_material) + if(wall_fake) + T.can_open = 1 + T.add_hiddenprint(usr) + qdel(src) + return 1 + +/obj/structure/girder/proc/reinforce_with_material(obj/item/stack/material/S, mob/user) //if the verb is removed this can be renamed. + if(reinf_material) + user << "\The [src] is already reinforced." + return 0 + + if(S.get_amount() < 2) + user << "There isn't enough material here to reinforce the girder." + return 0 + + var/material/M = name_to_material[S.default_type] + if(!istype(M) || M.integrity < 50) + user << "You cannot reinforce \the [src] with that; it is too soft." + return 0 + + user << "Now reinforcing..." + if (!do_after(user,40) || !S.use(2)) + return 1 //don't call parent attackby() past this point + user << "You added reinforcement!" + + reinf_material = M + reinforce_girder() + return 1 /obj/structure/girder/proc/reinforce_girder() cover = reinf_material.hardness health = 500 state = 2 icon_state = "reinforced" + reinforcing = 0 -/obj/structure/girder/verb/reinforce_with_material() +/obj/structure/girder/verb/reinforce_with_material_verb() set name = "Reinforce girder" set desc = "Reinforce a girder with metal." set src in view(1) @@ -168,34 +200,13 @@ if(!istype(user) || !(user.l_hand || user.r_hand) || !Adjacent(user)) return - if(reinf_material) - user << "\The [src] is already reinforced." - return - var/obj/item/stack/material/S = user.l_hand if(!istype(S)) S = user.r_hand if(!istype(S)) user << "You cannot plate \the [src] with that." return - - if(S.get_amount() < 2) - user << "There is not enough material here to reinforce the girder." - return - - var/material/M = S.get_material() - if(!istype(M) || M.integrity < 50) - user << "You cannot reinforce \the [src] with that; it is too soft." - return - - user << "Now reinforcing..." - if (!do_after(user,40) || !S.use(2)) - return - user << "You added reinforcement!" - - reinf_material = M - reinforce_girder() - + reinforce_with_material(S, user) /obj/structure/girder/proc/dismantle() new /obj/item/stack/material/steel(get_turf(src)) diff --git a/html/changelogs/HarpyEagle-girders.yml b/html/changelogs/HarpyEagle-girders.yml new file mode 100644 index 0000000000..52ee2d908e --- /dev/null +++ b/html/changelogs/HarpyEagle-girders.yml @@ -0,0 +1,18 @@ +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment + +author: HarpyEagle +delete-after: True + +changes: + - tweak: "Girders can now be reinforced by using a screwdriver on the girder before applying the material sheets. Use a screwdriver again to cancel reinforcing." From 8626fbfd39dd8750a4ab60b8281e469f391ededd Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 20 Aug 2015 22:01:15 -0400 Subject: [PATCH 06/23] Removes the reinforce girder verb --- code/game/objects/structures/girders.dm | 17 ----------------- html/changelogs/HarpyEagle-girders.yml | 2 +- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 3cc940478b..810712ae45 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -191,23 +191,6 @@ icon_state = "reinforced" reinforcing = 0 -/obj/structure/girder/verb/reinforce_with_material_verb() - set name = "Reinforce girder" - set desc = "Reinforce a girder with metal." - set src in view(1) - - var/mob/living/user = usr - if(!istype(user) || !(user.l_hand || user.r_hand) || !Adjacent(user)) - return - - var/obj/item/stack/material/S = user.l_hand - if(!istype(S)) - S = user.r_hand - if(!istype(S)) - user << "You cannot plate \the [src] with that." - return - reinforce_with_material(S, user) - /obj/structure/girder/proc/dismantle() new /obj/item/stack/material/steel(get_turf(src)) qdel(src) diff --git a/html/changelogs/HarpyEagle-girders.yml b/html/changelogs/HarpyEagle-girders.yml index 52ee2d908e..09dc2ce78b 100644 --- a/html/changelogs/HarpyEagle-girders.yml +++ b/html/changelogs/HarpyEagle-girders.yml @@ -15,4 +15,4 @@ author: HarpyEagle delete-after: True changes: - - tweak: "Girders can now be reinforced by using a screwdriver on the girder before applying the material sheets. Use a screwdriver again to cancel reinforcing." + - tweak: "Girders are now reinforced by using a screwdriver on the girder before applying the material sheets. Use a screwdriver again instead to cancel reinforcing." From 13c760c5bbb83d02b3e3b6bef8ca993f21bdb48f Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 16 Aug 2015 15:39:02 -0400 Subject: [PATCH 07/23] Fixes #9453 and fixes #10614 --- code/game/objects/items/stacks/stack.dm | 8 +++----- .../living/silicon/robot/drone/drone_items.dm | 8 +++++--- code/modules/reagents/Chemistry-Machinery.dm | 17 ++++++----------- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 72226c542e..94b6db4f95 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -184,11 +184,9 @@ if(!uses_charge) amount -= used if (amount <= 0) - spawn(0) //delete the empty stack once the current context yields - if (amount <= 0) //check again in case someone transferred stuff to us - if(usr) - usr.remove_from_mob(src) - qdel(src) + if(usr) + usr.remove_from_mob(src) + qdel(src) //should be safe to qdel immediately since if someone is still using this stack it will persist for a little while longer return 1 else if(get_amount() < used) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 0ec65be420..bb106f8bcd 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -87,6 +87,9 @@ /obj/item/weapon/gripper/no_use //Used when you want to hold and put items in other things, but not able to 'use' the item +/obj/item/weapon/gripper/no_use/attack_self(mob/user as mob) + return + /obj/item/weapon/gripper/no_use/loader //This is used to disallow building with metal. name = "sheet loader" desc = "A specialized loading device, designed to pick up and insert sheets of materials inside machines." @@ -101,9 +104,6 @@ return wrapped.attack_self(user) return ..() -/obj/item/weapon/gripper/no_use/attack_self(mob/user as mob) - return - /obj/item/weapon/gripper/verb/drop_item() set name = "Drop Item" @@ -130,6 +130,8 @@ force_holder = wrapped.force wrapped.force = 0.0 wrapped.attack(M,user) + if(deleted(wrapped)) + wrapped = null return 1 return 0 diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 2048968d94..c010acd4bb 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -733,17 +733,13 @@ if (usr.stat != 0) return - if (holdingitems && holdingitems.len == 0) + if (!holdingitems || holdingitems.len == 0) return for(var/obj/item/O in holdingitems) O.loc = src.loc holdingitems -= O - holdingitems = list() - -/obj/machinery/reagentgrinder/proc/remove_object(var/obj/item/O) - holdingitems -= O - qdel(O) + holdingitems.Cut() /obj/machinery/reagentgrinder/proc/grind() @@ -766,10 +762,6 @@ // Process. for (var/obj/item/O in holdingitems) - if(!O || !istype(O)) - holdingitems -= null - continue - var/remaining_volume = beaker.reagents.maximum_volume - beaker.reagents.total_volume if(remaining_volume <= 0) break @@ -780,13 +772,16 @@ var/amount_to_take = max(0,min(stack.amount,round(remaining_volume/REAGENTS_PER_SHEET))) if(amount_to_take) stack.use(amount_to_take) + if(deleted(stack)) + holdingitems -= stack beaker.reagents.add_reagent(sheet_reagents[stack.type], (amount_to_take*REAGENTS_PER_SHEET)) continue if(O.reagents) O.reagents.trans_to(beaker, min(O.reagents.total_volume, remaining_volume)) if(O.reagents.total_volume == 0) - remove_object(O) + holdingitems -= O + qdel(O) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break From ca4b56cc77a00b2638816efb48227eaeb2605259 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 23 Aug 2015 01:24:49 +0930 Subject: [PATCH 08/23] Reapplying some species_restricted cleanup that was merged over. Allows Vox to wear softsuits. --- code/modules/clothing/clothing.dm | 6 +++--- code/modules/clothing/spacesuits/spacesuits.dm | 4 ++-- code/modules/clothing/spacesuits/void/merc.dm | 4 ++-- code/modules/clothing/spacesuits/void/void.dm | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 3d49c9f652..23c3cfa837 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -50,7 +50,7 @@ //Set species_restricted list switch(target_species) if("Human", "Skrell") //humanoid bodytypes - species_restricted = list("exclude","Unathi","Tajara","Diona","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox", "Xenomorph") else species_restricted = list(target_species) @@ -72,9 +72,9 @@ //Set species_restricted list switch(target_species) if("Skrell") - species_restricted = list("exclude","Unathi","Tajara","Diona","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox", "Xenomorph") if("Human") - species_restricted = list("exclude","Skrell","Unathi","Tajara","Diona","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen") + species_restricted = list("exclude","Skrell","Unathi","Tajara","Diona","Vox", "Xenomorph") else species_restricted = list(target_species) diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 15c4a68308..5dcb4df74a 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -15,7 +15,7 @@ cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 - species_restricted = list("exclude","Diona","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen") + species_restricted = list("exclude","Diona", "Xenomorph") var/obj/machinery/camera/camera var/list/camera_networks @@ -61,7 +61,7 @@ cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 - species_restricted = list("exclude","Diona","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen") + species_restricted = list("exclude","Diona", "Xenomorph") var/list/supporting_limbs //If not-null, automatically splints breaks. Checked when removing the suit. diff --git a/code/modules/clothing/spacesuits/void/merc.dm b/code/modules/clothing/spacesuits/void/merc.dm index 0d2ea51ad2..8362c78c5c 100644 --- a/code/modules/clothing/spacesuits/void/merc.dm +++ b/code/modules/clothing/spacesuits/void/merc.dm @@ -6,7 +6,7 @@ item_state = "syndie_helm" armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60) siemens_coefficient = 0.6 - species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen") + species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox", "Xenomorph") camera_networks = list("NUKE") light_overlay = "helmet_light_green" //todo: species-specific light overlays @@ -20,4 +20,4 @@ armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs) siemens_coefficient = 0.6 - species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen") \ No newline at end of file + species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox", "Xenomorph") \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index aef2724349..70eb4ee3cd 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -10,7 +10,7 @@ max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE //Species-specific stuff. - species_restricted = list("exclude","Unathi","Tajara","Skrell","Diona","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen") + species_restricted = list("exclude","Unathi","Tajara","Skrell","Diona","Vox", "Xenomorph") sprite_sheets_refit = list( "Unathi" = 'icons/mob/species/unathi/helmet.dmi', "Tajara" = 'icons/mob/species/tajaran/helmet.dmi', @@ -35,7 +35,7 @@ heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - species_restricted = list("exclude","Unathi","Tajara","Diona","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox", "Xenomorph") sprite_sheets_refit = list( "Unathi" = 'icons/mob/species/unathi/suit.dmi', "Tajara" = 'icons/mob/species/tajaran/suit.dmi', From e693fae718a377f6d4317915f29bdb2ebc1c51c9 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 22 Aug 2015 14:09:25 -0400 Subject: [PATCH 09/23] Fixes door repair qdel --- code/game/machinery/doors/door.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 912705e8f9..65206b95f2 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -258,6 +258,7 @@ health = between(health, health + repairing.amount*DOOR_REPAIR_AMOUNT, maxhealth) update_icon() qdel(repairing) + repairing = null return if(repairing && istype(I, /obj/item/weapon/crowbar)) From d62ff87ec977b58c90b06ec50512941751bfce78 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 22 Aug 2015 14:32:15 -0400 Subject: [PATCH 10/23] Fixes #10689 Also some refactoring of locker stuffing. --- code/game/objects/structures/crates_lockers/closets.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 4414535d5a..63d4317274 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -222,6 +222,7 @@ if(istype(W, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = W src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet + return 0 if(istype(W,/obj/item/tk_grab)) return 0 if(istype(W, /obj/item/weapon/weldingtool)) @@ -269,11 +270,9 @@ return if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis) return - if((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))) + if((!( istype(O, /atom/movable) ) || O.anchored || !Adjacent(user) || !Adjacent(O) || !user.Adjacent(O) || user.contents.Find(src))) return - if(user.loc==null) // just in case someone manages to get a closet into the blue light dimension, as unlikely as that seems - return - if(!istype(user.loc, /turf)) // are you in a container/closet/pod/etc? + if(!isturf(user.loc)) // are you in a container/closet/pod/etc? return if(!src.opened) return From 4afaf9f5fd1de4be7a85f215b0df1c800e3e0d45 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 22 Aug 2015 14:35:53 -0400 Subject: [PATCH 11/23] Cable layer cleanup, cable qdel --- code/game/machinery/CableLayer.dm | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm index 9bad67df7d..a6643181c2 100644 --- a/code/game/machinery/CableLayer.dm +++ b/code/game/machinery/CableLayer.dm @@ -20,10 +20,10 @@ /obj/machinery/cablelayer/attack_hand(mob/user as mob) if(!cable&&!on) - user << "\The [src] don't work with no cable." + user << "\The [src] doesn't have any cable loaded." return on=!on - user.visible_message("\The [src] [!on?"dea":"a"]ctivated.", "[user] [!on?"dea":"a"]ctivated \the [src].") + user.visible_message("\The [user] [!on?"dea":"a"]ctivates \the [src].", "You switch [src] [on? "on" : "off"]") return /obj/machinery/cablelayer/attackby(var/obj/item/O as obj, var/mob/user as mob) @@ -31,26 +31,27 @@ var/result = load_cable(O) if(!result) - user << "Reel is full." + user << "\The [src]'s cable reel is full." else - user << "[result] meters of cable successfully loaded." + user << "You load [result] lengths of cable into [src]." return - if(istype(O, /obj/item/weapon/screwdriver)) + if(istype(O, /obj/item/weapon/wirecutters)) if(cable && cable.amount) var/m = round(input(usr,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) m = min(m, cable.amount) m = min(m, 30) if(m) + playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) use_cable(m) var/obj/item/stack/cable_coil/CC = new (get_turf(src)) CC.amount = m else - usr << "There's no more cable on the reel." + usr << "There's no more cable on the reel." /obj/machinery/cablelayer/examine(mob/user) ..() - user << "\The [src] has [cable.amount] meter\s." + user << "\The [src]'s cable reel has [cable.amount] length\s left." /obj/machinery/cablelayer/proc/load_cable(var/obj/item/stack/cable_coil/CC) if(istype(CC) && CC.amount) @@ -70,12 +71,11 @@ /obj/machinery/cablelayer/proc/use_cable(amount) if(!cable || cable.amount<1) - visible_message("Cable depleted, [src] deactivated.") + visible_message("A red light flashes on \the [src].") return -/* if(cable.amount < amount) - visible_message("No enough cable to finish the task.") - return*/ cable.use(amount) + if(deleted(cable)) + cable = null return 1 /obj/machinery/cablelayer/proc/reset() From c7bd20ceb634d4379a3713f66e8740fb23c9e04f Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sun, 23 Aug 2015 13:33:10 +0200 Subject: [PATCH 12/23] Rig AI fixes. Changes how the state for the NanoUI window is selected. Fixes and optimizes the hardsuit module tab for rig AIs. Corrects some qdel issues for ejected rig AIs. --- .../spacesuits/rig/modules/computer.dm | 26 +++++++++++++++---- .../spacesuits/rig/modules/modules.dm | 10 +++---- code/modules/clothing/spacesuits/rig/rig.dm | 6 ++--- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm index b035678e74..975f6dfc7c 100644 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm @@ -23,7 +23,7 @@ usr << "Your module is not installed in a hardsuit." return - module.holder.ui_interact(usr) + module.holder.ui_interact(usr, nano_state = contained_state) /obj/item/rig_module/ai_container @@ -46,9 +46,23 @@ var/obj/item/ai_card // Reference to the MMI, posibrain, intellicard or pAI card previously holding the AI. var/obj/item/ai_verbs/verb_holder +/mob + var/get_rig_stats = 0 + /obj/item/rig_module/ai_container/process() - if(integrated_ai && loc) - integrated_ai.SetupStat(loc.get_rig()) + if(integrated_ai) + var/obj/item/weapon/rig/rig = get_rig() + if(rig && rig.ai_override_enabled) + integrated_ai.get_rig_stats = 1 + else + integrated_ai.get_rig_stats = 0 + +/mob/living/Stat() + . = ..() + if(. && get_rig_stats) + var/obj/item/weapon/rig/rig = get_rig() + if(rig) + SetupStat(rig) /obj/item/rig_module/ai_container/proc/update_verb_holder() if(!verb_holder) @@ -158,7 +172,10 @@ if(integrated_ai) integrated_ai.ghostize() qdel(integrated_ai) - if(ai_card) qdel(ai_card) + integrated_ai = null + if(ai_card) + qdel(ai_card) + ai_card = null else if(user) user.put_in_hands(ai_card) else @@ -168,7 +185,6 @@ update_verb_holder() /obj/item/rig_module/ai_container/proc/integrate_ai(var/obj/item/ai,var/mob/user) - if(!ai) return // The ONLY THING all the different AI systems have in common is that they all store the mob inside an item. diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm index 81af43d9f4..c33064b41c 100644 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm @@ -227,21 +227,21 @@ return 0 /mob/living/carbon/human/Stat() - ..() + . = ..() - if(istype(back,/obj/item/weapon/rig)) + if(. && istype(back,/obj/item/weapon/rig)) var/obj/item/weapon/rig/R = back SetupStat(R) /mob/proc/SetupStat(var/obj/item/weapon/rig/R) - if(src == usr && R && !R.canremove && R.installed_modules.len && statpanel("Hardsuit Modules")) + if(R && !R.canremove && R.installed_modules.len && statpanel("Hardsuit Modules")) var/cell_status = R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "ERROR" - statpanel("Hardsuit Modules", "Suit charge", cell_status) + stat("Suit charge", cell_status) for(var/obj/item/rig_module/module in R.installed_modules) { for(var/stat_rig_module/SRM in module.stat_modules) if(SRM.CanUse()) - statpanel("Hardsuit Modules",SRM.module.interface_name,SRM) + stat(SRM.module.interface_name,SRM) } /stat_rig_module diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index c09f7d382d..5d6b894cd5 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -383,8 +383,7 @@ cell.use(cost*10) return 1 -/obj/item/weapon/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - +/obj/item/weapon/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/nano_state = inventory_state) if(!user) return @@ -454,7 +453,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) - ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, data["ai"] ? contained_state : inventory_state) + ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = nano_state) ui.set_initial_data(data) ui.open() ui.set_auto_update(1) @@ -766,6 +765,7 @@ return 0 wearer.Move(null,dir)*/ +// This returns the rig if you are contained inside one, but not if you are wearing it /atom/proc/get_rig() if(loc) return loc.get_rig() From d31203c70f28fa571505f41a7a46a5011b58c9a8 Mon Sep 17 00:00:00 2001 From: volas Date: Sun, 23 Aug 2015 15:24:52 +0300 Subject: [PATCH 13/23] Sanitize for AI emergency message --- code/modules/mob/living/silicon/ai/ai.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 937f25a0b4..6448c4dc84 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -392,7 +392,7 @@ var/list/ai_verbs_default = list( if(emergency_message_cooldown) usr << "Arrays recycling. Please stand by." return - var/input = input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "") + var/input = sanitize(input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "")) if(!input) return Centcomm_announce(input, usr) From 59c500d01bb2e0963c63bb6bd5df96f7f124ec7e Mon Sep 17 00:00:00 2001 From: Raptor1628 Date: Sun, 23 Aug 2015 13:20:41 -0400 Subject: [PATCH 14/23] Adds fourth security officer slot. Discussed among admins, decision was made to make this change to master and not dev. Approval from Virgil. --- code/game/jobs/job/security.dm | 4 ++-- maps/exodus-1.dmm | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index cb7a7d23f4..9c671edc99 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -129,8 +129,8 @@ department = "Security" department_flag = ENGSEC faction = "Station" - total_positions = 3 - spawn_positions = 3 + total_positions = 4 + spawn_positions = 4 supervisors = "the head of security" selection_color = "#ffeeee" access = list(access_security, access_eva, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_morgue, access_external_airlocks) diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index 0fd3756f40..e628a415ab 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -200,7 +200,7 @@ "adR" = (/obj/structure/closet/toolcloset,/obj/item/clothing/head/hardhat/dblue,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/security_starboard) "adS" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"; req_access = list(3)},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury) "adT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_port) -"adU" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor,/area/security/main) +"adU" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor,/area/security/main) "adV" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/main) "adW" = (/obj/machinery/button/remote/blast_door{id = "Armoury"; name = "Armoury Access"; pixel_x = -1; pixel_y = -28; req_access = list(3)},/turf/simulated/floor{icon_state = "dark"},/area/security/armoury) "adX" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Briefing Room"; req_access = list(1)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/main) @@ -244,7 +244,7 @@ "aeJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/main) "aeK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main) "aeL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/main) -"aeM" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/main) +"aeM" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor,/area/security/main) "aeN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/main) "aeO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main) "aeP" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1475; listening = 1; name = "Station Intercom (Security)"; pixel_x = 30; pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Briefing"; dir = 8},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main) From 20eeb394cbaf4f07828a72395e5a8388b5b7dd8f Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 23 Aug 2015 13:22:37 -0400 Subject: [PATCH 15/23] Fixes #10793 --- code/game/antagonist/antagonist.dm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index 6e98ce6c35..be121b529f 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -121,11 +121,18 @@ /datum/antagonist/proc/draft_antagonist(var/datum/mind/player) //Check if the player can join in this antag role, or if the player has already been given an antag role. - if(!can_become_antag(player) || player.special_role) + if(!can_become_antag(player)) log_debug("[player.key] was selected for [role_text] by lottery, but is not allowed to be that role.") return 0 + if(player.special_role) + log_debug("[player.key] was selected for [role_text] by lottery, but they already have a special role.") + return 0 + if(!(flags & ANTAG_OVERRIDE_JOB) && (!player.current || istype(player.current, /mob/new_player))) + log_debug("[player.key] was selected for [role_text] by lottery, but they have not joined the game.") + return 0 pending_antagonists |= player + log_debug("[player.key] has been selected for [role_text] by lottery.") //Ensure that antags with ANTAG_OVERRIDE_JOB do not occupy job slots. if(flags & ANTAG_OVERRIDE_JOB) From 161e5c14cd72e8117edf9f6fbaf818307ec240e0 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 23 Aug 2015 13:28:43 -0400 Subject: [PATCH 16/23] Fixes #10819 --- code/game/antagonist/station/cultist.dm | 6 +++--- code/modules/mob/freelook/mask/update_triggers.dm | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/antagonist/station/cultist.dm b/code/game/antagonist/station/cultist.dm index 5c6a3c6782..d3ae1a75b1 100644 --- a/code/game/antagonist/station/cultist.dm +++ b/code/game/antagonist/station/cultist.dm @@ -104,9 +104,9 @@ var/datum/antagonist/cultist/cult player.current.visible_message("[player.current] looks like they just reverted to their old faith!") /datum/antagonist/cultist/add_antagonist(var/datum/mind/player) - if(!..()) - return - player << "You catch a glimpse of the Realm of Nar-Sie, the Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of That Which Waits. Assist your new compatriots in their dark dealings. Their goals are yours, and yours are theirs. You serve the Dark One above all else. Bring It back." + . = ..() + if(.) + player << "You catch a glimpse of the Realm of Nar-Sie, the Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of That Which Waits. Assist your new compatriots in their dark dealings. Their goals are yours, and yours are theirs. You serve the Dark One above all else. Bring It back." /datum/antagonist/cultist/can_become_antag(var/datum/mind/player) if(!..()) diff --git a/code/modules/mob/freelook/mask/update_triggers.dm b/code/modules/mob/freelook/mask/update_triggers.dm index 8100a309a2..1142367164 100644 --- a/code/modules/mob/freelook/mask/update_triggers.dm +++ b/code/modules/mob/freelook/mask/update_triggers.dm @@ -40,7 +40,7 @@ cultnet.updateVisibility(src) /datum/antagonist/add_antagonist(var/datum/mind/player) - ..() + . = ..() if(src == cult) cultnet.updateVisibility(player.current, 0) From c16d4aca9a5250ab6f823e6da3f8c8b1786724d4 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 23 Aug 2015 14:49:30 -0400 Subject: [PATCH 17/23] Removes unncessary shuffle --- code/game/antagonist/antagonist.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index be121b529f..220ba7e6d1 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -111,7 +111,6 @@ return 0 //Grab candidates randomly until we have enough. - candidates = shuffle(candidates) while(candidates.len && pending_antagonists.len < cur_max) var/datum/mind/player = pick(candidates) candidates -= player From 3c86715474d8c04a17b8c75a9058ed8752aad565 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 23 Aug 2015 15:35:45 -0400 Subject: [PATCH 18/23] Fixes limb stump examine text --- code/modules/mob/living/carbon/human/examine.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 8cd4c55d28..f6727e69a1 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -294,7 +294,11 @@ else wound_flavor_text["[temp.name]"] = "[t_He] has a robot [temp.name]. It has[temp.get_wounds_desc()]!\n" else if(temp.wounds.len > 0 || temp.open) - wound_flavor_text["[temp.name]"] = "[t_He] has [temp.get_wounds_desc()] on [t_his] [temp.name].
" + if(temp.is_stump() && temp.parent_organ && organs_by_name[temp.parent_organ]) + var/obj/item/organ/external/parent = organs_by_name[temp.parent_organ] + wound_flavor_text["[temp.name]"] = "[t_He] has [temp.get_wounds_desc()] on [t_his] [parent.name].
" + else + wound_flavor_text["[temp.name]"] = "[t_He] has [temp.get_wounds_desc()] on [t_his] [temp.name].
" if(temp.status & ORGAN_BLEEDING) is_bleeding["[temp.name]"] = "[capitalize(t_his)] [temp.name] is bleeding!
" else From dfeb43c496a5eec1825112a408ddff63d4ab3171 Mon Sep 17 00:00:00 2001 From: Raptor1628 Date: Sun, 23 Aug 2015 15:37:24 -0400 Subject: [PATCH 19/23] Reduces Detective slots. One detective to compensate for Security Officer, requested by Virgil after Officer PR. --- code/game/jobs/job/security.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 9c671edc99..071408b3be 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -86,7 +86,7 @@ department = "Security" department_flag = ENGSEC faction = "Station" - total_positions = 2 + total_positions = 1 spawn_positions = 2 supervisors = "the head of security" selection_color = "#ffeeee" From 5bcede58016283c2774661c9dd1231b7e1ca08d9 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 23 Aug 2015 20:22:15 -0400 Subject: [PATCH 20/23] Fixes adjustBrainLoss adjustBrainLoss() was giving damage to the brain organ and then setting it back to brainloss, undoing the change. --- code/modules/mob/living/carbon/human/human_damage.dm | 1 - code/modules/organs/organ.dm | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 530daea57c..50ddb6557d 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -30,7 +30,6 @@ var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"] if(sponge) sponge.take_damage(amount) - sponge.damage = min(max(brainloss, 0),(maxHealth*2)) brainloss = sponge.damage else brainloss = 200 diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index bbafd2e53b..4c4ed581b2 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -193,14 +193,15 @@ var/list/organ_cache = list() W.damage += damage W.time_inflicted = world.time +//Note: external organs have their own version of this proc /obj/item/organ/proc/take_damage(amount, var/silent=0) if(src.status & ORGAN_ROBOT) - src.damage += (amount * 0.8) + src.damage = between(0, src.damage + (amount * 0.8), max_damage) else - src.damage += amount + src.damage = between(0, src.damage + amount, max_damage) //only show this if the organ is not robotic - if(owner && parent_organ) + if(owner && parent_organ && amount > 0) var/obj/item/organ/external/parent = owner.get_organ(parent_organ) if(parent && !silent) owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1) From c8da3f0590208f92ab518360d446e37422987959 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 23 Aug 2015 22:28:29 -0400 Subject: [PATCH 21/23] Fixes #10742 --- code/game/response_team.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 896b79655a..5cfa1cf02b 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -53,8 +53,9 @@ client/verb/JoinResponseTeam() if(jobban_isbanned(usr, "Syndicate") || jobban_isbanned(usr, "Emergency Response Team") || jobban_isbanned(usr, "Security Officer")) usr << "You are jobbanned from the emergency reponse team!" return - if(ert.current_antagonists.len > 5) + if(ert.current_antagonists.len >= ert.max_antags) usr << "The emergency response team is already full!" + return ert.create_default(usr) else usr << "You need to be an observer or new player to use this." From 0b163b89aea658c44e0ee7d54d9a514d7e4b8181 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Mon, 24 Aug 2015 09:16:35 +0200 Subject: [PATCH 22/23] Fixes #10815. Now uses audible message. Added a message for deaf mobs. --- code/game/objects/items/devices/whistle.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm index d2627ed094..14eb3de2b5 100644 --- a/code/game/objects/items/devices/whistle.dm +++ b/code/game/objects/items/devices/whistle.dm @@ -33,12 +33,12 @@ obj/item/device/hailer/attack_self(mob/living/carbon/user as mob) if(isnull(insults)) playsound(get_turf(src), 'sound/voice/halt.ogg', 100, 1, vary = 0) - user.show_message("[user]'s [name] rasps, \"[use_message]\"",1) + user.audible_message("[user]'s [name] rasps, \"[use_message]\"", "\The [user] holds up \the [name].") else if(insults > 0) playsound(get_turf(src), 'sound/voice/binsult.ogg', 100, 1, vary = 0) // Yes, it used to show the transcription of the sound clip. That was a) inaccurate b) immature as shit. - user.show_message("[user]'s [name] gurgles something indecipherable and deeply offensive.") + user.audible_message("[user]'s [name] gurgles something indecipherable and deeply offensive.", "\The [user] holds up \the [name].") insults-- else user << "*BZZZZZZZZT*" From 2e09278a7e7d1a6af3130c9eb1349d45d5964505 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Mon, 24 Aug 2015 10:16:56 +0200 Subject: [PATCH 23/23] Updates changelog. --- html/changelog.html | 13 +++++++++++++ html/changelogs/.all_changelog.yml | 11 +++++++++++ html/changelogs/HarpyEagle-girders.yml | 18 ------------------ html/changelogs/HarpyEagle-traps.yml | 19 ------------------- html/changelogs/zuhayr-pariahs.yml | 5 ----- 5 files changed, 24 insertions(+), 42 deletions(-) delete mode 100644 html/changelogs/HarpyEagle-girders.yml delete mode 100644 html/changelogs/HarpyEagle-traps.yml delete mode 100644 html/changelogs/zuhayr-pariahs.yml diff --git a/html/changelog.html b/html/changelog.html index 27a4a94704..9f115c0a58 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,19 @@ -->
+

24 August 2015

+

HarpyEagle updated:

+
    +
  • Girders are now reinforced by using a screwdriver on the girder before applying the material sheets. Use a screwdriver again instead to cancel reinforcing.
  • +
  • Mechanical traps no longer spawn in the janitor's locker.
  • +
  • Mechanical traps can now be printed with a hacked autolathe.
  • +
+

Zuhayr updated:

+
    +
  • Pariahs are now a subspecies of Vox with less atmos/cold protection, a useless brain, and lower health.
  • +
  • Leap now only gives a passive grab and has a shorter range. It also stuns Pariahs longer than it does their target.
  • +
+

17 August 2015

PsiOmegaDelta updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 01630a6321..4e6af19c5d 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1999,3 +1999,14 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2015-08-17: PsiOmegaDelta: - rscadd: Station time and duration now available in the Status tab. +2015-08-24: + HarpyEagle: + - tweak: Girders are now reinforced by using a screwdriver on the girder before + applying the material sheets. Use a screwdriver again instead to cancel reinforcing. + - bugfix: Mechanical traps no longer spawn in the janitor's locker. + - rscadd: Mechanical traps can now be printed with a hacked autolathe. + Zuhayr: + - rscadd: Pariahs are now a subspecies of Vox with less atmos/cold protection, a + useless brain, and lower health. + - rscadd: Leap now only gives a passive grab and has a shorter range. It also stuns + Pariahs longer than it does their target. diff --git a/html/changelogs/HarpyEagle-girders.yml b/html/changelogs/HarpyEagle-girders.yml deleted file mode 100644 index 09dc2ce78b..0000000000 --- a/html/changelogs/HarpyEagle-girders.yml +++ /dev/null @@ -1,18 +0,0 @@ -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment - -author: HarpyEagle -delete-after: True - -changes: - - tweak: "Girders are now reinforced by using a screwdriver on the girder before applying the material sheets. Use a screwdriver again instead to cancel reinforcing." diff --git a/html/changelogs/HarpyEagle-traps.yml b/html/changelogs/HarpyEagle-traps.yml deleted file mode 100644 index 9fae5a9892..0000000000 --- a/html/changelogs/HarpyEagle-traps.yml +++ /dev/null @@ -1,19 +0,0 @@ -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment - -author: HarpyEagle -delete-after: True - -changes: - - bugfix: "Mechanical traps no longer spawn in the janitor's locker." - - rscadd: "Mechanical traps can now be printed with a hacked autolathe." diff --git a/html/changelogs/zuhayr-pariahs.yml b/html/changelogs/zuhayr-pariahs.yml deleted file mode 100644 index b35a440e85..0000000000 --- a/html/changelogs/zuhayr-pariahs.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Zuhayr -delete-after: True -changes: - - rscadd: "Pariahs are now a subspecies of Vox with less atmos/cold protection, a useless brain, and lower health." - - rscadd: "Leap now only gives a passive grab and has a shorter range. It also stuns Pariahs longer than it does their target." \ No newline at end of file