From 604270a44f03bd93d393582a24b323a6e4b4f27b Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 4 Jun 2017 20:20:51 -0700 Subject: [PATCH] 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)