diff --git a/code/_onclick/hud/hud_datum.dm b/code/_onclick/hud/hud_datum.dm
index 79d799fa9a1..4d65d41e8cc 100644
--- a/code/_onclick/hud/hud_datum.dm
+++ b/code/_onclick/hud/hud_datum.dm
@@ -203,16 +203,12 @@
/datum/hud/proc/persistent_inventory_update()
return
-//Triggered when F12 is pressed (Unless someone changed something in the DMF)
-/mob/verb/button_pressed_F12()
- set name = "F12"
- set hidden = TRUE
-
+/mob/proc/hide_hud()
if(hud_used && client)
hud_used.show_hud() //Shows the next hud preset
- to_chat(usr, "Switched HUD mode. Press F12 to toggle.")
+ to_chat(src, "Switched HUD mode. Press the key you just pressed to toggle the HUD mode again.")
else
- to_chat(usr, "This mob type does not use a HUD.")
+ to_chat(src, "This mob type does not use a HUD.")
/datum/hud/proc/update_locked_slots()
return
diff --git a/code/datums/keybindings/client.dm b/code/datums/keybindings/client.dm
index c27fa2a0206..b9f6cc79a62 100644
--- a/code/datums/keybindings/client.dm
+++ b/code/datums/keybindings/client.dm
@@ -47,4 +47,4 @@
/datum/keybinding/client/toggle_min_hud/down(client/C)
. = ..()
- C.mob.button_pressed_F12()
+ C.mob.hide_hud()
diff --git a/code/datums/keybindings/human_keybinds.dm b/code/datums/keybindings/human_keybinds.dm
index e1bc0f54386..0005d17efb9 100644
--- a/code/datums/keybindings/human_keybinds.dm
+++ b/code/datums/keybindings/human_keybinds.dm
@@ -41,7 +41,7 @@
if(!M.w_uniform)
return
var/obj/item/clothing/accessory/holster/H = locate() in M.w_uniform
- H?.holster_verb()
+ H?.handle_holster_usage(M)
/datum/keybinding/human/parry
name = "Parry"
diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index 702e103cab5..7fb1115727f 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -72,6 +72,11 @@
var/scan_level
var/precision_coeff
+/obj/machinery/dna_scannernew/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Click [src] to eject its occupant."
+ . += "You can Click-drag someone to [src] to put them in."
+
/obj/machinery/dna_scannernew/Initialize(mapload)
. = ..()
component_parts = list()
@@ -115,15 +120,11 @@
return
go_out()
-/obj/machinery/dna_scannernew/verb/eject()
- set src in oview(1)
- set category = null
- set name = "Eject DNA Scanner"
-
- if(usr.incapacitated())
+/obj/machinery/dna_scannernew/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
- eject_occupant(usr)
- add_fingerprint(usr)
+ eject_occupant(user)
+ add_fingerprint(user)
/obj/machinery/dna_scannernew/Destroy()
eject_occupant(null, TRUE)
@@ -141,32 +142,6 @@
for(var/mob/M in src)//Failsafe so you can get mobs out
M.forceMove(get_turf(src))
-/obj/machinery/dna_scannernew/verb/move_inside()
- set src in oview(1)
- set category = null
- set name = "Enter DNA Scanner"
-
- if(usr.incapacitated() || usr.buckled) //are you cuffed, dying, lying, stunned or other
- return
- if(!ishuman(usr)) //Make sure they're a mob that has dna
- to_chat(usr, "Try as you might, you can not climb up into [src].")
- return
- if(occupant)
- to_chat(usr, "[src] is already occupied!")
- return
- if(usr.abiotic())
- to_chat(usr, "Subject may not hold anything in their hands.")
- return
- if(usr.has_buckled_mobs()) //mob attached to us
- to_chat(usr, "[usr] will not fit into [src] because [usr.p_they()] [usr.p_have()] a slime latched onto [usr.p_their()] head.")
- return
- usr.stop_pulling()
- usr.forceMove(src)
- occupant = usr
- icon_state = "scanner_occupied"
- add_fingerprint(usr)
- SStgui.update_uis(src)
-
/obj/machinery/dna_scannernew/update_icon_state()
if(occupant)
icon_state = "scanner_occupied"
diff --git a/code/game/gamemodes/miniantags/guardian/host_actions.dm b/code/game/gamemodes/miniantags/guardian/host_actions.dm
index 2872520747d..a6df9937431 100644
--- a/code/game/gamemodes/miniantags/guardian/host_actions.dm
+++ b/code/game/gamemodes/miniantags/guardian/host_actions.dm
@@ -102,6 +102,81 @@
dust_if_respawnable(new_stand)
qdel(src)
+/obj/effect/proc_holder/spell/summon_guardian_beacon
+ name = "Place Teleportation Beacon"
+ desc = "Mark a floor as your beacon point, allowing you to warp targets to it. Your beacon requires an anchor, will not work on space tiles."
+ clothes_req = FALSE
+ base_cooldown = 300 SECONDS
+ action_icon_state = "no_state"
+ action_background_icon_state = "reset"
+ action_icon = 'icons/mob/guardian.dmi'
+
+/obj/effect/proc_holder/spell/summon_guardian_beacon/create_new_targeting()
+ return new /datum/spell_targeting/self
+
+/obj/effect/proc_holder/spell/summon_guardian_beacon/cast(list/targets, mob/living/user = usr)
+ var/target = targets[1]
+ var/mob/living/simple_animal/hostile/guardian/healer/guardian_user = user
+ var/turf/beacon_loc = get_turf(target)
+ if(isfloorturf(beacon_loc) && !islava(beacon_loc) && !ischasm(beacon_loc))
+ QDEL_NULL(guardian_user.beacon)
+ guardian_user.beacon = new(beacon_loc)
+ to_chat(guardian_user, "Beacon placed! You may now warp targets to it, including your user, via Alt Click.")
+
+ return TRUE
+
+/obj/effect/proc_holder/spell/surveillance_snare
+ name = "Set Surveillance Snare"
+ desc = "Places an invisible Surveillance Snare on the ground, if someone walks over it you'll be alerted. Max of 6 snares active at a time"
+ clothes_req = FALSE
+ base_cooldown = 3 SECONDS
+ action_icon_state = "no_state"
+ action_background_icon_state = "reset"
+ action_icon = 'icons/mob/guardian.dmi'
+
+/obj/effect/proc_holder/spell/surveillance_snare/create_new_targeting()
+ return new /datum/spell_targeting/self
+
+/obj/effect/proc_holder/spell/surveillance_snare/cast(list/targets, mob/living/user = usr)
+ var/target = targets[1]
+ var/mob/living/simple_animal/hostile/guardian/ranged/guardian_user = user
+ if(length(guardian_user.snares) < 6)
+ var/turf/snare_loc = get_turf(target)
+ var/obj/item/effect/snare/S = new /obj/item/effect/snare(snare_loc)
+ S.spawner = guardian_user
+ S.name = "[get_area(snare_loc)] trap ([snare_loc.x],[snare_loc.y],[snare_loc.z])"
+ guardian_user.snares |= S
+ to_chat(guardian_user, "Surveillance trap deployed!")
+ return TRUE
+ else
+ to_chat(guardian_user, "You have too many traps deployed. Delete one to place another.")
+ var/picked_snare = input(guardian_user, "Pick which trap to disarm", "Disarm Trap") as null|anything in guardian_user.snares
+ if(picked_snare)
+ guardian_user.snares -= picked_snare
+ qdel(picked_snare)
+ to_chat(src, "Snare disarmed.")
+ revert_cast()
+
+/obj/effect/proc_holder/spell/choose_battlecry
+ name = "Change battlecry"
+ desc = "Changes your battlecry."
+ clothes_req = FALSE
+ base_cooldown = 1 SECONDS
+ action_icon_state = "no_state"
+ action_background_icon_state = "communicate"
+ action_icon = 'icons/mob/guardian.dmi'
+
+/obj/effect/proc_holder/spell/choose_battlecry/create_new_targeting()
+ return new /datum/spell_targeting/self
+
+/obj/effect/proc_holder/spell/choose_battlecry/cast(list/targets, mob/living/user = usr)
+ var/mob/living/simple_animal/hostile/guardian/punch/guardian_user = user
+ var/input = stripped_input(guardian_user, "What do you want your battlecry to be? Max length of 5 characters.", ,"", 6)
+ if(!input)
+ revert_cast()
+ return
+ guardian_user.battlecry = input
+
/**
* Takes the action button off cooldown and makes it available again.
*/
diff --git a/code/game/gamemodes/miniantags/guardian/types/healer.dm b/code/game/gamemodes/miniantags/guardian/types/healer.dm
index 7622b105ca0..466a448f728 100644
--- a/code/game/gamemodes/miniantags/guardian/types/healer.dm
+++ b/code/game/gamemodes/miniantags/guardian/types/healer.dm
@@ -34,6 +34,10 @@
melee_damage_type = STAMINA
admin_spawned = TRUE
+/mob/living/simple_animal/hostile/guardian/healer/Initialize(mapload, mob/living/host)
+ . = ..()
+ AddSpell(new /obj/effect/proc_holder/spell/summon_guardian_beacon(null))
+
/mob/living/simple_animal/hostile/guardian/healer/Destroy()
QDEL_NULL(beacon)
return ..()
@@ -109,21 +113,6 @@
else
to_chat(src, "You have to be recalled to toggle modes!")
-/mob/living/simple_animal/hostile/guardian/healer/verb/Beacon()
- set name = "Place Bluespace Beacon"
- set category = "Guardian"
- set desc = "Mark a floor as your beacon point, allowing you to warp targets to it. Your beacon will not work in unfavorable atmospheric conditions."
- if(beacon_cooldown < world.time)
- var/turf/beacon_loc = get_turf(loc)
- if(isfloorturf(beacon_loc) && !islava(beacon_loc) && !ischasm(beacon_loc))
- QDEL_NULL(beacon)
- beacon = new(beacon_loc)
- to_chat(src, "Beacon placed! You may now warp targets to it, including your user, via Alt+Click. ")
- beacon_cooldown = world.time + default_beacon_cooldown
-
- else
- to_chat(src, "Your power is on cooldown! You must wait another [max(round((beacon_cooldown - world.time)*0.1, 0.1), 0)] seconds before you can place another beacon.")
-
/obj/effect/bluespace_beacon
name = "bluespace receiving pad"
desc = "A receiving zone for bluespace teleportations. Building a wall over it should disable it."
@@ -147,7 +136,7 @@
to_chat(src, "Your target can not be anchored!")
return
to_chat(src, "You begin to warp [A]")
- if(do_mob(src, A, 50))
+ if(do_mob(src, A, 5 SECONDS))
if(!A.anchored)
if(!beacon) //Check that the beacon still exists and is in a safe place. No instant kills.
to_chat(src, "You need a beacon to warp things!")
diff --git a/code/game/gamemodes/miniantags/guardian/types/ranged.dm b/code/game/gamemodes/miniantags/guardian/types/ranged.dm
index a89930f5d75..a47ea8fc521 100644
--- a/code/game/gamemodes/miniantags/guardian/types/ranged.dm
+++ b/code/game/gamemodes/miniantags/guardian/types/ranged.dm
@@ -25,6 +25,10 @@
var/list/snares = list()
var/toggle = FALSE
+/mob/living/simple_animal/hostile/guardian/ranged/Initialize(mapload, mob/living/host)
+ . = ..()
+ AddSpell(new /obj/effect/proc_holder/spell/surveillance_snare(null))
+
/mob/living/simple_animal/hostile/guardian/ranged/ToggleMode()
if(loc == summoner)
if(toggle)
@@ -74,30 +78,6 @@
to_chat(src, "[msg]")
-/mob/living/simple_animal/hostile/guardian/ranged/verb/Snare()
- set name = "Set Surveillance Trap"
- set category = "Guardian"
- set desc = "Set an invisible trap that will alert you when living creatures walk over it. Max of 5"
- if(snares.len <6)
- var/turf/snare_loc = get_turf(loc)
- var/obj/item/effect/snare/S = new /obj/item/effect/snare(snare_loc)
- S.spawner = src
- S.name = "[get_area(snare_loc)] trap ([rand(1, 1000)])"
- snares |= S
- to_chat(src, "Surveillance trap deployed!")
- else
- to_chat(src, "You have too many traps deployed. Delete some first.")
-
-/mob/living/simple_animal/hostile/guardian/ranged/verb/DisarmSnare()
- set name = "Remove Surveillance Trap"
- set category = "Guardian"
- set desc = "Disarm unwanted surveillance traps."
- var/picked_snare = input(src, "Pick which trap to disarm", "Disarm Trap") as null|anything in snares
- if(picked_snare)
- snares -= picked_snare
- qdel(picked_snare)
- to_chat(src, "Snare disarmed.")
-
/obj/item/effect/snare
name = "snare"
desc = "You shouldn't be seeing this!"
diff --git a/code/game/gamemodes/miniantags/guardian/types/standard_guardian.dm b/code/game/gamemodes/miniantags/guardian/types/standard_guardian.dm
index bb08805bbe2..d08698bcacd 100644
--- a/code/game/gamemodes/miniantags/guardian/types/standard_guardian.dm
+++ b/code/game/gamemodes/miniantags/guardian/types/standard_guardian.dm
@@ -10,13 +10,9 @@
bio_fluff_string = "Your scarab swarm stirs to life, ready to tear apart your enemies."
var/battlecry = "AT"
-/mob/living/simple_animal/hostile/guardian/punch/verb/Battlecry()
- set name = "Set Battlecry"
- set category = "Guardian"
- set desc = "Choose what you shout as you punch"
- var/input = stripped_input(src,"What do you want your battlecry to be? Max length of 5 characters.", ,"", 6)
- if(input)
- battlecry = input
+/mob/living/simple_animal/hostile/guardian/punch/Initialize(mapload, mob/living/host)
+ . = ..()
+ AddSpell(new /obj/effect/proc_holder/spell/choose_battlecry(null))
/mob/living/simple_animal/hostile/guardian/punch/AttackingTarget()
. = ..()
diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index e878465904b..07b0cc95ee5 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -173,18 +173,14 @@
/obj/item/pinpointer/advpinpointer/AltClick(mob/user)
if(!isliving(user) || !Adjacent(user))
return ..()
- toggle_mode()
+ toggle_mode(user)
-/obj/item/pinpointer/advpinpointer/verb/toggle_mode()
- set category = "Object"
- set name = "Toggle Pinpointer Mode"
- set src in usr
-
- if(usr.stat || usr.restrained())
+/obj/item/pinpointer/advpinpointer/proc/toggle_mode(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(modelocked)
- to_chat(usr, "[src] is locked. It can only track one specific target.")
+ to_chat(user, "[src] is locked. It can only track one specific target.")
return
target = null
@@ -194,18 +190,18 @@
if("Location")
setting = SETTING_LOCATION
- var/locationx = input(usr, "Please input the x coordinate to search for.", "Location?" , "") as num
- if(!locationx || !(usr in view(1,src)))
+ var/locationx = input(user, "Please input the x coordinate to search for.", "Location?" , "") as num
+ if(!locationx || !(user in view(1,src)))
return
- var/locationy = input(usr, "Please input the y coordinate to search for.", "Location?" , "") as num
- if(!locationy || !(usr in view(1,src)))
+ var/locationy = input(user, "Please input the y coordinate to search for.", "Location?" , "") as num
+ if(!locationy || !(user in view(1,src)))
return
var/turf/Z = get_turf(src)
location = locate(locationx,locationy,Z.z)
- to_chat(usr, "You set the pinpointer to locate [locationx],[locationy]")
+ to_chat(user, "You set the pinpointer to locate [locationx],[locationy]")
toggle_on()
@@ -235,12 +231,12 @@
var/cand_z = (get_turf(candidate)).z
if(is_admin_level(cand_z))
continue
- if(usr.z != cand_z)
+ if(user.z != cand_z)
if(!backup)
backup = candidate
continue
// no candidate set yet, or check if there is a closer one
- if(!priority || (get_dist(usr, candidate) < get_dist(usr, priority)))
+ if(!priority || (get_dist(user, candidate) < get_dist(user, priority)))
priority = candidate
if(priority)
@@ -248,13 +244,13 @@
else
target = backup
if(target)
- to_chat(usr, "Unable to find [targetitem] in this sector, falling back to off-sector tracking.")
+ to_chat(user, "Unable to find [targetitem] in this sector, falling back to off-sector tracking.")
if(!target)
- to_chat(usr, "Failed to locate [targetitem]!")
+ to_chat(user, "Failed to locate [targetitem]!")
return
- to_chat(usr, "You set the pinpointer to locate [targetitem].")
+ to_chat(user, "You set the pinpointer to locate [targetitem].")
if("DNA")
var/DNAstring = input("Input DNA string to search for." , "Please Enter String." , "")
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index fd36bd11c03..9f18c071cfe 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -38,8 +38,7 @@
. += "You see [occupant.name] inside. [occupant.p_they(TRUE)] [occupant.p_are()] dead!"
else
. += "You see [occupant.name] inside."
- if(Adjacent(user))
- . += "You can Alt-Click to eject the current occupant. Click-drag someone to the sleeper to place them in it after a short delay."
+ . += "You can Alt-Click to eject the current occupant. Click-drag someone to the sleeper to place them in it after a short delay."
/obj/machinery/sleeper/power_change()
..() //we don't check parent return here because we also care about BROKEN
@@ -475,21 +474,16 @@
go_out()
add_fingerprint(usr)
-/obj/machinery/sleeper/verb/remove_beaker()
- set name = "Remove Beaker"
- set category = "Object"
- set src in oview(1)
-
- if(usr.incapacitated() || !Adjacent(usr))
+/obj/machinery/sleeper/proc/remove_beaker(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(beaker)
filtering = FALSE
- usr.put_in_hands(beaker)
+ user.put_in_hands(beaker)
beaker = null
SStgui.update_uis(src)
- add_fingerprint(usr)
- return
+ add_fingerprint(user)
/obj/machinery/sleeper/MouseDrop_T(atom/movable/O, mob/user)
if(!permitted_check(O, user))
@@ -555,41 +549,6 @@
/obj/machinery/sleeper/AllowDrop()
return FALSE
-/obj/machinery/sleeper/verb/move_inside()
- set name = "Enter Sleeper"
- set category = "Object"
- set src in oview(1)
- if(usr.stat != 0 || !(ishuman(usr)))
- return
- if(occupant)
- to_chat(usr, "The sleeper is already occupied!")
- return
- if(panel_open)
- to_chat(usr, "Close the maintenance panel first.")
- return
- if(usr.incapacitated() || usr.buckled) //are you cuffed, dying, lying, stunned or other
- return
- if(usr.has_buckled_mobs()) //mob attached to us
- to_chat(usr, "[usr] will not fit into [src] because [usr.p_they()] [usr.p_have()] a slime latched onto [usr.p_their()] head.")
- return
- visible_message("[usr] starts climbing into the sleeper.")
- if(do_after(usr, 20, target = usr))
- if(occupant)
- to_chat(usr, "The sleeper is already occupied!")
- return
- usr.stop_pulling()
- usr.forceMove(src)
- occupant = usr
- playsound(src, 'sound/machines/podclose.ogg', 5)
- update_icon(UPDATE_ICON_STATE)
-
- for(var/obj/O in src)
- qdel(O)
- add_fingerprint(usr)
- SStgui.update_uis(src)
- return
- return
-
/obj/machinery/sleeper/syndie
icon_state = "sleeper_s-open"
base_icon = "sleeper_s"
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 846d84f4012..af3ac05be9b 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -72,6 +72,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
QDEL_NULL(Radio)
return ..()
+/obj/machinery/computer/card/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Click [src] to remove the ID cards in it."
+
/obj/machinery/computer/card/proc/is_centcom()
return FALSE
@@ -121,30 +125,29 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
"skin" = skin)))
return formatted
-/obj/machinery/computer/card/verb/eject_id()
- set category = null
- set name = "Eject ID Card"
- set src in oview(1)
-
- if(usr.incapacitated())
+/obj/machinery/computer/card/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(scan)
- to_chat(usr, "You remove \the [scan] from \the [src].")
- scan.forceMove(get_turf(src))
- if(!usr.get_active_hand() && Adjacent(usr))
- usr.put_in_hands(scan)
+ to_chat(user, "You remove \the [scan] from \the [src].")
+ if(!user.get_active_hand())
+ user.put_in_hands(scan)
+ else if(!user.put_in_inactive_hand(scan))
+ scan.forceMove(get_turf(src))
scan = null
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
+ return
else if(modify)
- to_chat(usr, "You remove \the [modify] from \the [src].")
- modify.forceMove(get_turf(src))
- if(!usr.get_active_hand() && Adjacent(usr))
- usr.put_in_hands(modify)
+ to_chat(user, "You remove \the [modify] from \the [src].")
+ if(!user.get_active_hand())
+ user.put_in_hands(modify)
+ else if(!user.put_in_inactive_hand(modify))
+ modify.forceMove(get_turf(src))
modify = null
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
else
- to_chat(usr, "There is nothing to remove from the console.")
+ to_chat(user, "There is nothing to remove from the console.")
/obj/machinery/computer/card/attackby(obj/item/card/id/id_card, mob/user, params)
if(!istype(id_card))
diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm
index 31c2a4fa3e4..1d576eb7d27 100644
--- a/code/game/machinery/computer/law.dm
+++ b/code/game/machinery/computer/law.dm
@@ -27,22 +27,6 @@
do_sparks(5, TRUE, src)
circuit = /obj/item/circuitboard/aiupload_broken
-// What the fuck even is this
-/obj/machinery/computer/aiupload/verb/AccessInternals()
- set category = "Object"
- set name = "Access Computer's Internals"
- set src in oview(1)
- if(get_dist(src, usr) > 1 || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.stat || issilicon(usr))
- return
-
- opened = !opened
- if(opened)
- to_chat(usr, "The access panel is now open.")
- else
- to_chat(usr, "The access panel is now closed.")
- return
-
-
/obj/machinery/computer/aiupload/attackby(obj/item/O, mob/user, params)
if(!istype(O, /obj/item/aiModule))
return ..()
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 650a813078a..8b9419c0da0 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -592,77 +592,6 @@
add_fingerprint(E)
playsound(src, 'sound/machines/podclose.ogg', 5)
-/obj/machinery/cryopod/verb/eject()
- set name = "Eject Pod"
- set category = "Object"
- set src in oview(1)
-
- if(usr.stat != 0)
- return
-
- if(usr != occupant)
- to_chat(usr, "The cryopod is in use and locked!")
- return
- icon_state = base_icon_state
-
- //Eject any items that aren't meant to be in the pod.
- var/list/items = contents
- if(occupant) items -= occupant
- if(announce) items -= announce
-
- for(var/obj/item/I in items)
- I.forceMove(get_turf(src))
-
- go_out()
- add_fingerprint(usr)
-
- name = initial(name)
-
-/obj/machinery/cryopod/verb/move_inside()
- set name = "Enter Pod"
- set category = "Object"
- set src in oview(1)
-
- if(usr.stat != 0 || !check_occupant_allowed(usr))
- return
-
- if(occupant)
- to_chat(usr, "\The [src] is in use.")
- return
-
- if(usr.has_buckled_mobs()) //mob attached to us
- to_chat(usr, "[usr] will not fit into [src] because [usr.p_they()] [usr.p_have()] a slime latched onto [usr.p_their()] head.")
- return
-
- if(usr.incapacitated() || usr.buckled) //are you cuffed, dying, lying, stunned or other
- return
-
- visible_message("[usr] starts climbing into [src].")
-
- if(do_after(usr, 20, target = usr))
-
- if(!usr || !usr.client)
- return
-
- if(occupant)
- to_chat(usr, "\The [src] is in use.")
- return
-
- usr.stop_pulling()
- usr.forceMove(src)
- occupant = usr
- time_till_despawn = initial(time_till_despawn) / willing_time_divisor
- icon_state = occupied_icon_state
- to_chat(usr, "[on_enter_occupant_message]")
- to_chat(usr, "If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")
- occupant = usr
- time_entered = world.time
-
- add_fingerprint(usr)
- name = "[name] ([usr.name])"
-
- return
-
/obj/machinery/cryopod/proc/go_out()
if(!occupant)
return
@@ -673,9 +602,6 @@
name = initial(name)
playsound(src, 'sound/machines/podopen.ogg', 5)
- return
-
-
//Attacks/effects.
/obj/machinery/cryopod/blob_act()
return //Sorta gamey, but we don't really want these to be destroyed.
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index f96e5c8381d..750026ad908 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -70,14 +70,8 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
/obj/machinery/doppler_array/AltClick(mob/user)
rotate(user)
-/obj/machinery/doppler_array/verb/rotate(mob/user)
- set name = "Rotate Tachyon-doppler Dish"
- set category = "Object"
- set src in oview(1)
-
- if(user.incapacitated())
- return
- if(!Adjacent(user))
+/obj/machinery/doppler_array/proc/rotate(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(!user.IsAdvancedToolUser())
to_chat(user, "You don't have the dexterity to do that!")
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index 33f061bc1f6..fe00d9091f1 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -192,12 +192,8 @@
WELDER_FLOOR_SLICE_SUCCESS_MESSAGE
build = 1
-/obj/machinery/mass_driver_frame/verb/rotate()
- set category = "Object"
- set name = "Rotate Frame"
- set src in view(1)
-
- if(usr.stat || usr.restrained() || HAS_TRAIT(usr, TRAIT_FAKEDEATH))
+/obj/machinery/mass_driver_frame/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
dir = turn(dir, -90)
diff --git a/code/game/machinery/pipe/pipe_construction.dm b/code/game/machinery/pipe/pipe_construction.dm
index 83f502d1e90..e904a75a357 100644
--- a/code/game/machinery/pipe/pipe_construction.dm
+++ b/code/game/machinery/pipe/pipe_construction.dm
@@ -214,14 +214,7 @@
// rotate the pipe item clockwise
-/obj/item/pipe/verb/rotate()
- set category = "Object"
- set name = "Rotate Pipe"
- set src in view(1)
-
- if(usr.stat || usr.restrained())
- return
-
+/obj/item/pipe/proc/rotate()
if(pipe_type == PIPE_CIRCULATOR)
flip()
return
@@ -230,16 +223,7 @@
fixdir()
- return
-
-/obj/item/pipe/verb/flip()
- set category = "Object"
- set name = "Flip Pipe"
- set src in view(1)
-
- if(usr.stat || usr.restrained())
- return
-
+/obj/item/pipe/proc/flip()
if(pipe_type in list(PIPE_GAS_FILTER, PIPE_GAS_MIXER, PIPE_TVALVE, PIPE_DTVALVE, PIPE_CIRCULATOR))
if(flipped)
icon_state = copytext(icon_state,3)
@@ -252,8 +236,6 @@
fixdir()
- return
-
/obj/item/pipe/Move()
. = ..()
if(is_bent_pipe() && (dir in GLOB.cardinal))
@@ -611,13 +593,13 @@
..()
/obj/item/pipe/AltClick(mob/user)
- if(user.incapacitated() || !user.Adjacent(src))
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
rotate()
/obj/item/pipe/AltShiftClick(mob/user)
- if(user.incapacitated() || !user.Adjacent(src))
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
flip()
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index f917f92941b..6d9740b90d1 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -93,9 +93,9 @@
new /obj/effect/gibspawner/generic(get_turf(loc)) //I REPLACE YOUR TECHNOLOGY WITH FLESH!
qdel(src)
-/obj/machinery/recharge_station/Bumped(mob/AM)
- if(ismob(AM))
- move_inside(AM)
+/obj/machinery/recharge_station/Bumped(mob/bumper)
+ if(istype(bumper))
+ move_inside(bumper, bumper)
/obj/machinery/recharge_station/AllowDrop()
return FALSE
@@ -105,8 +105,7 @@
return
if(user.stat)
return
- src.go_out()
- return
+ go_out()
/obj/machinery/recharge_station/emp_act(severity)
if(stat & (BROKEN|NOPOWER))
@@ -170,40 +169,36 @@
occupant = null
update_icon(UPDATE_ICON_STATE)
change_power_mode(IDLE_POWER_USE)
- return
+
+/obj/machinery/recharge_station/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
+ return
+ go_out()
/obj/machinery/recharge_station/force_eject_occupant(mob/target)
go_out()
-/obj/machinery/recharge_station/verb/move_eject()
- set category = "Object"
- set src in oview(1)
- if(usr.stat != 0)
+/obj/machinery/recharge_station/MouseDrop_T(mob/living/target, mob/user)
+ if(!istype(target))
return
- src.go_out()
- add_fingerprint(usr)
- return
+ INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/machinery/recharge_station, move_inside), user, target)
+ return TRUE
-/obj/machinery/recharge_station/verb/move_inside(mob/user = usr)
- set category = "Object"
- set src in oview(1)
- if(!user || !usr)
+/obj/machinery/recharge_station/proc/move_inside(mob/user, mob/target)
+ if(!user || user.stat)
return
- if(usr.stat != CONSCIOUS)
- return
-
- if(get_dist(src, user) > 2 || get_dist(usr, user) > 1)
- to_chat(usr, "They are too far away to put inside")
+ if(get_dist(src, user) > 2 || get_dist(target, user) > 1)
+ to_chat(user, "[target] is too far away to put inside [src].")
return
if(panel_open)
- to_chat(usr, "Close the maintenance panel first.")
+ to_chat(user, "Close the maintenance panel first.")
return
var/can_accept_user
- if(isrobot(user))
- var/mob/living/silicon/robot/R = user
+ if(isrobot(target))
+ var/mob/living/silicon/robot/R = target
if(R.stat == DEAD)
//Whoever had it so that a borg with a dead cell can't enter this thing should be shot. --NEO
@@ -217,8 +212,8 @@
return
can_accept_user = 1
- else if(ishuman(user))
- var/mob/living/carbon/human/H = user
+ else if(ishuman(target))
+ var/mob/living/carbon/human/H = target
if(H.stat == DEAD)
return
@@ -234,11 +229,10 @@
to_chat(user, "Only non-organics may enter the recharger!")
return
- user.stop_pulling()
- user.forceMove(src)
- occupant = user
+ target.stop_pulling()
+ target.forceMove(src)
+ occupant = target
add_fingerprint(user)
update_icon(UPDATE_ICON_STATE)
change_power_mode(IDLE_POWER_USE)
- return
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index 478821874eb..c189c6cccf5 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -50,6 +50,7 @@
. += "The power light is [(stat & NOPOWER) ? "off" : "on"]."
. += "The operation light is [emergency_mode ? "off. [src] has detected a forbidden object with its sensors, and has shut down temporarily." : "on. [src] is active."]"
. += "The safety sensor light is [emagged ? "off!" : "on."]"
+ . += "The recycler current accepts items from [dir2text(eat_dir)]."
/obj/machinery/recycler/power_change()
if(!..())
@@ -205,38 +206,12 @@
L.adjustBruteLoss(crush_damage)
-/obj/machinery/recycler/verb/rotate()
- set name = "Rotate Clockwise"
- set category = "Object"
- set src in oview(1)
-
- var/mob/living/user = usr
-
- if(usr.incapacitated())
+/obj/machinery/recycler/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
- if(anchored)
- to_chat(usr, "[src] is fastened to the floor!")
- return 0
- eat_dir = turn(eat_dir, 270)
- to_chat(user, "[src] will now accept items from [dir2text(eat_dir)].")
- return 1
-/obj/machinery/recycler/verb/rotateccw()
- set name = "Rotate Counter Clockwise"
- set category = "Object"
- set src in oview(1)
-
- var/mob/living/user = usr
-
- if(usr.incapacitated())
- return
- if(anchored)
- to_chat(usr, "[src] is fastened to the floor!")
- return 0
eat_dir = turn(eat_dir, 90)
to_chat(user, "[src] will now accept items from [dir2text(eat_dir)].")
- return 1
-
/obj/machinery/recycler/deathtrap
name = "dangerous old crusher"
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index f2e517c076c..19e11fbb30a 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -771,51 +771,6 @@
/obj/machinery/suit_storage_unit/force_eject_occupant(mob/target)
eject_occupant()
-/obj/machinery/suit_storage_unit/verb/get_out()
- set name = "Eject Suit Storage Unit"
- set category = "Object"
- set src in oview(1)
-
- if(usr.stat != 0)
- return
- eject_occupant(usr)
- add_fingerprint(usr)
- SStgui.update_uis(src)
- update_icon(UPDATE_OVERLAYS)
- return
-
-/obj/machinery/suit_storage_unit/verb/move_inside()
- set name = "Hide in Suit Storage Unit"
- set category = "Object"
- set src in oview(1)
-
- if(usr.stat != 0)
- return
- if(usr.incapacitated() || usr.buckled) //are you cuffed, dying, lying, stunned or other
- return
- if(!state_open)
- to_chat(usr, "The unit's doors are shut.")
- return
- if(broken)
- to_chat(usr, "The unit is not operational.")
- return
- if((occupant) || (helmet) || (suit) || (storage))
- to_chat(usr, "It's too cluttered inside for you to fit in!")
- return
- visible_message("[usr] starts squeezing into the suit storage unit!")
- if(do_after(usr, 10, target = usr))
- usr.stop_pulling()
- usr.forceMove(src)
- occupant = usr
- state_open = FALSE //Close the thing after the guy gets inside
- update_icon(UPDATE_OVERLAYS)
-
- add_fingerprint(usr)
- SStgui.update_uis(src)
- return
- else
- occupant = null
-
/obj/machinery/suit_storage_unit/attack_ai(mob/user as mob)
return attack_hand(user)
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index ce1ff42be70..9e355cfee20 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -1,5 +1,5 @@
/obj/machinery/washing_machine
- name = "Washing Machine"
+ name = "washing machine"
desc = "Gets rid of those pesky bloodstains, or your money back!"
icon = 'icons/obj/machines/washing_machine.dmi'
icon_state = "wm_10"
@@ -21,16 +21,18 @@
var/gibs_ready = 0
var/obj/crayon
-/obj/machinery/washing_machine/verb/start()
- set name = "Start Washing"
- set category = "Object"
- set src in oview(1)
+/obj/machinery/washing_machine/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Click [src] to start its washing cycle."
- if(!isliving(usr)) //ew ew ew usr, but it's the only way to check.
+/obj/machinery/washing_machine/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
+ start(user)
- if( state != 4 )
- to_chat(usr, "The washing machine cannot run in this state.")
+/obj/machinery/washing_machine/proc/start(mob/user)
+ if(state != 4)
+ to_chat(user, "The washing machine cannot run in this state.")
return
if( locate(/mob,contents) )
@@ -193,16 +195,6 @@
state = 4
update_icon(UPDATE_ICON_STATE)
-/obj/machinery/washing_machine/verb/climb_out()
- set name = "Climb out"
- set category = "Object"
- set src in usr.loc
-
- sleep(20)
- if(state in list(1,3,6) )
- usr.loc = src.loc
-
-
/obj/machinery/washing_machine/update_icon_state()
icon_state = "wm_[state][panel]"
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index bad62caa116..805333f1ce1 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -197,20 +197,6 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons
if(B && B.loc == loc)
qdel(src)
-/obj/item/verb/move_to_top()
- set name = "Move To Top"
- set category = null
- set src in oview(1)
-
- if(!isturf(src.loc) || usr.stat || usr.restrained() )
- return
-
- var/turf/T = src.loc
-
- src.loc = null
-
- src.loc = T
-
/obj/item/examine(mob/user)
var/size
switch(src.w_class)
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 2d0e55a1c73..af29ad36d32 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -128,6 +128,10 @@
materials = list()
on = TRUE
+/obj/item/flashlight/lamp/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Click [src] to turn it on/off."
+
// green-shaded desk lamp
/obj/item/flashlight/lamp/green
desc = "A classic green-shaded desk lamp."
@@ -137,13 +141,11 @@
/obj/item/flashlight/lamp/green/off
on = FALSE
-/obj/item/flashlight/lamp/verb/toggle_light()
- set name = "Toggle light"
- set category = "Object"
- set src in oview(1)
+/obj/item/flashlight/lamp/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
+ return
- if(!usr.stat)
- attack_self(usr)
+ attack_self(user)
//Bananalamp
/obj/item/flashlight/lamp/bananalamp
diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm
index 1ec3d7a4773..e4a969b1446 100644
--- a/code/game/objects/items/devices/radio/beacon.dm
+++ b/code/game/objects/items/devices/radio/beacon.dm
@@ -3,7 +3,6 @@
desc = "A beacon used by a teleporter."
icon_state = "beacon"
item_state = "signaler"
- var/code = "Beacon"
origin_tech = "bluespace=1"
var/syndicate = FALSE
var/area_bypass = FALSE
@@ -11,7 +10,6 @@
/obj/item/radio/beacon/New()
..()
- code = "[code] ([GLOB.beacons.len + 1])"
GLOB.beacons += src
/obj/item/radio/beacon/Destroy()
@@ -31,20 +29,6 @@
/obj/item/radio/beacon/send_hear()
return null
-/obj/item/radio/beacon/verb/alter_signal(t as text)
- set name = "Alter Beacon's Signal"
- set category = "Object"
- set src in usr
-
- if(usr.stat || usr.restrained())
- return
-
- code = t
- if(isnull(code))
- code = initial(code)
- src.add_fingerprint(usr)
- return
-
/obj/item/radio/beacon/bacon //Probably a better way of doing this, I'm lazy.
/obj/item/radio/beacon/bacon/proc/digest_delay()
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 16dd31e682b..bb294fdf341 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -106,6 +106,10 @@ REAGENT SCANNER
var/mode = 1
var/advanced = FALSE
+/obj/item/healthanalyzer/examine(mob/user)
+ . = ..()
+ . += "Use [src] in hand to swap between showing specific limb damage."
+
/obj/item/healthanalyzer/attack(mob/living/M, mob/living/user)
if((HAS_TRAIT(user, TRAIT_CLUMSY) || user.getBrainLoss() >= 60) && prob(50))
var/list/msgs = list()
@@ -284,18 +288,12 @@ REAGENT SCANNER
to_chat(user, chat_box_healthscan(msgs.Join("
")))
/obj/item/healthanalyzer/attack_self(mob/user)
- toggle_mode()
-
-/obj/item/healthanalyzer/verb/toggle_mode()
- set name = "Switch Verbosity"
- set category = "Object"
-
mode = !mode
switch(mode)
if(1)
- to_chat(usr, "The scanner now shows specific limb damage.")
+ to_chat(user, "The scanner now shows specific limb damage.")
if(0)
- to_chat(usr, "The scanner no longer shows limb damage.")
+ to_chat(user, "The scanner no longer shows limb damage.")
/obj/item/healthanalyzer/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/healthupgrade))
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index b66e0040a5c..1b9e637beb1 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -300,6 +300,7 @@
. += "It has [remaining_capacity] seconds remaining." // to avoid having 0 minutes
else
. += "It has [seconds_to_time(remaining_capacity)] remaining."
+ . += "You can Alt-Click [src] to wipe the current tape."
/obj/item/tape/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE)
..()
@@ -309,16 +310,16 @@
if(!ruined)
ruin(user)
-/obj/item/tape/verb/wipe()
- set name = "Wipe Tape"
- set category = "Object"
-
- if(usr.stat)
+/obj/item/tape/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(ruined)
+ to_chat(user, "This tape is already ruined!")
+ return
+ if(!do_after(user, 3 SECONDS, target = src))
return
- to_chat(usr, "You erase the data from [src].")
+ to_chat(user, "You erase the data from [src].")
used_capacity = 0
storedinfo.Cut()
timestamp.Cut()
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 3f6d592dbc6..eebe95f2bef 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -1207,23 +1207,18 @@
. += "Has [fake_bullets] round\s remaining."
. += "Use in hand to empty the gun's ammo reserves."
. += "[fake_bullets] of those are live rounds."
+ . += "You can Alt-Click [src] to spin it's barrel."
/obj/item/toy/russian_revolver/trick_revolver/post_shot(user)
to_chat(user, "[src] did look pretty dodgey!")
SEND_SOUND(user, sound('sound/misc/sadtrombone.ogg')) //HONK
-/obj/item/toy/russian_revolver/trick_revolver/verb/trick_spin()
- set name = "Spin Chamber"
- set category = "Object"
- set desc = "Click to spin your revolver's chamber."
-
- var/mob/M = usr
-
- if(M.stat || !in_range(M, src))
+/obj/item/toy/russian_revolver/trick_revolver/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
- to_chat(M, "You go to spin the chamber... and it goes off in your face!")
- shoot_gun(M)
+ to_chat(user, "You go to spin the chamber... and it goes off in your face!")
+ shoot_gun(user)
/obj/item/toy/russian_revolver/trick_revolver/attack_self(mob/user)
if(!bullets_left) //You can re-arm the trap...
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index a03903d39d0..5c1f5881cd1 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -6,11 +6,6 @@
* FINGERPRINT CARD
*/
-
-
-/*
- * DATA CARDS - Used for the teleporter
- */
/obj/item/card
name = "card"
desc = "A card."
@@ -23,37 +18,6 @@
/obj/item/card/proc/get_card_account()
return GLOB.station_money_database.find_user_account(associated_account_number)
-/obj/item/card/data
- name = "data card"
- desc = "A disk containing data."
- icon_state = "data"
- var/function = "storage"
- var/data = "null"
- var/special = null
- item_state = "card-id"
-
-/obj/item/card/data/verb/label(t as text)
- set name = "Label Disk"
- set category = "Object"
- set src in usr
-
- if(t)
- src.name = "Data Disk- '[t]'"
- else
- src.name = "Data Disk"
- src.add_fingerprint(usr)
- return
-
-/obj/item/card/data/clown
- name = "coordinates to clown planet"
- icon_state = "data"
- item_state = "card-id"
- layer = 3
- level = 2
- desc = "This card contains coordinates to the fabled Clown Planet. Handle with care."
- function = "teleporter"
- data = "Clown Land"
-
/*
* ID CARDS
*/
@@ -154,7 +118,7 @@
else
. += "It is too far away."
if(guest_pass)
- . += "There is a guest pass attached to this ID card"
+ . += "There is a guest pass attached to this ID card, Alt-Click to remove it."
if(world.time < guest_pass.expiration_time)
. += "It expires at [station_time_timestamp("hh:mm:ss", guest_pass.expiration_time)]."
else
@@ -305,20 +269,16 @@
G.loc = src
guest_pass = G
-/obj/item/card/id/verb/remove_guest_pass()
- set name = "Remove Guest Pass"
- set category = "Object"
- set src in range(0)
-
- if(usr.stat || HAS_TRAIT(usr, TRAIT_UI_BLOCKED) || usr.restrained())
+/obj/item/card/id/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(guest_pass)
- to_chat(usr, "You remove the guest pass from this ID.")
+ to_chat(user, "You remove the guest pass from this ID.")
guest_pass.forceMove(get_turf(src))
guest_pass = null
else
- to_chat(usr, "There is no guest pass attached to this ID")
+ to_chat(user, "There is no guest pass attached to this ID")
/obj/item/card/id/serialize()
var/list/data = ..()
diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm
index fb7772b6389..daf394f7240 100644
--- a/code/game/objects/items/weapons/defib.dm
+++ b/code/game/objects/items/weapons/defib.dm
@@ -93,9 +93,9 @@
/obj/item/defibrillator/ui_action_click()
toggle_paddles()
-/obj/item/defibrillator/CtrlClick()
- if(ishuman(usr) && Adjacent(usr))
- toggle_paddles()
+/obj/item/defibrillator/CtrlClick(mob/user)
+ if(ishuman(user) && Adjacent(user))
+ toggle_paddles(user)
/obj/item/defibrillator/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stock_parts/cell))
@@ -138,21 +138,17 @@
..()
update_icon(UPDATE_OVERLAYS)
-/obj/item/defibrillator/verb/toggle_paddles()
- set name = "Toggle Paddles"
- set category = "Object"
-
- var/mob/living/carbon/human/user = usr
+/obj/item/defibrillator/proc/toggle_paddles(mob/living/carbon/human/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
+ return
if(paddles_on_defib)
//Detach the paddles into the user's hands
- if(usr.incapacitated()) return
-
- if(!usr.put_in_hands(paddles))
+ if(!user.put_in_hands(paddles))
to_chat(user, "You need a free hand to hold the paddles!")
update_icon(UPDATE_OVERLAYS)
return
- paddles.loc = user
+ paddles.forceMove(user)
paddles_on_defib = FALSE
else if(user.is_in_active_hand(paddles))
//Remove from their hands and back onto the defib unit
diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm
index e4f51fcda7e..fc6c9ada1ff 100644
--- a/code/game/objects/items/weapons/implants/implantpad.dm
+++ b/code/game/objects/items/weapons/implants/implantpad.dm
@@ -15,6 +15,10 @@
eject_case()
return ..()
+/obj/item/implantpad/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Click [src] to remove it's stored implant."
+
/obj/item/implantpad/update_icon_state()
if(case)
icon_state = "implantpad-on"
@@ -56,15 +60,11 @@
case = null
update_icon(UPDATE_ICON_STATE)
-/obj/item/implantpad/verb/remove_implant()
- set category = "Object"
- set name = "Remove Bio-chip"
- set src in usr
-
- if(usr.stat || usr.restrained())
+/obj/item/implantpad/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
- eject_case(usr)
+ eject_case(user)
/obj/item/implantpad/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index a96eda7b808..55fb990a6d2 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -225,21 +225,20 @@
resistance_flags = FIRE_PROOF
var/strap_side_straight = FALSE
-/obj/item/storage/backpack/satchel/verb/switch_strap()
- set name = "Switch Strap Side"
- set category = "Object"
- set src in usr
+/obj/item/storage/backpack/satchel/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Shift-Click [src] to flip it's strap side."
- if(usr.incapacitated())
+/obj/item/storage/backpack/satchel/AltShiftClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
+
strap_side_straight = !strap_side_straight
item_state = strap_side_straight ? "satchel-flipped" : "satchel"
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
H.update_inv_back()
-
-
/obj/item/storage/backpack/satcheldeluxe
name = "leather satchel"
desc = "An NT Deluxe satchel, with the finest quality leather and the company logo in a thin gold stitch"
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 435612397d0..7d7ef8c5ba1 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -17,8 +17,8 @@
// Generic non-item
/obj/item/storage/bag
- allow_quick_gather = 1
- allow_quick_empty = 1
+ allow_quick_gather = TRUE
+ allow_quick_empty = TRUE
display_contents_with_number = 1 // should work fine now
use_to_pickup = 1
slot_flags = SLOT_FLAG_BELT
@@ -253,7 +253,7 @@
var/capacity = 300; //the number of sheets it can carry.
w_class = WEIGHT_CLASS_NORMAL
- allow_quick_empty = 1 // this function is superceded
+ allow_quick_empty = TRUE // this function is superceded
/obj/item/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W as obj, stop_messages = 0)
if(!istype(W,/obj/item/stack/sheet) || istype(W,/obj/item/stack/sheet/mineral/sandstone) || istype(W,/obj/item/stack/sheet/wood))
@@ -333,8 +333,7 @@
return
-// Modified quick_empty verb drops appropriate sized stacks
-/obj/item/storage/bag/sheetsnatcher/quick_empty()
+/obj/item/storage/bag/sheetsnatcher/drop_inventory(mob/user)
var/location = get_turf(src)
for(var/obj/item/stack/sheet/S in contents)
while(S.amount)
@@ -344,8 +343,8 @@
S.amount -= stacksize
if(!S.amount)
qdel(S) // todo: there's probably something missing here
- if(usr.s_active)
- usr.s_active.show_to(usr)
+ if(user.s_active)
+ user.s_active.show_to(user)
update_icon()
// Instead of removing
diff --git a/code/game/objects/items/weapons/storage/storage_base.dm b/code/game/objects/items/weapons/storage/storage_base.dm
index d227af27b39..4511e5b807e 100644
--- a/code/game/objects/items/weapons/storage/storage_base.dm
+++ b/code/game/objects/items/weapons/storage/storage_base.dm
@@ -57,16 +57,6 @@
can_hold = typecacheof(can_hold)
cant_hold = typecacheof(cant_hold) - typecacheof(cant_hold_override)
- if(allow_quick_empty)
- verbs += /obj/item/storage/verb/quick_empty
- else
- verbs -= /obj/item/storage/verb/quick_empty
-
- if(allow_quick_gather)
- verbs += /obj/item/storage/verb/toggle_gathering_mode
- else
- verbs -= /obj/item/storage/verb/toggle_gathering_mode
-
populate_contents()
boxes = new /obj/screen/storage()
@@ -92,6 +82,13 @@
LAZYCLEARLIST(mobs_viewing)
return ..()
+/obj/item/storage/examine(mob/user)
+ . = ..()
+ if(allow_quick_empty)
+ . += "You can use [src] in hand to empty it's entire contents."
+ if(allow_quick_gather)
+ . += "You can Alt-Shift-Click [src] to switch it's gathering method."
+
/obj/item/storage/forceMove(atom/destination)
. = ..()
if(!ismob(destination.loc))
@@ -582,9 +579,7 @@
show_to(user)
return ..()
-/obj/item/storage/verb/toggle_gathering_mode()
- set name = "Switch Gathering Method"
- set category = "Object"
+/obj/item/storage/AltShiftClick(mob/living/carbon/human/user)
pickup_all_on_tile = !pickup_all_on_tile
switch(pickup_all_on_tile)
@@ -593,17 +588,6 @@
if(FALSE)
to_chat(usr, "[src] now picks up one item at a time.")
-/obj/item/storage/verb/quick_empty()
- set name = "Empty Contents"
- set category = "Object"
-
- if((!ishuman(usr) && (loc != usr)) || usr.stat || usr.restrained())
- return
- if(!removal_allowed_check(usr))
- return
-
- drop_inventory(usr)
-
/obj/item/storage/proc/drop_inventory(user)
var/turf/T = get_turf(src)
hide_from(user)
diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index 3bf5e0fcef7..a613ef07428 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -26,26 +26,22 @@
QDEL_NULL(noz)
return ..()
-/obj/item/watertank/ui_action_click()
- toggle_mister()
+/obj/item/watertank/ui_action_click(mob/user)
+ toggle_mister(user)
/obj/item/watertank/item_action_slot_check(slot, mob/user)
if(slot == SLOT_HUD_BACK)
- return 1
+ return TRUE
-/obj/item/watertank/verb/toggle_mister()
- set name = "Toggle Mister"
- set category = "Object"
- if(usr.get_item_by_slot(SLOT_HUD_BACK) != src)
- to_chat(usr, "The watertank needs to be on your back to use.")
+/obj/item/watertank/proc/toggle_mister(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
- if(usr.incapacitated())
+ if(user.get_item_by_slot(SLOT_HUD_BACK) != src)
+ to_chat(user, "The watertank needs to be on your back to use.")
return
on = !on
-
- var/mob/living/carbon/human/user = usr
if(on)
- if(noz == null)
+ if(!noz)
noz = make_noz()
//Detach the nozzle into the user's hands
@@ -53,7 +49,7 @@
on = FALSE
to_chat(user, "You need a free hand to hold the mister.")
return
- noz.loc = user
+ noz.forceMove(user)
else
//Remove from their hands and put back "into" the tank
remove_noz()
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index d3eceff5ae8..0409a6004d3 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -1,94 +1,8 @@
/* Teleportation devices.
* Contains:
- * Locator
* Hand-tele
*/
-/*
- * Locator
- */
-/obj/item/locator
- name = "locator"
- desc = "Used to track those with locater implants."
- icon = 'icons/obj/implants.dmi'
- icon_state = "locator"
- var/temp = null
- var/frequency = 1451
- var/broadcasting = FALSE
- var/listening = TRUE
- flags = CONDUCT
- w_class = WEIGHT_CLASS_SMALL
- item_state = "electronic"
- throw_speed = 4
- throw_range = 20
- materials = list(MAT_METAL=400)
- armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 30, RAD = 0, FIRE = 100, ACID = 100)
- origin_tech = "magnets=3;bluespace=2"
-
-/obj/item/locator/attack_self(mob/user as mob)
- add_fingerprint(usr)
- var/dat
- if(temp)
- dat = "[src.temp]
Clear"
- else
- dat = {"
-Persistent Signal Locator
-Frequency:
--
-- [format_frequency(src.frequency)]
-+
-+
-
-Refresh"}
- user << browse(dat, "window=radio")
- onclose(user, "radio")
- return
-
-/obj/item/locator/Topic(href, href_list)
- if(..())
- return 1
-
- var/turf/current_location = get_turf(usr)//What turf is the user on?
- if(!current_location || is_admin_level(current_location.z))//If turf was not found or they're in the admin zone
- to_chat(usr, "\The [src] is malfunctioning.")
- return 1
-
- if(href_list["refresh"])
- temp = "Persistent Signal Locator
"
- var/turf/sr = get_turf(src)
-
- if(sr)
- temp += "Located Beacons:
"
-
- for(var/obj/item/radio/beacon/W in GLOB.beacons)
- if(W.frequency == frequency && !W.syndicate)
- if(W && W.z == z)
- var/turf/TB = get_turf(W)
- temp += "[W.code]: [TB.x], [TB.y], [TB.z]
"
-
- temp += "Located Implants:
"
- for(var/obj/item/implant/tracking/T in GLOB.tracked_implants)
- if(!T.implanted || !T.imp_in)
- continue
- var/turf/Tr = get_turf(T)
-
- if(Tr && Tr.z == sr.z)
- temp += " [Tr.x], [Tr.y], [Tr.z]
"
-
- temp += "You are at \[[sr.x],[sr.y],[sr.z]\]."
- temp += "
Refresh
"
- else
- temp += "Processing error: Unable to locate orbital position.
"
- else
- if(href_list["freq"])
- frequency += text2num(href_list["freq"])
- frequency = sanitize_frequency(frequency)
- else
- if(href_list["temp"])
- temp = null
-
- attack_self(usr)
- return 1
/*
* Hand-tele
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index f5b913dc184..02581d96f8d 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -17,8 +17,6 @@
QUEUE_SMOOTH_NEIGHBORS(src)
if(smoothing_flags & SMOOTH_CORNERS)
icon_state = ""
- if(climbable)
- verbs += /obj/structure/proc/climb_on
if(SSticker)
GLOB.cameranet.updateVisibility(src)
@@ -52,15 +50,6 @@
ADD_TRAIT(loc, TRAIT_TURF_COVERED, UNIQUE_TRAIT_SOURCE(src))
return TRUE
-/obj/structure/proc/climb_on()
-
- set name = "Climb structure"
- set desc = "Climbs onto a structure."
- set category = null
- set src in oview(1)
-
- do_climb(usr)
-
/obj/structure/MouseDrop_T(atom/movable/C, mob/user as mob)
if(..())
return TRUE
@@ -186,6 +175,8 @@
var/examine_status = examine_status(user)
if(examine_status)
. += examine_status
+ if(climbable)
+ . += "You can Click-Drag someone to [src] to put them on the table after a short delay."
/obj/structure/proc/examine_status(mob/user) //An overridable proc, mostly for falsewalls.
var/healthpercent = (obj_integrity/max_integrity) * 100
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 0902a0592d4..68175b9739b 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -287,20 +287,6 @@
add_fingerprint(user)
toggle(user)
-/obj/structure/closet/verb/verb_toggleopen()
- set src in oview(1)
- set category = null
- set name = "Toggle Open"
-
- if(usr.incapacitated())
- return
-
- if(ishuman(usr) || isrobot(usr))
- add_fingerprint(usr)
- toggle(usr)
- return
- to_chat(usr, "This mob type can't use this verb.")
-
/obj/structure/closet/update_icon_state()
if(!opened)
icon_state = "[icon_closed][transparent ? "_trans" : ""]"
diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
index 36463ea6ac8..1bde25e8c79 100644
--- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
@@ -127,38 +127,6 @@
// no, you can't shove people into a fireaxe cabinet either
return FALSE
-/obj/structure/closet/fireaxecabinet/verb/toggle_openness() //nice name, huh? HUH?! -Erro //YEAH -Agouri
- set name = "Open/Close"
- set category = "Object"
-
- if(isrobot(usr) || locked || smashed)
- if(locked)
- to_chat(usr, "The cabinet won't budge!")
- else if(smashed)
- to_chat(usr, "The protective glass is broken!")
- return
-
- operate_panel()
-
-/obj/structure/closet/fireaxecabinet/verb/remove_fire_axe()
- set name = "Remove Fire Axe"
- set category = "Object"
-
- if(isrobot(usr))
- return
-
- if(localopened)
- if(fireaxe)
- usr.put_in_hands(fireaxe)
- to_chat(usr, "You take \the [fireaxe] from [src].")
- has_axe = "empty"
- fireaxe = null
- else
- to_chat(usr, "[src] is empty.")
- else
- to_chat(usr, "[src] is closed.")
- update_icon(UPDATE_ICON_STATE)
-
/obj/structure/closet/fireaxecabinet/attack_ai(mob/user as mob)
if(smashed)
to_chat(user, "The security of the cabinet is compromised.")
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index c12496aaca4..a1ad8350df0 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -82,20 +82,6 @@
else
toggle(user)
-/obj/structure/closet/secure_closet/verb/verb_togglelock()
- set src in oview(1) // One square distance
- set category = "Object"
- set name = "Toggle Lock"
-
- if(usr.incapacitated()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain
- return
-
- if(ishuman(usr)||isrobot(usr))
- add_fingerprint(usr)
- togglelock(usr)
- return
- to_chat(usr, "This mob type can't use this verb.")
-
/obj/structure/closet/secure_closet/update_overlays() //Putting the welded stuff in update_overlays() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot)
cut_overlays()
if(opened)
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index 517dd7a808c..c07464d48ad 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -71,7 +71,7 @@
M.take_overall_damage((M.health - obj_integrity - 100),0) //any new damage the statue incurred is transfered to the mob
..()
-
+
/obj/structure/closet/statue/shove_impact(mob/living/target, mob/living/attacker)
return FALSE
@@ -105,9 +105,6 @@
/obj/structure/closet/statue/attack_hand()
return
-/obj/structure/closet/statue/verb_toggleopen()
- return
-
/obj/structure/closet/statue/update_icon_state()
return
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index b6d9fd0399f..407e1a4a54a 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -229,25 +229,13 @@
/obj/structure/closet/crate/secure/AltClick(mob/user)
if(Adjacent(user) && !opened)
- verb_togglelock()
+ if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || user.stat) // Don't use it if you're not able to! Checks for stuns, ghost and restrain
+ return
+ togglelock()
return
. = ..()
-/obj/structure/closet/crate/secure/verb/verb_togglelock()
- set src in oview(1) // One square distance
- set category = null
- set name = "Toggle Lock"
-
- if(HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain
- return
-
- if(ishuman(usr) || isrobot(usr))
- add_fingerprint(usr)
- togglelock(usr)
- return
- to_chat(usr, "This mob type can't use this verb.")
-
/obj/structure/closet/crate/secure/attack_hand(mob/user)
if(manifest)
to_chat(user, "You tear the manifest off of the crate.")
diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm
index cba1d3c799d..9eacf37ffb5 100644
--- a/code/game/objects/structures/electricchair.dm
+++ b/code/game/objects/structures/electricchair.dm
@@ -25,6 +25,10 @@
part.part1 = part1
part.part2 = part2
+/obj/structure/chair/e_chair/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Click [src] to activate it."
+
/obj/structure/chair/e_chair/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/wrench))
var/obj/structure/chair/C = new /obj/structure/chair(loc)
@@ -37,16 +41,13 @@
return
return ..()
-/obj/structure/chair/e_chair/verb/activate_e_chair()
- set name = "Activate Electric Chair"
- set category = "Object"
- set src in oview(1)
- if(usr.stat || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained())
+/obj/structure/chair/e_chair/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(last_time + delay_time > world.time)
- to_chat(usr, "\The [src] is not ready yet!")
+ to_chat(user, "[src] is not ready yet!")
return
- to_chat(usr, "You activate \the [src].")
+ to_chat(user, "You activate [src].")
shock()
/obj/structure/chair/e_chair/rotate()
diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm
index cc6e3d2f824..7177cc6937b 100644
--- a/code/game/objects/structures/reflector.dm
+++ b/code/game/objects/structures/reflector.dm
@@ -100,30 +100,14 @@
/obj/structure/reflector/proc/get_reflection(srcdir,pdir)
return 0
-
-/obj/structure/reflector/verb/rotate()
- set name = "Rotate"
- set category = "Object"
- set src in oview(1)
-
- if(usr.incapacitated())
- return
- if(anchored)
- to_chat(usr, "It is fastened to the floor!")
- return 0
- dir = turn(dir, 270)
- return 1
-
-
/obj/structure/reflector/AltClick(mob/user)
- ..()
- if(user.incapacitated())
- to_chat(user, "You can't do that right now!")
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
- if(!in_range(src, user))
+
+ if(anchored)
+ to_chat(user, "You cannot rotate [src] right now. It is fastened to the floor!")
return
- else
- rotate()
+ dir = turn(dir, 90)
//TYPES OF REFLECTORS, SINGLE, DOUBLE, BOX
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index dc9d0605b68..125a515a2f2 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -21,6 +21,10 @@
/// Used to handle rotation properly, should only be 1, 4, or 8
var/possible_dirs = 4
+/obj/structure/chair/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Click [src] to rotate it."
+
/obj/structure/chair/narsie_act()
if(prob(20))
var/obj/structure/chair/wood/W = new/obj/structure/chair/wood(get_turf(src))
@@ -123,30 +127,22 @@
..()
handle_rotation(newdir)
-/obj/structure/chair/verb/rotate()
- set name = "Rotate Chair"
- set category = "Object"
- set src in oview(1)
+/obj/structure/chair/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
+ return
+ rotate()
+
+/obj/structure/chair/attack_ghost(mob/user)
if(GLOB.configuration.general.ghost_interaction)
- setDir(turn(dir, (360 / possible_dirs))) //90 for 4 possible dirs, 45 for 8.
- handle_rotation()
- return
-
- if(usr.incapacitated())
+ rotate()
return
+ ..()
+/obj/structure/chair/proc/rotate()
setDir(turn(dir, (360 / possible_dirs)))
handle_rotation()
-/obj/structure/chair/AltClick(mob/user)
- if(!Adjacent(user))
- return
- if(user.incapacitated())
- to_chat(user, "You can't do that right now!")
- return
- rotate()
-
// Chair types
/obj/structure/chair/light
name = "chair"
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 8018707927d..0b5c57b0134 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -41,6 +41,8 @@
var/slippery = FALSE
/// The minimum level of environment_smash required for simple animals to be able to one-shot this.
var/minimum_env_smash = ENVIRONMENT_SMASH_WALLS
+ /// Can this table be flipped?
+ var/can_be_flipped = TRUE
/obj/structure/table/Initialize(mapload)
. = ..()
@@ -50,6 +52,11 @@
/obj/structure/table/examine(mob/user)
. = ..()
. += deconstruction_hints(user)
+ if(can_be_flipped)
+ if(flipped)
+ . += "Alt-Shift-Click to right the table again."
+ else
+ . += "Alt-Shift-Click to flip over the table."
/obj/structure/table/proc/deconstruction_hints(mob/user)
return "The top is screwed on, but the main bolts are also visible."
@@ -318,39 +325,22 @@
return 0
return T.straight_table_check(direction)
-/obj/structure/table/verb/do_flip()
- set name = "Flip table"
- set desc = "Flips a non-reinforced table"
- set category = null
- set src in oview(1)
-
- if(!can_touch(usr) || ismouse(usr))
+/obj/structure/table/AltShiftClick(mob/living/carbon/human/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user) || !can_be_flipped)
return
- if(!flip(get_cardinal_dir(usr,src)))
- to_chat(usr, "It won't budge.")
- return
+ if(!flipped)
+ if(!flip(get_cardinal_dir(user, src)))
+ to_chat(user, "It won't budge.")
+ return
- usr.visible_message("[usr] flips \the [src]!")
-
- if(climbable)
- structure_shaken()
-
- return
-
-/obj/structure/table/proc/do_put()
- set name = "Put table back"
- set desc = "Puts flipped table back"
- set category = "Object"
- set src in oview(1)
-
- if(!can_touch(usr) || ismouse(usr))
- return
-
- if(!unflip())
- to_chat(usr, "It won't budge.")
- return
+ user.visible_message("[user] flips \the [src]!")
+ if(climbable)
+ structure_shaken()
+ else
+ if(!unflip())
+ to_chat(user, "It won't budge.")
/obj/structure/table/proc/flip(direction)
if(flipped)
@@ -359,9 +349,6 @@
if( !straight_table_check(turn(direction,90)) || !straight_table_check(turn(direction,-90)) )
return 0
- verbs -=/obj/structure/table/verb/do_flip
- verbs +=/obj/structure/table/proc/do_put
-
dir = direction
if(dir != NORTH)
layer = 5
@@ -397,9 +384,6 @@
if(!can_flip)
return 0
- verbs -=/obj/structure/table/proc/do_put
- verbs +=/obj/structure/table/verb/do_flip
-
layer = initial(layer)
flipped = FALSE
// Initial smoothing flags doesn't add the required SMOOTH_OBJ flag, thats done on init
@@ -800,12 +784,12 @@
icon_state = "tray"
buildstack = /obj/item/stack/sheet/mineral/titanium
buildstackamount = 2
+ can_be_flipped = FALSE
var/list/typecache_can_hold = list(/mob, /obj/item)
var/list/held_items = list()
/obj/structure/table/tray/Initialize()
. = ..()
- verbs -= /obj/structure/table/verb/do_flip
typecache_can_hold = typecacheof(typecache_can_hold)
for(var/atom/movable/held in get_turf(src))
if(!held.anchored && held.move_resist != INFINITY && is_type_in_typecache(held, typecache_can_hold))
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index bb76a2c5266..09f57dede18 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -47,7 +47,8 @@
else
. += "The maintenance panel is wired, but the circuit slot is empty."
- . += "Alt-click to rotate it clockwise."
+ . += "Alt-Click to rotate it."
+ . += "Alt-Shift-Click to flip it."
/obj/structure/windoor_assembly/Initialize(mapload, set_dir)
. = ..()
@@ -337,55 +338,38 @@
to_chat(user, "You [polarized_glass ? "enable" : "disable"] the electrochromic panel in the windoor assembly.")
-//Rotates the windoor assembly clockwise
-/obj/structure/windoor_assembly/verb/revrotate()
- set name = "Rotate Windoor Assembly"
- set category = "Object"
- set src in oview(1)
- if(usr.stat || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained())
+
+/obj/structure/windoor_assembly/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
+
if(anchored)
- to_chat(usr, "[src] cannot be rotated while it is fastened to the floor!")
- return FALSE
- var/target_dir = turn(dir, 270)
+ to_chat(user, "[src] cannot be rotated while it is fastened to the floor!")
+ return
+ var/target_dir = turn(dir, 90)
if(!valid_window_location(loc, target_dir))
- to_chat(usr, "[src] cannot be rotated in that direction!")
- return FALSE
+ to_chat(user, "[src] cannot be rotated in that direction!")
+ return
setDir(target_dir)
ini_dir = dir
update_icon(UPDATE_ICON_STATE)
- return TRUE
-
-/obj/structure/windoor_assembly/AltClick(mob/user)
- ..()
- if(user.incapacitated())
- to_chat(user, "You can't do that right now!")
- return
- if(!in_range(src, user))
- return
- else
- revrotate()
//Flips the windoor assembly, determines whather the door opens to the left or the right
-/obj/structure/windoor_assembly/verb/flip()
- set name = "Flip Windoor Assembly"
- set category = "Object"
- set src in oview(1)
- if(usr.stat || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained())
+/obj/structure/windoor_assembly/AltShiftClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(facing == "l")
- to_chat(usr, "The windoor will now slide to the right.")
+ to_chat(user, "The windoor will now slide to the right.")
facing = "r"
else
facing = "l"
- to_chat(usr, "The windoor will now slide to the left.")
+ to_chat(user, "The windoor will now slide to the left.")
update_icon(UPDATE_ICON_STATE)
- return
#undef EMPTY_ASSEMBLY
#undef WIRED_ASSEMBLY
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 38d06228570..f919cf8e33c 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -53,7 +53,7 @@
else
. += "The window is unscrewed from the floor, and could be deconstructed by wrenching."
if(!anchored && !fulltile)
- . += "Alt-click to rotate it."
+ . += "Alt-Click to rotate it."
/obj/structure/window/Initialize(mapload, direct)
. = ..()
@@ -372,61 +372,10 @@
if(fulltile)
. += new shardtype(location)
-/obj/structure/window/verb/rotate()
- set name = "Rotate Window Counter-Clockwise"
- set category = "Object"
- set src in oview(1)
-
- if(usr.incapacitated())
- return
-
- if(anchored)
- to_chat(usr, "[src] cannot be rotated while it is fastened to the floor!")
- return FALSE
-
- var/target_dir = turn(dir, 90)
- if(!valid_window_location(loc, target_dir))
- to_chat(usr, "[src] cannot be rotated in that direction!")
- return FALSE
-
- setDir(target_dir)
- air_update_turf(1)
- ini_dir = dir
- add_fingerprint(usr)
- return TRUE
-
-/obj/structure/window/verb/revrotate()
- set name = "Rotate Window Clockwise"
- set category = "Object"
- set src in oview(1)
-
- if(usr.incapacitated())
- return
-
- if(anchored)
- to_chat(usr, "[src] cannot be rotated while it is fastened to the floor!")
- return FALSE
-
- var/target_dir = turn(dir, 270)
-
- if(!valid_window_location(loc, target_dir))
- to_chat(usr, "[src] cannot be rotated in that direction!")
- return FALSE
-
- setDir(target_dir)
- ini_dir = dir
- add_fingerprint(usr)
- return TRUE
-
/obj/structure/window/AltClick(mob/user)
if(fulltile) // Can't rotate these.
return ..()
- if(user.incapacitated())
- to_chat(user, "You can't do that right now!")
- return
-
- if(!Adjacent(user))
- to_chat(user, "Move closer to the window!")
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(anchored)
@@ -444,7 +393,6 @@
setDir(target_dir)
ini_dir = dir
add_fingerprint(user)
- return TRUE
/obj/structure/window/Destroy()
density = FALSE
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index f61e8b1ae55..238e3ec310a 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -28,6 +28,7 @@
/obj/item/assembly/infra/examine(mob/user)
. = ..()
. += "The assembly is [secured ? "secure" : "not secure"]. The infrared trigger is [on ? "on" : "off"]."
+ . += "Alt-Click to rotate it."
/obj/item/assembly/infra/activate()
if(!..())
@@ -159,25 +160,24 @@
if(first)
first.vis_spread(visible)
if(href_list["rotate"])
- rotate()
+ rotate(usr)
if(href_list["close"])
usr << browse(null, "window=infra")
return
if(usr)
attack_self(usr)
-/obj/item/assembly/infra/verb/rotate()//This could likely be better
- set name = "Rotate Infrared Laser"
- set category = "Object"
- set src in usr
+/obj/item/assembly/infra/AltClick(mob/user)
+ rotate(user)
- if(usr.stat || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained())
+/obj/item/assembly/infra/proc/rotate(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
dir = turn(dir, 90)
- if(usr.machine == src)
- interact(usr)
+ if(user.machine == src)
+ interact(user)
if(first)
qdel(first)
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index 398eebd714d..3b44e199396 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -12,6 +12,7 @@
. = ..()
if(armed)
. += "It looks like it's armed."
+ . += "Alt-Click to hide it."
/obj/item/assembly/mousetrap/activate()
if(!..())
@@ -143,13 +144,9 @@
armed = TRUE
-/obj/item/assembly/mousetrap/verb/hide_under()
- set src in oview(1)
- set name = "Hide"
- set category = "Object"
-
- if(usr.stat)
+/obj/item/assembly/mousetrap/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
layer = TURF_LAYER + 0.2
- to_chat(usr, "You hide [src].")
+ to_chat(user, "You hide [src].")
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index c7a89b7df42..495ed5d8eac 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -26,6 +26,8 @@
var/last_injection
var/injection_cooldown = 34 SECONDS
var/efficiency
+ /// Timer that we use to remove people that are in us for too long
+ var/removal_timer
light_color = LIGHT_COLOR_WHITE
@@ -38,9 +40,7 @@
. += "You see [occupant.name] inside."
. += "The Cryogenic cell chamber is effective at treating those with genetic damage, but all other damage types at a moderate rate."
. += "Mostly using cryogenic chemicals, such as cryoxadone for it's medical purposes, requires that the inside of the cell be kept cool at all times. Hooking up a freezer and cooling the pipeline will do this nicely."
- . += "Click-drag someone to a cell to place them in it, use the 'Eject occupant' verb to remove them."
- if(user.loc == src)
- . += "You can use the 'Eject occupant' verb to eject yourself. This will take roughly 2 minutes."
+ . += "Click-drag someone to a cell to place them in it, Alt-Click it to remove it."
/obj/machinery/atmospherics/unary/cryo_cell/power_change()
..()
@@ -414,6 +414,7 @@
occupant = null
update_icon(UPDATE_OVERLAYS)
+ deltimer(removal_timer)
/obj/machinery/atmospherics/unary/cryo_cell/force_eject_occupant(mob/target)
go_out()
@@ -451,30 +452,15 @@
add_fingerprint(usr)
update_icon(UPDATE_OVERLAYS)
M.ExtinguishMob()
+ removal_timer = addtimer(CALLBACK(src, PROC_REF(auto_eject)), 1 MINUTES, TIMER_STOPPABLE)
return TRUE
-/obj/machinery/atmospherics/unary/cryo_cell/verb/move_eject()
- set name = "Eject occupant"
- set category = "Object"
- set src in oview(1)
+/obj/machinery/atmospherics/unary/cryo_cell/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
+ return
- if(usr == occupant)//If the user is inside the tube...
- if(usr.stat == DEAD)
- return
- to_chat(usr, "Release sequence activated. This will take one minute.")
- sleep(600)
- if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already
- return
- go_out()//and release him from the eternal prison.
- else
- if(usr.default_can_use_topic(src) != STATUS_INTERACTIVE)
- return
- if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other
- return
- add_attack_logs(usr, occupant, "Ejected from cryo cell at [COORD(src)]")
- go_out()
- add_fingerprint(usr)
- return
+ go_out()
+ add_fingerprint(user)
/obj/machinery/atmospherics/unary/cryo_cell/narsie_act()
go_out()
@@ -482,26 +468,6 @@
color = "red"//force the icon to red
light_color = LIGHT_COLOR_RED
-/obj/machinery/atmospherics/unary/cryo_cell/verb/move_inside()
- set name = "Move Inside"
- set category = "Object"
- set src in oview(1)
-
- if(usr.has_buckled_mobs()) //mob attached to us
- to_chat(usr, "[usr] will not fit into [src] because [usr.p_they()] [usr.p_have()] a slime latched onto [usr.p_their()] head.")
- return
-
- if(stat & (NOPOWER | BROKEN))
- return
-
- if(usr.incapacitated() || usr.buckled) //are you cuffed, dying, lying, stunned or other
- return
-
- put_mob(usr)
- return
-
-
-
/datum/data/function/proc/reset()
return
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 385af84f4ca..f4383659f97 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -228,22 +228,18 @@
* BLIND // can't see anything
*/
-/obj/item/clothing/glasses/verb/adjust_eyewear() //Adjust eyewear to be worn above or below the mask.
- set name = "Adjust Eyewear"
- set category = "Object"
- set desc = "Adjust your eyewear to be worn over or under a mask."
- set src in usr
+/obj/item/clothing/glasses/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Click [src] to adjust if it fits over or under your mask."
- var/mob/living/carbon/human/user = usr
- if(!istype(user))
- return
- if(user.incapacitated()) //Dead spessmen adjust no glasses. Resting/buckled ones do, though
+/obj/item/clothing/glasses/AltClick(mob/living/carbon/human/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user) || !istype(user))
return
var/action_fluff = "You adjust \the [src]"
if(user.glasses == src)
if(!user.canUnEquip(src))
- to_chat(usr, "[src] is stuck to you!")
+ to_chat(user, "[src] is stuck to you!")
return
if(attack_hand(user)) //Remove the glasses for this action. Prevents logic-defying instances where glasses phase through your mask as it ascends/descends to another plane of existence.
action_fluff = "You remove \the [src] and adjust it"
@@ -304,7 +300,7 @@
sensor_mode = SUIT_SENSOR_OFF
return TRUE
-/obj/item/clothing/under/proc/set_sensors(mob/user as mob)
+/obj/item/clothing/under/proc/set_sensors(mob/user)
if(!user.Adjacent(src) || !ishuman(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
return
if(has_sensor >= 2)
@@ -326,7 +322,7 @@
sensor_mode = modes.Find(switchMode) - 1
- if(src.loc == user)
+ if(loc == user)
switch(sensor_mode)
if(SUIT_SENSOR_OFF)
to_chat(user, "You disable your suit's remote sensing equipment.")
@@ -341,32 +337,25 @@
if(H.w_uniform == src)
H.update_suit_sensors()
- else if(ismob(src.loc))
+ else if(ismob(loc))
switch(sensor_mode)
if(SUIT_SENSOR_OFF)
for(var/mob/V in viewers(user, 1))
- V.show_message("[user] disables [src.loc]'s remote sensing equipment.", 1)
+ V.show_message("[user] disables [loc]'s remote sensing equipment.", 1)
if(SUIT_SENSOR_BINARY)
for(var/mob/V in viewers(user, 1))
- V.show_message("[user] turns [src.loc]'s remote sensors to binary.", 1)
+ V.show_message("[user] turns [loc]'s remote sensors to binary.", 1)
if(SUIT_SENSOR_VITAL)
for(var/mob/V in viewers(user, 1))
- V.show_message("[user] sets [src.loc]'s sensors to track vitals.", 1)
+ V.show_message("[user] sets [loc]'s sensors to track vitals.", 1)
if(SUIT_SENSOR_TRACKING)
for(var/mob/V in viewers(user, 1))
- V.show_message("[user] sets [src.loc]'s sensors to maximum.", 1)
+ V.show_message("[user] sets [loc]'s sensors to maximum.", 1)
if(ishuman(src))
var/mob/living/carbon/human/H = src
if(H.w_uniform == src)
H.update_suit_sensors()
-/obj/item/clothing/under/verb/toggle()
- set name = "Toggle Suit Sensors"
- set category = "Object"
- set src in usr
-
- set_sensors(usr)
-
/obj/item/clothing/under/AltShiftClick(mob/user)
set_sensors(user)
@@ -825,46 +814,40 @@
if(SUIT_SENSOR_TRACKING)
. += "Its vital tracker and tracking beacon appear to be enabled."
if(has_sensor == 1)
- . += "Alt-shift-click to toggle the sensors mode."
+ . += "Alt-shift-click to toggle the sensors mode."
else
. += "This suit does not have any sensors."
if(length(accessories))
for(var/obj/item/clothing/accessory/A in accessories)
. += "\A [A] is attached to it."
- . += "Alt-click to remove an accessory."
+ . += "Alt-click to remove an accessory."
+ . += "Ctrl-Shift-Click to roll down this jumpsuit."
-/obj/item/clothing/under/verb/rollsuit()
- set name = "Roll Down Jumpsuit"
- set category = "Object"
- set src in usr
- if(!isliving(usr)) return
- if(usr.stat) return
+/obj/item/clothing/under/CtrlShiftClick(mob/living/carbon/human/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user) || !istype(user))
+ to_chat(user, "You cannot roll down the uniform!")
+ return
- var/mob/living/carbon/human/H = usr
+ if(copytext(item_color,-2) != "_d")
+ basecolor = item_color
- if(!usr.incapacitated())
- if(copytext(item_color,-2) != "_d")
- basecolor = item_color
-
- if(usr.get_item_by_slot(SLOT_HUD_JUMPSUIT) != src)
- to_chat(usr, "You must wear the uniform to adjust it!")
-
- else
- if((basecolor + "_d_s") in icon_states(H.w_uniform.sprite_sheets[H.dna.species.sprite_sheet_name]))
- if(H.w_uniform.sprite_sheets[H.dna.species.sprite_sheet_name] && icon_exists(H.w_uniform.sprite_sheets[H.dna.species.sprite_sheet_name], "[basecolor]_d_s"))
- item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
- usr.update_inv_w_uniform()
- else
- if(H.w_uniform.sprite_sheets["Human"] && icon_exists(H.w_uniform.sprite_sheets["Human"], "[basecolor]_d_s"))
- item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
- usr.update_inv_w_uniform()
- else
- to_chat(usr, "You cannot roll down this uniform!")
+ if(user.get_item_by_slot(SLOT_HUD_JUMPSUIT) != src)
+ to_chat(user, "You must wear the uniform to adjust it!")
else
- to_chat(usr, "You cannot roll down the uniform!")
+ if((basecolor + "_d_s") in icon_states(user.w_uniform.sprite_sheets[user.dna.species.sprite_sheet_name]))
+ if(user.w_uniform.sprite_sheets[user.dna.species.sprite_sheet_name] && icon_exists(user.w_uniform.sprite_sheets[user.dna.species.sprite_sheet_name], "[basecolor]_d_s"))
+ item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
+ user.update_inv_w_uniform()
+
+ else
+ if(user.w_uniform.sprite_sheets["Human"] && icon_exists(user.w_uniform.sprite_sheets["Human"], "[basecolor]_d_s"))
+ item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
+ user.update_inv_w_uniform()
+ else
+ to_chat(user, "You cannot roll down this uniform!")
if(item_color == "[basecolor]")
body_parts_covered = initial(body_parts_covered)
else
@@ -872,18 +855,8 @@
body_parts_covered &= ~LOWER_TORSO
body_parts_covered &= ~ARMS
-/obj/item/clothing/under/verb/removetie()
- set name = "Remove Accessory"
- set category = "Object"
- set src in usr
- handle_accessories_removal()
-
-/obj/item/clothing/under/proc/handle_accessories_removal()
- if(!isliving(usr))
- return
- if(usr.incapacitated())
- return
- if(!Adjacent(usr))
+/obj/item/clothing/under/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(!length(accessories))
return
@@ -895,7 +868,7 @@
A = pick
else
A = accessories[1]
- remove_accessory(usr,A)
+ remove_accessory(user, A)
/obj/item/clothing/under/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A)
if(!(A in accessories))
@@ -915,9 +888,6 @@
A.emp_act(severity)
..()
-/obj/item/clothing/under/AltClick()
- handle_accessories_removal()
-
/obj/item/clothing/obj_destruction(damage_flag)
if(damage_flag == BOMB || damage_flag == MELEE)
var/turf/T = get_turf(src)
diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm
index 000525370ca..ac798acda90 100644
--- a/code/modules/clothing/under/accessories/holster.dm
+++ b/code/modules/clothing/under/accessories/holster.dm
@@ -95,41 +95,19 @@
else
. += "It is empty."
-/obj/item/clothing/accessory/holster/on_attached(obj/item/clothing/under/S, mob/user as mob)
- ..()
- has_suit.verbs += /obj/item/clothing/accessory/holster/verb/holster_verb
-
-/obj/item/clothing/accessory/holster/on_removed(mob/user as mob)
- has_suit.verbs -= /obj/item/clothing/accessory/holster/verb/holster_verb
- ..()
-
//For the holster hotkey
-/obj/item/clothing/accessory/holster/verb/holster_verb()
- set name = "Holster"
- set category = "Object"
- set src in usr
- if(!isliving(usr)) return
- if(usr.stat) return
+/obj/item/clothing/accessory/holster/proc/handle_holster_usage(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
+ return
- var/obj/item/clothing/accessory/holster/H = null
- if(istype(src, /obj/item/clothing/accessory/holster))
- H = src
- else if(istype(src, /obj/item/clothing/under))
- var/obj/item/clothing/under/S = src
- if(S.accessories.len)
- H = locate() in S.accessories
-
- if(!H)
- to_chat(usr, "Something is very wrong.")
-
- if(!H.holstered)
- if(!istype(usr.get_active_hand(), /obj/item/gun))
- to_chat(usr, "You need your gun equiped to holster it.")
+ if(!holstered)
+ var/obj/item/gun/gun = user.get_active_hand()
+ if(!istype(gun))
+ to_chat(user, "You need your gun equiped to holster it.")
return
- var/obj/item/gun/W = usr.get_active_hand()
- H.holster(W, usr)
+ holster(gun, user)
else
- H.unholster(usr)
+ unholster(user)
/obj/item/clothing/accessory/holster/armpit
name = "shoulder holster"
diff --git a/code/modules/events/blob/blob_mobs.dm b/code/modules/events/blob/blob_mobs.dm
index 1672a3aeeb5..0b9fca72d0f 100644
--- a/code/modules/events/blob/blob_mobs.dm
+++ b/code/modules/events/blob/blob_mobs.dm
@@ -190,6 +190,22 @@
move_resist = MOVE_FORCE_OVERPOWERING
a_intent = INTENT_HARM
+/mob/living/simple_animal/hostile/blob/blobbernaut/Initialize(mapload)
+ . = ..()
+ var/datum/action/innate/communicate_overmind_blob/overmind_chat = new
+ overmind_chat.Grant(src)
+
+/datum/action/innate/communicate_overmind_blob
+ name = "Speak with the overmind"
+ icon_icon = 'icons/mob/guardian.dmi'
+ button_icon_state = "communicate"
+
+/datum/action/innate/communicate_overmind_blob/Activate()
+ var/mob/living/simple_animal/hostile/blob/blobbernaut/user = owner
+ if(user.stat)
+ return
+ user.blob_talk()
+
/mob/living/simple_animal/hostile/blob/blobbernaut/Life(seconds, times_fired)
if(stat != DEAD && (getBruteLoss() || getFireLoss())) // Heal on blob structures
if(locate(/obj/structure/blob) in get_turf(src))
@@ -214,14 +230,6 @@
return FALSE
flick("blobbernaut_death", src)
-/mob/living/simple_animal/hostile/blob/blobbernaut/verb/communicate_overmind()
- set category = "Blobbernaut"
- set name = "Blob Telepathy"
- set desc = "Send a message to the Overmind"
-
- if(stat != DEAD)
- blob_talk()
-
/mob/living/simple_animal/hostile/blob/blobbernaut/proc/blob_talk()
var/message = input(src, "Announce to the overmind", "Blob Telepathy")
var/rendered
diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm
index b1ab9d3fc64..d2cde90e022 100644
--- a/code/modules/fish/fishtank.dm
+++ b/code/modules/fish/fishtank.dm
@@ -84,25 +84,17 @@
// VERBS & PROCS //
//////////////////////////////
-/obj/machinery/fishtank/verb/toggle_lid_verb()
- set name = "Toggle Tank Lid"
- set category = "Object"
- set src in view(1)
+/obj/machinery/fishtank/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
+ return
- toggle_lid()
-
-/obj/machinery/fishtank/proc/toggle_lid()
lid_switch = !lid_switch
update_icon(UPDATE_OVERLAYS)
-/obj/machinery/fishtank/verb/toggle_light_verb()
- set name = "Toggle Tank Light"
- set category = "Object"
- set src in view(1)
+/obj/machinery/fishtank/AltShiftClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
+ return
- toggle_light()
-
-/obj/machinery/fishtank/proc/toggle_light()
light_switch = !light_switch
if(light_switch)
set_light(2, 2, "#a0a080")
@@ -113,12 +105,6 @@
// NEW() PROCS //
//////////////////////////////
-/obj/machinery/fishtank/Initialize(mapload)
- . = ..()
- if(!has_lid) //Tank doesn't have a lid/light, remove the verbs for then
- verbs -= /obj/machinery/fishtank/verb/toggle_lid_verb
- verbs -= /obj/machinery/fishtank/verb/toggle_light_verb
-
/obj/machinery/fishtank/tank/Initialize(mapload)
. = ..()
if(prob(5)) //5% chance to get the castle decoration
@@ -533,6 +519,8 @@
//Finally, report the full examine_message constructed from the above reports
. += "[examine_message]"
+ . += "You can Alt-Click [src] to open/close its lid."
+ . += "You can Alt-Shift-Click [src] to enable/disable its light."
//////////////////////////////
// ATTACK PROCS //
diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
index dffc5dc48e3..5ba474cf76e 100644
--- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
@@ -15,10 +15,6 @@
drop_sound = 'sound/items/handling/drinkglass_drop.ogg'
pickup_sound = 'sound/items/handling/drinkglass_pickup.ogg'
-/obj/item/reagent_containers/food/drinks/set_APTFT()
- set hidden = FALSE
- ..()
-
/obj/item/reagent_containers/food/drinks/drinkingglass/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/reagent_containers/food/snacks/egg)) //breaking eggs
var/obj/item/reagent_containers/food/snacks/egg/E = I
diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm
index 9c5c8b0ae14..69128c5d568 100644
--- a/code/modules/food_and_drinks/food/condiment.dm
+++ b/code/modules/food_and_drinks/food/condiment.dm
@@ -41,10 +41,6 @@
/obj/item/reagent_containers/food/condiment/attack_self(mob/user)
return
-/obj/item/reagent_containers/food/condiment/set_APTFT()
- set hidden = FALSE
- ..()
-
/obj/item/reagent_containers/food/condiment/attack(mob/M, mob/user, def_zone)
if(!reagents || !reagents.total_volume)
diff --git a/code/modules/food_and_drinks/food_base.dm b/code/modules/food_and_drinks/food_base.dm
index c6b4ad5fbca..b2dafb1a3d8 100644
--- a/code/modules/food_and_drinks/food_base.dm
+++ b/code/modules/food_and_drinks/food_base.dm
@@ -44,10 +44,6 @@
if(world.time > last_ant_time + 5 MINUTES)
check_for_ants()
-/obj/item/reagent_containers/food/set_APTFT()
- set hidden = TRUE
- ..()
-
/obj/item/reagent_containers/food/proc/check_for_ants()
last_ant_time = world.time
var/turf/T = get_turf(src)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index e1324bf52b5..44c77a26e23 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -38,6 +38,10 @@
occupant = null
return ..()
+/obj/machinery/gibber/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Click [src] to empty it."
+
/obj/machinery/gibber/suicide_act(mob/living/user)
if(occupant || locked)
return FALSE
@@ -160,16 +164,12 @@
INVOKE_ASYNC(src, PROC_REF(feedinTopanim))
-/obj/machinery/gibber/verb/eject()
- set category = "Object"
- set name = "Empty Gibber"
- set src in oview(1)
-
- if(usr.incapacitated())
+/obj/machinery/gibber/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
go_out()
- add_fingerprint(usr)
+ add_fingerprint(user)
/obj/machinery/gibber/proc/go_out()
if(operating || !occupant) //no going out if operating, just in case they manage to trigger go_out before being dead
@@ -179,15 +179,13 @@
return
for(var/obj/O in src)
- O.loc = loc
+ O.forceMove(get_turf(src))
occupant.forceMove(get_turf(src))
occupant = null
update_icon(UPDATE_OVERLAYS | UPDATE_ICON_STATE)
- return
-
/obj/machinery/gibber/proc/feedinTopanim()
if(!occupant)
return
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index e8ee0cd1e05..b6a3a29835e 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -131,13 +131,7 @@
// Datum actions
-/obj/item/deck/verb/draw_card(mob/user)
-
- set category = "Object"
- set name = "Draw"
- set desc = "Draw a card from a deck."
- set src in view(1)
-
+/obj/item/deck/proc/draw_card(mob/user)
var/mob/living/carbon/human/M = user
if(user.incapacitated() || !Adjacent(user))
@@ -166,13 +160,7 @@
user.visible_message("[user] draws a card.","You draw a card.")
to_chat(user,"It's the [P].")
-/obj/item/deck/verb/deal_card()
-
- set category = "Object"
- set name = "Deal"
- set desc = "Deal a card from a deck."
- set src in view(1)
-
+/obj/item/deck/proc/deal_card()
if(usr.incapacitated() || !Adjacent(usr))
return
@@ -191,13 +179,7 @@
deal_at(usr, M, 1)
-/obj/item/deck/verb/deal_card_multi()
-
- set category = "Object"
- set name = "Deal Multiple Cards"
- set desc = "Deal multiple cards from a deck."
- set src in view(1)
-
+/obj/item/deck/proc/deal_card_multi()
if(usr.incapacitated() || !Adjacent(usr))
return
@@ -242,14 +224,6 @@
/obj/item/deck/AltClick()
deckshuffle()
-/obj/item/deck/verb/verb_shuffle()
- if(!isobserver(usr))
- set category = "Object"
- set name = "Shuffle"
- set desc = "Shuffle the cards in the deck."
- set src in view(1)
- deckshuffle()
-
/obj/item/deck/proc/deckshuffle()
var/mob/living/user = usr
if(cooldown < world.time - 1 SECONDS)
@@ -440,13 +414,7 @@
// No more datum action here
-/obj/item/cardhand/verb/Removecard()
-
- set category = "Object"
- set name = "Remove card"
- set desc = "Remove a card from the hand."
- set src in view(1)
-
+/obj/item/cardhand/proc/Removecard()
var/mob/living/carbon/user = usr
if(user.incapacitated() || !Adjacent(user))
@@ -482,12 +450,7 @@
return
update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_OVERLAYS)
-/obj/item/cardhand/verb/discard()
-
- set category = "Object"
- set name = "Discard"
- set desc = "Place (a) card(s) from your hand in front of you."
-
+/obj/item/cardhand/proc/discard()
var/mob/living/carbon/user = usr
var/maxcards = min(length(cards), 5)
diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm
index efa4a62bac3..ce9d923f43c 100644
--- a/code/modules/hydroponics/beekeeping/honeycomb.dm
+++ b/code/modules/hydroponics/beekeeping/honeycomb.dm
@@ -18,9 +18,6 @@
pixel_y = rand(8,-8)
update_icon(UPDATE_OVERLAYS)
-/obj/item/reagent_containers/food/snacks/honeycomb/set_APTFT()
- set hidden = TRUE
-
/obj/item/reagent_containers/food/snacks/honeycomb/update_overlays()
. = ..()
var/image/honey
diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm
index 15fec7ec179..5365d90f81f 100644
--- a/code/modules/mining/equipment/wormhole_jaunter.dm
+++ b/code/modules/mining/equipment/wormhole_jaunter.dm
@@ -98,10 +98,13 @@
item_state = "flare"
var/destination
-/obj/item/wormhole_jaunter/contractor/verb/set_destination()
- set category = "Object"
- set name = "Change Portal Destination"
- set src in usr
+/obj/item/wormhole_jaunter/contractor/examine(mob/user)
+ . = ..()
+ . += "You can Alt-Click [src] to change its destination!"
+
+/obj/item/wormhole_jaunter/contractor/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
+ return
var/list/L = list()
var/list/areaindex = list()
@@ -121,7 +124,6 @@
var/desc = input("Please select a location to target.", "Flare Target Interface") in L
destination = L[desc]
- return
/obj/item/wormhole_jaunter/contractor/attack_self(mob/user) // message is later down
activate(user, TRUE)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index db5b968856c..55336d6a6fa 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -241,8 +241,7 @@
//for more info on why this is not atom/pull, see examinate() in mob.dm
/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1))
set name = "Pull"
- set category = "Object"
-
+ set category = null
if(istype(AM) && Adjacent(AM))
start_pulling(AM, show_message = TRUE)
else
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 29236428a58..d65ec5227f9 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -75,12 +75,17 @@
var/current_pda_messaging = null
var/custom_sprite = FALSE
var/slowdown = 0
+ var/speech_state = "Robotic" // Needed for TGUI shit
/mob/living/silicon/pai/Initialize(mapload)
. = ..()
if(istype(loc, /obj/item/paicard))
card = loc
+ else
+ card = new(get_turf(src))
+ forceMove(card)
+ card.setPersonality(src)
if(card)
faction = card.faction.Copy()
@@ -98,9 +103,8 @@
add_language("Gutter")
add_language("Trinary")
- //Verbs for pAI mobile form, chassis and Say flavor text
- verbs += /mob/living/silicon/pai/proc/choose_chassis
- verbs += /mob/living/silicon/pai/proc/choose_verbs
+ AddSpell(new /obj/effect/proc_holder/spell/access_software_pai)
+ AddSpell(new /obj/effect/proc_holder/spell/unfold_chassis_pai)
//PDA
pda = new(src)
@@ -233,27 +237,27 @@
// mobile pai mob. This also includes handling some of the general shit that can occur
// to it. Really this deserves its own file, but for the moment it can sit here. ~ Z
-/mob/living/silicon/pai/verb/fold_out()
- set category = "pAI Commands"
- set name = "Unfold Chassis"
+/obj/effect/proc_holder/spell/unfold_chassis_pai
+ name = "Unfold/Fold Chassis"
+ desc = "Allows you to fold in/out of your mobile form."
+ clothes_req = FALSE
+ base_cooldown = 20 SECONDS
+ action_icon_state = "repairbot"
+ action_background_icon_state = "bg_tech_blue"
- if(stat || IsSleeping() || IsParalyzed() || IsWeakened())
- return
+/obj/effect/proc_holder/spell/unfold_chassis_pai/create_new_targeting()
+ return new /datum/spell_targeting/self
- if(loc != card)
- to_chat(src, "You are already in your mobile form!")
- return
+/obj/effect/proc_holder/spell/unfold_chassis_pai/cast(list/targets, mob/living/user = usr)
+ var/mob/living/silicon/pai/pai_user = user
- if(world.time <= last_special)
- to_chat(src, "You must wait before folding your chassis out again!")
- return
+ if(pai_user.loc != pai_user.card)
+ pai_user.close_up()
+ return TRUE
+ pai_user.force_fold_out()
- last_special = world.time + 200
-
- //I'm not sure how much of this is necessary, but I would rather avoid issues.
- force_fold_out()
-
- visible_message("[src] folds outwards, expanding into a mobile form.", "You fold outwards, expanding into a mobile form.")
+ pai_user.visible_message("[pai_user] folds outwards, expanding into a mobile form.", "You fold outwards, expanding into a mobile form.")
+ return TRUE
/mob/living/silicon/pai/proc/force_fold_out()
if(ismob(card.loc))
@@ -268,73 +272,6 @@
card.forceMove(src)
card.screen_loc = null
-/mob/living/silicon/pai/verb/fold_up()
- set category = "pAI Commands"
- set name = "Collapse Chassis"
-
- if(stat || IsSleeping() || IsParalyzed() || IsWeakened())
- return
-
- if(loc == card)
- to_chat(src, "You are already in your card form!")
- return
-
- if(world.time <= last_special)
- to_chat(src, "You must wait before returning to your card form!")
- return
-
- close_up()
-
-/mob/living/silicon/pai/proc/choose_chassis()
- set category = "pAI Commands"
- set name = "Choose Chassis"
-
- var/list/my_choices = list()
- var/choice
- var/finalized = "No"
-
- //check for custom_sprite
- if(!custom_sprite)
- if(ckey in GLOB.configuration.custom_sprites.pai_holoform_ckeys)
- custom_sprite = TRUE
- my_choices["Custom"] = "[ckey]-pai"
-
- my_choices = possible_chassis.Copy()
- if(custom_sprite)
- my_choices["Custom"] = "[ckey]-pai"
-
- if(loc == card) //don't let them continue in card form, since they won't be able to actually see their new mobile form sprite.
- to_chat(src, "You must be in your mobile form to reconfigure your chassis.")
- return
-
- while(finalized == "No" && client)
- choice = input(usr,"What would you like to use for your mobile chassis icon? This decision can only be made once.") as null|anything in my_choices
- if(!choice) return
- if(choice == "Custom")
- icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
- else
- icon = 'icons/mob/pai.dmi'
- icon_state = my_choices[choice]
- finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes")
-
- chassis = my_choices[choice]
- verbs -= /mob/living/silicon/pai/proc/choose_chassis
-
-/mob/living/silicon/pai/proc/choose_verbs()
- set category = "pAI Commands"
- set name = "Choose Speech Verbs"
-
- var/choice = input(usr,"What theme would you like to use for your speech verbs? This decision can only be made once.") as null|anything in possible_say_verbs
- if(!choice) return
-
- var/list/sayverbs = possible_say_verbs[choice]
- speak_statement = sayverbs[1]
- speak_exclamation = sayverbs[(sayverbs.len>1 ? 2 : sayverbs.len)]
- speak_query = sayverbs[(sayverbs.len>2 ? 3 : sayverbs.len)]
-
- verbs -= /mob/living/silicon/pai/proc/choose_verbs
-
-
/mob/living/silicon/pai/rest()
set name = "Rest"
set category = "IC"
@@ -390,8 +327,6 @@
//I'm not sure how much of this is necessary, but I would rather avoid issues.
/mob/living/silicon/pai/proc/close_up()
-
- last_special = world.time + 200
stand_up()
if(loc == card)
return
diff --git a/code/modules/mob/living/silicon/pai/pai_login.dm b/code/modules/mob/living/silicon/pai/pai_login.dm
new file mode 100644
index 00000000000..a79016531f1
--- /dev/null
+++ b/code/modules/mob/living/silicon/pai/pai_login.dm
@@ -0,0 +1,5 @@
+/mob/living/silicon/pai/Login()
+ ..()
+ if(!custom_sprite)
+ if(ckey in GLOB.configuration.custom_sprites.pai_holoform_ckeys)
+ custom_sprite = TRUE
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index a92ff3dde35..c2196d411a7 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -12,11 +12,21 @@ GLOBAL_LIST_INIT(pai_emotions, list(
GLOBAL_LIST_EMPTY(pai_software_by_key)
-/mob/living/silicon/pai/verb/paiInterface()
- set category = "pAI Commands"
- set name = "Software Interface"
+/obj/effect/proc_holder/spell/access_software_pai
+ name = "Software interface"
+ desc = "Allows you to access your downloaded software."
+ clothes_req = FALSE
+ base_cooldown = 1 SECONDS
+ action_icon_state = "choose_module"
+ action_background_icon_state = "bg_tech_blue"
- ui_interact(src)
+/obj/effect/proc_holder/spell/access_software_pai/create_new_targeting()
+ return new /datum/spell_targeting/self
+
+/obj/effect/proc_holder/spell/access_software_pai/cast(list/targets, mob/living/user = usr)
+ var/mob/living/silicon/pai/pai_user = user
+
+ pai_user.ui_interact(pai_user)
/mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.self_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
diff --git a/code/modules/mob/living/silicon/pai/software/pai_apps.dm b/code/modules/mob/living/silicon/pai/software/pai_apps.dm
index ef149f75056..eb3af5841ec 100644
--- a/code/modules/mob/living/silicon/pai/software/pai_apps.dm
+++ b/code/modules/mob/living/silicon/pai/software/pai_apps.dm
@@ -21,6 +21,32 @@
data["emotions"] = emotions
data["current_emotion"] = user.card.current_emotion
+ var/list/speech_types = list()
+ for(var/name in user.possible_say_verbs)
+ var/list/speech = list()
+ speech["name"] = name
+ speech["id"] = length(speech_types)
+ speech_types[++speech_types.len] = speech
+
+ data["current_speech_verb"] = user.speech_state
+ data["speech_verbs"] = speech_types
+
+ var/list/chassis_choices = list()
+ var/list/chassises_to_add = list()
+
+ chassis_choices = user.possible_chassis.Copy()
+ if(user.custom_sprite)
+ chassis_choices["Custom"] = "[user.ckey]-pai"
+ for(var/name in chassis_choices)
+ var/list/chassis_to_update_with = list()
+ chassis_to_update_with["name"] = name
+ chassis_to_update_with["icon"] = chassis_choices[name]
+ chassis_to_update_with["id"] = length(chassis_to_update_with)
+ chassises_to_add[++chassises_to_add.len] = chassis_to_update_with
+
+ data["available_chassises"] = chassises_to_add
+ data["current_chassis"] = user.chassis
+
var/list/available_s = list()
for(var/s in GLOB.pai_software_by_key)
var/datum/pai_software/PS = GLOB.pai_software_by_key[s]
@@ -64,6 +90,20 @@
var/toggle_key = params["toggle_key"]
if(pai_holder.installed_software[toggle_key])
pai_holder.installed_software[toggle_key].toggle(pai_holder)
+ if("setSpeechStyle")
+ pai_holder.speech_state = params["speech_state"]
+ var/list/sayverbs = pai_holder.possible_say_verbs[pai_holder.speech_state]
+ pai_holder.speak_statement = sayverbs[1]
+ pai_holder.speak_exclamation = sayverbs[length(sayverbs) > 1 ? 2 : length(sayverbs)]
+ pai_holder.speak_query = sayverbs[length(sayverbs) > 2 ? 3 : length(sayverbs)]
+ if("setChassis")
+ pai_holder.chassis = params["chassis_to_change"]
+ pai_holder.icon_state = pai_holder.chassis
+ if(pai_holder.icon_state == "[pai_holder.ckey]-pai")
+ pai_holder.icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
+ else
+ pai_holder.icon = 'icons/mob/pai.dmi'
+
// Directives //
/datum/pai_software/directives
diff --git a/code/modules/mob/living/silicon/robot/robot_mob.dm b/code/modules/mob/living/silicon/robot/robot_mob.dm
index d33d9678c7a..030afb783e2 100644
--- a/code/modules/mob/living/silicon/robot/robot_mob.dm
+++ b/code/modules/mob/living/silicon/robot/robot_mob.dm
@@ -1294,8 +1294,6 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
if(W)
W.attack_self(src)
- return
-
/mob/living/silicon/robot/proc/SetLockdown(state = 1)
// They stay locked down if their wire is cut.
if(wires.is_cut(WIRE_BORG_LOCKED))
diff --git a/code/modules/mob/living/simple_animal/slime/slime_powers.dm b/code/modules/mob/living/simple_animal/slime/slime_powers.dm
index 669fe30a10e..409365ba51b 100644
--- a/code/modules/mob/living/simple_animal/slime/slime_powers.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime_powers.dm
@@ -20,10 +20,7 @@
return 0
return 1
-/mob/living/simple_animal/slime/verb/Feed()
- set category = "Slime"
- set desc = "This will let you feed on any valid creature in the surrounding area. This should also be used to halt the feeding process."
-
+/mob/living/simple_animal/slime/proc/Feed()
if(stat)
return 0
@@ -123,10 +120,7 @@
layer = initial(layer)
buckled.unbuckle_mob(src,force=TRUE)
-/mob/living/simple_animal/slime/verb/Evolve()
- set category = "Slime"
- set desc = "This will let you evolve from baby to adult slime."
-
+/mob/living/simple_animal/slime/proc/Evolve()
if(stat)
to_chat(src, "I must be conscious to do this...")
return
@@ -156,10 +150,7 @@
var/datum/action/innate/slime/reproduce/A = new
A.Grant(S)
-/mob/living/simple_animal/slime/verb/Reproduce()
- set category = "Slime"
- set desc = "This will make you split into four Slimes."
-
+/mob/living/simple_animal/slime/proc/Reproduce()
if(stat)
to_chat(src, "I must be conscious to do this...")
return
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index db7822b4c5e..5daf30d30d9 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -781,6 +781,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
/mob/proc/is_dead()
return stat == DEAD
+// Nobody in their right mind will have this enabled on the production server, uncomment if you want this for some reason
+/*
/mob/verb/abandon_mob()
set name = "Respawn"
set category = "OOC"
@@ -816,6 +818,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
M.key = key
return
+*/
/mob/verb/observe()
set name = "Observe"
set category = "OOC"
diff --git a/code/modules/newscaster/obj/newscaster.dm b/code/modules/newscaster/obj/newscaster.dm
index 00602b238aa..680e5742d9d 100644
--- a/code/modules/newscaster/obj/newscaster.dm
+++ b/code/modules/newscaster/obj/newscaster.dm
@@ -85,6 +85,10 @@
/datum/job/syndicateofficer
)
+/obj/machinery/newscaster/examine(mob/user)
+ . = ..()
+ . += "Alt-Click to remove the photo currently inside it."
+
/obj/machinery/newscaster/Destroy()
GLOB.allNewscasters -= src
viewing_channel = null
@@ -723,15 +727,10 @@
/**
* Ejects the currently loaded photo if there is one.
*/
-/obj/machinery/newscaster/verb/eject_photo_verb()
- set name = "Eject Photo"
- set category = "Object"
- set src in oview(1)
-
- if(usr.incapacitated())
+/obj/machinery/newscaster/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
-
- eject_photo(usr)
+ eject_photo(user)
#undef CHANNEL_NAME_MAX_LENGTH
#undef CHANNEL_DESC_MAX_LENGTH
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index 8b4252b8f8c..de6a3e6df26 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -27,9 +27,7 @@
return
. = ..()
-/obj/item/clipboard/verb/removePen(mob/user)
- set category = "Object"
- set name = "Remove clipboard pen"
+/obj/item/clipboard/proc/removePen(mob/user)
if(!ishuman(user) || user.incapacitated())
return
penPlacement(user, containedpen, FALSE)
@@ -42,6 +40,7 @@
/obj/item/clipboard/examine(mob/user)
. = ..()
+ . += "Alt-Click to remove its pen."
if(in_range(user, src) && toppaper)
. += toppaper.examine(user)
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index 0eba0caf470..1e20806f2f3 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -48,6 +48,10 @@ GLOBAL_LIST_EMPTY(fax_blacklist)
GLOB.allfaxes -= src
return ..()
+/obj/machinery/photocopier/faxmachine/examine(mob/user)
+ . = ..()
+ . += "Alt-Click [src] to remove its currently stored ID."
+
/obj/machinery/photocopier/faxmachine/proc/update_network()
if(department != "Unknown")
if(!(("[department]" in GLOB.alldepartments) || ("[department]" in GLOB.hidden_departments) || ("[department]" in GLOB.admin_departments) || ("[department]" in GLOB.hidden_admin_departments)))
@@ -267,22 +271,19 @@ GLOBAL_LIST_EMPTY(fax_blacklist)
scan = card
SStgui.update_uis(src)
-/obj/machinery/photocopier/faxmachine/verb/eject_id()
- set category = null
- set name = "Eject ID Card"
- set src in oview(1)
-
- if(usr.incapacitated())
+/obj/machinery/photocopier/faxmachine/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
if(scan)
- to_chat(usr, "You remove [scan] from [src].")
- scan.forceMove(get_turf(src))
- if(!usr.get_active_hand() && Adjacent(usr))
- usr.put_in_hands(scan)
+ to_chat(user, "You remove [scan] from [src].")
+ if(!user.get_active_hand())
+ user.put_in_hands(scan)
+ else if(!user.put_in_inactive_hand(scan))
+ scan.forceMove(get_turf(src))
scan = null
else
- to_chat(usr, "There is nothing to remove from [src].")
+ to_chat(user, "There is nothing to remove from [src].")
/obj/machinery/photocopier/faxmachine/proc/sendfax(destination, mob/sender)
use_power(active_power_consumption)
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 783ce185e1f..2386021222e 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -62,6 +62,7 @@
/obj/item/paper/examine(mob/user)
. = ..()
+ . += "Alt-Click [src] with a pen in hand to rename it."
if(user.is_literate())
if(in_range(user, src) || isobserver(user))
show_content(user)
@@ -91,16 +92,22 @@
popup.open()
return data
-/obj/item/paper/verb/rename()
- set name = "Rename paper"
- set category = "Object"
- set src in usr
-
- if(HAS_TRAIT(usr, TRAIT_CLUMSY) && prob(50))
- to_chat(usr, "You cut yourself on the paper.")
+/obj/item/paper/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
return
- if(!usr.is_literate())
- to_chat(usr, "You don't know how to read.")
+
+ if(is_pen(user.get_active_hand()))
+ rename(user)
+ else
+ return ..()
+
+/obj/item/paper/proc/rename(mob/user)
+
+ if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
+ to_chat(user, "You cut yourself on the paper.")
+ return
+ if(!user.is_literate())
+ to_chat(user, "You don't know how to read.")
return
var/n_name = rename_interactive(usr)
if(isnull(n_name))
@@ -109,8 +116,7 @@
desc = "This is a paper titled '" + name + "'."
else
desc = initial(desc)
- add_fingerprint(usr)
- return
+ add_fingerprint(user)
/obj/item/paper/attack_self(mob/living/user as mob)
user.examinate(src)
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index cb66ea36480..6cf5eeda4e9 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -103,6 +103,8 @@
/obj/item/paper_bundle/examine(mob/user)
. = ..()
+ . += "Alt-Click [src] with a pen in hand to rename it."
+ . += "Alt-Shift-Click [src] to undo the paper bundle."
if(in_range(user, src))
show_content(user)
else
@@ -199,38 +201,31 @@
/obj/item/paper_bundle/AltClick(mob/user)
if(in_range(user, src) && !user.incapacitated())
if(is_pen(user.get_active_hand()))
- rename()
+ rename(user)
return
. = ..()
-/obj/item/paper_bundle/verb/rename()
- set name = "Rename bundle"
- set category = "Object"
- set src in usr
-
- var/n_name = sanitize(copytext(input(usr, "What would you like to label the bundle?", "Bundle Labelling", name) as text, 1, MAX_MESSAGE_LEN))
- if((loc == usr && usr.stat == 0))
+/obj/item/paper_bundle/proc/rename(mob/user)
+ var/n_name = sanitize(copytext(input(user, "What would you like to label the bundle?", "Bundle Labelling", name) as text, 1, MAX_MESSAGE_LEN))
+ if((loc == user && !user.stat))
name = "[(n_name ? "[n_name]" : "paper bundle")]"
- add_fingerprint(usr)
+ add_fingerprint(user)
+/obj/item/paper_bundle/AltShiftClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
+ return
-
-/obj/item/paper_bundle/verb/remove_all()
- set name = "Loose bundle"
- set category = "Object"
- set src in usr
-
- to_chat(usr, "You loosen the bundle.")
+ to_chat(user, "You loosen the bundle.")
for(var/obj/O in src)
- O.loc = usr.loc
+ O.forceMove(get_turf(user))
O.layer = initial(O.layer)
O.plane = initial(O.plane)
- O.add_fingerprint(usr)
+ O.add_fingerprint(user)
- usr.unEquip(src)
+ user.unEquip(src)
qdel(src)
/obj/item/paper_bundle/update_desc()
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 4259b13ea26..40d28417caa 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -76,6 +76,16 @@
show(user)
else
. += "It is too far away."
+ . += "Alt-Click [src] with a pen in hand to rename it."
+
+/obj/item/photo/AltClick(mob/user)
+ if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user))
+ return
+
+ if(is_pen(user.get_active_hand()))
+ rename(user)
+ else
+ return ..()
/obj/item/photo/proc/show(mob/user as mob)
var/icon/img_shown = new/icon(img)
@@ -94,20 +104,13 @@
+ "[scribble ? "
Written on the back:
[scribble]" : ""]"\
+ "