diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index 6e1defaccd7..e8f4c22e377 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -88,6 +88,7 @@
name = "advanced pinpointer"
desc = "A larger version of the normal pinpointer, this unit features a helpful quantum entanglement detection system to locate various objects that do not broadcast a locator signal."
var/mode = 0 // Mode 0 locates disk, mode 1 locates coordinates.
+ var/modelocked = FALSE // If true, user cannot change mode.
var/turf/location = null
var/obj/target = null
@@ -121,6 +122,10 @@
if(usr.stat || usr.restrained())
return
+ if(modelocked)
+ to_chat(usr, "[src] is locked. It can only track one specific target.")
+ return
+
active = 0
icon_state = icon_off
target = null
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 07dbffe827c..340acc52ef7 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1905,11 +1905,13 @@
ptypes += "Crew Traitor"
ptypes += "Floor Cluwne"
ptypes += "Shamebrero"
+ ptypes += "Dust"
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
var/logmsg = null
switch(punishment)
+ // These smiting types are valid for all living mobs
if("Lightning bolt")
M.electrocute_act(5, "Lightning Bolt", safety = TRUE, override = TRUE)
playsound(get_turf(M), 'sound/magic/lightningshock.ogg', 50, 1, -1)
@@ -1927,6 +1929,7 @@
M.gib(FALSE)
logmsg = "gibbed."
+ // These smiting types are only valid for ishuman() mobs
if("Brain Damage")
H.adjustBrainLoss(75)
logmsg = "75 brain damage."
@@ -1974,38 +1977,34 @@
logmsg = "hunter."
if("Crew Traitor")
if(!H.mind)
- to_chat(usr, "This mob has no mind!")
+ to_chat(usr, "ERROR: This mob ([H]) has no mind!")
return
-
var/list/possible_traitors = list()
for(var/mob/living/player in GLOB.living_mob_list)
if(player.client && player.mind && player.stat != DEAD && player != H)
if(ishuman(player) && !player.mind.special_role)
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)
var/datum/mind/newtraitormind = pick(possible_traitors)
var/datum/objective/assassinate/kill_objective = new()
kill_objective.target = H.mind
kill_objective.owner = newtraitormind
- kill_objective.explanation_text = "Assassinate [H.mind], the [H.mind.assigned_role]"
- H.mind.objectives += kill_objective
+ kill_objective.explanation_text = "Assassinate [H.mind.name], the [H.mind.assigned_role]"
+ newtraitormind.objectives += kill_objective
var/datum/antagonist/traitor/T = new()
T.give_objectives = FALSE
- to_chat(newtraitormind, "ATTENTION: It is time to pay your debt to the Syndicate...")
- to_chat(newtraitormind, "Goal: KILL [H.real_name], currently in [get_area(H.loc)]")
+ to_chat(newtraitormind.current, "ATTENTION: It is time to pay your debt to the Syndicate...")
+ to_chat(newtraitormind.current, "Goal: KILL [H.real_name], currently in [get_area(H.loc)]")
newtraitormind.add_antag_datum(T)
else
- to_chat(usr, "ERROR: Failed to create a traitor.")
+ to_chat(usr, "ERROR: Unable to find any valid candidate to send after [H].")
return
logmsg = "crew traitor."
-
if("Floor Cluwne")
var/turf/T = get_turf(M)
var/mob/living/simple_animal/hostile/floor_cluwne/FC = new /mob/living/simple_animal/hostile/floor_cluwne(T)
@@ -2018,6 +2017,9 @@
var/obj/item/clothing/head/sombrero/shamebrero/S = new(H.loc)
H.equip_to_slot_or_del(S, slot_head)
logmsg = "shamebrero"
+ if("Dust")
+ H.dust()
+ logmsg = "dust"
if(logmsg)
log_admin("[key_name(owner)] smited [key_name(M)] with: [logmsg]")
message_admins("[key_name_admin(owner)] smited [key_name_admin(M)] with: [logmsg]")
@@ -3451,6 +3453,7 @@
N.mode = 2
N.target = H
N.point_at(N.target)
+ N.modelocked = TRUE
if(!locate(/obj/item/implant/dust, hunter_mob))
var/obj/item/implant/dust/D = new /obj/item/implant/dust(hunter_mob)
D.implant(hunter_mob)