From b17a770299ca7fedc22ef4fc74ec7f82981572d1 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 6 Oct 2017 22:34:40 -0400 Subject: [PATCH 01/26] Config option to automatically call the shuttle for high casualties (#31309) --- .../configuration/entries/game_options.dm | 5 ++++ code/controllers/subsystem/shuttle.dm | 28 ++++++++++++++++++- config/game_options.txt | 2 ++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 106804a576..cb4109436c 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -264,3 +264,8 @@ CONFIG_DEF(number/bombcap) GLOB.MAX_EX_LIGHT_RANGE = value GLOB.MAX_EX_FLASH_RANGE = value GLOB.MAX_EX_FLAME_RANGE = value + +CONFIG_DEF(number/emergency_shuttle_autocall_threshold) + min_val = 0 + max_val = 1 + integer = FALSE diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 705f0dbd81..9973a43430 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -136,6 +136,7 @@ SUBSYSTEM_DEF(shuttle) if(changed_transit) color_space() #endif + CheckAutoEvac() while(transit_requesters.len) var/requester = popleft(transit_requesters) @@ -148,7 +149,32 @@ SUBSYSTEM_DEF(shuttle) var/obj/docking_port/mobile/M = requester M.transit_failure() if(MC_TICK_CHECK) - return + break + +/datum/controller/subsystem/shuttle/proc/CheckAutoEvac() + if(emergencyNoEscape || emergencyNoRecall || !emergency) + return + + var/threshold = CONFIG_GET(number/emergency_shuttle_autocall_threshold) + if(!threshold) + return + + var/alive = 0 + for(var/I in GLOB.player_list) + var/mob/M = I + if(M.stat != DEAD) + ++alive + + var/total = GLOB.joined_player_list.len + + if(alive / total <= threshold) + var/msg = "Automatically dispatching shuttle due to crew death." + message_admins(msg) + log_game("[msg] Alive: [alive], Roundstart: [total], Threshold: [threshold]") + emergencyNoRecall = TRUE + priority_announce("Catastrophic casualties detected: crisis shuttle protocols activated - jamming recall signals across all frequencies.") + if(emergency.timeLeft(1) > emergencyCallTime * 0.4) + emergency.request(null, set_coefficient = 0.4) /datum/controller/subsystem/shuttle/proc/getShuttle(id) for(var/obj/docking_port/mobile/M in mobile) diff --git a/config/game_options.txt b/config/game_options.txt index 77e33fa873..b3b6024d20 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -496,3 +496,5 @@ ARRIVALS_SHUTTLE_DOCK_WINDOW 55 MICE_ROUNDSTART 10 +## If the percentage of players alive (doesn't count conversions) drops below this threshold the emergency shuttle will be forcefully called (provided it can be) +#EMERGENCY_SHUTTLE_AUTOCALL_THRESHOLD 0.2 From 466a6806e1f3c96161b9da143bb4baf0a74f8c56 Mon Sep 17 00:00:00 2001 From: jughu Date: Sat, 7 Oct 2017 07:17:14 +0200 Subject: [PATCH 03/26] Allows shotgun darts to cause reagent reactions (#31337) --- code/modules/projectiles/ammunition/ammo_casings.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 848d690853..d9bf309267 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -288,7 +288,7 @@ ..() container_type |= OPENCONTAINER_1 create_reagents(30) - reagents.set_reacting(FALSE) + reagents.set_reacting(TRUE) /obj/item/ammo_casing/shotgun/dart/attackby() return From 84490f919e694043cbe1a1cd925f8d52bce01a20 Mon Sep 17 00:00:00 2001 From: AnturK Date: Fri, 6 Oct 2017 09:54:55 +0200 Subject: [PATCH 05/26] Fixes clockcult runtime --- code/__DEFINES/clockcult.dm | 2 -- .../gamemodes/clock_cult/clock_items/replica_fabricator.dm | 6 +++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/code/__DEFINES/clockcult.dm b/code/__DEFINES/clockcult.dm index fc93ccbf1c..5f167bf96c 100644 --- a/code/__DEFINES/clockcult.dm +++ b/code/__DEFINES/clockcult.dm @@ -55,8 +55,6 @@ GLOBAL_LIST_EMPTY(all_scripture) //a list containing scripture instances; not us #define POWER_PLASTEEL (CLOCKCULT_POWER_UNIT*0.05) //how much power is in one sheet of plasteel -#define RATVAR_POWER_CHECK "ratvar?" //when passed into can_use_power(), converts it into a check for if ratvar has woken/the fabricator is debug - //Ark defines #define GATEWAY_SUMMON_RATE 1 //the time amount the Gateway to the Celestial Derelict gets each process tick; defaults to 1 per tick diff --git a/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm b/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm index ae001c03e5..44fa24c134 100644 --- a/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm +++ b/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm @@ -90,7 +90,7 @@ if(!no_table_check) return TRUE return FALSE - if(get_clockwork_power(RATVAR_POWER_CHECK)) + if(GLOB.ratvar_awakens) fabrication_values["power_cost"] = 0 var/turf/Y = get_turf(user) @@ -167,7 +167,7 @@ return FALSE if(target.type != expected_type) return FALSE - if(get_clockwork_power(RATVAR_POWER_CHECK)) + if(GLOB.ratvar_awakens) fabrication_values["power_cost"] = 0 if(!get_clockwork_power(fabrication_values["power_cost"])) if(get_clockwork_power() - fabrication_values["power_cost"] < 0) @@ -212,7 +212,7 @@ return FALSE repair_values["healing_for_cycle"] = min(repair_values["amount_to_heal"], FABRICATOR_REPAIR_PER_TICK) //modify the healing for this cycle repair_values["power_required"] = round(repair_values["healing_for_cycle"]*MIN_CLOCKCULT_POWER, MIN_CLOCKCULT_POWER) //and get the power cost from that - if(!get_clockwork_power(RATVAR_POWER_CHECK) && !get_clockwork_power(repair_values["power_required"])) + if(!GLOB.ratvar_awakens && !get_clockwork_power(repair_values["power_required"])) if(!silent) to_chat(user, "You need at least [DisplayPower(repair_values["power_required"])] power to start repairin[target == user ? "g yourself" : "g [target]"], and at least \ [DisplayPower(repair_values["amount_to_heal"]*MIN_CLOCKCULT_POWER, MIN_CLOCKCULT_POWER)] to fully repair [target == user ? "yourself" : "[target.p_them()]"]!") From 614caa782a8e928ef0c7c04bef58e6871ee5d0ca Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Sat, 7 Oct 2017 06:36:19 -0700 Subject: [PATCH 07/26] Adds a rdconsole to omegastation robotics (#31380) --- _maps/map_files/OmegaStation/OmegaStation.dmm | 1 + 1 file changed, 1 insertion(+) diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index 2badff3bb5..bf75b2ac43 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -30349,6 +30349,7 @@ dir = 8 }, /obj/effect/turf_decal/bot, +/obj/machinery/computer/rdconsole, /turf/open/floor/plasteel, /area/science/robotics/lab) "bbP" = ( From a8c4a155a57468ee7ebe1921da1a4b29354b422b Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sat, 7 Oct 2017 09:37:58 -0400 Subject: [PATCH 09/26] Merge pull request #31383 from BeeSting12/youlights Fixes grammar on zippos --- code/game/objects/items/cigs_lighters.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index f04f8d4441..13fe778a38 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -513,7 +513,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(!lit) set_lit(TRUE) if(fancy) - user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.", "Without even breaking stride, you flip open and lights [src] in one smooth movement.") + user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.", "Without even breaking stride, you flip open and light [src] in one smooth movement.") else var/prot = FALSE var/mob/living/carbon/human/H = user From 13aa6f8650d6dd48baa53b62e7bf8fe657bcd514 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Sat, 7 Oct 2017 06:39:39 -0700 Subject: [PATCH 11/26] Lets cyborgs use ladders (#31378) --- code/game/objects/structures/ladders.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index d0ad32113d..6093d73bc5 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -100,6 +100,10 @@ /obj/structure/ladder/attackby(obj/item/W, mob/user, params) return attack_hand(user) +/obj/structure/ladder/attack_robot(mob/living/silicon/robot/R) + if(R.Adjacent(src)) + return attack_hand(R) + /obj/structure/ladder/attack_ghost(mob/dead/observer/user) use(user,1) From 39728cc9b3255e9c79b319e2a249222dfc88ee97 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sat, 7 Oct 2017 08:41:04 -0500 Subject: [PATCH 13/26] Nightmare spawn event (#31376) * Nightmare Event * Update nightmare.dm * Standards --- code/modules/events/nightmare.dm | 43 ++++++++++++++++++++++++++++++++ tgstation.dme | 1 + 2 files changed, 44 insertions(+) create mode 100644 code/modules/events/nightmare.dm diff --git a/code/modules/events/nightmare.dm b/code/modules/events/nightmare.dm new file mode 100644 index 0000000000..7be5db8e84 --- /dev/null +++ b/code/modules/events/nightmare.dm @@ -0,0 +1,43 @@ +/datum/round_event_control/nightmare + name = "Spawn Nightmare" + typepath = /datum/round_event/ghost_role/nightmare + max_occurrences = 1 + min_players = 20 + +/datum/round_event/ghost_role/nightmare + minimum_required = 1 + role_name = "nightmare" + +/datum/round_event/ghost_role/nightmare/spawn_role() + var/list/candidates = get_candidates("alien", null, ROLE_ALIEN) + if(!candidates.len) + return NOT_ENOUGH_PLAYERS + + var/mob/dead/selected = pick(candidates) + + var/datum/mind/player_mind = new /datum/mind(selected.key) + player_mind.active = TRUE + + var/list/spawn_locs = list() + for(var/obj/effect/landmark/xeno_spawn/L in GLOB.landmarks_list) + if(isturf(L.loc)) + var/turf/T = L.loc + var/light_amount = T.get_lumcount() + if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) + spawn_locs += T + + if(!spawn_locs.len) + message_admins("No valid spawn locations found, aborting...") + return MAP_ERROR + + var/mob/living/carbon/human/S = new ((pick(spawn_locs))) + player_mind.transfer_to(S) + player_mind.assigned_role = "Nightmare" + player_mind.special_role = "Nightmare" + SSticker.mode.traitors += player_mind + S.set_species(/datum/species/shadow/nightmare) + playsound(S, 'sound/magic/ethereal_exit.ogg', 50, 1, -1) + message_admins("[key_name_admin(S)] has been made into a Nightmare by an event.") + log_game("[key_name(S)] was spawned as a Nightmare by an event.") + spawned_mobs += S + return SUCCESSFUL_SPAWN diff --git a/tgstation.dme b/tgstation.dme index 32de5b6c33..ab5b26b120 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1346,6 +1346,7 @@ #include "code\modules\events\meateor_wave.dm" #include "code\modules\events\meteor_wave.dm" #include "code\modules\events\mice_migration.dm" +#include "code\modules\events\nightmare.dm" #include "code\modules\events\operative.dm" #include "code\modules\events\portal_storm.dm" #include "code\modules\events\prison_break.dm" From 20172ca2bdee5cec42297ab8f295c01be166a4fe Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sat, 7 Oct 2017 09:42:33 -0400 Subject: [PATCH 15/26] Merge pull request #31372 from ShizCalev/cool-runnings Fixes cool threads grammar issue --- code/modules/clothing/clothing.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 237714eb8e..985db1947e 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -144,15 +144,15 @@ if(pockets) var/list/how_cool_are_your_threads = list("") if(pockets.priority) - how_cool_are_your_threads += "Your [src]'s storage opens when clicked.\n" + how_cool_are_your_threads += "[src]'s storage opens when clicked.\n" else - how_cool_are_your_threads += "Your [src]'s storage opens when dragged to yourself.\n" - how_cool_are_your_threads += "Your [src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n" - how_cool_are_your_threads += "Your [src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n" + how_cool_are_your_threads += "[src]'s storage opens when dragged to yourself.\n" + how_cool_are_your_threads += "[src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n" + how_cool_are_your_threads += "[src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n" if(pockets.quickdraw) - how_cool_are_your_threads += "You can quickly remove an item from your [src] using Alt-Click.\n" + how_cool_are_your_threads += "You can quickly remove an item from [src] using Alt-Click.\n" if(pockets.silent) - how_cool_are_your_threads += "Adding or Removing items from your [src] makes no noise.\n" + how_cool_are_your_threads += "Adding or removing items from [src] makes no noise.\n" how_cool_are_your_threads += "" to_chat(user, how_cool_are_your_threads.Join()) From 4bc4ab7fc555ed757b8f3914fda441c477a15966 Mon Sep 17 00:00:00 2001 From: Neri Date: Sat, 7 Oct 2017 14:01:43 -0700 Subject: [PATCH 17/26] Oh. That's what was missing. (#3143) Boop. --- code/game/gamemodes/cult/cult_structures.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 8140dffe53..2dcaf23bc6 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -100,9 +100,10 @@ if(cooldowntime > world.time) to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") return - var/choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Bastard Sword") + var/option = "Shielded Robe" + option = input(user, "You study the schematics etched into the forge...", "[src]", option) as null|anything in list("Shielded Robe", "Flagellant's Robe", "Bastard Sword", "Nar-Sien Hardsuit") var/pickedtype - switch(choice) + switch(option) if("Shielded Robe") pickedtype = /obj/item/clothing/suit/hooded/cultrobes/cult_shield if("Flagellant's Robe") @@ -115,6 +116,9 @@ to_chat(user, "The forge fires are not yet hot enough for this weapon, give it another [DisplayTimeText(cooldowntime)].") cooldowntime = 0 return + if("Nar-Sien Hardsuit") + pickedtype = /obj/item/clothing/suit/space/hardsuit/cult + if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) cooldowntime = world.time + 2400 var/obj/item/N = new pickedtype(get_turf(src)) From d600df9ba29fecd9cb4ac97cf0fd6731f61134c5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 7 Oct 2017 16:01:44 -0500 Subject: [PATCH 18/26] Automatic changelog generation for PR #3143 [ci skip] --- html/changelogs/AutoChangeLog-pr-3143.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3143.yml diff --git a/html/changelogs/AutoChangeLog-pr-3143.yml b/html/changelogs/AutoChangeLog-pr-3143.yml new file mode 100644 index 0000000000..4e48f367b6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3143.yml @@ -0,0 +1,7 @@ +author: "Kevak/Neri" +delete-after: True +changes: + - rscadd: "Readds Cult Hardsuits. or more specifically, makes cult forges be able to make hardsuits. They never got removed from the code." + - tweak: "Cultforge uses Option instead of Choice. (Aka ye get a menu instead of three buttons)" + - balance: "Cultforge can make hardsuits again." + - bugfix: "Fixed Cultforge procs, Slightly cleaner code." From 47866c823c5818535431eb87716b95d7aea4ba9d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 7 Oct 2017 22:44:07 -0500 Subject: [PATCH 19/26] Automatic changelog generation for PR #3203 [ci skip] --- html/changelogs/AutoChangeLog-pr-3203.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3203.yml diff --git a/html/changelogs/AutoChangeLog-pr-3203.yml b/html/changelogs/AutoChangeLog-pr-3203.yml new file mode 100644 index 0000000000..e4061e3cd6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3203.yml @@ -0,0 +1,4 @@ +author: "Kor" +delete-after: True +changes: + - rscadd: "Nightmares now have a chance to spawn via event." From 2acc9904259c179dda924e03e144179ab3edf1e7 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 7 Oct 2017 23:27:25 -0500 Subject: [PATCH 20/26] donation items / framework for some --- code/citadel/custom_loadout/custom_items.dm | 11 +++++++++++ icons/obj/custom.dmi | Bin 1278 -> 1460 bytes icons/obj/plushes.dmi | Bin 5362 -> 7914 bytes 3 files changed, 11 insertions(+) diff --git a/code/citadel/custom_loadout/custom_items.dm b/code/citadel/custom_loadout/custom_items.dm index 397f4c6576..5041532a02 100644 --- a/code/citadel/custom_loadout/custom_items.dm +++ b/code/citadel/custom_loadout/custom_items.dm @@ -93,6 +93,17 @@ w_class = WEIGHT_CLASS_SMALL body_parts_covered = CHEST|GROIN|LEGS|ARMS +/obj/item/toy/plush/tree + name = "christmass tree plushie" + desc = "A festive plush that squeeks when you squeeze it!" + icon = 'icons/obj/plushes.dmi' + icon_state = "pine_c" + item_state = "pine_c" + w_class = WEIGHT_CLASS_SMALL + attack_verb = list("slapped") + resistance_flags = FLAMMABLE + squeak_override = list('sound/items/bikehorn.ogg'= 1) + /*Zigfie*/ diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi index c8b96b84695d149ff71df71bf28cf99559584018..1c519473ae7ba975c338e39406f1e75bb7378a74 100644 GIT binary patch delta 804 zcmV+<1Ka%m3A76(iBL{Q4GJ0x0000DNk~Le0001B0001B2m=5B0M$l^3IG5CQjsO8 z37G(9f+ZfA0L-z@K>-6XF)@=50!}9YrKJGBzmZok|Hc5*iUGjDz$CUi82|tP0d!JM zQvg8b*k%9#0FRS_0(E~SsH`BhBso7PC$Weel_n@El@(n5T)@5u08G0}NjMD6fdBvk zbxA})RA_oX5s@s0 zQ~{frK#GVhTeWV}wq5%U9XoaI(zRRn9zA>Y?vtS)8jZ@aSWL#(^aA?!>px)Nput0i z4jVpVx(s?{ZH)~;K>VdJLFTefc7zGLUE-Fxo;!Rx_y7=?!EgD9zJ^f&lpTB(lCVsa)Mcx9X0w=?dpVpV`*Y7{#U)zi3DZtsP zN-^LfB=WH^heY{QsH%_{G=V}9`1{zYf)F2$0(1QYXM;B>6*#sCuRie$DDc<=CE22o z1Z0zmAy|Jt!<3bAEXT3t#c@7sfhW}WAg78j;{gBw@&cqG4G%<{*HZo+=Mf2U%O}tb z*iN7>fCRWtlPleT%Jp(Y4ZvVMeKMKrvIs*rT;e@I@#2w76PPUWNpCd6&@|U3WCcQo zt{dUyGiHyoX|gXv$oT*O00000d4bExIKXWVAlEe0cRbzgXzW8_I&|8suI1unj1XNA i>bV#I0002~XZ`^>>;M1)Ly;w^ zvDZNXlN$m~B*4JHnE+;jB_5do%rP-BTfC=z00001bW%=J06^y0W&i*HfRm5{b$`XB zOj*Iz&jsvK04QcMexm~YRsaA2-AP12R9J;$U>F6Y0!Aig$_!v)VWrRoY?Qcwot>S7 zlZ%CHN3e6l02UK?Faf#}R&H*bCh+j^^6~NUqXKjz@E8Epj>QE)BZxGBhZks@fS{1D zh^UyjgrtX9}g}ASbtCr;N#~}R#8<`*U;3`*3s3|H!w6ZHZe6L)&P(L z%q=XftZi)V>>V7PoLyYq+&w(KynRqjV8>|y&;h=F{sDnO!6Bhx;SrHh(J`@c@d=4Z zsG)${0HC_$l+-lW^o-1`?3~=Z{DQ)w;*!#`@(SV&sI024sjaJTXl!b3X@6~N@96C6 z?&qmXPom08Gk!{CwcV3_^T3lJc%y+%SZh zn~2FwySTZb2#Wzk03;V+%YV;A7=R}X=wkrG?%k{`tgI{`iY)!3U=)mkQ9wVickkYP z`}gnP2c!qc00y`LWa5l_6+zbE!002ovPDHLk FV1jO`5U~IN diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi index f0eb8175497e73f02a005bfd6b4ac1994a187c73..7eec51e46e6e1c5bb5179c42d7ba12876d289f32 100644 GIT binary patch literal 7914 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 EKfCB~!vFvP From 280b5f5e6f358fec49e69091d071d1c63bacb32d Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 8 Oct 2017 05:52:43 +0000 Subject: [PATCH 21/26] Adds kinkmates to Metastation and Deltastation (+Box tweaks) (#3214) * adds kinkmates to deltastation * added kinkmates to metastation * hides atmos pipes in maint dorms --- _maps/map_files/BoxStation/BoxStation.dmm | 22 +++++++++---------- .../map_files/Deltastation/DeltaStation2.dmm | 17 +++++++++----- _maps/map_files/MetaStation/MetaStation.dmm | 6 ++--- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 67f6208e52..15b9f0ff9e 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -2281,7 +2281,7 @@ name = "Emergency Shuttle Airlock" }, /obj/docking_port/mobile/emergency{ - name = "Box emergency shuttle"; + name = "Box emergency shuttle" }, /obj/docking_port/stationary{ dir = 4; @@ -42528,14 +42528,14 @@ }, /area/maintenance/port/aft) "bTt" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ +/obj/structure/closet/secure_closet/personal, +/obj/machinery/atmospherics/pipe/simple/general/hidden{ dir = 4 }, -/obj/structure/closet/secure_closet/personal, /turf/open/floor/wood, /area/maintenance/port/aft) "bTu" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ +/obj/machinery/atmospherics/pipe/simple/general/hidden{ dir = 4 }, /turf/closed/wall, @@ -42549,9 +42549,9 @@ /turf/open/floor/wood, /area/maintenance/port/aft) "bTw" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, /obj/machinery/light/small, /obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/manifold/general/hidden, /turf/open/floor/wood, /area/maintenance/port/aft) "bTx" = ( @@ -64125,19 +64125,19 @@ /turf/open/floor/wood, /area/maintenance/port/aft) "cUq" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 5 - }, /obj/machinery/light/small, /obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 5 + }, /turf/open/floor/wood, /area/maintenance/port/aft) "cUr" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, /obj/structure/bed, /obj/item/bedsheet, +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 4 + }, /turf/open/floor/wood, /area/maintenance/port/aft) "cUs" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index b2c40d5672..9ee5a65764 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -97094,8 +97094,7 @@ /turf/open/floor/plating, /area/crew_quarters/theatre/abandoned) "dHa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/twohanded/required/kirbyplants/random, +/obj/machinery/vending/kink, /turf/open/floor/wood, /area/crew_quarters/theatre/abandoned) "dHb" = ( @@ -113139,6 +113138,14 @@ "esH" = ( /turf/closed/wall, /area/maintenance/department/medical/morgue) +"esI" = ( +/obj/machinery/vending/kink, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"esJ" = ( +/obj/machinery/vending/kink, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) (1,1,1) = {" aaa @@ -137474,7 +137481,7 @@ dmb dnA doK dqw -diJ +esJ aJm aHW aaf @@ -143545,7 +143552,7 @@ aib asx atw auQ -aic +esI awX aye azn @@ -178674,4 +178681,4 @@ aaa aaa aaa aaa -"} \ No newline at end of file +"} diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 5a1762e989..665b0a39ae 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -28522,7 +28522,7 @@ }, /area/security/checkpoint/engineering) "bcO" = ( -/obj/structure/easel, +/obj/machinery/vending/kink, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -64306,10 +64306,10 @@ /turf/open/space, /area/space) "ctn" = ( -/obj/machinery/vending/cigarette, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/vending/kink, /turf/open/floor/plating, /area/maintenance/port/aft) "cto" = ( @@ -155921,4 +155921,4 @@ aaa aaa aaa aaa -"} \ No newline at end of file +"} From dee8efc7e8fc1465f1a2920e914194e793ea6626 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 8 Oct 2017 00:52:45 -0500 Subject: [PATCH 22/26] Automatic changelog generation for PR #3214 [ci skip] --- html/changelogs/AutoChangeLog-pr-3214.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3214.yml diff --git a/html/changelogs/AutoChangeLog-pr-3214.yml b/html/changelogs/AutoChangeLog-pr-3214.yml new file mode 100644 index 0000000000..3a2840f45c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3214.yml @@ -0,0 +1,6 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "Added kinkmates to Delta in the gambling den (replacing the cigarette vendor), abandoned theatre (replacing a plant), and the abandoned theatre backstage in port bow maintenance." + - rscadd: "Added kinkmates to Meta in the abandoned bar, maintenance storage room (replacing an easel), and in maintenance right below science (also replacing an easel)." + - tweak: "Made the atmos pipes in maint dorms hidden." From f579a3bf74c69d4a350e887e60fa40729fd3008f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 8 Oct 2017 01:04:14 -0500 Subject: [PATCH 23/26] [MIRROR] Fix adding bad config entries (#3219) * Fixes adding bad config entries (#31390) * Fix adding bad config entries --- code/controllers/configuration/configuration.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index a9807a599c..bf4f562f36 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -49,7 +49,6 @@ GLOBAL_PROTECT(config_dir) if(initial(E.abstract_type) == I) continue E = new I - _entries_by_type[I] = E var/esname = E.name var/datum/config_entry/test = _entries[esname] if(test) @@ -57,6 +56,7 @@ GLOBAL_PROTECT(config_dir) qdel(E) continue _entries[esname] = E + _entries_by_type[I] = E .[E.resident_file] = TRUE /datum/controller/configuration/proc/RemoveEntry(datum/config_entry/CE) From d1dcfb63f8912196249636abf0998a0fd1994db0 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 8 Oct 2017 01:04:26 -0500 Subject: [PATCH 24/26] [MIRROR] Miscellaneous virus fixes (#3216) * Miscellaneous virus fixes (#31391) * Probably fixes neutering bugs * Proper targeting for healing * Fixes itching affecting roboparts * Miscellaneous virus fixes --- code/datums/diseases/advance/advance.dm | 2 +- code/datums/diseases/advance/symptoms/heal.dm | 8 ++++---- code/datums/diseases/advance/symptoms/itching.dm | 13 ++++++++----- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 26f42fa059..1b3633207c 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -123,7 +123,7 @@ /datum/disease/advance/proc/HasSymptom(datum/symptom/S) for(var/datum/symptom/symp in symptoms) - if(symp.id == S.id) + if(symp.type == S.type) return 1 return 0 diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 5167b17e0d..869cea19da 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -131,7 +131,7 @@ Bonus /datum/symptom/heal/brute/Heal(mob/living/carbon/M, datum/disease/advance/A) var/heal_amt = 2 * power - var/list/parts = M.get_damaged_bodyparts(1,1) //1,1 because it needs inputs. + var/list/parts = M.get_damaged_bodyparts(1,0) //brute only if(!parts.len) return @@ -175,7 +175,7 @@ Bonus /datum/symptom/heal/brute/plus/Heal(mob/living/carbon/M, datum/disease/advance/A) var/heal_amt = 4 * power - var/list/parts = M.get_damaged_bodyparts(1,1) //1,1 because it needs inputs. + var/list/parts = M.get_damaged_bodyparts(1,0) //brute only if(M.getCloneLoss() > 0) M.adjustCloneLoss(-1) @@ -225,7 +225,7 @@ Bonus /datum/symptom/heal/burn/Heal(mob/living/carbon/M, datum/disease/advance/A) var/heal_amt = 2 * power - var/list/parts = M.get_damaged_bodyparts(1,1) //1,1 because it needs inputs. + var/list/parts = M.get_damaged_bodyparts(0,1) //burn only if(!parts.len) return @@ -268,7 +268,7 @@ Bonus /datum/symptom/heal/burn/plus/Heal(mob/living/carbon/M, datum/disease/advance/A) var/heal_amt = 4 * power - var/list/parts = M.get_damaged_bodyparts(1,1) //1,1 because it needs inputs. + var/list/parts = M.get_damaged_bodyparts(0,1) //burn only if(M.bodytemperature > 310) M.bodytemperature = max(310, M.bodytemperature - (10 * heal_amt * TEMPERATURE_DAMAGE_COEFFICIENT)) diff --git a/code/datums/diseases/advance/symptoms/itching.dm b/code/datums/diseases/advance/symptoms/itching.dm index 119b04b48a..ea9156bfbd 100644 --- a/code/datums/diseases/advance/symptoms/itching.dm +++ b/code/datums/diseases/advance/symptoms/itching.dm @@ -43,8 +43,11 @@ BONUS /datum/symptom/itching/Activate(datum/disease/advance/A) if(!..()) return - var/mob/living/M = A.affected_mob - var/can_scratch = scratch && !M.incapacitated() - to_chat(M, "Your [pick("back", "arm", "leg", "elbow", "head")] itches. [can_scratch ? " You scratch it." : ""]") - if(can_scratch) - M.adjustBruteLoss(0.5) \ No newline at end of file + var/mob/living/carbon/M = A.affected_mob + var/picked_bodypart = pick("head", "chest", "r_arm", "l_arm", "r_leg", "l_leg") + var/obj/item/bodypart/bodypart = M.get_bodypart(picked_bodypart) + if(bodypart && bodypart.status == BODYPART_ORGANIC && !bodypart.is_pseudopart) //robotic limbs will mean less scratching overall + var/can_scratch = scratch && !M.incapacitated() && get_location_accessible(M, picked_bodypart) + M.visible_message("[can_scratch ? "[M] scratches [M.p_their()] [bodypart.name]." : ""]", "Your [bodypart.name] itches. [can_scratch ? " You scratch it." : ""]") + if(can_scratch) + bodypart.receive_damage(0.5) \ No newline at end of file From 57d58163d20eaa4e1841eb4ebd03c202d5929aa1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 8 Oct 2017 01:04:36 -0500 Subject: [PATCH 25/26] [MIRROR] Overloaded leg actuators now consume at least 100 power per step (#3211) * Merge pull request #31389 from Y0SH1M4S73R/patch-1 Overloaded leg actuators now consume at least 100 power per step * Overloaded leg actuators now consume at least 100 power per step --- code/game/mecha/mecha.dm | 1 + code/game/mecha/mecha_actions.dm | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 9b27e1e7c6..f06d355078 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -30,6 +30,7 @@ var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South. var/step_energy_drain = 10 var/melee_energy_drain = 15 + var/overload_step_energy_drain_min = 100 max_integrity = 300 //max_integrity is base health var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index 4102ba914b..96576db154 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -203,7 +203,7 @@ chassis.leg_overload_mode = 1 chassis.bumpsmash = 1 chassis.step_in = min(1, round(chassis.step_in/2)) - chassis.step_energy_drain = chassis.step_energy_drain*chassis.leg_overload_coeff + chassis.step_energy_drain = max(chassis.overload_step_energy_drain_min,chassis.step_energy_drain*chassis.leg_overload_coeff) chassis.occupant_message("You enable leg actuators overload.") else chassis.leg_overload_mode = 0 From c222fa42f92e139b59c6e967557231817c5e75cb Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 8 Oct 2017 01:04:39 -0500 Subject: [PATCH 26/26] Automatic changelog generation for PR #3211 [ci skip] --- html/changelogs/AutoChangeLog-pr-3211.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3211.yml diff --git a/html/changelogs/AutoChangeLog-pr-3211.yml b/html/changelogs/AutoChangeLog-pr-3211.yml new file mode 100644 index 0000000000..491dd057e4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3211.yml @@ -0,0 +1,4 @@ +author: "Y0SH1_M4S73R" +delete-after: True +changes: + - balance: "Gygax overdrive consumes at least 100 power per step"