From b6311e4d4d796d471e06070d729f67e37646e6d4 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 28 May 2017 20:47:24 -0700 Subject: [PATCH 01/45] Wirecutters destroy glowshrooms Two hits with a wirecutter now destroy glowshrooms. This makes it possible to remove glowshroom infestations more easily without scythes. --- code/game/objects/effects/glowshroom.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index f641cb26c32..d78aa5965f4 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -162,6 +162,9 @@ G.endurance -= damage_to_do G.CheckEndurance() return + if(istype(I, /obj/item/weapon/wirecutters)) + endurance -= 15 // two hits + CheckEndurance() if(I.damtype != STAMINA) endurance -= damage_to_do CheckEndurance() From 4efc4cc3a5a2faa29123351f55cae5c66694ae2b Mon Sep 17 00:00:00 2001 From: Kyep Date: Mon, 29 May 2017 18:54:17 -0700 Subject: [PATCH 02/45] Updates to make sharp items effective more generally --- code/game/objects/effects/glowshroom.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index d78aa5965f4..9af07df67b4 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -162,9 +162,8 @@ G.endurance -= damage_to_do G.CheckEndurance() return - if(istype(I, /obj/item/weapon/wirecutters)) - endurance -= 15 // two hits - CheckEndurance() + else if(I.sharp) + damage_to_do = I.force * 3 // wirecutter: 6->18, knife 10->30, hatchet 12->36 if(I.damtype != STAMINA) endurance -= damage_to_do CheckEndurance() From 247aa415f4e9ba25e24d8eca53f5f4f3be9a5850 Mon Sep 17 00:00:00 2001 From: Alffd Date: Sun, 23 Apr 2017 18:06:22 -0400 Subject: [PATCH 03/45] Ports Catsplosion from TG --- .../mob/living/simple_animal/friendly/cat.dm | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 95a1d100161..e98d1007676 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -37,6 +37,59 @@ icon_resting = "cat_rest" gender = FEMALE gold_core_spawnable = CHEM_MOB_SPAWN_INVALID + var/list/family = list() + var/lives = 9 + var/memory_saved = 0 + +/mob/living/simple_animal/pet/cat/Runtime/New() + Read_Memory() + ..() + +/mob/living/simple_animal/pet/cat/Runtime/Life() + if(!stat && ticker.current_state == GAME_STATE_FINISHED && !memory_saved) + Write_Memory() + ..() + +/mob/living/simple_animal/pet/cat/Runtime/death() + if(!memory_saved) + Write_Memory(1) + ..() + +/mob/living/simple_animal/pet/cat/Runtime/proc/Read_Memory() + var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") + S["family"] >> family + S["lives"] >> lives + + if(isnull(family)) + family = list() + + if(isnull(lives)) + lives = 9 + + if(lives <= 0) + lives = 10 //Lowers to 9 in Write_Memory + Write_Memory(1) + qdel(src) + + for(var/cat_type in family) + if(family[cat_type] > 0) + for(var/i in 1 to family[cat_type]) + new cat_type(loc) + +/mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead) + var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") + if(dead) + S["lives"] << lives - 1 + family = list() + for(var/mob/living/simple_animal/pet/cat/C in mob_list) + if(istype(C,type) || C.stat || !C.butcher_results || C.name == "SyndiCat") + continue + if(C.type in family) + family[C.type] += 1 + else + family[C.type] = 1 + S["family"] << family + memory_saved = 1 /mob/living/simple_animal/pet/cat/handle_automated_action() ..() From 0d6163445165a583914494d12c0f1a58fd674ae2 Mon Sep 17 00:00:00 2001 From: Alffd Date: Thu, 4 May 2017 15:07:07 -0400 Subject: [PATCH 04/45] Ports current TG version better handling of cat creation Limits cats to 500 #nofunallowed --- .../mob/living/simple_animal/friendly/cat.dm | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index e98d1007676..3b8808c1e2c 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -40,12 +40,16 @@ var/list/family = list() var/lives = 9 var/memory_saved = 0 + var/list/children = list() //Actual mob instances of children + var/cats_deployed = 0 /mob/living/simple_animal/pet/cat/Runtime/New() Read_Memory() ..() /mob/living/simple_animal/pet/cat/Runtime/Life() + if(!cats_deployed && ticker.current_state >= GAME_STATE_SETTING_UP) + Deploy_The_Cats() if(!stat && ticker.current_state == GAME_STATE_FINISHED && !memory_saved) Write_Memory() ..() @@ -58,24 +62,9 @@ /mob/living/simple_animal/pet/cat/Runtime/proc/Read_Memory() var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") S["family"] >> family - S["lives"] >> lives - if(isnull(family)) family = list() - if(isnull(lives)) - lives = 9 - - if(lives <= 0) - lives = 10 //Lowers to 9 in Write_Memory - Write_Memory(1) - qdel(src) - - for(var/cat_type in family) - if(family[cat_type] > 0) - for(var/i in 1 to family[cat_type]) - new cat_type(loc) - /mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead) var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") if(dead) @@ -91,6 +80,13 @@ S["family"] << family memory_saved = 1 +/mob/living/simple_animal/pet/cat/Runtime/proc/Deploy_The_Cats() + cats_deployed = 1 + for(var/cat_type in family) + if(family[cat_type] > 0) + for(var/i in 1 to min(family[cat_type],100)) //Limits to about 500 cats, you wouldn't think this would be needed (BUT IT IS) + new cat_type(loc) + /mob/living/simple_animal/pet/cat/handle_automated_action() ..() @@ -107,6 +103,12 @@ //attempt to mate make_babies() +/mob/living/simple_animal/pet/cat/Runtime/make_babies() + var/mob/baby = ..() + if(baby) + children += baby + return baby + /mob/living/simple_animal/pet/cat/handle_automated_movement() ..() if(eats_mice && !incapacitated()) From 993db34b8f3518a7189b74da38ea7276ed55e31a Mon Sep 17 00:00:00 2001 From: Alffd Date: Sat, 13 May 2017 18:47:05 -0400 Subject: [PATCH 05/45] Fixes make_babies not returning the baby --- code/modules/mob/living/simple_animal/simple_animal.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 1aa6c82b4a8..f24068bf35d 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -592,7 +592,7 @@ alone = 0 continue if(alone && partner && children < 3) - new childtype(loc) + return new childtype(loc) /mob/living/simple_animal/say_quote(var/message) var/verb = "says" From cecea25fd3ac2a8300a38446d93631fac25fbea4 Mon Sep 17 00:00:00 2001 From: Alffd Date: Wed, 24 May 2017 18:11:46 -0400 Subject: [PATCH 06/45] Ports rest of TG Cat --- .../mob/living/simple_animal/friendly/cat.dm | 85 ++++++++++++------- 1 file changed, 55 insertions(+), 30 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 3b8808c1e2c..b20d492a829 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -38,7 +38,6 @@ gender = FEMALE gold_core_spawnable = CHEM_MOB_SPAWN_INVALID var/list/family = list() - var/lives = 9 var/memory_saved = 0 var/list/children = list() //Actual mob instances of children var/cats_deployed = 0 @@ -54,6 +53,12 @@ Write_Memory() ..() +/mob/living/simple_animal/pet/cat/Runtime/make_babies() + var/mob/baby = ..() + if(baby) + children += baby + return baby + /mob/living/simple_animal/pet/cat/Runtime/death() if(!memory_saved) Write_Memory(1) @@ -62,21 +67,21 @@ /mob/living/simple_animal/pet/cat/Runtime/proc/Read_Memory() var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") S["family"] >> family + if(isnull(family)) family = list() /mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead) var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") - if(dead) - S["lives"] << lives - 1 family = list() - for(var/mob/living/simple_animal/pet/cat/C in mob_list) - if(istype(C,type) || C.stat || !C.butcher_results || C.name == "SyndiCat") - continue - if(C.type in family) - family[C.type] += 1 - else - family[C.type] = 1 + if(!dead) + for(var/mob/living/simple_animal/pet/cat/kitten/C in children) + if(istype(C,type) || C.stat || !C.z || !C.butcher_results) + continue + if(C.type in family) + family[C.type] += 1 + else + family[C.type] = 1 S["family"] << family memory_saved = 1 @@ -87,31 +92,44 @@ for(var/i in 1 to min(family[cat_type],100)) //Limits to about 500 cats, you wouldn't think this would be needed (BUT IT IS) new cat_type(loc) -/mob/living/simple_animal/pet/cat/handle_automated_action() - ..() + +/mob/living/simple_animal/pet/cat/Life() + if(!stat && !buckled && !client) + if(prob(1)) + custom_emote(1, pick("stretches out for a belly rub.", "wags its tail.", "lies down.")) + icon_state = "[icon_living]_rest" + resting = 1 + update_canmove() + else if (prob(1)) + custom_emote(1, pick("sits down.", "crouches on its hind legs.", "looks alert.")) + icon_state = "[icon_living]_sit" + resting = 1 + update_canmove() + else if (prob(1)) + if (resting) + custom_emote(1, pick("gets up and meows.", "walks around.", "stops resting.")) + icon_state = "[icon_living]" + resting = 0 + update_canmove() + else + custom_emote(1, pick("grooms its fur.", "twitches its whiskers.", "shakes out its coat.")) //MICE! - if(eats_mice && loc && isturf(loc) && !incapacitated()) - for(var/mob/living/simple_animal/mouse/M in view(1,src)) - if(!M.stat && Adjacent(M)) - custom_emote(1, "splats \the [M]!") - M.splat() - movement_target = null - stop_automated_movement = 0 - break + if((src.loc) && isturf(src.loc)) + if(!stat && !resting && !buckled) + for(var/mob/living/simple_animal/mouse/M in view(1,src)) + if(!M.stat && Adjacent(M)) + custom_emote(1, "splats \the [M]!") + M.splat() + movement_target = null + stop_automated_movement = 0 + break + + ..() - //attempt to mate make_babies() -/mob/living/simple_animal/pet/cat/Runtime/make_babies() - var/mob/baby = ..() - if(baby) - children += baby - return baby - -/mob/living/simple_animal/pet/cat/handle_automated_movement() - ..() - if(eats_mice && !incapacitated()) + if(!stat && !resting && !buckled) turns_since_scan++ if(turns_since_scan > 5) walk_to(src,0) @@ -130,6 +148,13 @@ stop_automated_movement = 1 walk_to(src,movement_target,0,3) + +/mob/living/simple_animal/pet/cat/Runtime/make_babies() + var/mob/baby = ..() + if(baby) + children += baby + return baby + /mob/living/simple_animal/pet/cat/Proc name = "Proc" From 7ab60d613fe3a07ffda22c99c2684248d07574af Mon Sep 17 00:00:00 2001 From: Alffd Date: Wed, 31 May 2017 20:50:20 -0500 Subject: [PATCH 07/45] Fox fixes --- .../mob/living/simple_animal/friendly/cat.dm | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index b20d492a829..fa911ee8b5a 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -93,29 +93,29 @@ new cat_type(loc) -/mob/living/simple_animal/pet/cat/Life() - if(!stat && !buckled && !client) - if(prob(1)) - custom_emote(1, pick("stretches out for a belly rub.", "wags its tail.", "lies down.")) - icon_state = "[icon_living]_rest" - resting = 1 +/mob/living/simple_animal/pet/cat/handle_automated_action() + ..() + if(prob(1)) + custom_emote(1, pick("stretches out for a belly rub.", "wags its tail.", "lies down.")) + icon_state = "[icon_living]_rest" + resting = 1 + update_canmove() + else if (prob(1)) + custom_emote(1, pick("sits down.", "crouches on its hind legs.", "looks alert.")) + icon_state = "[icon_living]_sit" + resting = 1 + update_canmove() + else if (prob(1)) + if (resting) + custom_emote(1, pick("gets up and meows.", "walks around.", "stops resting.")) + icon_state = "[icon_living]" + resting = 0 update_canmove() - else if (prob(1)) - custom_emote(1, pick("sits down.", "crouches on its hind legs.", "looks alert.")) - icon_state = "[icon_living]_sit" - resting = 1 - update_canmove() - else if (prob(1)) - if (resting) - custom_emote(1, pick("gets up and meows.", "walks around.", "stops resting.")) - icon_state = "[icon_living]" - resting = 0 - update_canmove() - else - custom_emote(1, pick("grooms its fur.", "twitches its whiskers.", "shakes out its coat.")) + else + custom_emote(1, pick("grooms its fur.", "twitches its whiskers.", "shakes out its coat.")) //MICE! - if((src.loc) && isturf(src.loc)) + if(eats_mice && loc && isturf(loc) && !incapacitated()) if(!stat && !resting && !buckled) for(var/mob/living/simple_animal/mouse/M in view(1,src)) if(!M.stat && Adjacent(M)) @@ -124,11 +124,10 @@ movement_target = null stop_automated_movement = 0 break - - ..() - make_babies() +/mob/living/simple_animal/pet/cat/handle_automated_movement() + ..() if(!stat && !resting && !buckled) turns_since_scan++ if(turns_since_scan > 5) From 1176929d44017d6bfae28f37fbedc97ff92a7851 Mon Sep 17 00:00:00 2001 From: Alffd Date: Thu, 1 Jun 2017 17:16:53 -0500 Subject: [PATCH 08/45] More fixes --- .../mob/living/simple_animal/friendly/cat.dm | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index fa911ee8b5a..aa23cad4a25 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -115,15 +115,14 @@ custom_emote(1, pick("grooms its fur.", "twitches its whiskers.", "shakes out its coat.")) //MICE! - if(eats_mice && loc && isturf(loc) && !incapacitated()) - if(!stat && !resting && !buckled) - for(var/mob/living/simple_animal/mouse/M in view(1,src)) - if(!M.stat && Adjacent(M)) - custom_emote(1, "splats \the [M]!") - M.splat() - movement_target = null - stop_automated_movement = 0 - break + if(eats_mice && isturf(loc) && !incapacitated()) + for(var/mob/living/simple_animal/mouse/M in view(1,src)) + if(!M.stat && Adjacent(M)) + custom_emote(1, "splats \the [M]!") + M.splat() + movement_target = null + stop_automated_movement = 0 + break make_babies() /mob/living/simple_animal/pet/cat/handle_automated_movement() From 604270a44f03bd93d393582a24b323a6e4b4f27b Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 4 Jun 2017 20:20:51 -0700 Subject: [PATCH 09/45] More Smiting Updates the admin "smite" command, adding several new options for dealing with people who keep annoying the gods with requests for freebies: - Mutagenic & hellwater cookies are now NODROP, so not as easy to get rid of. - Adds a 'Hallucinate' option, which triggers chronic hallucinations. - Adds a 'Starvation' option, which causes chronic hunger. (and slowdown) - Adds an 'Assassin' option, which creates a new traitor with an objective to kill them. - Adds a 'Lynch' option, which gives everyone without mindshields a directive to kill them. - "Bless" and "Smite" now show up as options in the player panel. --- code/__DEFINES/genetics.dm | 1 + code/modules/admin/admin.dm | 4 ++- code/modules/admin/topic.dm | 57 +++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 8e7be007d12..6dacafa4302 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -96,6 +96,7 @@ #define NUTRITION_LEVEL_FED 350 #define NUTRITION_LEVEL_HUNGRY 250 #define NUTRITION_LEVEL_STARVING 150 +#define NUTRITION_LEVEL_CURSED -1000 //Blood levels #define BLOOD_VOLUME_NORMAL 560 diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 6853baf0755..d7de6dd6844 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -101,7 +101,9 @@ var/global/nologevent = 0

