From 5ca691894c7a5dd5425efc6b5fdeb12493b0ee18 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sat, 23 Sep 2017 02:37:43 -0400 Subject: [PATCH 01/56] adds dildos to ashwalker ruin --- .../lavaland_surface_ash_walker1.dmm | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index 6712e631a7..27c4f5074b 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -198,6 +198,7 @@ /obj/structure/stone_tile{ dir = 4 }, +/obj/item/dildo/custom, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aC" = ( @@ -287,6 +288,7 @@ /obj/structure/stone_tile/cracked{ dir = 4 }, +/obj/item/dildo/custom, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aN" = ( @@ -305,6 +307,7 @@ /area/ruin/unpowered/ash_walkers) "aP" = ( /obj/structure/stone_tile, +/obj/item/dildo/custom, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aQ" = ( @@ -379,6 +382,7 @@ /obj/structure/stone_tile/cracked{ dir = 1 }, +/obj/item/dildo/custom, /turf/open/indestructible/boss, /area/ruin/unpowered/ash_walkers) "aZ" = ( @@ -401,6 +405,7 @@ /obj/structure/stone_tile{ dir = 4 }, +/obj/item/dildo/custom, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "bb" = ( @@ -489,6 +494,7 @@ dir = 4 }, /obj/item/storage/bag/plants/portaseeder, +/obj/item/dildo/custom, /turf/open/indestructible/boss, /area/ruin/unpowered/ash_walkers) "bk" = ( @@ -509,6 +515,7 @@ /obj/structure/stone_tile/cracked{ dir = 1 }, +/obj/item/dildo/custom, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "bm" = ( @@ -568,6 +575,7 @@ /obj/structure/stone_tile{ dir = 8 }, +/obj/item/dildo/custom, /turf/open/indestructible/boss/air, /area/ruin/unpowered/ash_walkers) "br" = ( @@ -897,6 +905,7 @@ /obj/structure/stone_tile/surrounding_tile/cracked{ dir = 8 }, +/obj/item/dildo/custom, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "ci" = ( @@ -1042,6 +1051,7 @@ icon_state = "cracked_slab1"; dir = 4 }, +/obj/item/dildo/custom, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "cB" = ( @@ -1475,6 +1485,26 @@ /obj/structure/stone_tile, /turf/closed/mineral/volcanic, /area/lavaland/surface/outdoors) +"dG" = ( +/obj/structure/stone_tile/slab, +/obj/item/dildo/custom, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"dH" = ( +/obj/structure/stone_tile/block/cracked, +/obj/structure/stone_tile/block{ + dir = 1 + }, +/obj/item/dildo/custom, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"dI" = ( +/obj/structure/stone_tile{ + dir = 4 + }, +/obj/item/dildo/custom, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) (1,1,1) = {" aa @@ -1597,7 +1627,7 @@ aO bl bx bD -bS +dG de bV dg @@ -1625,7 +1655,7 @@ ci bA ct bN -bL +dI cI ah ah @@ -1732,7 +1762,7 @@ ak bP bL bX -dh +dH do du dz From fa9933a80bbab138fc6f6913caba7178369bdac3 Mon Sep 17 00:00:00 2001 From: Daniel0Mclovin <31661882+Daniel0Mclovin@users.noreply.github.com> Date: Sat, 23 Sep 2017 16:59:58 -0500 Subject: [PATCH 02/56] Podpeople as roundstart Essentially it allows podmen to be roundstart along with editing them so they take slightly more fire damage and more damage from plant-b-gone --- .../carbon/human/species_types/podpeople.dm | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index f5f59ae829..e0c97e9f98 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -10,8 +10,11 @@ burnmod = 1.25 heatmod = 1.5 meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant - disliked_food = NONE - liked_food = NONE + disliked_food = MEAT + liked_food = VEGETABLES | FRUIT + toxic_food = TOXIC | RAW + roundstart = 1 + /datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() @@ -38,14 +41,17 @@ H.adjustToxLoss(-1) H.adjustOxyLoss(-1) - if(H.nutrition < NUTRITION_LEVEL_STARVING + 50) - H.take_overall_damage(2,0) + if(H.nutrition < NUTRITION_LEVEL_STARVING + 55) + H.take_overall_damage(2,5) + /datum/species/pod/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(chem.id == "plantbgone") - H.adjustToxLoss(3) + H.adjustToxLoss(5) H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) return 1 + H.confused = max(H.confused, 1) + /datum/species/pod/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) switch(P.type) From 7054cf01ea4bca055c8be8314f5416976db5fc93 Mon Sep 17 00:00:00 2001 From: Daniel0Mclovin <31661882+Daniel0Mclovin@users.noreply.github.com> Date: Thu, 28 Sep 2017 20:02:17 -0500 Subject: [PATCH 03/56] changed a few 1's to TRUE's, removed food prefs --- .../mob/living/carbon/human/species_types/podpeople.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index e0c97e9f98..bc5a875d48 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -10,10 +10,10 @@ burnmod = 1.25 heatmod = 1.5 meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant - disliked_food = MEAT - liked_food = VEGETABLES | FRUIT - toxic_food = TOXIC | RAW - roundstart = 1 + disliked_food = NONE + liked_food = NONE + toxic_food = NONE + roundstart = TRUE /datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species) @@ -49,8 +49,8 @@ if(chem.id == "plantbgone") H.adjustToxLoss(5) H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) - return 1 H.confused = max(H.confused, 1) + return TRUE /datum/species/pod/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) From d3ae434b563ef9693c9f3bfd13ff4c910e993162 Mon Sep 17 00:00:00 2001 From: Daniel0Mclovin <31661882+Daniel0Mclovin@users.noreply.github.com> Date: Sun, 1 Oct 2017 17:20:44 -0500 Subject: [PATCH 04/56] Changed a few stats Darkness now does oxy damage and slight toxin, added a bit more heat mod, no longer heals toxin damage, oxygen loss healing nerfed. Can eat in the dark to try to combat starvation, added slight toxin damage to make it harder to stay in the dark with a shit ton of food. --- .../mob/living/carbon/human/species_types/podpeople.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index bc5a875d48..5cf48bf0a5 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -8,7 +8,7 @@ attack_sound = 'sound/weapons/slice.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' burnmod = 1.25 - heatmod = 1.5 + heatmod = 1.55 meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant disliked_food = NONE liked_food = NONE @@ -38,11 +38,11 @@ H.nutrition = NUTRITION_LEVEL_FULL if(light_amount > 0.2) //if there's enough light, heal H.heal_overall_damage(1,1) - H.adjustToxLoss(-1) - H.adjustOxyLoss(-1) + H.adjustOxyLoss(-0.5) if(H.nutrition < NUTRITION_LEVEL_STARVING + 55) - H.take_overall_damage(2,5) + H.adjustOxyLoss(5,5) //can eat to negate this unfortunately + H.adjustToxLoss(3,0) /datum/species/pod/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) From 2d835e1d732d7dfd015a087d475132ac18b7c43e Mon Sep 17 00:00:00 2001 From: Daniel0Mclovin <31661882+Daniel0Mclovin@users.noreply.github.com> Date: Sun, 1 Oct 2017 17:25:20 -0500 Subject: [PATCH 05/56] Nerfed overall healing dialed down to 0.7 --- code/modules/mob/living/carbon/human/species_types/podpeople.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index 5cf48bf0a5..36cb95f755 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -37,7 +37,7 @@ if(H.nutrition > NUTRITION_LEVEL_FULL) H.nutrition = NUTRITION_LEVEL_FULL if(light_amount > 0.2) //if there's enough light, heal - H.heal_overall_damage(1,1) + H.heal_overall_damage(0,7) H.adjustOxyLoss(-0.5) if(H.nutrition < NUTRITION_LEVEL_STARVING + 55) From d4321ac0b56cdc33e264aee14fe26d326938e8b5 Mon Sep 17 00:00:00 2001 From: Daniel0Mclovin <31661882+Daniel0Mclovin@users.noreply.github.com> Date: Sun, 1 Oct 2017 17:26:45 -0500 Subject: [PATCH 06/56] Accidentally put a comma --- code/modules/mob/living/carbon/human/species_types/podpeople.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index 36cb95f755..4c86a0f74f 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -37,7 +37,7 @@ if(H.nutrition > NUTRITION_LEVEL_FULL) H.nutrition = NUTRITION_LEVEL_FULL if(light_amount > 0.2) //if there's enough light, heal - H.heal_overall_damage(0,7) + H.heal_overall_damage(0.7) H.adjustOxyLoss(-0.5) if(H.nutrition < NUTRITION_LEVEL_STARVING + 55) From 221404bffb552a4b01761fbd3e814037d4a99a48 Mon Sep 17 00:00:00 2001 From: John <31661882+Daniel0Mclovin@users.noreply.github.com> Date: Tue, 3 Oct 2017 01:42:18 -0500 Subject: [PATCH 07/56] cleaned up some things --- .../mob/living/carbon/human/species_types/podpeople.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index 4c86a0f74f..3b589d05a2 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -37,12 +37,12 @@ if(H.nutrition > NUTRITION_LEVEL_FULL) H.nutrition = NUTRITION_LEVEL_FULL if(light_amount > 0.2) //if there's enough light, heal - H.heal_overall_damage(0.7) + H.heal_overall_damage(0,5) H.adjustOxyLoss(-0.5) if(H.nutrition < NUTRITION_LEVEL_STARVING + 55) - H.adjustOxyLoss(5,5) //can eat to negate this unfortunately - H.adjustToxLoss(3,0) + H.adjustOxyLoss(5) //can eat to negate this unfortunately + H.adjustToxLoss(3) /datum/species/pod/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) From 42cfb61f42d5c7ee08f2cf7b2fde54e9b7c46e54 Mon Sep 17 00:00:00 2001 From: John <31661882+Daniel0Mclovin@users.noreply.github.com> Date: Tue, 3 Oct 2017 01:55:50 -0500 Subject: [PATCH 08/56] Edited regen Made it proper --- code/modules/mob/living/carbon/human/species_types/podpeople.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index 3b589d05a2..ef044e462b 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -37,7 +37,7 @@ if(H.nutrition > NUTRITION_LEVEL_FULL) H.nutrition = NUTRITION_LEVEL_FULL if(light_amount > 0.2) //if there's enough light, heal - H.heal_overall_damage(0,5) + H.heal_overall_damage(0.05,0) H.adjustOxyLoss(-0.5) if(H.nutrition < NUTRITION_LEVEL_STARVING + 55) From 8ac574108ed5f9bf7f7bd60bfff16e77735afc6b Mon Sep 17 00:00:00 2001 From: Michiyamenotehifunana <31995558+Michiyamenotehifunana@users.noreply.github.com> Date: Tue, 3 Oct 2017 17:24:36 +0800 Subject: [PATCH 09/56] Brings 10mm Soporific Description in-line with its nerfed stats D'oh. Completely forgot about this. Now no one can complain that their rape gun instructions tell them 2 shots is enough when 3 is what you actually need. --- code/modules/uplink/uplink_item_cit.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/uplink/uplink_item_cit.dm b/code/modules/uplink/uplink_item_cit.dm index 3aa1fd8bb1..40c74269eb 100644 --- a/code/modules/uplink/uplink_item_cit.dm +++ b/code/modules/uplink/uplink_item_cit.dm @@ -55,7 +55,7 @@ /datum/uplink_item/ammo/pistolzzz name = "10mm Soporific Magazine" desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. Loaded with soporific rounds that put the target to sleep. \ - NOTE: Soporific is not instant acting due to the constraints of the round's scale. Will usually require two shots to take effect." + NOTE: Soporific is not instant acting due to the constraints of the round's scale. Will usually require three shots to take effect." item = /obj/item/ammo_box/magazine/m10mm/soporific cost = 2 From ebca0173f3c3f342005c878c43d27d54a1961d42 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Tue, 3 Oct 2017 12:32:58 +0300 Subject: [PATCH 10/56] makes /turf/Enter() faster, and also makes CollidedWith async (#31217) * makes /turf/Enter faster, maybe * waitfor false on atom/collidedwith --- code/game/atoms.dm | 1 + code/game/turfs/turf.dm | 36 +++++++++++++++--------------------- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 508459188b..0774253d47 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -189,6 +189,7 @@ /atom/proc/CollidedWith(atom/movable/AM) + set waitfor = FALSE return // Convenience proc to see if a container is open for chemistry handling diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 5bb90f618b..b02444281c 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -121,8 +121,6 @@ return FALSE /turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area) - if (!mover) - return TRUE // First, make sure it can leave its square if(isturf(mover.loc)) // Nothing but border objects stop you from leaving a tile, only one loop is needed @@ -131,32 +129,28 @@ mover.Collide(obstacle) return FALSE - var/list/large_dense = list() - - //Next, check objects to block entry that are on the border - for(var/atom/movable/border_obstacle in src) - if(border_obstacle.flags_1 & ON_BORDER_1) - if(!border_obstacle.CanPass(mover, mover.loc, 1) && (forget != border_obstacle)) - mover.Collide(border_obstacle) - return FALSE - else - large_dense += border_obstacle - //Then, check the turf itself if (!src.CanPass(mover, src)) mover.Collide(src) return FALSE - //Finally, check objects/mobs to block entry that are not on the border - var/atom/movable/tompost_bump + + var/atom/movable/topmost_bump var/top_layer = FALSE - for(var/atom/movable/obstacle in large_dense) + + //Next, check objects to block entry that are on the border + for(var/atom/movable/obstacle in src) if(!obstacle.CanPass(mover, mover.loc, 1) && (forget != obstacle)) - if(obstacle.layer > top_layer) - tompost_bump = obstacle - top_layer = obstacle.layer - if(tompost_bump) - mover.Collide(tompost_bump) + if(obstacle.flags_1 & ON_BORDER_1) + mover.Collide(obstacle) + return FALSE + else + if(obstacle.layer > top_layer) + topmost_bump = obstacle + top_layer = obstacle.layer + + if(topmost_bump) + mover.Collide(topmost_bump) return FALSE return TRUE //Nothing found to block so return success! From 3b3b45c03c7cbf65df5727cd62d23207b60cf100 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Tue, 3 Oct 2017 02:37:16 -0700 Subject: [PATCH 12/56] Fixes/tweaks wormholes event and portals (#30846) * fix * THERE WE GO * Update portals.dm --- code/game/objects/effects/portals.dm | 6 +++--- code/modules/events/wormholes.dm | 9 ++------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 7b53b6c531..8bf0580e15 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -39,10 +39,10 @@ /obj/effect/portal/attackby(obj/item/W, mob/user, params) if(user && Adjacent(user)) - teleport(user) + user.forceMove(get_turf(src)) /obj/effect/portal/Crossed(atom/movable/AM, oldloc) - if(get_turf(oldloc) == get_turf(linked)) + if(linked && (get_turf(oldloc) == get_turf(linked))) return ..() if(!teleport(AM)) return ..() @@ -52,7 +52,7 @@ /obj/effect/portal/attack_hand(mob/user) if(Adjacent(user)) - teleport(user) + user.forceMove(get_turf(src)) /obj/effect/portal/Initialize(mapload, _creator, _lifespan = 0, obj/effect/portal/_linked, automatic_link = FALSE, turf/hard_target_override, atmos_link_override) . = ..() diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index 00b4ce4e98..74169df074 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -26,7 +26,7 @@ for(var/i = 1, i <= number_of_wormholes, i++) var/turf/T = pick(pick_turfs) - wormholes += new /obj/effect/portal/wormhole(T, null, 300, null, FALSE) + wormholes += new /obj/effect/portal/wormhole(T, null, 0, null, FALSE) /datum/round_event/wormholes/announce() priority_announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", 'sound/ai/spanomalies.ogg') @@ -40,6 +40,7 @@ /datum/round_event/wormholes/end() QDEL_LIST(wormholes) + wormholes = null /obj/effect/portal/wormhole name = "wormhole" @@ -48,12 +49,6 @@ icon_state = "anom" mech_sized = TRUE -/obj/effect/portal/wormhole/attack_hand(mob/user) - teleport(user) - -/obj/effect/portal/wormhole/attackby(obj/item/I, mob/user, params) - teleport(user) - /obj/effect/portal/wormhole/teleport(atom/movable/M) if(istype(M, /obj/effect)) //sparks don't teleport return From f870b66b3173d5fde0a17b3e3f85a285fe7d3729 Mon Sep 17 00:00:00 2001 From: MoreRobustThanYou Date: Tue, 3 Oct 2017 05:39:41 -0400 Subject: [PATCH 14/56] Makes antimatter code less shit (#31219) * Antimatter shielding that can't find a control unit won't delete itself anymore * Update shielding.dm * Update shielding.dm * Update shielding.dm * Update shielding.dm * Update shielding.dm * Update shielding.dm * gthruhru * thanks Antur --- code/modules/power/antimatter/shielding.dm | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index e6814c5c0a..39353737bb 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -32,16 +32,24 @@ . = ..() addtimer(CALLBACK(src, .proc/controllerscan), 10) +/obj/machinery/am_shielding/proc/overheat() + visible_message("[src] melts!") + new /obj/effect/hotspot(loc) + qdel(src) + +/obj/machinery/am_shielding/proc/collapse() + visible_message("[src] collapses back into a container!") + new /obj/item/device/am_shielding_container(drop_location()) + qdel(src) /obj/machinery/am_shielding/proc/controllerscan(priorscan = 0) //Make sure we are the only one here - if(!istype(src.loc, /turf)) - qdel(src) - return + if(!isturf(loc)) + collapse() for(var/obj/machinery/am_shielding/AMS in loc.contents) if(AMS == src) continue - qdel(src) + collapse() return //Search for shielding first @@ -59,7 +67,7 @@ if(!priorscan) addtimer(CALLBACK(src, .proc/controllerscan, 1), 20) return - qdel(src) + collapse() /obj/machinery/am_shielding/Destroy() @@ -67,7 +75,6 @@ control_unit.remove_shielding(src) if(processing) shutdown_core() - visible_message("The [src.name] melts!") //Might want to have it leave a mess on the floor but no sprites for now return ..() @@ -209,7 +216,7 @@ if(injecting_fuel && control_unit) control_unit.exploding = 1 if(src) - qdel(src) + overheat() return From cdfc5ffc0c19400ba0075e00b6c87835b5eec0b4 Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 3 Oct 2017 08:18:16 -0300 Subject: [PATCH 16/56] Merge pull request #31231 from AnturK/longenoughiruntimelogtopissmeoff Fixes alt-click runtime --- code/_onclick/click.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 2bd1d01431..99d12568bc 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -359,7 +359,6 @@ else user.listed_turf = T user.client.statpanel = T.name - user.Stat() //responsive ui pls /mob/proc/TurfAdjacent(turf/T) return T.Adjacent(src) From a64e2fd25e83ebbd20659b187ae33fdaf04a1ef1 Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 3 Oct 2017 08:18:02 -0300 Subject: [PATCH 18/56] Merge pull request #31233 from kevinz000/patch-306 Fixes floating bullet holes --- code/game/turfs/closed.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 69b1f345b1..c9eb1a6762 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -156,7 +156,7 @@ /turf/closed/bullet_act(obj/item/projectile/Proj) . = ..() - if(!Proj.nodamage && (Proj.damage_type == BRUTE || Proj.damage_type == BURN)) + if((. != -1) && !Proj.nodamage && (Proj.damage_type == BRUTE || Proj.damage_type == BURN)) var/mutable_appearance/bullet_hole = mutable_appearance('icons/effects/effects.dmi', "bullet_hole", BULLET_HOLE_LAYER) var/random_x = rand(-13, 13) From 0888d3944eee3abc2e14968e1a27b4b5e3bb9668 Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 3 Oct 2017 08:19:48 -0300 Subject: [PATCH 20/56] Merge pull request #31210 from MoreRobustThanYou/patch-7 Silicons can no longer take brain damage --- code/modules/mob/living/silicon/damage_procs.dm | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/silicon/damage_procs.dm b/code/modules/mob/living/silicon/damage_procs.dm index 07e6994db5..0f2c57c4fe 100644 --- a/code/modules/mob/living/silicon/damage_procs.dm +++ b/code/modules/mob/living/silicon/damage_procs.dm @@ -15,7 +15,7 @@ /mob/living/silicon/apply_effect(effect = 0,effecttype = STUN, blocked = FALSE) - return 0 //The only effect that can hit them atm is flashes and they still directly edit so this works for now + return FALSE //The only effect that can hit them atm is flashes and they still directly edit so this works for now /mob/living/silicon/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE) //immune to tox damage return FALSE @@ -30,8 +30,13 @@ return FALSE /mob/living/silicon/adjustStaminaLoss(amount, updating_stamina = 1)//immune to stamina damage. - return + return FALSE /mob/living/silicon/setStaminaLoss(amount, updating_stamina = 1) - return + return FALSE +/mob/living/silicon/adjustBrainLoss(amount) + return FALSE + +/mob/living/silicon/setBrainLoss(amount) + return FALSE From f4ce4a3a2718bba69703eca1808a04fd0b407327 Mon Sep 17 00:00:00 2001 From: Kevak Date: Tue, 3 Oct 2017 08:03:03 -0700 Subject: [PATCH 22/56] Shock Collars Are Now A Thing. Exactly what it says on the tin. --- .../items/devices/radio/electropack.dm | 71 +++++++++++++++++- .../research/designs/autolathe_designs.dm | 8 ++ icons/mob/neck.dmi | Bin 40497 -> 40711 bytes icons/obj/clothing/neck.dmi | Bin 2764 -> 3116 bytes 4 files changed, 78 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 8b27659ada..2c4d0dd76a 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -143,4 +143,73 @@ Code: "} user << browse(dat, "window=radio") onclose(user, "radio") - return \ No newline at end of file + return + +/obj/item/device/electropack/shockcollar + name = "shock collar" + desc = "A reinforced metal collar. It seems to have some form of wiring near the front. Strange.." + icon = 'icons/obj/clothing/neck.dmi' + icon_state = "shockcollar" + item_state = "shockcollar" + body_parts_covered = NECK + slot_flags = SLOT_NECK + w_class = WEIGHT_CLASS_SMALL + strip_delay = 60 + equip_delay_other = 60 + materials = list(MAT_METAL=5000, MAT_GLASS=2000) + +/obj/item/device/electropack/shockcollar/attack_hand(mob/user) + if(loc == user) + if(slot_flags == SLOT_NECK) + to_chat(user, "The collar is fastened tight! You'll need help taking this off!") + return + ..() + +/obj/item/device/electropack/shockcollar/receive_signal(datum/signal/signal) + if(!signal || signal.encryption != code) + return + + if(isliving(loc) && on) + if(shock_cooldown != 0) + return + shock_cooldown = 1 + spawn(100) + shock_cooldown = 0 + var/mob/living/L = loc + step(L, pick(GLOB.cardinals)) + + to_chat(L, "You feel a sharp shock from the collar!") + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(3, 1, L) + s.start() + + L.Knockdown(100) + + if(master) + master.receive_signal() + return + +/obj/item/device/electropack/shockcollar/attack_self(mob/user) //Turns out can't fully source this from the parent item, spritepath gets confused if power toggled. Will come back to this when I know how to code better and readd powertoggle.. + + if(!ishuman(user)) + return + user.set_machine(src) + var/dat = {"
+Frequency/Code for shock collar:
+Frequency: +- +- [format_frequency(frequency)] ++ ++
+ +Code: +- +- [code] ++ ++
+
"} + + user << browse(dat, "window=radio") + onclose(user, "radio") + return + diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 5d089739d1..946ec70d38 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/device/electropack category = list("hacked", "Tools") +/datum/design/shock_collar + name = "Shock Collar" + id = "shock_collar" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5000, MAT_GLASS = 2000) + build_path = /obj/item/device/electropack/shockcollar + category = list("hacked", "Security") + /datum/design/large_welding_tool name = "Industrial Welding Tool" id = "large_welding_tool" diff --git a/icons/mob/neck.dmi b/icons/mob/neck.dmi index fb43ae85ec0e094f361fee3d9604e5d6580e412f..17f9d3ade4b00687b5cb04d195bff8d8c9d2ddc0 100644 GIT binary patch delta 20149 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 delta 19892 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 diff --git a/icons/obj/clothing/neck.dmi b/icons/obj/clothing/neck.dmi index 40c4aa03bc72c8232368f640c2d77576b4ff33bd..c41db68326388b8ba1db35a2e4dbda380f257fa1 100644 GIT binary patch delta 2818 zcmV+d3;p!W6|5MLBmsl5B_{!YLPA2qt2a(gPCGk0baZrQXJCZ#B9DiX_oG|z?%@nVuj;BJ=s!N6ccV`35=K#b-x1RE*JG-2B_;`r3Y zUt~`$)a-2hgc?iEz!p-Ww+mlNeV7@(4MEd5@1?Ob9xAEC%VT!w59j^==lKQKhWGq8 z*;)1g010nNL_t(|obBBITN+0i0Py9DF=7-%*<3D{aEGQnWtFObg>qC8)N2ER3bh*B zCW@r-YR`OW)7s=r?*8<9-T#d%diVGH)#IL_8%m*f_@+|m8wp%X=pVhM7JA0iLhra*=nDpd*AebVw06oVM?Fv9W6jA^ofs+!z}3z%rzg=)E~S?uBJYB+)k!41#VV zFk%yiTP`H<)@aBN%aBT8@n_3P7w7zvBLyXA4otl!aJs>V60%km@UnLLfSKL1xK4xrx1>O%w|J)`dfQ$$AtLBjj6g+tXvGqaq@+`Ik{}K&1Cpk>{1dl9U4{RSO zq>9%I+Xo6M-^2(eF=+FFFgAV9@-iHok@8^sKp|PYL(u-PMazNS;bCZh*rEv_WROj> zeFEY|Y!!ABC`=qR*5Y|(NcoL_{H^4%0dY4<~aV1UmuD`K0F=WGVT^0LKuO9%-c z;|<-QwqP&g4c{cTU?0yPZg98=?Z5{tg&)TtW@JD=@^9?qltALo%L zti}?51fVp5Oo$0&K>oxE8gadJ!gR&A4!kD;z^w;(=w*M+msN~T_ z0I8#k3B+I-l%8QsA+EfcSj^_blZ(S&N!=$Gkx2AM=$|!ta-hL@ zpM0{o*e_s%Cl?xwhd~RMSkU)y8ee8X3^s5&KqcdGBeBSVhG7u*|1=UwMv{~u_1W}v zdODr@8|BM9n3o<h(8;!95LeXgCKuAyoW*F;43UnHOhXl@TE-!yEC(oeHQ%E)%!vLJJ(d4qwK|Uq# zujf;#)Mr@7R020Lnat-{$Fc#6iKq>rxQ^~~xDq>rp&zm;ceG*H8kHx6WfwITs# zq0J=ejlyYsb8Q(;Q^ZDMsSeR;TBn%RFbA4P8VMkx+Q#(!G%P}L6TvmO0*jCsZ1k6A zBWw{ug&;8zH#?1_N&uLnZ|^+5xi+^+jWuD-MrZ|sOAzPHBaIB0R0;HadK&s59qSvb zE9)dsY{8bPZUM5X1)?DuA<<`lk_w>nxY$W3pzh~W+$fe7U}ABR^%+(y#F;Rc&8h%; zKCjFmq;Nx(L5{NY8q4^6d>+oxiwT3}60Gu5bx!5G!uTe=1~oNsL0gE=#}NfUrUSD2 zX59^)KXeOJvjV?_#{%XNCp&>xAol@iW>RYhK7_}Y3IEyZ}LT;ASxO=Az_?d%i_1!5d|ySwF5$yHS| zIImc#ROCX=D_5)4{s@bV_tjT>dvaiz@xK0gf4^Tq#>0>c%Z!K7Ct;yj+2g=su_zfY zm8<(4ST2`c*MYB6;6N;Y6$!9ZEpZ^0N*{rulI`OHC@R@~AM}{LLPhY3Mf)Nwm-kCm z!7G<#i}2vl!6W!O=v1J7KhCSklT``MtI3mB34An*PK6HdFYbU)G#V*z7lfkGNP+nI z?AoEw>HWnb;1rFfTn3z~(KJ4{bD-+|P#{2TG@8BkMgs)`#73ik*|#?uTtC+9hXa-G z=M^j(4VJPU2o)?E4VJRKj$v*d9UeXsGbNA1Lxm9DuW8i#p@t!E9LQ>=4G1+1dE-D< zE0RWYaB%p|H-}0ejH`sr?=~OSFbA4PnpPjyFbA4Pnhys!kJAAag2YO}>@;mv0u_S9 zYRT+0#CEKj!mEsbQvohP+%k_eEkJMy;h`I6N82fE z6%YkLrUSBNd{^5oZI=)QK&At-o4{}3v4eTU$*$lP$d>Vc@8GeEdBn-C;uXkl0w2TU zTZRH$0k24I#uIpa$54PP;T6d)$77L4jze;5JP~>1I3&9sj|I|>s{1Ac+o}HbsDu(MB0DtH*@T4I;vMxs}ki*QYHEKVe zomw+?dV2O_*W1kr?=NPzkqChnji$v+w?uf<_M?A)I{s%0A08*HQ4>53h0*)>qY|GM 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 Date: Tue, 3 Oct 2017 11:29:15 -0500 Subject: [PATCH 23/56] Automatic changelog generation for PR #3086 [ci skip] --- html/changelogs/AutoChangeLog-pr-3086.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3086.yml diff --git a/html/changelogs/AutoChangeLog-pr-3086.yml b/html/changelogs/AutoChangeLog-pr-3086.yml new file mode 100644 index 0000000000..90798d5475 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3086.yml @@ -0,0 +1,4 @@ +author: "Toriate" +delete-after: True +changes: + - spellcheck: "uplink description for soporific magazines now correctly says at least three shots are needed, rather than two" From 5fdeb55876dd7158522e303bde60ba7dae06f6d3 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 3 Oct 2017 11:29:49 -0500 Subject: [PATCH 24/56] Automatic changelog generation for PR #3088 [ci skip] --- html/changelogs/AutoChangeLog-pr-3088.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3088.yml diff --git a/html/changelogs/AutoChangeLog-pr-3088.yml b/html/changelogs/AutoChangeLog-pr-3088.yml new file mode 100644 index 0000000000..1f32d861a6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3088.yml @@ -0,0 +1,5 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Wormhole event wormholes now actually teleport you." + - bugfix: "portals now actually teleport on click." From ca61069ecbae7ba45c9779f6489e071db161d453 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 3 Oct 2017 11:30:04 -0500 Subject: [PATCH 25/56] Automatic changelog generation for PR #3089 [ci skip] --- html/changelogs/AutoChangeLog-pr-3089.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3089.yml diff --git a/html/changelogs/AutoChangeLog-pr-3089.yml b/html/changelogs/AutoChangeLog-pr-3089.yml new file mode 100644 index 0000000000..0ee37ab23d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3089.yml @@ -0,0 +1,4 @@ +author: "Thefastfoodguy" +delete-after: True +changes: + - bugfix: "Antimatter shielding that can't find a control unit won't delete itself anymore" From 06fe1e8da6af4523a454d88cbbde118f0abcfd3d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 3 Oct 2017 11:32:21 -0500 Subject: [PATCH 26/56] Automatic changelog generation for PR #3092 [ci skip] --- html/changelogs/AutoChangeLog-pr-3092.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3092.yml diff --git a/html/changelogs/AutoChangeLog-pr-3092.yml b/html/changelogs/AutoChangeLog-pr-3092.yml new file mode 100644 index 0000000000..efb4de6d35 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3092.yml @@ -0,0 +1,4 @@ +author: "Thefastfoodguy" +delete-after: True +changes: + - bugfix: "Silicons can no longer take brain damage" From ba99e3845a9d5074fd8415f01ca973f5a0db5555 Mon Sep 17 00:00:00 2001 From: Kevak Date: Tue, 3 Oct 2017 12:12:52 -0700 Subject: [PATCH 27/56] Added normal collar functionality. You can now name your victim's collars on top of other functionality. --- .../items/devices/radio/electropack.dm | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 2c4d0dd76a..513ffb8d2b 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -157,6 +157,7 @@ Code: strip_delay = 60 equip_delay_other = 60 materials = list(MAT_METAL=5000, MAT_GLASS=2000) + var/tagname = null /obj/item/device/electropack/shockcollar/attack_hand(mob/user) if(loc == user) @@ -190,26 +191,34 @@ Code: return /obj/item/device/electropack/shockcollar/attack_self(mob/user) //Turns out can't fully source this from the parent item, spritepath gets confused if power toggled. Will come back to this when I know how to code better and readd powertoggle.. + var/option = "Change Name" + option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Change Frequency") + switch(option) + if("Change Name") + var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text + if(t) + tagname = copytext(sanitize(t), 1, MAX_NAME_LEN) + name = "[initial(name)] - [tagname]" + if("Change Frequency") + if(!ishuman(user)) + return + user.set_machine(src) + var/dat = {"
+ Frequency/Code for shock collar:
+ Frequency: + - + - [format_frequency(frequency)] + + + +
- if(!ishuman(user)) - return - user.set_machine(src) - var/dat = {"
-Frequency/Code for shock collar:
-Frequency: -- -- [format_frequency(frequency)] -+ -+
+ Code: + - + - [code] + + + +
+
"} -Code: -- -- [code] -+ -+
-
"} - - user << browse(dat, "window=radio") - onclose(user, "radio") - return + user << browse(dat, "window=radio") + onclose(user, "radio") + return From fd5acc55736fc83c9f3bd6783da20be2c59360d0 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sun, 1 Oct 2017 13:32:02 +0200 Subject: [PATCH 28/56] Organ initialization cleanup --- code/modules/mob/living/brain/brain_item.dm | 10 +- code/modules/mob/living/carbon/human/human.dm | 31 +-- .../mob/living/carbon/human/species.dm | 184 +++++++++++------- .../carbon/human/species_types/skeletons.dm | 16 ++ .../carbon/human/species_types/zombies.dm | 4 +- code/modules/surgery/organs/organ_internal.dm | 2 + 6 files changed, 138 insertions(+), 109 deletions(-) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 13a34b6bae..fbff6a5285 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -18,12 +18,12 @@ vital = FALSE decoy_override = TRUE -/obj/item/organ/brain/Insert(mob/living/carbon/C, special = 0) +/obj/item/organ/brain/Insert(mob/living/carbon/C, special = 0,no_id_transfer = FALSE) ..() name = "brain" - if(C.mind && C.mind.changeling) //congrats, you're trapped in a body you don't control + if(C.mind && C.mind.changeling && !no_id_transfer) //congrats, you're trapped in a body you don't control if(brainmob && !(C.stat == DEAD || (C.status_flags & FAKEDEATH))) to_chat(brainmob, "You can't feel your body! You're still just a brain!") loc = C @@ -44,13 +44,17 @@ //Update the body's icon so it doesnt appear debrained anymore C.update_hair() -/obj/item/organ/brain/Remove(mob/living/carbon/C, special = 0) +/obj/item/organ/brain/Remove(mob/living/carbon/C, special = 0,no_id_transfer = FALSE) ..() +<<<<<<< HEAD if(!special) if(C.has_brain_worms()) var/mob/living/simple_animal/borer/B = C.has_brain_worms() B.leave_victim() //Should remove borer if the brain is removed - RR if(!gc_destroyed || (owner && !owner.gc_destroyed)) +======= + if((!gc_destroyed || (owner && !owner.gc_destroyed)) && !no_id_transfer) +>>>>>>> 85cd9e6... Organ initialization cleanup transfer_identity(C) C.update_hair() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index d66e6f808a..70a5f5225c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -21,41 +21,12 @@ set_species(dna.species.type) //initialise organs - create_internal_organs() + create_internal_organs() //most of it is done in set_species now, this is only for parent call handcrafting = new() . = ..() -/mob/living/carbon/human/create_internal_organs() - if(!(NOHUNGER in dna.species.species_traits)) - internal_organs += new /obj/item/organ/appendix - if(!(NOBREATH in dna.species.species_traits)) - if(dna.species.mutantlungs) - internal_organs += new dna.species.mutantlungs() - else - internal_organs += new /obj/item/organ/lungs() - if(!(NOBLOOD in dna.species.species_traits)) - internal_organs += new /obj/item/organ/heart - - if(!(NOLIVER in dna.species.species_traits)) - if(dna.species.mutantliver) - internal_organs += new dna.species.mutantliver() - else - internal_organs += new /obj/item/organ/liver() - - if(!(NOSTOMACH in dna.species.species_traits)) - if(dna.species.mutantstomach) - internal_organs += new dna.species.mutantstomach() - else - internal_organs += new /obj/item/organ/stomach() - - internal_organs += new dna.species.mutanteyes - internal_organs += new dna.species.mutantears - internal_organs += new dna.species.mutanttongue - internal_organs += new /obj/item/organ/brain - ..() - /mob/living/carbon/human/OpenCraftingMenu() handcrafting.ui_interact(src) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 07f3acea48..34d4ae8e51 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -68,7 +68,8 @@ //Flight and floating var/override_float = 0 - + + var/obj/item/organ/brain/mutant_brain = /obj/item/organ/brain var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes var/obj/item/organ/ears/mutantears = /obj/item/organ/ears var/obj/item/mutanthands @@ -123,6 +124,113 @@ return 0 return 1 +//Will regenerate missing organs +/datum/species/proc/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE) + var/obj/item/organ/brain/brain = C.getorganslot("brain") + var/obj/item/organ/heart/heart = C.getorganslot("heart") + var/obj/item/organ/lungs/lungs = C.getorganslot("lungs") + var/obj/item/organ/appendix/appendix = C.getorganslot("appendix") + var/obj/item/organ/eyes/eyes = C.getorganslot("eye_sight") + var/obj/item/organ/ears/ears = C.getorganslot("ears") + var/obj/item/organ/tongue/tongue = C.getorganslot("tongue") + var/obj/item/organ/liver/liver = C.getorganslot("liver") + var/obj/item/organ/stomach/stomach = C.getorganslot("stomach") + + var/should_have_brain = TRUE + var/should_have_heart = !(NOBLOOD in species_traits) + var/should_have_lungs = !(NOBREATH in species_traits) + var/should_have_appendix = !(NOHUNGER in species_traits) + var/should_have_eyes = TRUE + var/should_have_ears = TRUE + var/should_have_tongue = TRUE + var/should_have_liver = !(NOLIVER in species_traits) + var/should_have_stomach = !(NOSTOMACH in species_traits) + + if(brain && (replace_current || !should_have_brain)) + if(!brain.decoy_override)//Just keep it if it's fake + brain.Remove(C,TRUE,TRUE) + QDEL_NULL(brain) + if(should_have_brain && !brain) + brain = new mutant_brain() + brain.Insert(C, TRUE, TRUE) + + if(heart && (!should_have_heart || replace_current)) + heart.Remove(C,1) + QDEL_NULL(heart) + if(should_have_heart && !heart) + heart = new() + heart.Insert(C) + + if(lungs && (replace_current || !should_have_lungs)) + lungs.Remove(C,1) + QDEL_NULL(lungs) + if(should_have_lungs && !lungs) + if(mutantlungs) + lungs = new mutantlungs() + else + lungs = new() + lungs.Insert(C) + + if(liver && (!should_have_liver || replace_current)) + liver.Remove(C,1) + QDEL_NULL(liver) + if(should_have_liver && !liver) + if(mutantliver) + liver = new mutantliver() + else + liver = new() + liver.Insert(C) + + if(stomach && (!should_have_stomach || replace_current)) + stomach.Remove(C,1) + QDEL_NULL(stomach) + if(should_have_stomach && !stomach) + if(mutantstomach) + stomach = new mutantstomach() + else + stomach = new() + stomach.Insert(C) + + if(appendix && (!should_have_appendix || replace_current)) + appendix.Remove(C,1) + QDEL_NULL(appendix) + if(should_have_appendix && !appendix) + appendix = new() + appendix.Insert(C) + + if(C.get_bodypart("head")) + if(eyes && (replace_current || !should_have_eyes)) + eyes.Remove(C,1) + QDEL_NULL(eyes) + if(should_have_eyes && !eyes) + eyes = new mutanteyes + eyes.Insert(C) + + if(ears && (replace_current || !should_have_ears)) + ears.Remove(C,1) + QDEL_NULL(ears) + if(should_have_ears && !ears) + ears = new mutantears + ears.Insert(C) + + if(tongue && (replace_current || !should_have_tongue)) + tongue.Remove(C,1) + QDEL_NULL(tongue) + if(should_have_tongue && !tongue) + tongue = new mutanttongue + tongue.Insert(C) + + if(old_species) + for(var/mutantorgan in old_species.mutant_organs) + var/obj/item/organ/I = C.getorgan(mutantorgan) + if(I) + I.Remove(C) + QDEL_NULL(I) + + for(var/path in mutant_organs) + var/obj/item/organ/I = new path() + I.Insert(C) + /datum/species/proc/on_species_gain(mob/living/carbon/C, datum/species/old_species) // Drop the items the new species can't wear for(var/slot_id in no_equip) @@ -138,79 +246,7 @@ if(DIGITIGRADE in species_traits) C.Digitigrade_Leg_Swap(FALSE) - var/obj/item/organ/heart/heart = C.getorganslot("heart") - var/obj/item/organ/lungs/lungs = C.getorganslot("lungs") - var/obj/item/organ/appendix/appendix = C.getorganslot("appendix") - var/obj/item/organ/eyes/eyes = C.getorganslot("eye_sight") - var/obj/item/organ/ears/ears = C.getorganslot("ears") - var/obj/item/organ/tongue/tongue = C.getorganslot("tongue") - - var/obj/item/organ/liver/liver = C.getorganslot("liver") - var/obj/item/organ/stomach/stomach = C.getorganslot("stomach") - - - - if((NOBLOOD in species_traits) && heart) - heart.Remove(C) - qdel(heart) - else if((!(NOBLOOD in species_traits)) && (!heart)) - heart = new() - heart.Insert(C) - - if(lungs) - qdel(lungs) - lungs = null - - QDEL_NULL(liver) - - QDEL_NULL(stomach) - - if(C.get_bodypart("head")) - if(eyes) - qdel(eyes) - eyes = new mutanteyes - eyes.Insert(C) - - if(ears) - qdel(ears) - ears = new mutantears - ears.Insert(C) - - if(tongue) - qdel(tongue) - tongue = new mutanttongue - tongue.Insert(C) - - if((!(NOBREATH in species_traits)) && !lungs) - if(mutantlungs) - lungs = new mutantlungs() - else - lungs = new() - lungs.Insert(C) - - if((!(NOLIVER in species_traits)) && (!liver)) - if(mutantliver) - liver = new mutantliver() - else - liver = new() - liver.Insert(C) - - if((!(NOSTOMACH in species_traits)) && (!stomach)) - if(mutantstomach) - stomach = new mutantstomach() - else - stomach = new() - stomach.Insert(C) - - if((NOHUNGER in species_traits) && appendix) - qdel(appendix) - else if((!(NOHUNGER in species_traits)) && (!appendix)) - appendix = new() - appendix.Insert(C) - - for(var/path in mutant_organs) - var/obj/item/organ/I = new path() - I.Insert(C) + regenerate_organs(C,old_species) if(exotic_bloodtype && C.dna.blood_type != exotic_bloodtype) C.dna.blood_type = exotic_bloodtype diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index 4302c43ff8..f9c731a4ce 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /datum/species/skeleton // 2spooky name = "Spooky Scary Skeleton" @@ -11,3 +12,18 @@ damage_overlay_type = ""//let's not show bloody wounds or burns over bones. disliked_food = NONE liked_food = NONE +======= +/datum/species/skeleton + // 2spooky + name = "Spooky Scary Skeleton" + id = "skeleton" + say_mod = "rattles" + blacklisted = 1 + sexes = 0 + meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton + species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER,EASYDISMEMBER,EASYLIMBATTACHMENT) + mutanttongue = /obj/item/organ/tongue/bone + damage_overlay_type = ""//let's not show bloody wounds or burns over bones. + disliked_food = NONE + liked_food = GROSS | MEAT | RAW +>>>>>>> 85cd9e6... Organ initialization cleanup diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 04123102c0..4ce8570c2b 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -9,7 +9,7 @@ blacklisted = 1 meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT,NOTRANSSTING) - mutant_organs = list(/obj/item/organ/tongue/zombie) + mutanttongue = /obj/item/organ/tongue/zombie var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg') disliked_food = NONE liked_food = NONE @@ -64,6 +64,6 @@ limbs_id = "zombie" //They look like zombies sexes = 0 meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie - mutant_organs = list(/obj/item/organ/tongue/zombie) + mutanttongue = /obj/item/organ/tongue/zombie #undef REGENERATION_DELAY diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index f5a00d24cb..4fdda7a7bc 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -10,6 +10,8 @@ var/slot // DO NOT add slots with matching names to different zones - it will break internal_organs_slot list! var/vital = 0 + //Was this organ implanted/inserted/etc, if true will not be removed during species change. + var/external = FALSE /obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) From 49a354d752a27436e30b27647746352bf2b1b77f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 3 Oct 2017 14:22:46 -0500 Subject: [PATCH 29/56] Automatic changelog generation for PR #2922 [ci skip] --- html/changelogs/AutoChangeLog-pr-2922.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2922.yml diff --git a/html/changelogs/AutoChangeLog-pr-2922.yml b/html/changelogs/AutoChangeLog-pr-2922.yml new file mode 100644 index 0000000000..f46c3136a6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2922.yml @@ -0,0 +1,6 @@ +author: "Daniel0Mclovin" +delete-after: True +changes: + - rscadd: "Podpeople to roundstart" + - tweak: "Modified podpeople heatmod from 1.25 to 1.5" + - tweak: "plant-b-gone now does roughly 7 damage per tick on podpeople" From 159835db24f68cd5e6bb996076efd758811170fc Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Tue, 3 Oct 2017 15:30:42 -0500 Subject: [PATCH 30/56] Fixes humans having no examine feedback for soft crit (#31247) * Soft crit examine * Concise --- code/modules/mob/living/carbon/human/examine.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 74ccdab19c..0ca0bed9fc 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -277,9 +277,11 @@ if(!appears_dead) if(stat == UNCONSCIOUS) msg += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.\n" - else if(getBrainLoss() >= 60) - msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" - + else + if(getBrainLoss() >= 60) + msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" + if(InCritical()) + msg += "[t_He] is barely concious.\n" if(getorgan(/obj/item/organ/brain)) if(istype(src, /mob/living/carbon/human/interactive)) var/mob/living/carbon/human/interactive/auto = src From d98cd745ddec5a4221f937e3c6b2c16d4026f2fb Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Tue, 3 Oct 2017 18:11:06 -0400 Subject: [PATCH 32/56] Fixes morgue maintenance radstorm protection (#31253) * Morgue maint area * Fixed typo --- _maps/map_files/BoxStation/BoxStation.dmm | 199 ++++++++++++++++-- .../map_files/Deltastation/DeltaStation2.dmm | 119 ++++++++--- code/game/area/Space_Station_13_areas.dm | 6 +- icons/turf/areas.dmi | Bin 32943 -> 33086 bytes 4 files changed, 269 insertions(+), 55 deletions(-) diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index dcd0717e29..1ef76788eb 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -24665,7 +24665,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, -/area/maintenance/aft) +/area/maintenance/department/medical/morgue) "bgp" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/white, @@ -26862,7 +26862,7 @@ dir = 4 }, /turf/open/floor/plating, -/area/maintenance/aft) +/area/maintenance/department/medical/morgue) "blh" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/eastright{ @@ -26940,7 +26940,7 @@ dir = 4 }, /turf/open/floor/plating, -/area/maintenance/aft) +/area/maintenance/department/medical/morgue) "blp" = ( /obj/machinery/power/apc{ dir = 8; @@ -26974,7 +26974,7 @@ dir = 4 }, /turf/open/floor/plating, -/area/maintenance/aft) +/area/maintenance/department/medical/morgue) "blr" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -29030,7 +29030,7 @@ }, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/maintenance/aft) +/area/maintenance/department/medical/morgue) "bpR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ @@ -60163,7 +60163,7 @@ icon_state = "2-4" }, /turf/open/floor/plating, -/area/maintenance/aft) +/area/maintenance/department/medical/morgue) "cHE" = ( /obj/machinery/door/airlock/maintenance{ name = "Mech Bay Maintenance"; @@ -63862,6 +63862,167 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"cTJ" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) +"cTK" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) +"cTL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/black, +/area/medical/morgue) +"cTM" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Morgue Maintenance APC"; + areastring = "/area/maintenance/department/medical/morgue"; + pixel_x = 26 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plasteel/black, +/area/medical/morgue) +"cTN" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) +"cTO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) +"cTP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) +"cTQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) +"cTR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) +"cTS" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) +"cTT" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) +"cTU" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) +"cTV" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) (1,1,1) = {" aaa @@ -103574,7 +103735,7 @@ bfL bhp biB biB -biB +cTL bkU bmX bpE @@ -103831,7 +103992,7 @@ bfL bhq bhm bkb -bhm +cTM bla bmZ bpH @@ -104346,7 +104507,7 @@ bfS biC bkd bfS -bKH +cTO bmZ bpJ brc @@ -104860,7 +105021,7 @@ bfS biE bkf bfS -bKH +cTP bmZ bpL bre @@ -105117,7 +105278,7 @@ bfS biD bke bfS -bKH +cTQ bmZ bpK brd @@ -105374,7 +105535,7 @@ bfS bfS bfS bfS -bKH +cTR bmZ bon bon @@ -105626,17 +105787,17 @@ aYV baR bcb bdl -bdO +cTJ cHD bgo -bPv -bPv +cTK +cTN blq -bna -bPv +cTS +cTT bpQ -bPv -bdO +cTU +cTV btm buy bvz diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 5809176275..efae305c74 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -91795,7 +91795,7 @@ "dwO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dwP" = ( /obj/machinery/door/firedoor, /obj/structure/cable/white{ @@ -91815,7 +91815,7 @@ dir = 1 }, /turf/open/floor/plasteel, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dwQ" = ( /obj/structure/table/glass, /obj/item/clipboard, @@ -92448,7 +92448,7 @@ /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dyb" = ( /obj/structure/bed/roller, /obj/machinery/iv_drip, @@ -92456,12 +92456,12 @@ /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dyc" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dyd" = ( /obj/structure/cable/white{ d1 = 1; @@ -92470,7 +92470,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dye" = ( /obj/structure/table/glass, /obj/item/folder/white, @@ -92923,12 +92923,12 @@ "dzf" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dzg" = ( /obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dzh" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -92938,14 +92938,14 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dzi" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, /obj/item/storage/backpack/duffelbag/med, /obj/item/device/flashlight/pen, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dzj" = ( /turf/closed/wall, /area/crew_quarters/heads/cmo) @@ -93674,7 +93674,7 @@ dir = 4 }, /turf/open/floor/plasteel, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dAw" = ( /obj/structure/cable/white{ d1 = 4; @@ -93687,7 +93687,7 @@ /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dAx" = ( /obj/structure/cable/white{ d1 = 4; @@ -93699,7 +93699,7 @@ dir = 1 }, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dAy" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -93712,7 +93712,7 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dAz" = ( /obj/structure/cable/white{ d1 = 1; @@ -93733,14 +93733,14 @@ dir = 4 }, /turf/open/floor/plasteel/neutral, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dAA" = ( /obj/structure/table, /obj/item/clothing/gloves/color/latex/nitrile, /obj/item/clothing/suit/apron/surgical, /obj/item/clothing/mask/breath/medical, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dAB" = ( /obj/structure/closet/secure_closet/CMO, /obj/item/clothing/under/rank/nursesuit, @@ -94324,7 +94324,7 @@ /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dBP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -94334,13 +94334,13 @@ dir = 4 }, /turf/open/floor/plasteel/neutral, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dBQ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dBR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -94350,7 +94350,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dBS" = ( /obj/structure/rack, /obj/effect/decal/cleanable/dirt, @@ -94359,7 +94359,7 @@ /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dBT" = ( /obj/machinery/light{ dir = 8 @@ -95032,15 +95032,15 @@ /obj/structure/closet/secure_closet/medical3, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dDe" = ( /obj/structure/closet/wardrobe/white/medical, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dDf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dDg" = ( /obj/structure/cable/white{ d1 = 1; @@ -95048,10 +95048,15 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dDh" = ( /obj/machinery/suit_storage_unit/cmo, /obj/effect/turf_decal/stripes/line{ @@ -95603,7 +95608,7 @@ dir = 1 }, /turf/open/floor/plasteel, -/area/medical/morgue) +/area/maintenance/department/medical/morgue) "dEn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, @@ -113090,6 +113095,50 @@ /obj/structure/ore_box, /turf/open/floor/plating, /area/shuttle/auxillary_base) +"esz" = ( +/turf/closed/wall/r_wall, +/area/maintenance/department/medical/morgue) +"esA" = ( +/turf/closed/wall/r_wall, +/area/maintenance/department/medical/morgue) +"esB" = ( +/turf/closed/wall, +/area/maintenance/department/medical/morgue) +"esC" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/maintenance/department/medical/morgue) +"esD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) +"esE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc{ + dir = 2; + name = "Morgue Maintenance APC"; + areastring = "/area/maintenance/department/medical/morgue"; + pixel_y = -26 + }, +/obj/structure/cable/white{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/maintenance/department/medical/morgue) +"esF" = ( +/turf/closed/wall, +/area/maintenance/department/medical/morgue) +"esG" = ( +/turf/closed/wall, +/area/maintenance/department/medical/morgue) +"esH" = ( +/turf/closed/wall, +/area/maintenance/department/medical/morgue) (1,1,1) = {" aaa @@ -155932,13 +155981,13 @@ drr dsR dur dvw -dwN +esz dya -dyY +esD dAw dBO dDd -dwK +esF dFd dGE dHP @@ -156189,13 +156238,13 @@ drs dsS drs dvx -dwN +esA dyb dzf dAx dBP dDe -dwK +esG dFe dGF dHP @@ -156960,13 +157009,13 @@ drv dlO dus dvA -dwK -dxS +esB +esC dzi dAA dBS -dxS -dwK +esE +esH dEY dGA dHP diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index 4846cc2bc2..c4b5c5caae 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -151,7 +151,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/maintenance/department/medical name = "Medbay Maintenance" - icon_state = "asmaint" + icon_state = "medbay_maint" + +/area/maintenance/department/medical/morgue + name = "Morgue Maintenance" + icon_state = "morgue_maint" /area/maintenance/department/science name = "Science Maintenance" diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index ae61dc28527201c82e6fc7abc5ab5201f2b1947b..cb5499487d406c4221ad91fe4809a622eac32164 100644 GIT binary patch literal 33086 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 Sp$-UmpojO=6wBnzU;Gc4a(pcS literal 32943 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

#^9!Dp|0L0s#vCC*JZeU&uain?)Mz S!M_FqK97|(lwb-Lf&UM6b{nVw From 21cfddd4268cbb706d0b05c5f22fe42f14ee365d Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Tue, 3 Oct 2017 15:48:08 -0700 Subject: [PATCH 34/56] fixes healguardians not being able to heal people (#31228) * Update guardian.dm * Update support.dm * Update guardian.dm --- code/modules/mob/living/simple_animal/guardian/guardian.dm | 7 +++++-- .../mob/living/simple_animal/guardian/types/support.dm | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 144f7081e0..592679d35b 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -180,10 +180,13 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians new /obj/effect/temp_visual/guardian/phase(loc) /mob/living/simple_animal/hostile/guardian/canSuicide() - return 0 + return FALSE + +/mob/living/simple_animal/hostile/guardian/proc/is_deployed() + return loc != summoner /mob/living/simple_animal/hostile/guardian/AttackingTarget() - if(loc == summoner) + if(!is_deployed()) to_chat(src, "You must be manifested to attack!") return FALSE else diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index db1581d8cb..a8a31ad89c 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -28,7 +28,7 @@ /mob/living/simple_animal/hostile/guardian/healer/AttackingTarget() . = ..() - if(. && toggle && iscarbon(target)) + if(is_deployed() && toggle && iscarbon(target)) var/mob/living/carbon/C = target C.adjustBruteLoss(-5) C.adjustFireLoss(-5) From f1dfc1b6db986c299d70ecd331dde867fd942636 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Tue, 3 Oct 2017 18:54:20 -0400 Subject: [PATCH 36/56] Merge pull request #31252 from MrStonedOne/whatthefuckcyberboss Partial revert of #30763 (datum config refactor) --- .../configuration/entries/config.dm | 35 +------------------ 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/code/controllers/configuration/entries/config.dm b/code/controllers/configuration/entries/config.dm index 62919afd06..ec96e88553 100644 --- a/code/controllers/configuration/entries/config.dm +++ b/code/controllers/configuration/entries/config.dm @@ -8,10 +8,8 @@ CONFIG_DEF(string/autoadmin_rank) // the rank for autoadmins protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(string/servername) // server name (the name of the game window) - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(string/serversqlname) // short form server name used for the DB - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(string/stationname) // station name (the name of the station in-game) @@ -24,52 +22,38 @@ CONFIG_DEF(number/round_end_countdown) // Post round murder death kill countdown min_val = 0 CONFIG_DEF(flag/hub) // if the game appears on the hub or not - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_ooc) // log OOC channel - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_access) // log login/logout - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_say) // log client say - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_admin) // log admin actions protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_prayer) // log prayers - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_law) // log lawchanges - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_game) // log game events - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_vote) // log voting - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_whisper) // log client whisper - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_attack) // log attack messages - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_emote) // log emotes - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_adminchat) // log admin chat messages protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_pda) // log pda messages - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_twitter) // log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases. - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/log_world_topic) // log all world.Topic() calls - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/allow_admin_ooccolor) // Allows admins with relevant permissions to have their own ooc colour protection = CONFIG_ENTRY_LOCKED @@ -85,14 +69,12 @@ CONFIG_DEF(number/vote_delay) // minimum time between voting sessions (decisecon CONFIG_DEF(number/vote_period) // length of voting period (deciseconds, default 1 minute) value = 600 min_val = 0 - + CONFIG_DEF(flag/default_no_vote) // vote does not default to nochange/norestart - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/no_dead_vote) // dead people can't vote CONFIG_DEF(flag/allow_metadata) // Metadata is supported. - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/popup_admin_pm) // adminPMs to non-admins show in a pop-up 'reply' window when set @@ -140,14 +122,12 @@ CONFIG_DEF(flag/admin_legacy_system) //Defines whether the server uses the legac protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(string/hostedby) - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/norespawn) CONFIG_DEF(flag/guest_jobban) CONFIG_DEF(flag/usewhitelist) - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/ban_legacy_system) //Defines whether the server uses the legacy banning system with the files in /data or the SQL system. protection = CONFIG_ENTRY_LOCKED @@ -171,29 +151,22 @@ CONFIG_DEF(flag/use_exp_restrictions_other) CONFIG_DEF(flag/use_exp_restrictions_admin_bypass) CONFIG_DEF(string/server) - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(string/banappeals) - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(string/wikiurl) - protection = CONFIG_ENTRY_LOCKED value = "http://www.tgstation13.org/wiki" CONFIG_DEF(string/forumurl) - protection = CONFIG_ENTRY_LOCKED value = "http://tgstation13.org/phpBB/index.php" CONFIG_DEF(string/rulesurl) - protection = CONFIG_ENTRY_LOCKED value = "http://www.tgstation13.org/wiki/Rules" CONFIG_DEF(string/githuburl) - protection = CONFIG_ENTRY_LOCKED value = "https://www.github.com/tgstation/-tg-station" CONFIG_DEF(number/githubrepoid) - protection = CONFIG_ENTRY_LOCKED value = null min_val = 0 @@ -233,7 +206,6 @@ CONFIG_DEF(flag/useircbot) //tgs2 support CONFIG_DEF(flag/automute_on) //enables automuting/spam prevention CONFIG_DEF(string/panic_server_name) - protection = CONFIG_ENTRY_LOCKED /datum/config_entry/string/panic_server_name/ValidateAndSet(str_val) return str_val != "\[Put the name here\]" && ..() @@ -290,7 +262,6 @@ CONFIG_DEF(string/extreme_popcap_message) value = "The server is currently serving a high number of users, find alternative servers." CONFIG_DEF(flag/panic_bunker) // prevents people the server hasn't seen before from connecting - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(number/notify_new_player_age) // how long do we notify admins of a new player min_val = -1 @@ -303,7 +274,6 @@ CONFIG_DEF(flag/irc_first_connection_alert) // do we notify the irc channel when CONFIG_DEF(flag/check_randomizer) CONFIG_DEF(string/ipintel_email) - protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN /datum/config_entry/string/ipintel_email/ValidateAndSet(str_val) return str_val != "ch@nge.me" && ..() @@ -315,17 +285,14 @@ CONFIG_DEF(number/ipintel_rating_bad) max_val = 1 CONFIG_DEF(number/ipintel_save_good) - protection = CONFIG_ENTRY_LOCKED value = 12 min_val = 0 CONFIG_DEF(number/ipintel_save_bad) - protection = CONFIG_ENTRY_LOCKED value = 1 min_val = 0 CONFIG_DEF(string/ipintel_domain) - protection = CONFIG_ENTRY_LOCKED value = "check.getipintel.net" CONFIG_DEF(flag/aggressive_changelog) From 126020185d097d3e68b6ec746aeda4f712e8ae0a Mon Sep 17 00:00:00 2001 From: ExcessiveUseOfCobblestone <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com> Date: Tue, 3 Oct 2017 18:55:21 -0400 Subject: [PATCH 38/56] Monkey Cubes expanding will give the new monkey an attack log with their creator (#31236) * Update snacks_meat.dm * no one wants to see that * WE'RE JUST SENDING IT TO ONE PLACE COBBY * boop * cool leoz tricks * Update snacks_meat.dm --- code/modules/food_and_drinks/food/snacks_meat.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index 7c8db01bcc..11426a4e04 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -185,7 +185,9 @@ /obj/item/reagent_containers/food/snacks/monkeycube/proc/Expand() visible_message("[src] expands!") - new /mob/living/carbon/monkey(get_turf(src)) + var/mob/spammer = get_mob_by_key(src.fingerprintslast) + var/mob/living/carbon/monkey/bananas = new(get_turf(src)) + bananas.log_message("Spawned via [src] at [COORD(src)], Last attached mob: [key_name(spammer)].", INDIVIDUAL_ATTACK_LOG) qdel(src) /obj/item/reagent_containers/food/snacks/enchiladas From 3310d73b7fa063a94cd383d11f7b6a95b3672c17 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Wed, 4 Oct 2017 02:04:02 +0300 Subject: [PATCH 40/56] Greatly speeds up bees (#31250) * Bee perf * requested changes --- .../mob/living/simple_animal/hostile/bees.dm | 25 ++++++++++--------- .../living/simple_animal/hostile/hostile.dm | 6 ++++- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index f2d29d3660..9f7a7d1bbf 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -105,22 +105,22 @@ /mob/living/simple_animal/hostile/poison/bees/CanAttack(atom/the_target) . = ..() if(!.) - return 0 + return FALSE if(isliving(the_target)) var/mob/living/H = the_target return !H.bee_friendly() /mob/living/simple_animal/hostile/poison/bees/Found(atom/A) + if(isliving(A)) + var/mob/living/H = A + return !H.bee_friendly() if(istype(A, /obj/machinery/hydroponics)) var/obj/machinery/hydroponics/Hydro = A if(Hydro.myseed && !Hydro.dead && !Hydro.recent_bee_visit) wanted_objects |= typecacheof(/obj/machinery/hydroponics) //so we only hunt them while they're alive/seeded/not visisted - return 1 - if(isliving(A)) - var/mob/living/H = A - return !H.bee_friendly() - return 0 + return TRUE + return FALSE /mob/living/simple_animal/hostile/poison/bees/AttackingTarget() @@ -187,7 +187,7 @@ if(loc == beehome) idle = min(100, ++idle) if(idle >= BEE_IDLE_ROAMING && prob(BEE_PROB_GOROAM)) - forceMove(get_turf(beehome)) + forceMove(beehome.drop_location()) else idle = max(0, --idle) if(idle <= BEE_IDLE_GOHOME && prob(BEE_PROB_GOHOME)) @@ -200,6 +200,7 @@ continue BB.bees |= src beehome = BB + break // End loop after the first compatible find. /mob/living/simple_animal/hostile/poison/bees/toxin/Initialize() . = ..() @@ -215,7 +216,7 @@ //the Queen doesn't leave the box on her own, and she CERTAINLY doesn't pollinate by herself /mob/living/simple_animal/hostile/poison/bees/queen/Found(atom/A) - return 0 + return FALSE //leave pollination for the peasent bees @@ -234,10 +235,10 @@ /mob/living/simple_animal/hostile/poison/bees/proc/reagent_incompatible(mob/living/simple_animal/hostile/poison/bees/B) if(!B) - return 0 + return FALSE if(B.beegent && beegent && B.beegent.id != beegent.id || B.beegent && !beegent || !B.beegent && beegent) - return 1 - return 0 + return TRUE + return FALSE /obj/item/queen_bee @@ -255,7 +256,7 @@ if(S.reagents.has_reagent("royal_bee_jelly")) //checked twice, because I really don't want royal bee jelly to be duped if(S.reagents.has_reagent("royal_bee_jelly",5)) S.reagents.remove_reagent("royal_bee_jelly", 5) - var/obj/item/queen_bee/qb = new(get_turf(user)) + var/obj/item/queen_bee/qb = new(user.drop_location()) qb.queen = new(qb) if(queen && queen.beegent) qb.queen.assign_reagent(queen.beegent) //Bees use the global singleton instances of reagents, so we don't need to worry about one bee being deleted and her copies losing their reagents. diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 2b29283c28..d4c9632a03 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -115,7 +115,11 @@ if(can_see(targets_from, HM, vision_range)) . += HM else - . = oview(vision_range, targets_from) + . = list() // The following code is only very slightly slower than just returning oview(vision_range, targets_from), but it saves us much more work down the line, particularly when bees are involved + for (var/obj/A in oview(vision_range, targets_from)) + . += A + for (var/mob/A in oview(vision_range, targets_from)) + . += A /mob/living/simple_animal/hostile/proc/FindTarget(var/list/possible_targets, var/HasTargetsList = 0)//Step 2, filter down possible targets to things we actually care about . = list() From baa53ba1d3da4be78a1171db914ba3a4b739a1b7 Mon Sep 17 00:00:00 2001 From: oranges Date: Wed, 4 Oct 2017 12:12:49 +1300 Subject: [PATCH 42/56] Merge pull request #31208 from ShizCalev/AINT-NOTHIN-BUT-A-FIRE-STARTA Makes mobs on fire light up --- code/__DEFINES/lighting.dm | 2 ++ .../effects/temporary_visuals/miscellaneous.dm | 2 +- .../atmospherics/environmental/LINDA_fire.dm | 14 +++++++++++++- code/modules/mob/living/living.dm | 5 +++-- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 6d7c9568a9..819abd032f 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -70,6 +70,8 @@ #define LIGHT_COLOR_TUNGSTEN "#FAE1AF" //Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175) #define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) +#define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow. + #define LIGHTING_PLANE_ALPHA_VISIBLE 255 #define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192 #define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell. diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 8b2d95f373..dfc5fb94d5 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -213,7 +213,7 @@ /obj/effect/temp_visual/fire icon = 'icons/effects/fire.dmi' icon_state = "3" - light_range = 3 + light_range = LIGHT_RANGE_FIRE light_color = LIGHT_COLOR_FIRE duration = 10 diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index a39a9059f3..93862f16b4 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -49,7 +49,7 @@ icon = 'icons/effects/fire.dmi' icon_state = "1" layer = ABOVE_OPEN_TURF_LAYER - light_range = 3 + light_range = LIGHT_RANGE_FIRE light_color = LIGHT_COLOR_FIRE var/volume = 125 @@ -175,3 +175,15 @@ ..() if(isliving(L)) L.fire_act(temperature, volume) + +/obj/effect/dummy/fire + name = "fire" + desc = "OWWWWWW. IT BURNS. Tell a coder if you're seeing this." + icon_state = "nothing" + light_color = LIGHT_COLOR_FIRE + light_range = LIGHT_RANGE_FIRE + +/obj/effect/dummy/fire/Initialize() + . = ..() + if(!isliving(loc)) + qdel(src) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index e1d854c0c8..f4e85e40fb 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -884,7 +884,7 @@ on_fire = 1 src.visible_message("[src] catches fire!", \ "You're set on fire!") - src.set_light(3) + new/obj/effect/dummy/fire(src) throw_alert("fire", /obj/screen/alert/fire) update_fire() return TRUE @@ -894,7 +894,8 @@ if(on_fire) on_fire = 0 fire_stacks = 0 - src.set_light(0) + for(var/obj/effect/dummy/fire/F in src) + qdel(F) clear_alert("fire") update_fire() From 5c49bab3c5aeb75a13bf29efe2ede78d491e6698 Mon Sep 17 00:00:00 2001 From: oranges Date: Wed, 4 Oct 2017 12:14:32 +1300 Subject: [PATCH 44/56] Merge pull request #31135 from KorPhaeron/unconvertable Adds a var to minds that makes them immune to conversion --- code/datums/mind.dm | 1 + code/game/gamemodes/clock_cult/clock_cult.dm | 2 ++ code/game/gamemodes/cult/cult.dm | 2 ++ code/game/gamemodes/revolution/revolution.dm | 10 ++++++---- code/game/objects/items/implants/implant_loyality.dm | 8 ++++---- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index a3bfa7d497..093e828452 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -63,6 +63,7 @@ var/mob/living/enslaved_to //If this mind's master is another mob (i.e. adamantine golems) var/datum/language_holder/language_holder + var/unconvertable = FALSE /datum/mind/New(var/key) src.key = key diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 0e72fe93aa..7d6f9bcdd1 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -53,6 +53,8 @@ Credit where due: return FALSE if(M.mind.enslaved_to && !is_servant_of_ratvar(M.mind.enslaved_to)) return FALSE + if(M.mind.unconvertable) + return FALSE else return FALSE if(iscultist(M) || isconstruct(M) || M.isloyal() || ispAI(M)) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 868e02589b..01773f1ea6 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -21,6 +21,8 @@ return FALSE if(M.mind.enslaved_to && !iscultist(M.mind.enslaved_to)) return FALSE + if(M.mind.unconvertable) + return FALSE else return FALSE if(M.isloyal() || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M)) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index add016dd8f..c1b6d13456 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -253,12 +253,14 @@ /datum/game_mode/proc/add_revolutionary(datum/mind/rev_mind) if(rev_mind.assigned_role in GLOB.command_positions) - return 0 + return FALSE var/mob/living/carbon/human/H = rev_mind.current//Check to see if the potential rev is implanted if(H.isloyal()) - return 0 + return FALSE if((rev_mind in revolutionaries) || (rev_mind in head_revolutionaries)) - return 0 + return FALSE + if(rev_mind.unconvertable) + return FALSE revolutionaries += rev_mind if(iscarbon(rev_mind.current)) var/mob/living/carbon/carbon_mob = rev_mind.current @@ -271,7 +273,7 @@ update_rev_icons_added(rev_mind) if(jobban_isbanned(rev_mind.current, ROLE_REV)) INVOKE_ASYNC(src, .proc/replace_jobbaned_player, rev_mind.current, ROLE_REV, ROLE_REV) - return 1 + return TRUE ////////////////////////////////////////////////////////////////////////////// //Deals with players being converted from the revolution (Not a rev anymore)// // Modified to handle borged MMIs. Accepts another var if the target is being borged at the time -- Polymorph. ////////////////////////////////////////////////////////////////////////////// diff --git a/code/game/objects/items/implants/implant_loyality.dm b/code/game/objects/items/implants/implant_loyality.dm index a1e9a0e4d5..ffaebf5a63 100644 --- a/code/game/objects/items/implants/implant_loyality.dm +++ b/code/game/objects/items/implants/implant_loyality.dm @@ -19,12 +19,12 @@ /obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = 0) if(..()) - if((target.mind in (SSticker.mode.head_revolutionaries))) + if((target.mind in (SSticker.mode.head_revolutionaries)) || target.mind.unconvertable) if(!silent) target.visible_message("[target] seems to resist the implant!", "You feel something interfering with your mental conditioning, but you resist it!") removed(target, 1) qdel(src) - return 0 + return FALSE if(target.mind in SSticker.mode.revolutionaries) SSticker.mode.remove_revolutionary(target.mind, FALSE, user) if(!silent) @@ -32,8 +32,8 @@ to_chat(target, "You feel something interfering with your mental conditioning, but you resist it!") else to_chat(target, "You feel a sense of peace and security. You are now protected from brainwashing.") - return 1 - return 0 + return TRUE + return FALSE /obj/item/implant/mindshield/removed(mob/target, silent = 0, special = 0) if(..()) From 67f0c2f41c37503b4eb9297c1b506da7d1b84ac9 Mon Sep 17 00:00:00 2001 From: AnturK Date: Wed, 4 Oct 2017 01:18:58 +0200 Subject: [PATCH 46/56] Fixes mech fab runtime (#31232) * Dunno what the initial was about, it's a list. * Proper fixup * Typo --- code/datums/components/material_container.dm | 10 ++++++++-- code/game/machinery/autolathe.dm | 11 +++++------ code/game/mecha/mech_fabricator.dm | 8 +------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index c790dcc1aa..d4b75e3892 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -17,6 +17,7 @@ var/show_on_examine var/list/allowed_typecache var/last_inserted_type + var/last_inserted_id var/last_amount_inserted var/last_insert_success var/datum/callback/precondition @@ -116,7 +117,7 @@ if(!amt) return 0 - insert_materials(S,amt) + last_inserted_id = insert_materials(S,amt) last_inserted_type = S.type S.use(amt) last_amount_inserted = amt @@ -133,17 +134,22 @@ if(!material_amount || !has_space(material_amount)) return 0 - insert_materials(I, multiplier) + last_inserted_id = insert_materials(I, multiplier) last_inserted_type = I.type last_amount_inserted = material_amount return material_amount /datum/component/material_container/proc/insert_materials(obj/item/I, multiplier = 1) //for internal usage only var/datum/material/M + var/primary_mat + var/max_mat_value = 0 for(var/MAT in materials) M = materials[MAT] M.amount += I.materials[MAT] * multiplier total_amount += I.materials[MAT] * multiplier + if(I.materials[MAT] > max_mat_value) + primary_mat = MAT + return primary_mat //For consuming material //mats is a list of types of material to use and the corresponding amounts, example: list(MAT_METAL=100, MAT_GLASS=200) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 9fa53765ed..4894952a69 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -134,12 +134,11 @@ if(ispath(lit, /obj/item/ore/bluespace_crystal)) use_power(max(500,M.last_amount_inserted/10)) else - var/obj/item/stack/S = lit - var/list/initmats = initial(S.materials) - if (initmats[MAT_METAL]) - flick("autolathe_o",src)//plays metal insertion animation - if (initmats[MAT_GLASS]) - flick("autolathe_r",src)//plays glass insertion animation + switch(M.last_inserted_id) + if (MAT_METAL) + flick("autolathe_o",src)//plays metal insertion animation + if (MAT_GLASS) + flick("autolathe_r",src)//plays glass insertion animation use_power(M.last_amount_inserted*100) updateUsrDialog() diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 8efc14d966..747647b1a5 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -420,13 +420,7 @@ var/datum/component/material_container/M = C if(!M.last_insert_success) return - var/lit = M.last_inserted_type - var/stack_name - if(ispath(lit, /obj/item/ore/bluespace_crystal)) - stack_name = "bluespace" - else - var/obj/item/stack/S = lit - stack_name = material2name(initial(S.materials)[1]) + var/stack_name = material2name(M.last_inserted_id) add_overlay("fab-load-[stack_name]") addtimer(CALLBACK(src, /atom/proc/cut_overlay, "fab-load-[stack_name]"), 10) updateUsrDialog() From dc41460926b9cbd04351113a1e12958715bf3916 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Tue, 3 Oct 2017 19:27:57 -0400 Subject: [PATCH 48/56] Issues created with the report issue button will contain the round ID (#30998) * Issues created with the report issue button will contain the round ID * Update interface.dm * More url encoding * URL ENCODE THE PLANET! * Server name * Fix trevis * Too many god damn fucking brackets here --- interface/interface.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/interface/interface.dm b/interface/interface.dm index 9d420e9821..a67cc5d290 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -65,7 +65,9 @@ message += GLOB.revdata.GetTestMergeInfo(FALSE) if(tgalert(src, message, "Report Issue","Yes","No")=="No") return - src << link("[githuburl]/issues/new") + var/static/issue_template = file2text(".github/ISSUE_TEMPLATE.md") + var/servername = CONFIG_GET(string/servername) + src << link("[githuburl]/issues/new[GLOB.round_id ? "?body=[url_encode("Issue reported from Round ID: [GLOB.round_id][servername ? " ([servername])" : ""]\n\n[issue_template]")]" : ""]") else to_chat(src, "The Github URL is not set in the server configuration.") return From 65a73bcefa6374507418e497246df555cf5c3c49 Mon Sep 17 00:00:00 2001 From: Armhulen Date: Tue, 3 Oct 2017 16:40:53 -0700 Subject: [PATCH 50/56] Gives nightmares a random shadowling name (#31188) * fuck you ruined my !ONE COMMIT PR! * !ONE COMMIT PR! --- code/_globalvars/lists/names.dm | 1 + .../living/carbon/human/species_types/shadowpeople.dm | 8 ++++---- strings/names/nightmare.txt | 10 ++++++++++ 3 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 strings/names/nightmare.txt diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index 522ff84ff0..d855c7f141 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -15,6 +15,7 @@ GLOBAL_LIST_INIT(carp_names, world.file2list("strings/names/carp.txt")) GLOBAL_LIST_INIT(golem_names, world.file2list("strings/names/golem.txt")) GLOBAL_LIST_INIT(plasmaman_names, world.file2list("strings/names/plasmaman.txt")) GLOBAL_LIST_INIT(posibrain_names, world.file2list("strings/names/posibrain.txt")) +GLOBAL_LIST_INIT(nightmare_names, world.file2list("strings/names/nightmare.txt")) GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt")) diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 5c635fb870..de61ef7220 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -47,11 +47,11 @@ to_chat(C, "[info_text]") - C.real_name = "Nightmare" - C.name = "Nightmare" + C.real_name = "[pick(GLOB.nightmare_names)]" + C.name = C.real_name if(C.mind) - C.mind.name = "Nightmare" - C.dna.real_name = "Nightmare" + C.mind.name = C.real_name + C.dna.real_name = C.real_name /datum/species/shadow/nightmare/on_species_loss(mob/living/carbon/C) . = ..() diff --git a/strings/names/nightmare.txt b/strings/names/nightmare.txt new file mode 100644 index 0000000000..b8798b734d --- /dev/null +++ b/strings/names/nightmare.txt @@ -0,0 +1,10 @@ +U'ruan +Y`shej +Nex +Hel-uae +Noaey'gief +Mii`mahza +Amerziox +Gyrg-mylin +Kanet'pruunance +Vigistaezian \ No newline at end of file From e4d6219f1d43fdb4d8673c8f601ae163460b650b Mon Sep 17 00:00:00 2001 From: LetterJay Date: Tue, 3 Oct 2017 18:46:41 -0500 Subject: [PATCH 52/56] Update brain_item.dm --- code/modules/mob/living/brain/brain_item.dm | 8 -------- 1 file changed, 8 deletions(-) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index fbff6a5285..fd7b8a8db3 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -46,15 +46,7 @@ /obj/item/organ/brain/Remove(mob/living/carbon/C, special = 0,no_id_transfer = FALSE) ..() -<<<<<<< HEAD - if(!special) - if(C.has_brain_worms()) - var/mob/living/simple_animal/borer/B = C.has_brain_worms() - B.leave_victim() //Should remove borer if the brain is removed - RR - if(!gc_destroyed || (owner && !owner.gc_destroyed)) -======= if((!gc_destroyed || (owner && !owner.gc_destroyed)) && !no_id_transfer) ->>>>>>> 85cd9e6... Organ initialization cleanup transfer_identity(C) C.update_hair() From dc9b438bd8527649f5c465edd918adb512b05776 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Tue, 3 Oct 2017 18:47:01 -0500 Subject: [PATCH 53/56] Update skeletons.dm --- .../carbon/human/species_types/skeletons.dm | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index f9c731a4ce..be03e591aa 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -1,18 +1,3 @@ -<<<<<<< HEAD -/datum/species/skeleton - // 2spooky - name = "Spooky Scary Skeleton" - id = "skeleton" - say_mod = "rattles" - blacklisted = 1 - sexes = 0 - meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton - species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER,EASYDISMEMBER,EASYLIMBATTACHMENT) - mutant_organs = list(/obj/item/organ/tongue/bone) - damage_overlay_type = ""//let's not show bloody wounds or burns over bones. - disliked_food = NONE - liked_food = NONE -======= /datum/species/skeleton // 2spooky name = "Spooky Scary Skeleton" @@ -25,5 +10,4 @@ mutanttongue = /obj/item/organ/tongue/bone damage_overlay_type = ""//let's not show bloody wounds or burns over bones. disliked_food = NONE - liked_food = GROSS | MEAT | RAW ->>>>>>> 85cd9e6... Organ initialization cleanup + liked_food = NONE From e66e99776f5764e2a36e9462c8b9dc7d31940607 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 3 Oct 2017 18:49:24 -0500 Subject: [PATCH 54/56] Automatic changelog generation for PR #3096 [ci skip] --- html/changelogs/AutoChangeLog-pr-3096.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3096.yml diff --git a/html/changelogs/AutoChangeLog-pr-3096.yml b/html/changelogs/AutoChangeLog-pr-3096.yml new file mode 100644 index 0000000000..4031580453 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3096.yml @@ -0,0 +1,4 @@ +author: "Kor" +delete-after: True +changes: + - bugfix: "You can now tell when someone is in soft crit by examining them." From b7473ec008ed7c49f6c74e29da307a01674d376e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 3 Oct 2017 19:11:26 -0500 Subject: [PATCH 55/56] Automatic changelog generation for PR #3102 [ci skip] --- html/changelogs/AutoChangeLog-pr-3102.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3102.yml diff --git a/html/changelogs/AutoChangeLog-pr-3102.yml b/html/changelogs/AutoChangeLog-pr-3102.yml new file mode 100644 index 0000000000..bc737b6a13 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3102.yml @@ -0,0 +1,4 @@ +author: "Naksu" +delete-after: True +changes: + - bugfix: "Bees now come with reduced amounts of free lag" From f8f278dfd58e6dfef752d3593ae474389fc429dd Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 3 Oct 2017 19:16:12 -0500 Subject: [PATCH 56/56] Automatic changelog generation for PR #3093 [ci skip] --- html/changelogs/AutoChangeLog-pr-3093.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3093.yml diff --git a/html/changelogs/AutoChangeLog-pr-3093.yml b/html/changelogs/AutoChangeLog-pr-3093.yml new file mode 100644 index 0000000000..bc2a009a41 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3093.yml @@ -0,0 +1,6 @@ +author: "Shock Collars" +delete-after: True +changes: + - rscadd: "Added Shock Collars to hacked autolathes." + - imageadd: "On character sprites, credit to Toriate" + - imageadd: "Object sprite, credit to Toriate"