diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm
index 40c38ac0627..17f8b659b98 100644
--- a/code/datums/outfits/outfit_admin.dm
+++ b/code/datums/outfits/outfit_admin.dm
@@ -18,9 +18,11 @@
I.icon_state = special_icon
/datum/outfit/admin
+ var/is_hunter_outfit = 0 // Whether this can be used by the Smite command to send a hunter after someone
/datum/outfit/admin/syndicate
name = "Syndicate Agent"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/syndicate
back = /obj/item/weapon/storage/backpack
@@ -61,6 +63,7 @@
/datum/outfit/admin/syndicate/infiltrator
name = "Syndicate Infiltrator"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/chameleon
glasses = /obj/item/clothing/glasses/hud/security/chameleon
@@ -90,6 +93,7 @@
/datum/outfit/admin/syndicate/operative
name = "Syndicate Nuclear Operative"
+ is_hunter_outfit = 1
suit = /obj/item/clothing/suit/space/hardsuit/syndi
belt = /obj/item/weapon/storage/belt/military
@@ -121,6 +125,7 @@
/datum/outfit/admin/syndicate_strike_team
name = "Syndicate Strike Team"
+ is_hunter_outfit = 1
/datum/outfit/admin/syndicate_strike_team/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
return H.equip_syndicate_commando()
@@ -359,6 +364,7 @@
/datum/outfit/admin/death_commando
name = "NT Death Commando"
+ is_hunter_outfit = 1
/datum/outfit/admin/death_commando/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
return H.equip_death_commando()
@@ -435,6 +441,7 @@
/datum/outfit/admin/tunnel_clown
name = "Tunnel Clown"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/rank/clown
suit = /obj/item/clothing/suit/hooded/chaplain_hoodie
@@ -465,6 +472,7 @@
/datum/outfit/admin/mime_assassin
name = "Mime Assassin"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/mime
suit = /obj/item/clothing/suit/suspenders
@@ -514,6 +522,7 @@
/datum/outfit/admin/greytide
name = "Greytide"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/color/grey
back = /obj/item/weapon/storage/backpack
@@ -539,6 +548,7 @@
/datum/outfit/admin/greytide/leader
name = "Greytide Leader"
+ is_hunter_outfit = 1
belt = /obj/item/weapon/storage/belt/utility/full/multitool
gloves = /obj/item/clothing/gloves/color/yellow
@@ -613,6 +623,7 @@
/datum/outfit/admin/soviet/soldier
name = "Soviet Soldier"
+ is_hunter_outfit = 1
gloves = /obj/item/clothing/gloves/combat
shoes = /obj/item/clothing/shoes/combat
@@ -684,6 +695,7 @@
/datum/outfit/admin/solgov
name = "Solar Federation Marine"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/solgov
back = /obj/item/weapon/storage/backpack/security
@@ -709,6 +721,7 @@
/datum/outfit/admin/solgov/lieutenant
name = "Solar Federation Lieutenant"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/solgov/command
head = /obj/item/clothing/head/soft/solgov/command
@@ -756,6 +769,7 @@
/datum/outfit/admin/chrono
name = "Chrono Legionnaire"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/syndicate
suit = /obj/item/clothing/suit/space/chronos
@@ -947,6 +961,7 @@
/datum/outfit/admin/masked_killer
name = "Masked Killer"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/overalls
suit = /obj/item/clothing/suit/apron
@@ -982,6 +997,7 @@
/datum/outfit/admin/singuloth_knight
name = "Singuloth Knight"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/syndicate/combat
suit = /obj/item/clothing/suit/space/hardsuit/singuloth
@@ -1006,7 +1022,8 @@
apply_to_card(I, H, get_all_accesses(), "Singuloth Knight")
/datum/outfit/admin/assassin
- name = "Assassin"
+ name = "Syndicate Assassin"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/suit_jacket
suit = /obj/item/clothing/suit/wcoat
@@ -1061,6 +1078,7 @@
/datum/outfit/admin/spy
name = "Spy"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/suit_jacket/really_black
back = /obj/item/weapon/storage/backpack
@@ -1105,6 +1123,7 @@
/datum/outfit/admin/dark_lord
name = "Dark Lord"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/color/black
suit = /obj/item/clothing/suit/hooded/chaplain_hoodie
@@ -1177,6 +1196,7 @@
/datum/outfit/admin/dark_priest
name = "Dark Priest"
+ is_hunter_outfit = 1
uniform = /obj/item/clothing/under/color/black
suit = /obj/item/clothing/suit/hooded/chaplain_hoodie
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 9fffa7628f6..0527fe11791 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1797,8 +1797,8 @@
ptypes += "Mutagen Cookie"
ptypes += "Hellwater Cookie"
ptypes += "Assassin"
- ptypes += "Priest"
- ptypes += "Lynch"
+ ptypes += "Hunter"
+ ptypes += "Crew Traitor"
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
@@ -1856,47 +1856,60 @@
H.drop_l_hand()
H.equip_to_slot_or_del(evilcookie, slot_l_hand)
logmsg = "a hellwater cookie."
- if("Priest")
- logmsg = "priest."
+ if("Hunter")
+ logmsg = "hunter."
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?")
+ var/admin_outfits = subtypesof(/datum/outfit/admin)
+ var/hunter_outfits = list()
+ for(var/type in admin_outfits)
+ var/datum/outfit/admin/O = type
+ var/is_hunter_outfit = initial(O.is_hunter_outfit)
+ if(is_hunter_outfit)
+ hunter_outfits[initial(O.name)] = type
+ var/dresscode = input("Select hunter type", "Contract Killers") as null|anything in hunter_outfits
+ if(isnull(dresscode))
+ return
+ var/datum/outfit/O = hunter_outfits[dresscode]
+ message_admins("[key_name_admin(owner)] is sending a dark hunter ([dresscode]) to assassinate [key_name_admin(M)]...")
+ var/list/candidates = pollCandidates("Play as a murderous [dresscode]?")
if(!candidates.len)
- to_chat(usr, "ERROR: Could not create priest. No valid candidates.")
+ to_chat(usr, "ERROR: Could not create dark hunter. 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.")
+ var/key_of_hunter = C.key
+ if(!key_of_hunter)
+ to_chat(usr, "ERROR: Could not create dark hunter. 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)
+ var/datum/mind/hunter_mind = new /datum/mind(key_of_hunter)
+ hunter_mind.active = 1
+ var/mob/living/carbon/human/hunter_mob = new /mob/living/carbon/human(pick(latejoin))
+ hunter_mind.transfer_to(hunter_mob)
+ hunter_mob.equipOutfit(O, FALSE)
+ var/obj/item/weapon/pinpointer/advpinpointer/N = new /obj/item/weapon/pinpointer/advpinpointer(hunter_mob)
+ hunter_mob.equip_to_slot_or_del(N, slot_in_backpack)
N.active = 1
N.mode = 2
N.target = H
N.point_at(N.target)
N.flags |= NODROP
+ if(!locate(/obj/item/weapon/implant/dust, hunter_mob))
+ var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(hunter_mob)
+ D.implant(hunter_mob)
var/datum/objective/assassinate/kill_objective = new
- kill_objective.owner = priest_mind
+ kill_objective.owner = hunter_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
+ kill_objective.explanation_text = "Kill [H.real_name], the [H.mind.assigned_role]."
+ hunter_mind.objectives += kill_objective
+ ticker.mode.traitors |= hunter_mob.mind
+ to_chat(hunter_mob, "ATTENTION: You are now on a mission!")
+ to_chat(hunter_mob, "Goal: MURDER [H.real_name], currently in [get_area(H.loc)]. ");
+ to_chat(hunter_mob, "If you kill them, they cannot be revived.");
+ hunter_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."
+ tatorhud.join_hud(hunter_mob)
+ ticker.mode.set_antag_hud(hunter_mob, "hudsyndicate")
+ if("Crew Traitor")
+ logmsg = "crew traitor."
var/list/possible_traitors = list()
for(var/mob/living/player in living_mob_list)
if(player.client && player.mind && !player.mind.special_role && player.stat != DEAD && player != H)