From 604270a44f03bd93d393582a24b323a6e4b4f27b Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 4 Jun 2017 20:20:51 -0700 Subject: [PATCH 1/6] 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 2/6] 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 4f66591eee020b72fa046e656dbd9f97624c0433 Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 6 Jun 2017 20:08:59 -0700 Subject: [PATCH 3/6] 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 b241af77b825e1f236597ed5fc3bb7de16883111 Mon Sep 17 00:00:00 2001 From: Kyep Date: Wed, 7 Jun 2017 00:32:35 -0700 Subject: [PATCH 4/6] 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 e29bd336370a3179e27780beeeb5818f5a10b237 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 8 Jun 2017 22:12:56 -0700 Subject: [PATCH 5/6] 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 6/6] 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