[check_rights(R_ADMIN,0) ? "Traitor panel | " : "" ] Narrate to | - Subtle message + Subtle message | + Bless | + Smite "} if(M.client) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 605c4acd1f3..a56b957ca09 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1790,9 +1790,13 @@ H = M ptypes += "Brain Damage" ptypes += "Honk Tumor" + ptypes += "Hallucinate" + ptypes += "Starvation" ptypes += "Cluwne" ptypes += "Mutagen Cookie" ptypes += "Hellwater Cookie" + ptypes += "Assassin" + ptypes += "Lynch" var/punishment = input(owner, "How would you like to smite [M]?", "Its good to be baaaad...", "") as null|anything in ptypes if(!(punishment in ptypes)) return @@ -1820,6 +1824,12 @@ to_chat(H, "Life seems funnier, somehow.") organ.insert(H) logmsg = "a honk tumor." + if("Hallucinate") + H.Hallucinate(1000) + logmsg = "hallucinations." + if("Starvation") + H.nutrition = NUTRITION_LEVEL_CURSED; + logmsg = "starvation." if("Cluwne") H.makeCluwne() logmsg = "cluwned." @@ -1828,6 +1838,7 @@ evilcookie.reagents.add_reagent("mutagen", 10) evilcookie.desc = "It has a faint green glow." evilcookie.bitesize = 100 + evilcookie.flags = NODROP H.drop_l_hand() H.equip_to_slot_or_del(evilcookie, slot_l_hand) logmsg = "a mutagen cookie." @@ -1836,9 +1847,55 @@ evilcookie.reagents.add_reagent("hell_water", 25) evilcookie.desc = "Sulphur-flavored." evilcookie.bitesize = 100 + evilcookie.flags = NODROP H.drop_l_hand() H.equip_to_slot_or_del(evilcookie, slot_l_hand) logmsg = "a hellwater cookie." + if("Assassin") + logmsg = "assassin." + var/list/possible_traitors = list() + for(var/mob/living/player in mob_list) + if(player.client && player.mind && !player.mind.special_role && player.stat != DEAD && player != H) + if(ishuman(player)) + if(player.client && (ROLE_TRAITOR in player.client.prefs.be_special) && !jobban_isbanned(player, ROLE_TRAITOR) && !jobban_isbanned(player, "Syndicate")) + possible_traitors += player.mind + for(var/datum/mind/player in possible_traitors) + if(player.current) + if(ismindshielded(player.current)) + possible_traitors -= player + if(possible_traitors.len > 0) + var/datum/mind/newtraitormind = pick(possible_traitors) + var/mob/living/newtraitor = newtraitormind.current + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = newtraitormind + kill_objective.target = H.mind + kill_objective.explanation_text = "Assassinate [H.real_name], the [H.mind.assigned_role]." + newtraitormind.objectives += kill_objective + ticker.mode.equip_traitor(newtraitor) + ticker.mode.traitors |= newtraitor.mind + to_chat(newtraitor, "ATTENTION: It is time to pay your debt to the Syndicate...") + to_chat(newtraitor, "You are now a traitor.") + to_chat(newtraitor, "Goal: KILL [H.real_name], currently in [get_area(H.loc)]"); + newtraitor.mind.special_role = SPECIAL_ROLE_TRAITOR + var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR] + tatorhud.join_hud(newtraitor) + ticker.mode.set_antag_hud(newtraitor, "hudsyndicate") + else + to_chat(usr, "ERROR: Failed to create a traitor.") + return + if("Lynch") + logmsg = "lynch." + for(var/datum/mind/m in ticker.minds) + if(!m.current) + continue + if(istype(m.current, /mob/dead/observer)) + continue + if(m == H.mind) + continue + if(ismindshielded(m.current)) + continue + to_chat(m.current, "
The gods have given you a task: find [H.real_name], located in [get_area(H.loc)], and slay them!"); + to_chat(m.current, "Do not harm anyone other than [H.real_name] while carrying out this task.
"); if("Gib") logmsg = "gibbed." M.gib(FALSE) From efd4bb5594eb269c44cb0c0b3c9da3b710bd906f Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 4 Jun 2017 21:29:25 -0700 Subject: [PATCH 10/45] Fox requests --- code/modules/admin/topic.dm | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index a56b957ca09..540b9136fe8 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1885,17 +1885,15 @@ return if("Lynch") logmsg = "lynch." - for(var/datum/mind/m in ticker.minds) - if(!m.current) + for(var/datum/mind/crew in ticker.minds) + if(!crew.current) continue - if(istype(m.current, /mob/dead/observer)) + if(!isliving(crew.current)) continue - if(m == H.mind) + if(crew == H.mind) continue - if(ismindshielded(m.current)) - continue - to_chat(m.current, "
The gods have given you a task: find [H.real_name], located in [get_area(H.loc)], and slay them!"); - to_chat(m.current, "Do not harm anyone other than [H.real_name] while carrying out this task.
"); + to_chat(crew.current, "
The gods have given you a task: find [H.real_name], located in [get_area(H.loc)], and slay them!"); + to_chat(crew.current, "Do not harm anyone other than [H.real_name] while carrying out this task.
"); if("Gib") logmsg = "gibbed." M.gib(FALSE) From e7c5f8bf0c9d9e25f975f74429f77eb6e3b97594 Mon Sep 17 00:00:00 2001 From: HeadyBucket Date: Tue, 6 Jun 2017 23:12:50 +0100 Subject: [PATCH 11/45] Fix infinite glass exploit Fixes an exploit where glass can be infinitely made. simples. Also changed a list var and deleted two just because it stuck out for me. --- code/modules/power/lighting.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 3f42b4d58ce..366c9ee52af 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -122,6 +122,7 @@ fixture_type = "bulb" sheets_refunded = 1 + // the standard tube light fixture /obj/machinery/light name = "light fixture" @@ -149,6 +150,7 @@ // this is used to calc the probability the light burns out var/rigged = 0 // true if rigged to explode + var/lightmaterials = list(MAT_GLASS=100) //stores the materials the light is made of to stop infinite glass exploit // the smaller bulb light fixture @@ -305,6 +307,7 @@ brightness_range = L.brightness_range brightness_power = L.brightness_power brightness_color = L.brightness_color + lightmaterials = L.materials on = has_power() update() @@ -472,6 +475,7 @@ L.brightness_range = brightness_range L.brightness_power = brightness_power L.brightness_color = brightness_color + L.materials = lightmaterials // light item inherits the switchcount, then zero it L.switchcount = switchcount @@ -500,6 +504,7 @@ L.brightness_range = brightness_range L.brightness_power = brightness_power L.brightness_color = brightness_color + L.materials = lightmaterials // light item inherits the switchcount, then zero it L.switchcount = switchcount @@ -596,7 +601,7 @@ var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/base_state var/switchcount = 0 // number of times switched - materials = list(MAT_METAL=60) + materials = list(MAT_GLASS=100) var/rigged = 0 // true if rigged to explode var/brightness_range = 2 //how much light it gives off var/brightness_power = 1 @@ -608,7 +613,6 @@ icon_state = "ltube" base_state = "ltube" item_state = "c_tube" - materials = list(MAT_GLASS=100) brightness_range = 8 /obj/item/weapon/light/tube/large @@ -623,7 +627,6 @@ icon_state = "lbulb" base_state = "lbulb" item_state = "contvapour" - materials = list(MAT_GLASS=100) brightness_range = 5 brightness_color = "#a0a080" @@ -637,7 +640,6 @@ icon_state = "fbulb" base_state = "fbulb" item_state = "egg4" - materials = list(MAT_GLASS=100) brightness_range = 5 // update the icon state and description of the light From 4f66591eee020b72fa046e656dbd9f97624c0433 Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 6 Jun 2017 20:08:59 -0700 Subject: [PATCH 12/45] Fox requests --- code/__DEFINES/genetics.dm | 2 +- code/modules/admin/topic.dm | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 6dacafa4302..4f07d54ee01 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -96,7 +96,7 @@ #define NUTRITION_LEVEL_FED 350 #define NUTRITION_LEVEL_HUNGRY 250 #define NUTRITION_LEVEL_STARVING 150 -#define NUTRITION_LEVEL_CURSED -1000 +#define NUTRITION_LEVEL_CURSED 0 //Blood levels #define BLOOD_VOLUME_NORMAL 560 diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 540b9136fe8..9263667d68f 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1791,7 +1791,8 @@ ptypes += "Brain Damage" ptypes += "Honk Tumor" ptypes += "Hallucinate" - ptypes += "Starvation" + ptypes += "Cold" + ptypes += "Hunger" ptypes += "Cluwne" ptypes += "Mutagen Cookie" ptypes += "Hellwater Cookie" @@ -1827,9 +1828,12 @@ if("Hallucinate") H.Hallucinate(1000) logmsg = "hallucinations." - if("Starvation") - H.nutrition = NUTRITION_LEVEL_CURSED; + if("Hunger") + H.nutrition = NUTRITION_LEVEL_CURSED logmsg = "starvation." + if("Cold") + H.reagents.add_reagent("frostoil", 40) + H.reagents.add_reagent("ice", 40) if("Cluwne") H.makeCluwne() logmsg = "cluwned." @@ -1854,7 +1858,7 @@ if("Assassin") logmsg = "assassin." var/list/possible_traitors = list() - for(var/mob/living/player in mob_list) + for(var/mob/living/player in living_mob_list) if(player.client && player.mind && !player.mind.special_role && player.stat != DEAD && player != H) if(ishuman(player)) if(player.client && (ROLE_TRAITOR in player.client.prefs.be_special) && !jobban_isbanned(player, ROLE_TRAITOR) && !jobban_isbanned(player, "Syndicate")) @@ -1863,7 +1867,7 @@ if(player.current) if(ismindshielded(player.current)) possible_traitors -= player - if(possible_traitors.len > 0) + if(possible_traitors.len) var/datum/mind/newtraitormind = pick(possible_traitors) var/mob/living/newtraitor = newtraitormind.current var/datum/objective/assassinate/kill_objective = new From 9e88e7f1dbbd3baa08a7d3dd513c2a12439fa041 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Wed, 7 Jun 2017 02:35:23 -0400 Subject: [PATCH 13/45] Adds Highlander Style: The Martial Art of Highlanders Adds a new martial art: Highlander Style! - Wielders of the powerful Highlander claymores are imbued with this mythical prowress. Should your both your hands ever lack a grip on a Highlander claymore, you will relinquish your newfound skill. - Highlander Style grants immunity to ranged attacks and an unwavering distain of cowardly guns. Just like with Sleeping Carp, you will deflect projectiles and cannot fire guns (but can pick them up to throw in the trash where they belong). Adds new weapon: Highlander Claymore - Grants the wielder the Highlander Style while held in either hand. - Normal claymores were left in, but do not provide the martial art (so they are "safe" to use outside highlander) Minor refactor to martial arts which prevent use of guns. - No longer relies on the name of the style, but rather the new aptly-named var: `can_use_guns` :cl: rscadd: Adds Highlander Style, granted to the wielder of Highlander Claymores. This martial art allows you to deflect ranged attacks from the weapons of COWARDS. FOR THE HONOR OF THE HIGHLANDERS! tweak: Highlander now equips combatants with a Highlander claymore instead of a normal claymore. FIGHT ON BROTHERS! /:cl: --- .../items/weapons/highlander_swords.dm | 46 +++++++++++++++++++ code/modules/admin/verbs/onlyone.dm | 2 +- code/modules/martial_arts/martial.dm | 2 + code/modules/martial_arts/sleeping_carp.dm | 2 + code/modules/mob/living/carbon/human/human.dm | 4 +- paradise.dme | 1 + 6 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 code/game/objects/items/weapons/highlander_swords.dm diff --git a/code/game/objects/items/weapons/highlander_swords.dm b/code/game/objects/items/weapons/highlander_swords.dm new file mode 100644 index 00000000000..4b575dcd065 --- /dev/null +++ b/code/game/objects/items/weapons/highlander_swords.dm @@ -0,0 +1,46 @@ + +//Highlander Style Martial Art +// Prevents use of guns, but makes the highlander impervious to ranged attacks. Their bravery in battle shields them from the weapons of COWARDS! + +/datum/martial_art/highlander + name = "Highlander Style" + deflection_chance = 100 + can_use_guns = 0 + no_guns_message = "You'd never stoop so low as to use the weapon of a COWARD!" + + +//Highlander Claymore +// Grants the wielder the Highlander Style Martial Art + +/obj/item/weapon/claymore/highlander + name = "Highlander Claymore" + desc = "Imbues the wielder with legendary martial prowress and a nigh-unquenchable thirst for glorious battle!" + var/datum/martial_art/highlander/style = new + +/obj/item/weapon/claymore/highlander/equipped(mob/user, slot) + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(slot == slot_r_hand || slot == slot_l_hand) + if(H.martial_art && H.martial_art != style) + style.teach(H, 1) + to_chat(H, "THERE CAN ONLY BE ONE!") + else if(H.martial_art && H.martial_art == style) + style.remove(H) + var/obj/item/weapon/claymore/highlander/sword = H.is_in_hands(/obj/item/weapon/claymore/highlander) + if(sword) + //if we have a highlander sword in the other hand, relearn the style from that sword. + sword.style.teach(H, 1) + + return + +/obj/item/weapon/claymore/highlander/dropped(mob/user) + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + style.remove(H) + var/obj/item/weapon/claymore/highlander/sword = H.is_in_hands(/obj/item/weapon/claymore/highlander) + if(sword) + //if we have a highlander sword in the other hand, relearn the style from that sword. + sword.style.teach(H, 1) + return diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 9bfe544cef5..79914745e79 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -37,7 +37,7 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_l_ear) H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/claymore/highlander(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(H.loc), slot_l_store) diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index 3f1705f4651..625a2846429 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -7,6 +7,8 @@ var/datum/martial_art/base = null // The permanent style var/deflection_chance = 0 //Chance to deflect projectiles var/help_verb = null + var/can_use_guns = 1 //set to zero to prevent users of this style from using guns (sleeping carp, highlander). They can still pick them up, but not fire them. + var/no_guns_message = "" //message to tell the style user if they try and use a gun while can_use_guns = 0 (DISHONORABRU!) /datum/martial_art/proc/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) return 0 diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm index 960844a063a..12ae14f153f 100644 --- a/code/modules/martial_arts/sleeping_carp.dm +++ b/code/modules/martial_arts/sleeping_carp.dm @@ -8,6 +8,8 @@ name = "The Sleeping Carp" deflection_chance = 100 help_verb = /mob/living/carbon/human/proc/sleeping_carp_help + can_use_guns = 0 + no_guns_message = "Use of ranged weaponry would bring dishonor to the clan." /datum/martial_art/the_sleeping_carp/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(findtext(streak,WRIST_WRENCH_COMBO)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 000a7a52bd0..cd1e53e7290 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1985,8 +1985,8 @@ to_chat(src, "Your fingers don't fit in the trigger guard!") return 0 - if(martial_art && martial_art.name == "The Sleeping Carp") //great dishonor to famiry - to_chat(src, "Use of ranged weaponry would bring dishonor to the clan.") + if(martial_art && !martial_art.can_use_guns) //great dishonor to famiry + to_chat(src, "[martial_art.no_guns_message]") return 0 return . diff --git a/paradise.dme b/paradise.dme index 869bffe601b..8ce3b789f72 100644 --- a/paradise.dme +++ b/paradise.dme @@ -804,6 +804,7 @@ #include "code\game\objects\items\weapons\garrote.dm" #include "code\game\objects\items\weapons\gift_wrappaper.dm" #include "code\game\objects\items\weapons\handcuffs.dm" +#include "code\game\objects\items\weapons\highlander_swords.dm" #include "code\game\objects\items\weapons\holosign.dm" #include "code\game\objects\items\weapons\holy_weapons.dm" #include "code\game\objects\items\weapons\kitchen.dm" From b241af77b825e1f236597ed5fc3bb7de16883111 Mon Sep 17 00:00:00 2001 From: Kyep Date: Wed, 7 Jun 2017 00:32:35 -0700 Subject: [PATCH 14/45] Added 'Priest' option --- code/datums/outfits/outfit_admin.dm | 32 +++++++++++++++++++++++ code/modules/admin/topic.dm | 39 +++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 5c11c42930a..caf1ad2eaae 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -1173,3 +1173,35 @@ suit = /obj/item/clothing/suit/wizrobe/marisa shoes = /obj/item/clothing/shoes/sandal/marisa head = /obj/item/clothing/head/wizard/marisa + + +/datum/outfit/admin/dark_priest + name = "Dark Priest" + + uniform = /obj/item/clothing/under/color/black + suit = /obj/item/clothing/suit/hooded/chaplain_hoodie + back = /obj/item/weapon/storage/backpack + head = /obj/item/clothing/head/chaplain_hood + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/black + l_ear = /obj/item/device/radio/headset/syndicate + id = /obj/item/weapon/card/id/syndicate + r_hand = /obj/item/weapon/nullrod/armblade + backpack_contents = list( + /obj/item/weapon/storage/box/survival = 1, + /obj/item/device/flashlight = 1, + ) + +/datum/outfit/admin/dark_priest/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(visualsOnly) + return + var/obj/item/weapon/card/id/I = H.wear_id + if(istype(I)) + apply_to_card(I, H, get_all_accesses(), "Dark Priest", "syndie") + var/obj/item/weapon/nullrod/armblade/B = H.r_hand + B.force = 20 + B.name = "blessing of the reaper" + B.desc = "Sometimes, someone's just gotta die." + var/obj/item/weapon/implant/explosive/E = new(H) + E.implant(H) \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 9263667d68f..b1925808eec 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1797,6 +1797,7 @@ ptypes += "Mutagen Cookie" ptypes += "Hellwater Cookie" ptypes += "Assassin" + ptypes += "Priest" ptypes += "Lynch" var/punishment = input(owner, "How would you like to smite [M]?", "Its good to be baaaad...", "") as null|anything in ptypes if(!(punishment in ptypes)) @@ -1855,6 +1856,44 @@ H.drop_l_hand() H.equip_to_slot_or_del(evilcookie, slot_l_hand) logmsg = "a hellwater cookie." + if("Priest") + logmsg = "priest." + H.mutations |= NOCLONE + message_admins("[key_name_admin(owner)] is sending a dark priest to assassinate [key_name_admin(M)]...") + var/list/candidates = pollCandidates("Do you want to play as a murderous dark priest?") + if(!candidates.len) + to_chat(usr, "ERROR: Could not create priest. No valid candidates.") + return + var/mob/C = pick(candidates) + var/key_of_priest = C.key + if(!key_of_priest) + to_chat(usr, "ERROR: Could not create priest. Could not pick key.") + return + var/datum/mind/priest_mind = new /datum/mind(key_of_priest) + priest_mind.active = 1 + var/mob/living/carbon/human/priest_mob = new /mob/living/carbon/human(pick(latejoin)) + priest_mind.transfer_to(priest_mob) + var/datum/outfit/admin/dark_priest/O = new /datum/outfit/admin/dark_priest + priest_mob.equipOutfit(O, FALSE) + var/obj/item/weapon/pinpointer/advpinpointer/N = new /obj/item/weapon/pinpointer/advpinpointer(priest_mob) + priest_mob.equip_to_slot_or_del(N, slot_r_store) + N.active = 1 + N.mode = 2 + N.target = H + N.point_at(N.target) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = priest_mind + kill_objective.target = H.mind + kill_objective.explanation_text = "Murder [H.real_name], the [H.mind.assigned_role], in the name of the dark gods." + priest_mind.objectives += kill_objective + ticker.mode.traitors |= priest_mob.mind + to_chat(priest_mob, "ATTENTION: You are now a dark priest!") + to_chat(priest_mob, "Goal: MURDER [H.real_name], currently in [get_area(H.loc)], in the name of the dark gods. "); + to_chat(priest_mob, "The gods will prevent their revival."); + priest_mob.mind.special_role = SPECIAL_ROLE_TRAITOR + var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR] + tatorhud.join_hud(priest_mob) + ticker.mode.set_antag_hud(priest_mob, "hudsyndicate") if("Assassin") logmsg = "assassin." var/list/possible_traitors = list() From 4e27e4c443b062b4e4d3c9f6b86c104ed7563878 Mon Sep 17 00:00:00 2001 From: alexkar598 Date: Wed, 7 Jun 2017 15:10:14 -0400 Subject: [PATCH 15/45] Something tells me i should be ashamed of using web editor... --- code/game/machinery/holosign.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index 3abbcef84ae..5ce444bcc09 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -36,7 +36,7 @@ /obj/machinery/holosign_switch name = "holosign switch" icon = 'icons/obj/power.dmi' - icon_state = "light1" + icon_state = "light0" desc = "A remote control switch for holosign." var/id = null var/active = 0 From 81030c717cde1a6ad6fa70ac567a0ccaeb565764 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Wed, 7 Jun 2017 15:11:37 -0400 Subject: [PATCH 16/45] Destroy() --- code/game/objects/items/weapons/highlander_swords.dm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/weapons/highlander_swords.dm b/code/game/objects/items/weapons/highlander_swords.dm index 4b575dcd065..284a909a227 100644 --- a/code/game/objects/items/weapons/highlander_swords.dm +++ b/code/game/objects/items/weapons/highlander_swords.dm @@ -17,6 +17,13 @@ desc = "Imbues the wielder with legendary martial prowress and a nigh-unquenchable thirst for glorious battle!" var/datum/martial_art/highlander/style = new +/obj/item/weapon/claymore/highlander/Destroy() + if(ishuman(loc)) //just in case it gets destroyed while in someone's possession, such as due to acid or something? + var/mob/living/carbon/human/H = loc + style.remove(H) + QDEL_NULL(style) + return ..() + /obj/item/weapon/claymore/highlander/equipped(mob/user, slot) if(!ishuman(user)) return @@ -32,8 +39,6 @@ //if we have a highlander sword in the other hand, relearn the style from that sword. sword.style.teach(H, 1) - return - /obj/item/weapon/claymore/highlander/dropped(mob/user) if(!ishuman(user)) return @@ -43,4 +48,3 @@ if(sword) //if we have a highlander sword in the other hand, relearn the style from that sword. sword.style.teach(H, 1) - return From 72557e1c88d37c84e84b28cbf2dfa30d3fb5ace2 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 7 Jun 2017 21:27:25 -0400 Subject: [PATCH 17/45] Replaces Illegal R&D Gear with Other Implants --- .../items/weapons/implants/implant_track.dm | 8 +++++++ .../research/designs/medical_designs.dm | 24 +++++++++---------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/code/game/objects/items/weapons/implants/implant_track.dm b/code/game/objects/items/weapons/implants/implant_track.dm index d0d1159a9c5..e0d44cdefcf 100644 --- a/code/game/objects/items/weapons/implants/implant_track.dm +++ b/code/game/objects/items/weapons/implants/implant_track.dm @@ -30,3 +30,11 @@ circuitry. As a result neurotoxins can cause massive damage.
Implant Specifics:
"} return dat + +/obj/item/weapon/implantcase/track + name = "implant case - 'Tracking'" + desc = "A glass case containing a tracking implant." + +/obj/item/weapon/implantcase/track/New() + imp = new /obj/item/weapon/implant/tracking(src) + ..() \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index c84c7c4c6c8..66c150f636d 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -394,22 +394,22 @@ build_path = /obj/item/weapon/implantcase category = list("Medical") -/datum/design/implant_freedom - name = "Freedom Implant Case" +/datum/design/implant_chem + name = "Chemical Implant Case" desc = "A glass case containing an implant." - id = "implant_freedom" - req_tech = list("combat" = 6, "biotech" = 5, "magnets" = 3, "syndicate" = 3) + id = "implant_chem" + req_tech = list("materials" = 3, "biotech" = 5,) build_type = PROTOLATHE - materials = list(MAT_METAL = 800, MAT_GLASS = 500, MAT_GOLD = 500) - build_path = /obj/item/weapon/implantcase/freedom + materials = list(MAT_GLASS = 700) + build_path = /obj/item/weapon/implantcase/chem category = list("Medical") -/datum/design/implant_adrenalin - name = "Adrenalin Implant Case" +/datum/design/implant_tracking + name = "Tracking Implant Case" desc = "A glass case containing an implant." - id = "implant_adrenalin" - req_tech = list("biotech" = 6, "combat" = 6, "syndicate" = 6) + id = "implant_tracking" + req_tech = list("materials" = 2, "biotech" = 3, "magnets" = 3, "programming" = 2) build_type = PROTOLATHE - materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_GOLD = 500, MAT_URANIUM = 600, MAT_DIAMOND = 600) - build_path = /obj/item/weapon/implantcase/adrenaline + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/weapon/implantcase/track category = list("Medical") From 3652c3001aedbe019e561595e6ee5242e59aad06 Mon Sep 17 00:00:00 2001 From: tigercat2000 Date: Wed, 7 Jun 2017 19:39:33 -0700 Subject: [PATCH 18/45] ViewMods - Allows custom view ranges. The primary function of this is a new button in the "Preferences" tab - Set View Range. This functions similarly to the admin verb "Change View Range", but it only allows you to set view ranges lower than the normal world.view. Full changelog: - Added ViewMods system to clients. - Everything that wants to change client.view should do it through this system. - Currently used by the Set View Range button and Marauders. - Stretch mode is set to stretch when active, but the original setting is preserved, as long as you set it with no ViewMods enabled. - The basic way this works is that it keeps track of /datum/viewmods on /clients, and whenever one is added or removed, it picks the highest view range out of all of them and sets the client's vision to that. This effectively means that, if you, say, set your view range to 5x5, and get into a Marauder and use the "zoom" button, it will always go to the marauder's zoom level. - The HUD is set to minimal mode for any view ranges below world.view, which means you only get absolutely critical buttons. - It's set to invisible if you go down to view range 1 or 2, because the buttons can't fit on the screen at those view ranges. - Removed canvas examine option. Just zoom in yourself! --- code/__DEFINES/misc.dm | 4 +- code/_onclick/hud/hud.dm | 9 +++ code/game/mecha/combat/marauder.dm | 4 +- code/game/mecha/mecha.dm | 2 +- code/game/objects/structures/artstuff.dm | 23 ------ code/modules/client/client defines.dm | 4 +- code/modules/client/view.dm | 90 ++++++++++++++++++++++++ code/modules/mob/mob_movement.dm | 8 --- paradise.dme | 1 + 9 files changed, 107 insertions(+), 38 deletions(-) create mode 100644 code/modules/client/view.dm diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 99079fd81bb..a2f487086ae 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -332,4 +332,6 @@ #define STATION_GOAL_BUDGET 1 #define FIRST_DIAG_STEP 1 -#define SECOND_DIAG_STEP 2 \ No newline at end of file +#define SECOND_DIAG_STEP 2 + +#define ARBITRARY_VIEWRANGE_NOHUD 2 \ No newline at end of file diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 2e1d87f605e..f4b43516cd0 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -100,6 +100,15 @@ if(display_hud_version > HUD_VERSIONS) //If the requested version number is greater than the available versions, reset back to the first version display_hud_version = 1 + if(mymob.client.view < world.view) + if(mymob.client.view < ARBITRARY_VIEWRANGE_NOHUD) + to_chat(mymob, "HUD is unavailable with this view range.") + display_hud_version = HUD_STYLE_NOHUD + else + if(display_hud_version == HUD_STYLE_STANDARD) + to_chat(mymob, "Standard HUD mode is unavailable with a smaller-than-normal view range.") + display_hud_version = HUD_STYLE_REDUCED + switch(display_hud_version) if(HUD_STYLE_STANDARD) //Default HUD hud_shown = 1 //Governs behavior of other procs diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 1a901f4a71e..a08f4bea77a 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -157,10 +157,10 @@ log_message("Toggled zoom mode.") occupant_message("Zoom mode [zoom?"en":"dis"]abled.") if(zoom) - occupant.client.view = 12 + occupant.client.AddViewMod("mecha", 12) to_chat(occupant, sound('sound/mecha/imag_enh.ogg',volume=50)) else - occupant.client.view = initial(occupant.client.view) + occupant.client.RemoveViewMod("mecha") diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 9eab3e88cee..1daa7300b1d 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1309,7 +1309,7 @@ dir = dir_in if(L && L.client) - L.client.view = world.view + L.client.RemoveViewMod("mecha") ///////////////////////// ////// Access stuff ///// diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 9636e1407b6..f3ab646c952 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -1,10 +1,3 @@ -///////////////// -// NEW DEFINES // -///////////////// - -/client - var/viewingCanvas = 0 //If this is 1, as soon as client /TRIES/ to move the view resets. - /////////// // EASEL // /////////// @@ -140,20 +133,4 @@ var/global/list/globalBlankCanvases[AMT_OF_CANVASES] icon = blank user.visible_message("[user] cleans the canvas.","You clean the canvas.") -//Examine to enlarge -/obj/item/weapon/canvas/examine(mob/user) - ..(user) - if(in_range(user, src) && get_turf(src) && user.client && ishuman(user)) //Let only humans be the robust zoominators. I'm too spooked other mobs trying to use it may get broken huds. - if(src.loc == user || get_turf(src) == get_turf(user)) - to_chat(user, "[src] has to be on the ground to focus on it!") - return - to_chat(user, "You focus on \the [src].") - user.client.screen = list() //This is because screen objects go way past the view bounds we set, therefore not allowing stretch to fit to zoom in properly. - user.client.reset_stretch = winget(user.client, "mapwindow.map", "icon-size") //Remember previous icon-size - user.client.view = 3 //Decrease view - winset(user.client, "mapwindow.map", "icon-size=0") //Enable stretch-to-fit - user.client.viewingCanvas = 1 //Reset everything we just changed as soon as client tries to move - else - to_chat(user, "It is too far away.") - #undef AMT_OF_CANVASES \ No newline at end of file diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index d547a9a582f..ca3d17e9c50 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -76,8 +76,6 @@ "off" = "borgmacro") ) - var/reset_stretch = 0 //Used by things that fiddle with client's stretch-to-fit. - var/topic_debugging = 0 //if set to true, allows client to see nanoUI errors -- yes i realize this is messy but it'll make live testing infinitely easier control_freak = CONTROL_FREAK_ALL | CONTROL_FREAK_SKIN | CONTROL_FREAK_MACROS @@ -93,7 +91,7 @@ // Donator stuff. var/donator_level = DONATOR_LEVEL_NONE - + // If set to true, this client can interact with atoms such as buttons and doors on top of regular machinery interaction var/advanced_admin_interaction = FALSE diff --git a/code/modules/client/view.dm b/code/modules/client/view.dm new file mode 100644 index 00000000000..f4e74e203e8 --- /dev/null +++ b/code/modules/client/view.dm @@ -0,0 +1,90 @@ +/* + * ViewMods Client module + * This should be used by anything that wants to change a client's view range. + * Also includes + */ + +/* Defines */ +#define CUSTOM_VIEWRANGES list(1, 2, 3, 4, 5, 6, "RESET") + +/* Viewmods */ +/client + var/list/ViewMods = list() + var/ViewModsActive = FALSE + var/ViewPreferedIconSize = 0 + +/client/proc/AddViewMod(id, size) + var/datum/viewmod/V = new /datum/viewmod(id, size) + ViewMods[V.id] = V + UpdateView() + +/client/proc/CheckViewMod(id) + . = 0 + if(ViewMods[id]) + . = 1 + +/client/proc/RemoveViewMod(id) + if(CheckViewMod(id)) + qdel(ViewMods[id]) + ViewMods.Remove(id) + UpdateView() + +/client/proc/UpdateView() + if(!ViewModsActive) + ViewPreferedIconSize = winget(src, "mapwindow.map", "icon-size") + + var/highest_range = 0 + for(var/mod_id in ViewMods) + var/datum/viewmod/V = ViewMods[mod_id] + highest_range = max(highest_range, V.size) + + SetView(highest_range ? highest_range : world.view) + ViewModsActive = (highest_range > 0) + +/client/proc/SetView(view_range) + if(view_range == world.view) + winset(src, "mapwindow.map", "icon-size=[ViewPreferedIconSize]") + else + winset(src, "mapwindow.map", "icon-size=0") + + view = view_range + + if(mob && mob.hud_used) + // If view range is less than world.view, assume the HUD will not fit under normal mode and turn it to reduced + if(view_range < world.view) + // If it's really tiny, turn their hud off completely + if(view_range <= ARBITRARY_VIEWRANGE_NOHUD) + mob.hud_used.show_hud(HUD_STYLE_NOHUD) + else + mob.hud_used.show_hud(HUD_STYLE_REDUCED) + else + mob.hud_used.show_hud(HUD_STYLE_STANDARD) + +/* Viewmod datums */ +/datum/viewmod + var/id = "" + var/size = -1 + +/datum/viewmod/New(new_id, new_size = world.view) + . = ..() + id = new_id + size = new_size + +/* Client verbs */ +/proc/viewNum_to_text(view) + return "[(view * 2) + 1]x[(view * 2) + 1]" + +/client/verb/set_view_range(view_range as null|anything in CUSTOM_VIEWRANGES) + set name = "Set View Range" + set category = "Preferences" + + if(!view_range) + return + + RemoveViewMod("custom") + if(view_range == "RESET") + to_chat(src, "View range reset.") + return + + to_chat(src, "View range set to [viewNum_to_text(view_range)]") + AddViewMod("custom", view_range) \ No newline at end of file diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 03ba9618bd4..20e08001754 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -149,14 +149,6 @@ /client/Move(n, direct) - if(viewingCanvas) - view = world.view //Reset the view - winset(src, "mapwindow.map", "icon-size=[src.reset_stretch]") - viewingCanvas = 0 - mob.reset_perspective() - if(mob.hud_used) - mob.hud_used.show_hud(HUD_STYLE_STANDARD) - if(world.time < move_delay) return diff --git a/paradise.dme b/paradise.dme index 3b4107b4f57..be3e5494802 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1138,6 +1138,7 @@ #include "code\modules\client\client defines.dm" #include "code\modules\client\client procs.dm" #include "code\modules\client\message.dm" +#include "code\modules\client\view.dm" #include "code\modules\client\preference\preferences.dm" #include "code\modules\client\preference\preferences_mysql.dm" #include "code\modules\client\preference\preferences_spawnpoints.dm" From 7b481ed13db14e6db658424d78d453435341f935 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 8 Jun 2017 01:08:19 -0700 Subject: [PATCH 19/45] Adds dept shuttle --- _maps/map_files/shuttles/emergency_dept.dmm | 126 ++++++++++++++++++++ code/datums/shuttles.dm | 6 + 2 files changed, 132 insertions(+) create mode 100644 _maps/map_files/shuttles/emergency_dept.dmm diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm new file mode 100644 index 00000000000..bb5f6381f7c --- /dev/null +++ b/_maps/map_files/shuttles/emergency_dept.dmm @@ -0,0 +1,126 @@ +"aa" = (/turf/space,/area/space) +"ab" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/shuttle/escape) +"ac" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/simulated/floor/plating,/area/shuttle/escape) +"ad" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/shuttle/escape) +"ae" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/escape) +"af" = (/turf/simulated/shuttle/wall{icon_state = "swallc4"},/area/shuttle/escape) +"ag" = (/obj/machinery/computer/emergency_shuttle,/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ah" = (/turf/simulated/shuttle/wall{icon_state = "swallc3"},/area/shuttle/escape) +"ai" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor,/area/shuttle/escape) +"aj" = (/obj/machinery/computer/communications,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ak" = (/obj/machinery/computer/security{network = list("SS13","Telecomms","Research Outpost","Mining Outpost")},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"al" = (/obj/structure/stool/bed/chair/comfy/blue{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"am" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/escape) +"an" = (/obj/machinery/computer/crew,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ao" = (/obj/machinery/computer/robotics,/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ap" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape) +"aq" = (/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ar" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"as" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"at" = (/obj/structure/stool/bed/chair/comfy/red{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"au" = (/obj/structure/stool/bed/chair/comfy/teal{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"av" = (/obj/structure/stool/bed/chair/comfy/purp{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"aw" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/shuttle/escape) +"ax" = (/turf/simulated/shuttle/wall{icon_state = "swall14"; dir = 2},/area/shuttle/escape) +"ay" = (/obj/machinery/door/airlock/glass_command{name = "Escape Shuttle Cockpit"; req_access_txt = "19"},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"az" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor4,/area/shuttle/escape) +"aA" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor4,/area/shuttle/escape) +"aB" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "16"},/turf/simulated/floor/plating,/area/shuttle/escape) +"aC" = (/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aD" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aE" = (/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aF" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aG" = (/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aH" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor4,/area/shuttle/escape) +"aI" = (/turf/simulated/shuttle/floor4,/area/shuttle/escape) +"aJ" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "15"},/turf/simulated/floor/plating,/area/shuttle/escape) +"aK" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aL" = (/obj/machinery/chem_dispenser/beer,/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aM" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access_txt = "2"},/turf/simulated/floor/plating,/area/shuttle/escape) +"aN" = (/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/clothing/mask/cigarette/cigar,/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aO" = (/obj/machinery/chem_dispenser/soda,/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aP" = (/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/turf/simulated/floor/plating,/area/shuttle/escape) +"aQ" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape) +"aR" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aS" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"; dir = 2},/area/shuttle/escape) +"aT" = (/obj/docking_port/mobile/emergency{dir = 4; dwidth = 11; height = 13; timid = 1; width = 24},/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"aU" = (/turf/simulated/floor/plasteel,/area/shuttle/escape) +"aV" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"aW" = (/obj/machinery/door/window/northleft{req_access_txt = "32"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"aX" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"aY" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"aZ" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"ba" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bb" = (/obj/machinery/door/window/northleft{req_access_txt = "47"},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bc" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bd" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"be" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bf" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bg" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "8"},/turf/simulated/floor/plating,/area/shuttle/escape) +"bh" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bi" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bj" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bk" = (/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bl" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bm" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bn" = (/obj/machinery/door/window/southright{req_access_txt = "32"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bo" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bp" = (/obj/structure/window/reinforced,/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bq" = (/obj/structure/window/reinforced,/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"br" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bs" = (/obj/machinery/door/window/southright{req_access_txt = "47"},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bt" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bu" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bv" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bw" = (/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"bx" = (/obj/structure/noticeboard,/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/escape) +"by" = (/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = null; name = "Shuttle Cargo Hatch"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bz" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bA" = (/obj/machinery/door/window/northleft{req_access_txt = "5"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bB" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bC" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bD" = (/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/shuttle/escape) +"bE" = (/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bF" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bG" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bH" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bI" = (/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0; req_access_txt = "0"},/obj/machinery/sleeper,/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bJ" = (/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/obj/item/weapon/extinguisher,/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bK" = (/obj/structure/closet/cardboard,/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bL" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bM" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bN" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bO" = (/obj/machinery/sleeper,/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bP" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape) +"bQ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/airless,/area/shuttle/escape) +"bR" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/shuttle/escape) +"bS" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape) +"bT" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/escape) +"bU" = (/turf/space,/area/shuttle/escape) + +(1,1,1) = {" +aaaaaaaaaaabacadaaaaaaaaaa +aaaaabaeaeafagahaeaeadaaaa +aaabafaiajakalamanaoahadaa +aaapaqarasataqaqauavaqapaa +aaapaqaqaqaqaqaqaqaqaqapaa +abawaeaeaeaxayaeaeaeaeawad +apazaAazazaBaCaDaEaCaFaGap +apaHaIaIaIaJaCaDaEaCaKaLap +apaIaIaIaIaMaCaDaEaCaNaOap +aPaIaIaQaQaBaCaDaEaCaRaRac +aSaeaeaeaeaJaCaDaEaCaCaCap +aTaUaUaUaUaUaUaUaUaUaUaUap +apaVaWaXaBaYaUaZaBbabbbcap +aBbdbebfbgbhaUbibgbjbkblaB +bgbdbebfbgbhaUbibgbjbkblbg +aJbmbnboaJbpaUbqaJbrbsbtaJ +apbuaUaUaUaUaUaUaUaUaUbvap +bwaUaUaUaUaUaUaUaUaUaUaUac +aSaebxbyaBbzbAbBaBbCacaebD +bEaUaUaUbgbFbGbHbgaUaUbIap +acaUaUaUbgbFbGbHbgaUaUbJap +apbKbLbLaJbFbGbHaJbMbNbOap +bPaxbQbQawaeaeaeawbRbRaxbS +aabPbTbTbSbUbUbUbPbTbTbSaa +"} diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 24007dbafee..3d0f877a3aa 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -39,6 +39,12 @@ suffix = "cyb" name = "emergency shuttle (Cyberiad)" +/datum/map_template/shuttle/emergency/dept + suffix = "dept" + name = "emergency shuttle (department)" + description = "Features include: areas for each department, and a small bar." + admin_notes = "Designed to reduce chaos. Each dept requires dept access." + /datum/map_template/shuttle/emergency/clown suffix = "clown" name = "Snappop(tm)!" From 362b19f7bf29af303fa503219c9d5dcc837ee63c Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Thu, 8 Jun 2017 21:21:23 +0200 Subject: [PATCH 20/45] Adds forensics gloves --- code/game/atoms.dm | 5 ++++- .../crates_lockers/closets/secure/security.dm | 2 +- code/modules/clothing/gloves/miscellaneous.dm | 9 ++++++++- code/modules/detective_work/detective_work.dm | 14 +++++++------- icons/obj/clothing/gloves.dmi | Bin 18511 -> 18789 bytes 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 5d1dd5c74fb..292ad651235 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -34,6 +34,9 @@ //Detective Work, used for the duplicate data points kept in the scanners var/list/original_atom + //Detective Work, used for allowing a given atom to leave its fibers on stuff. Allowed by default + var/can_leave_fibers = TRUE + var/allow_spin = 1 //Set this to 1 for a _target_ that is being thrown at; if an atom has this set to 1 then atoms thrown AT it will not spin; currently used for the singularity. -Fox var/admin_spawned = 0 //was this spawned by an admin? used for stat tracking stuff. @@ -469,4 +472,4 @@ /atom/on_varedit(modified_var) if(!Debug2) admin_spawned = TRUE - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 76b69edc28c..ed2599e91dd 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -327,7 +327,7 @@ new /obj/item/clothing/suit/storage/det_suit(src) new /obj/item/clothing/suit/storage/det_suit/forensics/blue(src) new /obj/item/clothing/suit/storage/det_suit/forensics/red(src) - new /obj/item/clothing/gloves/color/black(src) + new /obj/item/clothing/gloves/color/black/forensics(src) new /obj/item/clothing/head/det_hat(src) new /obj/item/clothing/shoes/brown(src) new /obj/item/weapon/storage/box/evidence(src) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index ee5022a1793..5b0ec203c1d 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -17,6 +17,13 @@ icon_state = "black" item_state = "r_hands" + +/obj/item/clothing/gloves/color/black/forensics + name = "forensics gloves" + desc = "These high-tech gloves don't leave any material traces on objects they touch. Perfect for leaving crime scenes undisturbed...both before and after the crime." + icon_state = "forensics" + can_leave_fibers = FALSE + /obj/item/clothing/gloves/combat desc = "These tactical gloves are somewhat fire and impact resistant." name = "combat gloves" @@ -124,4 +131,4 @@ to_chat(user, "You cut [cell] away from [src].") cell.forceMove(get_turf(loc)) cell = null - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/detective_work/detective_work.dm b/code/modules/detective_work/detective_work.dm index 01267f2fb08..dd22a439c19 100644 --- a/code/modules/detective_work/detective_work.dm +++ b/code/modules/detective_work/detective_work.dm @@ -16,33 +16,33 @@ atom/proc/add_fibers(mob/living/carbon/human/M) var/item_multiplier = istype(src,/obj/item)?1.2:1 if(M.wear_suit) fibertext = "Material from \a [M.wear_suit]." - if(prob(10*item_multiplier) && !(fibertext in suit_fibers)) + if(prob(10*item_multiplier) && !(fibertext in suit_fibers) && M.wear_suit.can_leave_fibers) //log_to_dd("Added fibertext: [fibertext]") suit_fibers += fibertext if(!(M.wear_suit.body_parts_covered & UPPER_TORSO)) if(M.w_uniform) fibertext = "Fibers from \a [M.w_uniform]." - if(prob(12*item_multiplier) && !(fibertext in suit_fibers)) //Wearing a suit means less of the uniform exposed. + if(prob(12*item_multiplier) && !(fibertext in suit_fibers) && M.w_uniform.can_leave_fibers) //Wearing a suit means less of the uniform exposed. //log_to_dd("Added fibertext: [fibertext]") suit_fibers += fibertext if(!(M.wear_suit.body_parts_covered & HANDS)) if(M.gloves) fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) + if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers) //log_to_dd("Added fibertext: [fibertext]") suit_fibers += fibertext else if(M.w_uniform) fibertext = "Fibers from \a [M.w_uniform]." - if(prob(15*item_multiplier) && !(fibertext in suit_fibers)) + if(prob(15*item_multiplier) && !(fibertext in suit_fibers) && M.w_uniform.can_leave_fibers) // "Added fibertext: [fibertext]" suit_fibers += fibertext if(M.gloves) fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) + if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers) //log_to_dd("Added fibertext: [fibertext]") suit_fibers += "Material from a pair of [M.gloves.name]." else if(M.gloves) fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) + if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers) //log_to_dd("Added fibertext: [fibertext]") - suit_fibers += "Material from a pair of [M.gloves.name]." \ No newline at end of file + suit_fibers += "Material from a pair of [M.gloves.name]." diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 82ce8437b28e7096eddafd19e0e4a095851d69e8..42f1eda0e74b8b899b0cceb64ecc2096c0535492 100644 GIT binary patch literal 18789 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 Date: Sun, 7 May 2017 16:42:52 -0400 Subject: [PATCH 21/45] Fixes #7242, RCS Exploit You can no longer teleport crates/closets by dialog-stacking if you're not adjacent to them and if the RCS doesn't have enough charge. --- code/game/objects/structures/crates_lockers/closets.dm | 6 +++--- code/game/objects/structures/crates_lockers/crates.dm | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 7180e59b800..ed1b9be0e0d 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -196,7 +196,7 @@ playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [name]...") E.teleporting = 1 - if(!do_after(user, 50 * E.toolspeed, target = src)) + if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) E.teleporting = 0 return E.teleporting = 0 @@ -218,7 +218,7 @@ playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [name]...") E.teleporting = 1 - if(!do_after(user, 50, E.toolspeed, target = src)) + if(!(do_after(user, 50, E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) E.teleporting = 0 return E.teleporting = 0 @@ -327,7 +327,7 @@ /obj/structure/closet/attack_hand(mob/user) add_fingerprint(user) toggle(user) - + /obj/structure/closet/attack_ghost(mob/user) if(user.can_advanced_admin_interact()) toggle(user) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 07a738a8c94..79fd929dedb 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -105,7 +105,7 @@ playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [src.name]...") E.teleporting = 1 - if(!do_after(user, 50 * E.toolspeed, target = src)) + if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) E.teleporting = 0 return E.teleporting = 0 @@ -123,7 +123,7 @@ playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [src.name]...") E.teleporting = 1 - if(!do_after(user, 50 * E.toolspeed, target = src)) + if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) E.teleporting = 0 return E.teleporting = 0 From 383474613639357998df111714a9b587b60f9d87 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Sun, 7 May 2017 16:43:34 -0400 Subject: [PATCH 22/45] Fixes #7243, RCS No Longer Teleports Crates/Closets to CC on Cargo Shuttle --- code/modules/shuttle/supply.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 24d76267b13..1d8123a5cab 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -246,6 +246,7 @@ /obj/machinery/teleport/station, /obj/machinery/teleport/hub, /obj/machinery/telepad, + /obj/machinery/telepad_cargo, /obj/machinery/clonepod, /obj/effect/hierophant, /obj/item/device/warp_cube, From fc93a1f4a69e2db1bbbebd2843343f84b0f8ad5e Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Sun, 7 May 2017 17:46:24 -0400 Subject: [PATCH 23/45] Amends RCS Sanity --- .../structures/crates_lockers/closets.dm | 18 ++++++++++++++---- .../structures/crates_lockers/crates.dm | 19 +++++++++++++++---- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index ed1b9be0e0d..47877da718d 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -193,10 +193,13 @@ L[tmpname] = R var/desc = input("Please select a telepad.", "RCS") in L E.pad = L[desc] + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [name]...") E.teleporting = 1 - if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) + if(!do_after(user, 50 * E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 @@ -204,21 +207,26 @@ to_chat(user, "Error: User located in container--aborting for safety.") playsound(E.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) return + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, E.pad, 0) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return else E.rand_x = rand(50,200) E.rand_y = rand(50,200) var/L = locate(E.rand_x, E.rand_y, 6) + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [name]...") E.teleporting = 1 - if(!(do_after(user, 50, E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) + if(!do_after(user, 50, E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 @@ -226,11 +234,13 @@ to_chat(user, "Error: User located in container--aborting for safety.") playsound(E.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) return + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, L) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return else diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 79fd929dedb..010da69a834 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -102,36 +102,47 @@ L[tmpname] = R var/desc = input("Please select a telepad.", "RCS") in L E.pad = L[desc] + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [src.name]...") E.teleporting = 1 - if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) + if(!do_after(user, 50 * E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, E.pad, 0) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return + else E.rand_x = rand(50,200) E.rand_y = rand(50,200) var/L = locate(E.rand_x, E.rand_y, 6) + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [src.name]...") E.teleporting = 1 - if(!(do_after(user, 50 * E.toolspeed, target = src) && (E.rcell && (E.rcell.charge >= E.chargecost)) && Adjacent(user))) + if(!do_after(user, 50 * E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, L) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return else From e29bd336370a3179e27780beeeb5818f5a10b237 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 8 Jun 2017 22:12:56 -0700 Subject: [PATCH 24/45] DP's Radio & Pinpointer are now NODROP. --- code/datums/outfits/outfit_admin.dm | 10 +++++++--- code/modules/admin/topic.dm | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index caf1ad2eaae..866c446cd3f 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -1200,8 +1200,12 @@ if(istype(I)) apply_to_card(I, H, get_all_accesses(), "Dark Priest", "syndie") var/obj/item/weapon/nullrod/armblade/B = H.r_hand - B.force = 20 - B.name = "blessing of the reaper" - B.desc = "Sometimes, someone's just gotta die." + if(istype(B)) + B.force = 20 + B.name = "blessing of the reaper" + B.desc = "Sometimes, someone's just gotta die." + var/obj/item/device/radio/headset/R = H.l_ear + if(istype(R)) + R.flags |= NODROP var/obj/item/weapon/implant/explosive/E = new(H) E.implant(H) \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index b1925808eec..61b86a9ebe4 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1881,6 +1881,7 @@ N.mode = 2 N.target = H N.point_at(N.target) + N.flags |= NODROP var/datum/objective/assassinate/kill_objective = new kill_objective.owner = priest_mind kill_objective.target = H.mind From 9837c04eb560909c1600d7f41362a84293e06c60 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 8 Jun 2017 22:14:27 -0700 Subject: [PATCH 25/45] Changes DP's explosive implant to dust implant --- code/datums/outfits/outfit_admin.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 866c446cd3f..40c38ac0627 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -1207,5 +1207,5 @@ var/obj/item/device/radio/headset/R = H.l_ear if(istype(R)) R.flags |= NODROP - var/obj/item/weapon/implant/explosive/E = new(H) - E.implant(H) \ No newline at end of file + var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(H) + D.implant(H) \ No newline at end of file From c769e2e18bb082403e4c25581e8de50b34c7c379 Mon Sep 17 00:00:00 2001 From: Kyep Date: Fri, 9 Jun 2017 00:48:06 -0700 Subject: [PATCH 26/45] Adds 1 roller bed --- _maps/map_files/shuttles/emergency_dept.dmm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm index bb5f6381f7c..64b903a78f5 100644 --- a/_maps/map_files/shuttles/emergency_dept.dmm +++ b/_maps/map_files/shuttles/emergency_dept.dmm @@ -88,8 +88,8 @@ "bJ" = (/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/obj/item/weapon/extinguisher,/turf/simulated/floor/plasteel,/area/shuttle/escape) "bK" = (/obj/structure/closet/cardboard,/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/shuttle/escape) "bL" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel,/area/shuttle/escape) -"bM" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/simulated/floor/plasteel,/area/shuttle/escape) -"bN" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bM" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bN" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel,/area/shuttle/escape) "bO" = (/obj/machinery/sleeper,/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/shuttle/escape) "bP" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape) "bQ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/airless,/area/shuttle/escape) @@ -120,7 +120,8 @@ bwaUaUaUaUaUaUaUaUaUaUaUac aSaebxbyaBbzbAbBaBbCacaebD bEaUaUaUbgbFbGbHbgaUaUbIap acaUaUaUbgbFbGbHbgaUaUbJap -apbKbLbLaJbFbGbHaJbMbNbOap +apbKbLbLaJbFbGbHaJbNbMbOap bPaxbQbQawaeaeaeawbRbRaxbS aabPbTbTbSbUbUbUbPbTbTbSaa "} + From 2b92d57b93ce5d6e35eabd0e7568d9b8202a6292 Mon Sep 17 00:00:00 2001 From: Citinited Date: Fri, 9 Jun 2017 19:33:24 +0100 Subject: [PATCH 27/45] Fixes karma message popping up when you disconnected --- code/modules/shuttle/emergency.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 5903035903b..7dc0f1062e4 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -263,7 +263,7 @@ timer = world.time priority_announcement.Announce("The Emergency Shuttle has left the station. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.") for(var/mob/M in player_list) - if(!isnewplayer(M) && !M.client.karma_spent && !M.get_preference(DISABLE_KARMA_REMINDER)) + if(!isnewplayer(M) && !M.client.karma_spent && !M.client.ckey in karma_spenders && !M.get_preference(DISABLE_KARMA_REMINDER)) to_chat(M, "You have not yet spent your karma for the round; was there a player worthy of receiving your reward? Look under OOC tab, Award Karma.") if(SHUTTLE_ESCAPE) From c54549116cb3a248357bc02e0c39ea712cf6dec7 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 15:06:57 -0400 Subject: [PATCH 28/45] Automatic changelog generation for PR #7498 [ci skip] --- html/changelogs/AutoChangeLog-pr-7498.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7498.yml diff --git a/html/changelogs/AutoChangeLog-pr-7498.yml b/html/changelogs/AutoChangeLog-pr-7498.yml new file mode 100644 index 00000000000..61b188594a4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7498.yml @@ -0,0 +1,4 @@ +author: "alexkar598" +delete-after: True +changes: + - bugfix: "Surgury holosign switch has correct icon at roundstart" From ce0f90132dae18d50a1fdae23255126fa3f3853a Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 15:12:24 -0400 Subject: [PATCH 29/45] Automatic changelog generation for PR #7502 [ci skip] --- html/changelogs/AutoChangeLog-pr-7502.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7502.yml diff --git a/html/changelogs/AutoChangeLog-pr-7502.yml b/html/changelogs/AutoChangeLog-pr-7502.yml new file mode 100644 index 00000000000..c072d3f1518 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7502.yml @@ -0,0 +1,4 @@ +author: "tigercat2000" +delete-after: True +changes: + - rscadd: "You can now zoom in with the Set View Range option in your Preferences tab!" From 8fdb8130a639ceb92602164539812603555ac927 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 15:13:56 -0400 Subject: [PATCH 30/45] Automatic changelog generation for PR #7415 [ci skip] --- html/changelogs/AutoChangeLog-pr-7415.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7415.yml diff --git a/html/changelogs/AutoChangeLog-pr-7415.yml b/html/changelogs/AutoChangeLog-pr-7415.yml new file mode 100644 index 00000000000..1537a0d70cb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7415.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - rscadd: "glowshrooms are now destroyable with two hits from a wirecutter." From 0a2d3f34c6362e2c92c6b149593b37773c01c258 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 15:41:54 -0400 Subject: [PATCH 31/45] Automatic changelog generation for PR #7504 [ci skip] --- html/changelogs/AutoChangeLog-pr-7504.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7504.yml diff --git a/html/changelogs/AutoChangeLog-pr-7504.yml b/html/changelogs/AutoChangeLog-pr-7504.yml new file mode 100644 index 00000000000..34e8070b66d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7504.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - rscadd: "New 'department' shuttle, which can be sent by CC instead of the regular evac shuttle." From 309a1722f163432dad1c0882a9112bdac8798a2c Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 15:53:47 -0400 Subject: [PATCH 32/45] Automatic changelog compile, [ci skip] --- html/changelog.html | 13 +++++++++++++ html/changelogs/.all_changelog.yml | 9 +++++++++ html/changelogs/AutoChangeLog-pr-7415.yml | 4 ---- html/changelogs/AutoChangeLog-pr-7498.yml | 4 ---- html/changelogs/AutoChangeLog-pr-7502.yml | 4 ---- html/changelogs/AutoChangeLog-pr-7504.yml | 4 ---- 6 files changed, 22 insertions(+), 16 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-7415.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7498.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7502.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7504.yml diff --git a/html/changelog.html b/html/changelog.html index 19eab0e6555..1fc356f4d34 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -61,6 +61,19 @@
  • Paramedic door is no longer diamond
  • Fixes the backwards health analyzer sprite
  • +

    Kyep updated:

    +
      +
    • glowshrooms are now destroyable with two hits from a wirecutter.
    • +
    • New 'department' shuttle, which can be sent by CC instead of the regular evac shuttle.
    • +
    +

    alexkar598 updated:

    +
      +
    • Surgury holosign switch has correct icon at roundstart
    • +
    +

    tigercat2000 updated:

    +
      +
    • You can now zoom in with the Set View Range option in your Preferences tab!
    • +

    08 June 2017

    Alexshreds updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 111dd18c2b9..7d85fb99718 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4873,3 +4873,12 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. Fox McCloud: - tweak: Paramedic door is no longer diamond - bugfix: Fixes the backwards health analyzer sprite + Kyep: + - rscadd: glowshrooms are now destroyable with two hits from a wirecutter. + - rscadd: New 'department' shuttle, which can be sent by CC instead of the regular + evac shuttle. + alexkar598: + - bugfix: Surgury holosign switch has correct icon at roundstart + tigercat2000: + - rscadd: You can now zoom in with the Set View Range option in your Preferences + tab! diff --git a/html/changelogs/AutoChangeLog-pr-7415.yml b/html/changelogs/AutoChangeLog-pr-7415.yml deleted file mode 100644 index 1537a0d70cb..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7415.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kyep" -delete-after: True -changes: - - rscadd: "glowshrooms are now destroyable with two hits from a wirecutter." diff --git a/html/changelogs/AutoChangeLog-pr-7498.yml b/html/changelogs/AutoChangeLog-pr-7498.yml deleted file mode 100644 index 61b188594a4..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7498.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "alexkar598" -delete-after: True -changes: - - bugfix: "Surgury holosign switch has correct icon at roundstart" diff --git a/html/changelogs/AutoChangeLog-pr-7502.yml b/html/changelogs/AutoChangeLog-pr-7502.yml deleted file mode 100644 index c072d3f1518..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7502.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "tigercat2000" -delete-after: True -changes: - - rscadd: "You can now zoom in with the Set View Range option in your Preferences tab!" diff --git a/html/changelogs/AutoChangeLog-pr-7504.yml b/html/changelogs/AutoChangeLog-pr-7504.yml deleted file mode 100644 index 34e8070b66d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7504.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kyep" -delete-after: True -changes: - - rscadd: "New 'department' shuttle, which can be sent by CC instead of the regular evac shuttle." From eeb027264483f4646fe502474ca0dd105e080455 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 17:44:20 -0400 Subject: [PATCH 33/45] Automatic changelog generation for PR #7506 [ci skip] --- html/changelogs/AutoChangeLog-pr-7506.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7506.yml diff --git a/html/changelogs/AutoChangeLog-pr-7506.yml b/html/changelogs/AutoChangeLog-pr-7506.yml new file mode 100644 index 00000000000..6269d04afc3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7506.yml @@ -0,0 +1,4 @@ +author: "FlattyPatty" +delete-after: True +changes: + - rscadd: "Added forensics gloves for the Detective." From bcc3b0c58fa8e2baeb74c7376cab4fa1efef6e5e Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 17:49:39 -0400 Subject: [PATCH 34/45] Automatic changelog generation for PR #7501 [ci skip] --- html/changelogs/AutoChangeLog-pr-7501.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7501.yml diff --git a/html/changelogs/AutoChangeLog-pr-7501.yml b/html/changelogs/AutoChangeLog-pr-7501.yml new file mode 100644 index 00000000000..9e185b15b7a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7501.yml @@ -0,0 +1,5 @@ +author: "Fox McCloud" +delete-after: True +changes: + - rscdel: "Remove adrenaline and freedom implants from R&D" + - rscadd: "Added chem and tracking implants to R&D" From 9b496be96e0b37a3ec830c051b8d236f908e4bf6 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 18:30:51 -0400 Subject: [PATCH 35/45] Automatic changelog compile, [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 4 ++++ html/changelogs/AutoChangeLog-pr-7501.yml | 5 ----- html/changelogs/AutoChangeLog-pr-7506.yml | 4 ---- 4 files changed, 10 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-7501.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7506.yml diff --git a/html/changelog.html b/html/changelog.html index 1fc356f4d34..c7381483b65 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,10 +56,16 @@ -->

    09 June 2017

    +

    FlattyPatty updated:

    +
      +
    • Added forensics gloves for the Detective.
    • +

    Fox McCloud updated:

    • Paramedic door is no longer diamond
    • Fixes the backwards health analyzer sprite
    • +
    • Remove adrenaline and freedom implants from R&D
    • +
    • Added chem and tracking implants to R&D

    Kyep updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 7d85fb99718..e7bbbdefb4b 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4870,9 +4870,13 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. Alexshreds: - bugfix: Hyphema and Ocular Restoration are now possible to evolve from viruses 2017-06-09: + FlattyPatty: + - rscadd: Added forensics gloves for the Detective. Fox McCloud: - tweak: Paramedic door is no longer diamond - bugfix: Fixes the backwards health analyzer sprite + - rscdel: Remove adrenaline and freedom implants from R&D + - rscadd: Added chem and tracking implants to R&D Kyep: - rscadd: glowshrooms are now destroyable with two hits from a wirecutter. - rscadd: New 'department' shuttle, which can be sent by CC instead of the regular diff --git a/html/changelogs/AutoChangeLog-pr-7501.yml b/html/changelogs/AutoChangeLog-pr-7501.yml deleted file mode 100644 index 9e185b15b7a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7501.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Fox McCloud" -delete-after: True -changes: - - rscdel: "Remove adrenaline and freedom implants from R&D" - - rscadd: "Added chem and tracking implants to R&D" diff --git a/html/changelogs/AutoChangeLog-pr-7506.yml b/html/changelogs/AutoChangeLog-pr-7506.yml deleted file mode 100644 index 6269d04afc3..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7506.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FlattyPatty" -delete-after: True -changes: - - rscadd: "Added forensics gloves for the Detective." From 04d312cbf5f8ed8f5ff97e400984a2808b4179c5 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 19:23:44 -0400 Subject: [PATCH 36/45] Automatic changelog generation for PR #7258 [ci skip] --- html/changelogs/AutoChangeLog-pr-7258.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7258.yml diff --git a/html/changelogs/AutoChangeLog-pr-7258.yml b/html/changelogs/AutoChangeLog-pr-7258.yml new file mode 100644 index 00000000000..0585a769e4e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7258.yml @@ -0,0 +1,5 @@ +author: "KasparoVy" +delete-after: True +changes: + - bugfix: "Adds some sanity checking to the RCS." + - bugfix: "The cargo shuttle no longer permits RCS telepads." From cd5b04497e01d45c23634a5ab35d57b3855539e9 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 19:38:10 -0400 Subject: [PATCH 37/45] Automatic changelog generation for PR #7467 [ci skip] --- html/changelogs/AutoChangeLog-pr-7467.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7467.yml diff --git a/html/changelogs/AutoChangeLog-pr-7467.yml b/html/changelogs/AutoChangeLog-pr-7467.yml new file mode 100644 index 00000000000..84a45d82dd3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7467.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - rscadd: "The gods have grown tired of prayers requesting freebies, and developed some new curses with which to smite those who would treat them like miracle vending machines." From a4f54280798a8bb672012713f4df67632c7dbf91 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 19:47:51 -0400 Subject: [PATCH 38/45] Automatic changelog generation for PR #7486 [ci skip] --- html/changelogs/AutoChangeLog-pr-7486.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7486.yml diff --git a/html/changelogs/AutoChangeLog-pr-7486.yml b/html/changelogs/AutoChangeLog-pr-7486.yml new file mode 100644 index 00000000000..da322131264 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7486.yml @@ -0,0 +1,4 @@ +author: "Alexshreds" +delete-after: True +changes: + - tweak: "Taking mhelps no longer gives mhelping players your IC name" From 38d31616a565fbc71ed6e6f99e2233c8e2b319d4 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 20:32:32 -0400 Subject: [PATCH 39/45] Automatic changelog compile, [ci skip] --- html/changelog.html | 10 ++++++++++ html/changelogs/.all_changelog.yml | 8 ++++++++ html/changelogs/AutoChangeLog-pr-7258.yml | 5 ----- html/changelogs/AutoChangeLog-pr-7467.yml | 4 ---- html/changelogs/AutoChangeLog-pr-7486.yml | 4 ---- 5 files changed, 18 insertions(+), 13 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-7258.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7467.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7486.yml diff --git a/html/changelog.html b/html/changelog.html index c7381483b65..49f9ed6f87c 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,10 @@ -->

      09 June 2017

      +

      Alexshreds updated:

      +
        +
      • Taking mhelps no longer gives mhelping players your IC name
      • +

      FlattyPatty updated:

      • Added forensics gloves for the Detective.
      • @@ -67,10 +71,16 @@
      • Remove adrenaline and freedom implants from R&D
      • Added chem and tracking implants to R&D
      +

      KasparoVy updated:

      +
        +
      • Adds some sanity checking to the RCS.
      • +
      • The cargo shuttle no longer permits RCS telepads.
      • +

      Kyep updated:

      • glowshrooms are now destroyable with two hits from a wirecutter.
      • New 'department' shuttle, which can be sent by CC instead of the regular evac shuttle.
      • +
      • The gods have grown tired of prayers requesting freebies, and developed some new curses with which to smite those who would treat them like miracle vending machines.

      alexkar598 updated:

        diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index e7bbbdefb4b..1d07a042a33 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4870,6 +4870,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. Alexshreds: - bugfix: Hyphema and Ocular Restoration are now possible to evolve from viruses 2017-06-09: + Alexshreds: + - tweak: Taking mhelps no longer gives mhelping players your IC name FlattyPatty: - rscadd: Added forensics gloves for the Detective. Fox McCloud: @@ -4877,10 +4879,16 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Fixes the backwards health analyzer sprite - rscdel: Remove adrenaline and freedom implants from R&D - rscadd: Added chem and tracking implants to R&D + KasparoVy: + - bugfix: Adds some sanity checking to the RCS. + - bugfix: The cargo shuttle no longer permits RCS telepads. Kyep: - rscadd: glowshrooms are now destroyable with two hits from a wirecutter. - rscadd: New 'department' shuttle, which can be sent by CC instead of the regular evac shuttle. + - rscadd: The gods have grown tired of prayers requesting freebies, and developed + some new curses with which to smite those who would treat them like miracle + vending machines. alexkar598: - bugfix: Surgury holosign switch has correct icon at roundstart tigercat2000: diff --git a/html/changelogs/AutoChangeLog-pr-7258.yml b/html/changelogs/AutoChangeLog-pr-7258.yml deleted file mode 100644 index 0585a769e4e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7258.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "KasparoVy" -delete-after: True -changes: - - bugfix: "Adds some sanity checking to the RCS." - - bugfix: "The cargo shuttle no longer permits RCS telepads." diff --git a/html/changelogs/AutoChangeLog-pr-7467.yml b/html/changelogs/AutoChangeLog-pr-7467.yml deleted file mode 100644 index 84a45d82dd3..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7467.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kyep" -delete-after: True -changes: - - rscadd: "The gods have grown tired of prayers requesting freebies, and developed some new curses with which to smite those who would treat them like miracle vending machines." diff --git a/html/changelogs/AutoChangeLog-pr-7486.yml b/html/changelogs/AutoChangeLog-pr-7486.yml deleted file mode 100644 index da322131264..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7486.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Alexshreds" -delete-after: True -changes: - - tweak: "Taking mhelps no longer gives mhelping players your IC name" From c2ad198203e0e00af1201be7e461177adf5819d9 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Fri, 9 Jun 2017 21:39:50 -0400 Subject: [PATCH 40/45] can_use_guns -> no_guns --- code/game/objects/items/weapons/highlander_swords.dm | 2 +- code/modules/martial_arts/martial.dm | 4 ++-- code/modules/martial_arts/sleeping_carp.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/weapons/highlander_swords.dm b/code/game/objects/items/weapons/highlander_swords.dm index 284a909a227..22686b90c96 100644 --- a/code/game/objects/items/weapons/highlander_swords.dm +++ b/code/game/objects/items/weapons/highlander_swords.dm @@ -5,7 +5,7 @@ /datum/martial_art/highlander name = "Highlander Style" deflection_chance = 100 - can_use_guns = 0 + no_guns = TRUE no_guns_message = "You'd never stoop so low as to use the weapon of a COWARD!" diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index 625a2846429..10b3e8f3ad0 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -7,8 +7,8 @@ var/datum/martial_art/base = null // The permanent style var/deflection_chance = 0 //Chance to deflect projectiles var/help_verb = null - var/can_use_guns = 1 //set to zero to prevent users of this style from using guns (sleeping carp, highlander). They can still pick them up, but not fire them. - var/no_guns_message = "" //message to tell the style user if they try and use a gun while can_use_guns = 0 (DISHONORABRU!) + var/no_guns = FALSE //set to TRUE to prevent users of this style from using guns (sleeping carp, highlander). They can still pick them up, but not fire them. + var/no_guns_message = "" //message to tell the style user if they try and use a gun while no_guns = TRUE (DISHONORABRU!) /datum/martial_art/proc/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) return 0 diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm index 12ae14f153f..c6af4679552 100644 --- a/code/modules/martial_arts/sleeping_carp.dm +++ b/code/modules/martial_arts/sleeping_carp.dm @@ -8,7 +8,7 @@ name = "The Sleeping Carp" deflection_chance = 100 help_verb = /mob/living/carbon/human/proc/sleeping_carp_help - can_use_guns = 0 + no_guns = TRUE no_guns_message = "Use of ranged weaponry would bring dishonor to the clan." /datum/martial_art/the_sleeping_carp/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index cd1e53e7290..e8737175b23 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1985,7 +1985,7 @@ to_chat(src, "Your fingers don't fit in the trigger guard!") return 0 - if(martial_art && !martial_art.can_use_guns) //great dishonor to famiry + if(martial_art && martial_art.no_guns) //great dishonor to famiry to_chat(src, "[martial_art.no_guns_message]") return 0 From d5fe3391d48cf026916488113cfd59dc60d43b13 Mon Sep 17 00:00:00 2001 From: Alffd Date: Fri, 9 Jun 2017 22:57:16 -0400 Subject: [PATCH 41/45] Well, that was dumb --- code/modules/mob/living/simple_animal/friendly/cat.dm | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index aa23cad4a25..5f977bfd508 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -147,12 +147,6 @@ walk_to(src,movement_target,0,3) -/mob/living/simple_animal/pet/cat/Runtime/make_babies() - var/mob/baby = ..() - if(baby) - children += baby - return baby - /mob/living/simple_animal/pet/cat/Proc name = "Proc" @@ -180,4 +174,4 @@ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID eats_mice = 0 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 \ No newline at end of file + minbodytemp = 0 From 746adfc5c399ea78124dd0481dbefecb48e24c2c Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 9 Jun 2017 23:57:18 -0400 Subject: [PATCH 42/45] Automatic changelog generation for PR #7494 [ci skip] --- html/changelogs/AutoChangeLog-pr-7494.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7494.yml diff --git a/html/changelogs/AutoChangeLog-pr-7494.yml b/html/changelogs/AutoChangeLog-pr-7494.yml new file mode 100644 index 00000000000..42dc42ad9c4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7494.yml @@ -0,0 +1,5 @@ +author: "FalseIncarnate" +delete-after: True +changes: + - rscadd: "Adds Highlander Style, granted to the wielder of Highlander Claymores. This martial art allows you to deflect ranged attacks from the weapons of COWARDS. FOR THE HONOR OF THE HIGHLANDERS!" + - tweak: "Highlander now equips combatants with a Highlander claymore instead of a normal claymore. FIGHT ON BROTHERS!" From 780ea52768815210dd962bffcc2c91cebc611306 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sat, 10 Jun 2017 00:02:03 -0400 Subject: [PATCH 43/45] Automatic changelog generation for PR #7162 [ci skip] --- html/changelogs/AutoChangeLog-pr-7162.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7162.yml diff --git a/html/changelogs/AutoChangeLog-pr-7162.yml b/html/changelogs/AutoChangeLog-pr-7162.yml new file mode 100644 index 00000000000..f1ce17237cf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7162.yml @@ -0,0 +1,5 @@ +author: "Alffd" +delete-after: True +changes: + - rscadd: "Ports Incoming5643's persistence features for Runtime from TG" + - rscadd: "Ports additional cat NPC emotes from TG" From a47d373e91e401a70ef11dc69601b5eab683fd1e Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sat, 10 Jun 2017 00:16:53 -0400 Subject: [PATCH 44/45] Automatic changelog generation for PR #7513 [ci skip] --- html/changelogs/AutoChangeLog-pr-7513.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7513.yml diff --git a/html/changelogs/AutoChangeLog-pr-7513.yml b/html/changelogs/AutoChangeLog-pr-7513.yml new file mode 100644 index 00000000000..a37635f1c20 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7513.yml @@ -0,0 +1,4 @@ +author: "Citinited" +delete-after: True +changes: + - bugfix: "Disconnecting before the shuttle leaves after having spent karma will no longer prompt you to spend karma." From 85c3e4264e9f9a369316e6ae4213bab3a86a7924 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sat, 10 Jun 2017 01:02:25 -0400 Subject: [PATCH 45/45] Automatic changelog compile, [ci skip] --- html/changelog.html | 16 ++++++++++++++++ html/changelogs/.all_changelog.yml | 13 +++++++++++++ html/changelogs/AutoChangeLog-pr-7162.yml | 5 ----- html/changelogs/AutoChangeLog-pr-7494.yml | 5 ----- html/changelogs/AutoChangeLog-pr-7513.yml | 4 ---- 5 files changed, 29 insertions(+), 14 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-7162.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7494.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7513.yml diff --git a/html/changelog.html b/html/changelog.html index 49f9ed6f87c..8321bac3afd 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,22 @@ -->
        +

        10 June 2017

        +

        Alffd updated:

        +
          +
        • Ports Incoming5643's persistence features for Runtime from TG
        • +
        • Ports additional cat NPC emotes from TG
        • +
        +

        Citinited updated:

        +
          +
        • Disconnecting before the shuttle leaves after having spent karma will no longer prompt you to spend karma.
        • +
        +

        FalseIncarnate updated:

        +
          +
        • Adds Highlander Style, granted to the wielder of Highlander Claymores. This martial art allows you to deflect ranged attacks from the weapons of COWARDS. FOR THE HONOR OF THE HIGHLANDERS!
        • +
        • Highlander now equips combatants with a Highlander claymore instead of a normal claymore. FIGHT ON BROTHERS!
        • +
        +

        09 June 2017

        Alexshreds updated:

          diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 1d07a042a33..e05ac7eb89b 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4894,3 +4894,16 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. tigercat2000: - rscadd: You can now zoom in with the Set View Range option in your Preferences tab! +2017-06-10: + Alffd: + - rscadd: Ports Incoming5643's persistence features for Runtime from TG + - rscadd: Ports additional cat NPC emotes from TG + Citinited: + - bugfix: Disconnecting before the shuttle leaves after having spent karma will + no longer prompt you to spend karma. + FalseIncarnate: + - rscadd: Adds Highlander Style, granted to the wielder of Highlander Claymores. + This martial art allows you to deflect ranged attacks from the weapons of COWARDS. + FOR THE HONOR OF THE HIGHLANDERS! + - tweak: Highlander now equips combatants with a Highlander claymore instead of + a normal claymore. FIGHT ON BROTHERS! diff --git a/html/changelogs/AutoChangeLog-pr-7162.yml b/html/changelogs/AutoChangeLog-pr-7162.yml deleted file mode 100644 index f1ce17237cf..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7162.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Alffd" -delete-after: True -changes: - - rscadd: "Ports Incoming5643's persistence features for Runtime from TG" - - rscadd: "Ports additional cat NPC emotes from TG" diff --git a/html/changelogs/AutoChangeLog-pr-7494.yml b/html/changelogs/AutoChangeLog-pr-7494.yml deleted file mode 100644 index 42dc42ad9c4..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7494.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "FalseIncarnate" -delete-after: True -changes: - - rscadd: "Adds Highlander Style, granted to the wielder of Highlander Claymores. This martial art allows you to deflect ranged attacks from the weapons of COWARDS. FOR THE HONOR OF THE HIGHLANDERS!" - - tweak: "Highlander now equips combatants with a Highlander claymore instead of a normal claymore. FIGHT ON BROTHERS!" diff --git a/html/changelogs/AutoChangeLog-pr-7513.yml b/html/changelogs/AutoChangeLog-pr-7513.yml deleted file mode 100644 index a37635f1c20..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7513.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Citinited" -delete-after: True -changes: - - bugfix: "Disconnecting before the shuttle leaves after having spent karma will no longer prompt you to spend karma."