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)