diff --git a/code/__DEFINES/verb.dm b/code/__DEFINES/verb.dm
new file mode 100644
index 00000000000..1c470aa5c1a
--- /dev/null
+++ b/code/__DEFINES/verb.dm
@@ -0,0 +1,119 @@
+/**
+ * Defines a game verb with an associated /datum/verb_metadata.
+ *
+ * Usage:
+ * GAME_VERB(/client, ooc, "OOC", "Send a message in OOC.", "OOC", msg as text)
+ * // verb body
+ */
+
+#define _GAME_VERB(owner_type, verb_path_name, verb_name, verb_desc, verb_category, show_in_context_menu, is_hidden, is_instant, verb_args...) \
+/datum/verb_metadata##owner_type/##verb_path_name \
+{ \
+ name = ##verb_name; \
+ description = ##verb_desc; \
+ category = ##verb_category; \
+ verb_path = ##owner_type/verb/##verb_path_name; \
+ body_path = ##owner_type/proc/__gvb_##verb_path_name; \
+}; \
+##owner_type/verb/##verb_path_name(##verb_args) \
+{ \
+ set name = ##verb_name; \
+ set desc = ##verb_desc; \
+ set hidden = ##is_hidden; \
+ set popup_menu = ##show_in_context_menu; \
+ set category = ##verb_category; \
+ set instant = ##is_instant; \
+ __gvb_##verb_path_name(arglist(args)); \
+}; \
+##owner_type/proc/__gvb_##verb_path_name(##verb_args)
+
+#define GAME_VERB(owner_type, verb_path_name, verb_name, verb_category, verb_args...) \
+_GAME_VERB(owner_type, verb_path_name, verb_name, "", verb_category, TRUE, FALSE, FALSE, ##verb_args)
+
+#define GAME_VERB_DESC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, verb_args...) \
+_GAME_VERB(owner_type, verb_path_name, verb_name, verb_desc, verb_category, TRUE, FALSE, FALSE, ##verb_args)
+
+#define GAME_VERB_HIDDEN(owner_type, verb_path_name, verb_name, verb_args...) \
+_GAME_VERB(owner_type, verb_path_name, verb_name, "", null, FALSE, TRUE, FALSE, ##verb_args)
+
+#define GAME_VERB_HIDDEN_INSTANT(owner_type, verb_path_name, verb_name, verb_args...) \
+_GAME_VERB(owner_type, verb_path_name, verb_name, "", null, FALSE, TRUE, TRUE, ##verb_args)
+
+#define _GAME_VERB_PROC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, show_in_context_menu, is_hidden, verb_args...) \
+/datum/verb_metadata##owner_type/##verb_path_name \
+{ \
+ name = ##verb_name; \
+ description = ##verb_desc; \
+ category = ##verb_category; \
+ verb_path = ##owner_type/proc/##verb_path_name; \
+ body_path = ##owner_type/proc/__gvb_##verb_path_name; \
+}; \
+##owner_type/proc/##verb_path_name(##verb_args) \
+{ \
+ set name = ##verb_name; \
+ set desc = ##verb_desc; \
+ set hidden = ##is_hidden; \
+ set popup_menu = ##show_in_context_menu; \
+ set category = ##verb_category; \
+ __gvb_##verb_path_name(arglist(args)); \
+}; \
+##owner_type/proc/__gvb_##verb_path_name(##verb_args)
+
+#define GAME_VERB_PROC(owner_type, verb_path_name, verb_name, verb_category, verb_args...) \
+_GAME_VERB_PROC(owner_type, verb_path_name, verb_name, "", verb_category, TRUE, FALSE, ##verb_args)
+
+#define GAME_VERB_PROC_DESC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, verb_args...) \
+_GAME_VERB_PROC(owner_type, verb_path_name, verb_name, verb_desc, verb_category, TRUE, FALSE, ##verb_args)
+
+#define _GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, verb_desc, verb_category, show_in_context_menu, is_hidden, verb_args...) \
+/datum/verb_metadata##owner_type/##verb_path_name \
+{ \
+ name = ##verb_name; \
+ description = ##verb_desc; \
+ category = ##verb_category; \
+ verb_path = ##owner_type/verb/##verb_path_name; \
+ body_path = ##owner_type/proc/__gvb_##verb_path_name; \
+}; \
+##owner_type/verb/##verb_path_name(##verb_args) \
+{ \
+ set name = ##verb_name; \
+ set desc = ##verb_desc; \
+ set hidden = ##is_hidden; \
+ set popup_menu = ##show_in_context_menu; \
+ set category = ##verb_category; \
+ set src in src_value; \
+ __gvb_##verb_path_name(arglist(args)); \
+}; \
+##owner_type/proc/__gvb_##verb_path_name(##verb_args)
+
+#define GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, verb_category, verb_args...) \
+_GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, "", verb_category, TRUE, FALSE, ##verb_args)
+
+#define GAME_VERB_SRC_DESC(owner_type, verb_path_name, src_value, verb_name, verb_desc, verb_category, verb_args...) \
+_GAME_VERB_SRC(owner_type, verb_path_name, src_value, verb_name, verb_desc, verb_category, TRUE, FALSE, ##verb_args)
+
+#define _GAME_VERB_GLOBAL_PROC(verb_path_name, verb_name, verb_desc, verb_category, is_hidden, verb_args...) \
+/datum/verb_metadata/##verb_path_name \
+{ \
+ name = ##verb_name; \
+ description = ##verb_desc; \
+ category = ##verb_category; \
+ verb_path = /proc/##verb_path_name; \
+ body_path = /proc/__gvb_##verb_path_name; \
+}; \
+/proc/##verb_path_name(##verb_args) \
+{ \
+ set name = ##verb_name; \
+ set desc = ##verb_desc; \
+ set hidden = ##is_hidden; \
+ set category = ##verb_category; \
+ __gvb_##verb_path_name(arglist(args)); \
+}; \
+/proc/__gvb_##verb_path_name(##verb_args)
+
+#define GAME_VERB_GLOBAL_PROC(verb_path_name, verb_name, verb_desc, verb_category, verb_args...) \
+_GAME_VERB_GLOBAL_PROC(verb_path_name, verb_name, verb_desc, verb_category, FALSE, ##verb_args)
+
+#define INVOKE_GAME_VERB(target, owner_type, verb_path_name, args...) SSverbs.invoke(target, /datum/verb_metadata##owner_type/##verb_path_name, ##args)
+#define ASSIGN_GAME_VERB(target, owner_type, verb_path_name) SSverbs.assign_verb(target, /datum/verb_metadata##owner_type/##verb_path_name)
+#define UNASSIGN_GAME_VERB(target, owner_type, verb_path_name) SSverbs.unassign_verb(target, /datum/verb_metadata##owner_type/##verb_path_name)
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 1c7cc767e6f..1417e34e359 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -477,17 +477,6 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
continue
show_to.client?.screen += reuse
-//Triggered when F12 is pressed (Unless someone changed something in the DMF)
-/mob/verb/button_pressed_F12()
- set name = "F12"
- set hidden = TRUE
-
- if(hud_used && client)
- hud_used.show_hud() //Shows the next hud preset
- to_chat(usr, span_info("Switched HUD mode. Press F12 to toggle."))
- else
- to_chat(usr, span_warning("This mob type does not use a HUD."))
-
/// Rebuilds our mob's hand slot screen elements
/datum/hud/proc/build_hand_slots(update_hud = FALSE)
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index cbe5403ea09..a66195da045 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -71,10 +71,7 @@
continue
inv.alpha = (blocked_slots & inv.slot_id) ? 128 : initial(inv.alpha)
-/mob/living/carbon/human/verb/toggle_hotkey_verbs()
- set category = "OOC"
- set name = "Toggle hotkey buttons"
- set desc = "This disables or enables the user interface buttons which can be used with hotkeys."
+GAME_VERB_DESC(/mob/living/carbon/human, toggle_hotkey_verbs, "Toggle hotkey buttons", "This disables or enables the user interface buttons which can be used with hotkeys.", "OOC")
if(hud_used.hotkey_ui_hidden)
client.screen += hud_used.screen_groups[HUD_GROUP_HOTKEYS]
diff --git a/code/_onclick/hud/screen_objects/credits.dm b/code/_onclick/hud/screen_objects/credits.dm
index 44749e0e4a2..e36eb8a11a4 100644
--- a/code/_onclick/hud/screen_objects/credits.dm
+++ b/code/_onclick/hud/screen_objects/credits.dm
@@ -11,7 +11,7 @@
var/icon/credits_icon = new(CREDITS_PATH)
LAZYINITLIST(credits)
var/list/_credits = credits
- add_verb(src, /client/proc/ClearCredits)
+ ASSIGN_GAME_VERB(src, /client, ClearCredits)
var/static/list/credit_order_for_this_round
if(isnull(credit_order_for_this_round))
credit_order_for_this_round = list("Thanks for playing!") + (shuffle(icon_states(credits_icon)) - "Thanks for playing!")
@@ -21,13 +21,11 @@
_credits += new /atom/movable/screen/credit(null, null, I, src, credits_icon)
sleep(CREDIT_SPAWN_SPEED)
sleep(CREDIT_ROLL_SPEED - CREDIT_SPAWN_SPEED)
- remove_verb(src, /client/proc/ClearCredits)
+ UNASSIGN_GAME_VERB(src, /client, ClearCredits)
qdel(credits_icon)
-/client/proc/ClearCredits()
- set name = "Hide Credits"
- set category = "OOC"
- remove_verb(src, /client/proc/ClearCredits)
+GAME_VERB_PROC(/client, ClearCredits, "Hide Credits", "OOC")
+ UNASSIGN_GAME_VERB(src, /client, ClearCredits)
QDEL_LIST(credits)
credits = null
diff --git a/code/_onclick/hud/screen_objects/map_popups.dm b/code/_onclick/hud/screen_objects/map_popups.dm
index bf524b6c8d9..05612460a8f 100644
--- a/code/_onclick/hud/screen_objects/map_popups.dm
+++ b/code/_onclick/hud/screen_objects/map_popups.dm
@@ -128,7 +128,6 @@
/**
* When the popup closes in any way (player or proc call) it calls this.
*/
-/client/verb/handle_popup_close(window_id as text)
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, handle_popup_close, "handle popup close", window_id as text)
clear_map("[window_id]_map")
SEND_SIGNAL(src, COMSIG_POPUP_CLEARED, window_id)
diff --git a/code/controllers/subsystem/verbs.dm b/code/controllers/subsystem/verbs.dm
new file mode 100644
index 00000000000..48b0a4dd43e
--- /dev/null
+++ b/code/controllers/subsystem/verbs.dm
@@ -0,0 +1,29 @@
+SUBSYSTEM_DEF(verbs)
+ name = "Verbs"
+ ss_flags = SS_NO_FIRE
+ init_stage = INITSTAGE_EARLY
+ var/list/datum/verb_metadata/verbs_by_type = list()
+
+/datum/controller/subsystem/verbs/Initialize()
+ for(var/datum/verb_metadata/verb_type as anything in subtypesof(/datum/verb_metadata))
+ verbs_by_type[verb_type] = new verb_type
+ return SS_INIT_SUCCESS
+
+/datum/controller/subsystem/verbs/proc/invoke(target, datum/verb_metadata/verb_type, ...)
+ var/datum/verb_metadata/meta = verbs_by_type[verb_type]
+ if(isnull(meta))
+ CRASH("Attempted to invoke unknown verb '[verb_type]'.")
+ var/list/invoke_args = args.Copy(3)
+ call(target, meta.body_path)(arglist(invoke_args))
+
+/datum/controller/subsystem/verbs/proc/assign_verb(target, datum/verb_metadata/verb_type)
+ var/datum/verb_metadata/meta = verbs_by_type[verb_type]
+ if(isnull(meta))
+ CRASH("Attempted to assign unknown verb '[verb_type]'.")
+ meta.assign_to(target)
+
+/datum/controller/subsystem/verbs/proc/unassign_verb(target, datum/verb_metadata/verb_type)
+ var/datum/verb_metadata/meta = verbs_by_type[verb_type]
+ if(isnull(meta))
+ CRASH("Attempted to unassign unknown verb '[verb_type]'.")
+ meta.unassign_from(target)
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index bbc9d168d52..c39cb99b441 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -441,9 +441,7 @@ SUBSYSTEM_DEF(vote)
voting -= user.client?.ckey
/// Mob level verb that allows players to vote on the current vote.
-/mob/verb/vote()
- set category = "OOC"
- set name = "Vote"
+GAME_VERB(/mob, vote, "Vote", "OOC")
if(!SSvote.initialized)
to_chat(usr, span_notice("Voting is not set up yet!"))
diff --git a/code/datums/achievements/_achievement_data.dm b/code/datums/achievements/_achievement_data.dm
index 9cfad0016de..f91ac424275 100644
--- a/code/datums/achievements/_achievement_data.dm
+++ b/code/datums/achievements/_achievement_data.dm
@@ -129,9 +129,6 @@
continue
.["highscores"] += list(list("name" = score.name, "scores" = score.high_scores))
-/client/verb/checkachievements()
- set category = "OOC"
- set name = "Check achievements"
- set desc = "See all of your achievements!"
+GAME_VERB_DESC(/client, checkachievements, "Check achievements", "See all of your achievements!", "OOC")
persistent_client.achievements.ui_interact(usr)
diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index d16b2f93cab..5f6cf9038ac 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -484,9 +484,7 @@
/// called when a browser popup window is closed after registering with proc/onclose()
/// if a valid atom reference is supplied, call the atom's Topic() with "close=1"
/// otherwise, just reset the client mob's machine var.
-/client/verb/windowclose(atomref as text)
- set hidden = TRUE // hide this verb from the user's panel
- set name = ".windowclose" // no autocomplete on cmd line
+GAME_VERB_HIDDEN(/client, windowclose, ".windowclose", atomref as text)
if(atomref == "null")
return
diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm
index 20ad08a77b6..6a668e87e5e 100644
--- a/code/datums/helper_datums/getrev.dm
+++ b/code/datums/helper_datums/getrev.dm
@@ -71,10 +71,7 @@
var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext_char(cm, 1, 11))
. += "#[tm.number][details]
"
-/client/verb/showrevinfo()
- set category = "OOC"
- set name = "Show Server Revision"
- set desc = "Check the current server code revision"
+GAME_VERB_DESC(/client, showrevinfo, "Show Server Revision", "Check the current server code revision", "OOC")
var/list/msg = list()
// Round ID
diff --git a/code/datums/keybinding/client.dm b/code/datums/keybinding/client.dm
index f20d38397bd..e07cc254123 100644
--- a/code/datums/keybinding/client.dm
+++ b/code/datums/keybinding/client.dm
@@ -76,7 +76,13 @@
. = ..()
if(.)
return
- user.mob.button_pressed_F12()
+
+ if(user.mob.hud_used)
+ user.mob.hud_used.show_hud() //Shows the next hud preset
+ to_chat(user, span_info("Switched HUD mode. Press F12 to toggle."))
+ else
+ to_chat(user, span_warning("This mob type does not use a HUD."))
+
return TRUE
/datum/keybinding/client/close_every_ui
diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm
index 961f27b2104..35dc80dab95 100644
--- a/code/datums/martial/wrestling.dm
+++ b/code/datums/martial/wrestling.dm
@@ -5,16 +5,6 @@ The original authors are: cogwerks, pistoleer, spyguy, angriestibm, marquesas, a
If you make a derivative work from this code, you must include this notification header alongside it.
*/
-/mob/living/proc/wrestling_help()
- set name = "Recall Teachings"
- set desc = "Remember how to wrestle."
- set category = "Wrestling"
-
- to_chat(usr, "You flex your muscles and have a revelation...")
- to_chat(usr, "[span_notice("Clinch")]: Grab. Passively gives you a chance to immediately aggressively grab someone. Not always successful.")
- to_chat(usr, "[span_notice("Suplex")]: Shove someone you are grabbing. Suplexes your target to the floor. Greatly injures them and leaves both you and your target on the floor.")
- to_chat(usr, "[span_notice("Advanced grab")]: Grab. Passively causes stamina damage when grabbing someone.")
-
/datum/martial_art/wrestling
name = "Wrestling"
id = MARTIALART_WRESTLING
diff --git a/code/datums/verb_metadata.dm b/code/datums/verb_metadata.dm
new file mode 100644
index 00000000000..f0b0f72bd01
--- /dev/null
+++ b/code/datums/verb_metadata.dm
@@ -0,0 +1,12 @@
+/datum/verb_metadata
+ var/name
+ var/description
+ var/category
+ var/verb_path
+ var/body_path
+
+/datum/verb_metadata/proc/assign_to(target)
+ add_verb(target, verb_path)
+
+/datum/verb_metadata/proc/unassign_from(target)
+ remove_verb(target, verb_path)
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index 556df4d02eb..7dc013c8057 100644
--- a/code/game/machinery/iv_drip.dm
+++ b/code/game/machinery/iv_drip.dm
@@ -323,9 +323,7 @@
/obj/machinery/iv_drip/proc/get_reagents()
return use_internal_storage ? reagents : reagent_container?.reagents
-/obj/machinery/iv_drip/verb/eject_beaker()
- set name = "Remove IV Container"
- set src in view(1)
+GAME_VERB_SRC(/obj/machinery/iv_drip, eject_beaker, view(1), "Remove IV Container", null)
if(!isliving(usr))
to_chat(usr, span_warning("You can't do that!"))
@@ -342,9 +340,7 @@
reagent_container = null
update_appearance(UPDATE_ICON)
-/obj/machinery/iv_drip/verb/toggle_mode()
- set name = "Toggle Mode"
- set src in view(1)
+GAME_VERB_SRC(/obj/machinery/iv_drip, toggle_mode, view(1), "Toggle Mode", null)
if(!isliving(usr))
to_chat(usr, span_warning("You can't do that!"))
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index 82217efdda3..80ac6a957a4 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -217,9 +217,7 @@ Buildable meters
if(ispath(pipe_type,/obj/machinery/atmospherics/pipe/heat_exchanging))
resistance_flags |= FIRE_PROOF | LAVA_PROOF
-/obj/item/pipe/verb/flip()
- set name = "Invert Pipe"
- set src in view(1)
+GAME_VERB_SRC(/obj/item/pipe, flip, view(1), "Invert Pipe", null)
if ( usr.incapacitated )
return
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 35721788368..c8438dc81dc 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -401,9 +401,7 @@
if(greyscale_config_inhand_right)
righthand_file = SSgreyscale.GetColoredIconByType(greyscale_config_inhand_right, greyscale_colors)
-/obj/item/verb/move_to_top()
- set name = "Move To Top"
- set src in oview(1)
+GAME_VERB_SRC(/obj/item, move_to_top, oview(1), "Move To Top", null)
if(!isturf(loc) || usr.stat != CONSCIOUS || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || anchored)
return
@@ -822,9 +820,7 @@
return M.can_equip(src, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action = indirect_action)
-/obj/item/verb/verb_pickup()
- set src in oview(1)
- set name = "Pick up"
+GAME_VERB_SRC(/obj/item, verb_pickup, oview(1), "Pick up", null)
if(usr.incapacitated || !Adjacent(usr))
return
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 7b7286b9711..4664bf85d71 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -126,8 +126,7 @@
return FALSE
-/obj/item/taperecorder/verb/ejectverb()
- set name = "Eject Tape"
+GAME_VERB(/obj/item/taperecorder, ejectverb, "Eject Tape", null)
if(!can_use(usr))
balloon_alert(usr, "can't use!")
@@ -161,8 +160,7 @@
mytape.storedinfo += "\[[time2text(mytape.used_capacity,"mm:ss", NO_TIMEZONE)]\] [speaker.get_voice()]: [raw_message]"
-/obj/item/taperecorder/verb/record()
- set name = "Start Recording"
+GAME_VERB(/obj/item/taperecorder, record, "Start Recording", null)
if(!can_use(usr))
balloon_alert(usr, "can't use!")
@@ -203,8 +201,7 @@
playsound(src, 'sound/items/taperecorder/taperecorder_stop.ogg', 50, FALSE)
-/obj/item/taperecorder/verb/stop()
- set name = "Stop"
+GAME_VERB(/obj/item/taperecorder, stop, "Stop", null)
if(!can_use(usr))
balloon_alert(usr, "can't use!")
@@ -223,8 +220,7 @@
update_appearance()
update_sound()
-/obj/item/taperecorder/verb/play()
- set name = "Play Tape"
+GAME_VERB(/obj/item/taperecorder, play, "Play Tape", null)
if(!can_use(usr))
balloon_alert(usr, "can't use!")
@@ -295,8 +291,7 @@
if("Eject")
eject(user)
-/obj/item/taperecorder/verb/print_transcript()
- set name = "Print Transcript"
+GAME_VERB(/obj/item/taperecorder, print_transcript, "Print Transcript", null)
var/list/transcribed_info = mytape.storedinfo
if(!length(transcribed_info))
diff --git a/code/game/objects/items/robot/items/storage.dm b/code/game/objects/items/robot/items/storage.dm
index 8e9f1ad6194..cc945ce70fd 100644
--- a/code/game/objects/items/robot/items/storage.dm
+++ b/code/game/objects/items/robot/items/storage.dm
@@ -32,8 +32,7 @@
return ..()
///A right-click verb, for those not using hotkey mode.
-/obj/item/borg/apparatus/verb/verb_dropHeld()
- set name = "Drop"
+GAME_VERB(/obj/item/borg/apparatus, verb_dropHeld, "Drop", null)
if(usr != loc || !stored)
return
diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm
index c0e75f77930..5b1d94e6b9e 100644
--- a/code/game/objects/items/tanks/watertank.dm
+++ b/code/game/objects/items/tanks/watertank.dm
@@ -59,8 +59,7 @@
//Remove from their hands and put back "into" the tank
remove_noz()
-/obj/item/watertank/verb/toggle_mister_verb()
- set name = "Toggle Mister"
+GAME_VERB(/obj/item/watertank, toggle_mister_verb, "Toggle Mister", null)
toggle_mister(usr)
/obj/item/watertank/proc/make_noz()
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 38da438155a..858ab649ee9 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -1025,9 +1025,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
if(attack_hand(user))
return ITEM_INTERACT_BLOCKING
-/obj/structure/closet/verb/verb_toggleopen()
- set name = "Toggle Open"
- set src in view(1)
+GAME_VERB_SRC(/obj/structure/closet, verb_toggleopen, view(1), "Toggle Open", null)
if(!usr.can_perform_action(src) || !isturf(loc))
return
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 68b6ee31c7d..a8aaa2620af 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -336,9 +336,8 @@
//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 src in oview(1)
+GAME_VERB_SRC(/obj/structure/windoor_assembly, flip, oview(1), "Flip Windoor Assembly", null)
+
if(usr.stat != CONSCIOUS || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED))
return
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 62f07be0679..96a29cb10ba 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -11,7 +11,7 @@
ADMIN_VERB(hide_verbs, R_NONE, "Adminverbs - Hide All", "Hide most of your admin verbs.", ADMIN_CATEGORY_MAIN)
user.remove_admin_verbs()
- add_verb(user, /client/proc/show_verbs)
+ ASSIGN_GAME_VERB(user, /client, show_verbs)
to_chat(user, span_interface("Almost all of your adminverbs have been hidden."), confidential = TRUE)
BLACKBOX_LOG_ADMIN_VERB("Hide All Adminverbs")
diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm
index 3b78e552740..67a7d690070 100644
--- a/code/modules/admin/holder2.dm
+++ b/code/modules/admin/holder2.dm
@@ -119,7 +119,7 @@ GLOBAL_PROTECT(href_token)
if (!isnull(client))
disassociate()
- add_verb(client, /client/proc/readmin)
+ ASSIGN_GAME_VERB(client, /client, readmin)
client.disable_combo_hud()
client.update_special_keybinds()
client.set_stat_panel()
@@ -154,12 +154,12 @@ GLOBAL_PROTECT(href_token)
if (deadmined)
activate()
- remove_verb(client, /client/proc/admin_2fa_verify)
+ UNASSIGN_GAME_VERB(client, /client, admin_2fa_verify)
owner = client
owner.holder = src
owner.add_admin_verbs()
- remove_verb(owner, /client/proc/readmin)
+ UNASSIGN_GAME_VERB(owner, /client, readmin)
owner.init_verbs() //re-initialize the verb list
owner.update_special_keybinds()
GLOB.admins |= client
@@ -284,7 +284,7 @@ GLOBAL_PROTECT(href_token)
#define ERROR_2FA_REQUEST_PERMISSIONS "
You could not be verified, and a DB connection couldn't be established. Please contact an admin with +PERMISSIONS to grant you permission.
"
/datum/admins/proc/start_2fa_process(client/client, id)
- add_verb(client, /client/proc/admin_2fa_verify)
+ ASSIGN_GAME_VERB(client, /client, admin_2fa_verify)
client?.init_verbs()
var/admin_2fa_url = CONFIG_GET(string/admin_2fa_url)
diff --git a/code/modules/admin/verbs/admingame.dm b/code/modules/admin/verbs/admingame.dm
index e7b91726099..3ecf70adc3e 100644
--- a/code/modules/admin/verbs/admingame.dm
+++ b/code/modules/admin/verbs/admingame.dm
@@ -221,9 +221,7 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(show_occupants_player_panel, R_ADMIN, "Show Occupan
SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/show_player_panel, selected_mob)
return
-/client/proc/cmd_admin_godmode(mob/mob in GLOB.mob_list)
- set category = "Admin.Game"
- set name = "Godmode"
+GAME_VERB_PROC(/client, cmd_admin_godmode, "Godmode", "Admin.Game", mob/mob in GLOB.mob_list)
if(!check_rights(R_ADMIN))
return
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 94f9eae85fb..2c02b12fe7f 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -792,10 +792,7 @@ GLOBAL_DATUM_INIT(admin_help_ui_handler, /datum/admin_help_ui_handler, new)
new /datum/admin_help(message, user_client, FALSE, urgent)
-/client/verb/no_tgui_adminhelp(message as message)
- set name = "NoTguiAdminhelp"
- set hidden = TRUE
-
+GAME_VERB_HIDDEN(/client, no_tgui_adminhelp, "NoTguiAdminhelp", message as message)
if(adminhelptimerid)
return
@@ -803,16 +800,11 @@ GLOBAL_DATUM_INIT(admin_help_ui_handler, /datum/admin_help_ui_handler, new)
GLOB.admin_help_ui_handler.perform_adminhelp(src, message, FALSE)
-/client/verb/adminhelp()
- set category = "Admin"
- set name = "Adminhelp"
+GAME_VERB(/client, adminhelp, "Adminhelp", "Admin")
GLOB.admin_help_ui_handler.ui_interact(mob)
to_chat(src, span_boldnotice("Adminhelp failing to open or work? Click here"))
-/client/verb/view_latest_ticket()
- set category = "Admin"
- set name = "View Latest Ticket"
-
+GAME_VERB(/client, view_latest_ticket, "View Latest Ticket", "Admin")
if(!current_ticket)
// Check if the client had previous tickets, and show the latest one
var/list/prev_tickets = list()
diff --git a/code/modules/admin/verbs/ai_triumvirate.dm b/code/modules/admin/verbs/ai_triumvirate.dm
index 38c2eba712c..4683e8765a9 100644
--- a/code/modules/admin/verbs/ai_triumvirate.dm
+++ b/code/modules/admin/verbs/ai_triumvirate.dm
@@ -28,9 +28,7 @@ GLOBAL_DATUM(triple_ai_controller, /datum/triple_ai_controller)
GLOB.triple_ai_controller = null
. = ..()
-/client/proc/triple_ai()
- set category = "Admin.Events"
- set name = "Toggle AI Triumvirate"
+GAME_VERB_PROC(/client, triple_ai, "Toggle AI Triumvirate", "Admin.Events")
if(SSticker.current_state > GAME_STATE_PREGAME)
to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.", confidential = TRUE)
diff --git a/code/modules/admin/verbs/anonymousnames.dm b/code/modules/admin/verbs/anonymousnames.dm
index ae08790a57d..8c28389fdb2 100644
--- a/code/modules/admin/verbs/anonymousnames.dm
+++ b/code/modules/admin/verbs/anonymousnames.dm
@@ -7,9 +7,7 @@ GLOBAL_DATUM(current_anonymous_theme, /datum/anonymous_theme)
this is the setup, it handles announcing crew and other settings for the mode and then creating the datum singleton
*/
-/client/proc/anon_names()
- set category = "Admin.Events"
- set name = "Setup Anonymous Names"
+GAME_VERB_PROC(/client, anon_names, "Setup Anonymous Names", "Admin.Events")
if(GLOB.current_anonymous_theme)
var/response = tgui_alert(usr, "Anon mode is currently enabled. Disable?", "cold feet", list("Disable Anon Names", "Keep it Enabled"))
diff --git a/code/modules/admin/verbs/grant_dna_infusion.dm b/code/modules/admin/verbs/grant_dna_infusion.dm
index d761e47ad94..28b62662d6b 100644
--- a/code/modules/admin/verbs/grant_dna_infusion.dm
+++ b/code/modules/admin/verbs/grant_dna_infusion.dm
@@ -3,9 +3,7 @@
* Returns the entry if all organs were successfully replaced.
* If no infusion was picked, the infusion had no organs, or if one or more organs could not be granted, returns FALSE
*/
-/client/proc/grant_dna_infusion(mob/living/carbon/human/target in world)
- set name = "Apply DNA Infusion"
- set category = "Debug"
+GAME_VERB_PROC(/client, grant_dna_infusion, "Apply DNA Infusion", "Debug", mob/living/carbon/human/target in world)
var/list/infusions = list()
for(var/datum/infuser_entry/path as anything in sort_list(subtypesof(/datum/infuser_entry), GLOBAL_PROC_REF(cmp_typepaths_asc)))
diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm
index c0955dec70b..a8443b80303 100644
--- a/code/modules/admin/verbs/pray.dm
+++ b/code/modules/admin/verbs/pray.dm
@@ -1,6 +1,4 @@
-/mob/verb/pray(message as text)
- set name = VERB_PRAY
-
+GAME_VERB(/mob, pray, VERB_PRAY, null, message as text)
if(GLOB.say_disabled) //This is here to try to identify lag problems
to_chat(src, span_danger("Speech is currently admin-disabled."), confidential = TRUE)
return
diff --git a/code/modules/admin/verbs/request_internet_sound.dm b/code/modules/admin/verbs/request_internet_sound.dm
index 376547fd0e4..33df7f1e3d7 100644
--- a/code/modules/admin/verbs/request_internet_sound.dm
+++ b/code/modules/admin/verbs/request_internet_sound.dm
@@ -1,7 +1,4 @@
-/mob/verb/request_internet_sound()
- set category = "OOC"
- set name = "Request Internet Sound"
-
+GAME_VERB(/mob, request_internet_sound, "Request Internet Sound", "OOC")
if(!CONFIG_GET(flag/request_internet_sound))
to_chat(usr, span_danger("This server has disabled internet sound requests."), confidential = TRUE)
return
diff --git a/code/modules/admin/verbs/special_verbs.dm b/code/modules/admin/verbs/special_verbs.dm
index 309c14d4455..65f8ee39990 100644
--- a/code/modules/admin/verbs/special_verbs.dm
+++ b/code/modules/admin/verbs/special_verbs.dm
@@ -1,19 +1,14 @@
// Admin Verbs in this file are special and cannot use the AVD system for some reason or another.
-/client/proc/show_verbs()
- set name = "Adminverbs - Show"
- set category = ADMIN_CATEGORY_MAIN
+GAME_VERB_PROC(/client, show_verbs, "Adminverbs - Show", ADMIN_CATEGORY_MAIN)
- remove_verb(src, /client/proc/show_verbs)
+ UNASSIGN_GAME_VERB(src, /client, show_verbs)
add_admin_verbs()
to_chat(src, span_interface("All of your adminverbs are now visible."), confidential = TRUE)
BLACKBOX_LOG_ADMIN_VERB("Show Adminverbs")
-/client/proc/readmin()
- set name = "Readmin"
- set category = "Admin"
- set desc = "Regain your admin powers."
+GAME_VERB_PROC_DESC(/client, readmin, "Readmin", "Regain your admin powers.", "Admin")
var/datum/admins/A = GLOB.deadmins[ckey]
@@ -35,9 +30,7 @@
log_admin("[src] re-adminned themselves.")
BLACKBOX_LOG_ADMIN_VERB("Readmin")
-/client/proc/admin_2fa_verify()
- set name = "Verify Admin"
- set category = "Admin"
+GAME_VERB_PROC(/client, admin_2fa_verify, "Verify Admin", "Admin")
var/datum/admins/admin = GLOB.admin_datums[ckey]
admin?.associate(src)
diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm
index 78e68d3e6b4..73c9d42f6fe 100644
--- a/code/modules/buildmode/buildmode.dm
+++ b/code/modules/buildmode/buildmode.dm
@@ -170,9 +170,7 @@
mode.handle_click(user.client, params, object)
return TRUE // no doing underlying actions
-/proc/togglebuildmode(mob/M as mob in GLOB.player_list)
- set name = "Toggle Build Mode"
- set category = "Event"
+GAME_VERB_GLOBAL_PROC(togglebuildmode, "Toggle Build Mode", "", "Event", mob/M as mob in GLOB.player_list)
if(M.client)
if(istype(M.client.click_intercept,/datum/buildmode))
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 6ac51bd14d3..5bafaedb481 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -301,10 +301,10 @@ GLOBAL_LIST_INIT(unrecommended_builds, list(
prefs.last_id = computer_id //these are gonna be used for banning
if(fexists(roundend_report_file()))
- add_verb(src, /client/proc/show_previous_roundend_report)
+ ASSIGN_GAME_VERB(src, /client, show_previous_roundend_report)
if(fexists("data/server_last_roundend_report.html"))
- add_verb(src, /client/proc/show_servers_last_roundend_report)
+ ASSIGN_GAME_VERB(src, /client, show_servers_last_roundend_report)
var/full_version = "[byond_version].[byond_build ? byond_build : "xxx"]"
log_access("Login: [key_name(src)] from [address ? address : "localhost"]-[computer_id] || BYOND v[full_version]")
@@ -376,7 +376,7 @@ GLOBAL_LIST_INIT(unrecommended_builds, list(
admin_datum.associate(src)
connecting_admin = TRUE
else if(GLOB.deadmins[ckey])
- add_verb(src, /client/proc/readmin)
+ ASSIGN_GAME_VERB(src, /client, readmin)
connecting_admin = TRUE
if(CONFIG_GET(flag/autoadmin))
if(!GLOB.admin_datums[ckey])
@@ -946,11 +946,11 @@ GLOBAL_LIST_INIT(unrecommended_builds, list(
if (interviewee)
return
if(CONFIG_GET(flag/see_own_notes))
- add_verb(src, /client/proc/self_notes)
+ ASSIGN_GAME_VERB(src, /client, self_notes)
if(CONFIG_GET(flag/use_exp_tracking))
- add_verb(src, /client/proc/self_playtime)
+ ASSIGN_GAME_VERB(src, /client, self_playtime)
if(!CONFIG_GET(flag/forbid_preferences_export))
- add_verb(src, /client/proc/export_preferences)
+ ASSIGN_GAME_VERB(src, /client, export_preferences)
//checks if a client is afk
@@ -1198,17 +1198,12 @@ GLOBAL_LIST_INIT(unrecommended_builds, list(
var/mob/dead/observer/observer = mob
observer.ManualFollow(target)
-/client/verb/stop_client_sounds()
- set name = "Stop Sounds"
- set category = "OOC"
- set desc = "Stop Current Sounds"
+GAME_VERB_DESC(/client, stop_client_sounds, "Stop Sounds", "Stop Current Sounds", "OOC")
SEND_SOUND(usr, sound(null))
tgui_panel?.stop_music()
SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Stop Self Sounds"))
-/client/verb/toggle_fullscreen()
- set name = "Toggle Fullscreen"
- set category = "OOC"
+GAME_VERB(/client, toggle_fullscreen, "Toggle Fullscreen", "OOC")
var/is_on = prefs.read_preference(/datum/preference/toggle/fullscreen_mode)
prefs.write_preference(GLOB.preference_entries[/datum/preference/toggle/fullscreen_mode], !is_on)
diff --git a/code/modules/client/preferences_menu.dm b/code/modules/client/preferences_menu.dm
index 30c658d4541..3ccdb006403 100644
--- a/code/modules/client/preferences_menu.dm
+++ b/code/modules/client/preferences_menu.dm
@@ -1,7 +1,4 @@
-/client/verb/open_character_preferences()
- set category = "OOC"
- set name = "Open Character Preferences"
- set desc = "Open Character Preferences"
+GAME_VERB_DESC(/client, open_character_preferences, "Open Character Preferences", "Open Character Preferences", "OOC")
if(!prefs)
return
@@ -9,10 +6,7 @@
prefs.update_static_data(usr)
prefs.ui_interact(usr)
-/client/verb/open_game_preferences()
- set category = "OOC"
- set name = "Open Game Preferences"
- set desc = "Open Game Preferences"
+GAME_VERB_DESC(/client, open_game_preferences, "Open Game Preferences", "Open Game Preferences", "OOC")
if(!prefs)
return
diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm
index cb02dc6d248..a9a5d3e4dcd 100644
--- a/code/modules/client/verbs/ooc.dm
+++ b/code/modules/client/verbs/ooc.dm
@@ -2,9 +2,7 @@ GLOBAL_VAR_INIT(OOC_COLOR, null)//If this is null, use the CSS for OOC. Otherwis
GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8")
///talking in OOC uses this
-/client/verb/ooc(msg as text)
- set name = VERB_OOC
-
+GAME_VERB(/client, ooc, VERB_OOC, null, msg as text)
if(GLOB.say_disabled) //This is here to try to identify lag problems
to_chat(usr, span_danger("Speech is currently admin-disabled."))
return
@@ -148,13 +146,6 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8")
else
GLOB.dooc_allowed = !GLOB.dooc_allowed
-/client/proc/set_ooc()
- set name = "Set Player OOC Color"
- set desc = "Modifies player OOC Color"
- set category = "Server"
- if(IsAdminAdvancedProcCall())
- return
-
ADMIN_VERB(set_ooc_color, R_FUN, "Set Player OOC Color", "Modifies the global OOC color.", ADMIN_CATEGORY_SERVER)
var/newColor = tgui_color_picker(user, "Please select the new player OOC color.", "OOC color")
if(isnull(newColor))
@@ -164,13 +155,6 @@ ADMIN_VERB(set_ooc_color, R_FUN, "Set Player OOC Color", "Modifies the global OO
log_admin("[key_name_admin(user)] has set the player ooc color to [new_color].")
GLOB.OOC_COLOR = new_color
-/client/proc/reset_ooc()
- set name = "Reset Player OOC Color"
- set desc = "Returns player OOC Color to default"
- set category = "Server"
- if(IsAdminAdvancedProcCall())
- return
-
ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC color to default.", ADMIN_CATEGORY_SERVER)
if(tgui_alert(user, "Are you sure you want to reset the OOC color of all players?", "Reset Player OOC Color", list("Yes", "No")) != "Yes")
return
@@ -179,31 +163,20 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC
GLOB.OOC_COLOR = null
//Checks admin notice
-/client/verb/admin_notice()
- set name = "Adminnotice"
- set category = "Admin"
- set desc = "Check the admin notice if it has been set"
-
+GAME_VERB_DESC(/client, admin_notice, "Adminnotice", "Check the admin notice if it has been set", "Admin")
if(GLOB.admin_notice)
to_chat(src, "[span_boldnotice("Admin Notice:")]\n \t [GLOB.admin_notice]")
else
to_chat(src, span_notice("There are no admin notices at the moment."))
-/client/verb/motd()
- set name = "MOTD"
- set category = "OOC"
- set desc ="Check the Message of the Day"
-
+GAME_VERB_DESC(/client, motd, "MOTD", "Check the Message of the Day", "OOC")
var/motd = global.config.motd
if(motd)
to_chat(src, "[motd]
", handle_whitespace=FALSE)
else
to_chat(src, span_notice("The Message of the Day has not been set."))
-/client/proc/self_notes()
- set name = "View Admin Remarks"
- set category = "OOC"
- set desc = "View the notes that admins have written about you"
+GAME_VERB_PROC_DESC(/client, self_notes, "View Admin Remarks", "View the notes that admins have written about you", "OOC")
if(!CONFIG_GET(flag/see_own_notes))
to_chat(usr, span_notice("Sorry, that function is not enabled on this server."))
@@ -211,10 +184,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC
browse_messages(null, usr.ckey, null, TRUE)
-/client/proc/self_playtime()
- set name = "View tracked playtime"
- set category = "OOC"
- set desc = "View the amount of playtime for roles the server has tracked."
+GAME_VERB_PROC_DESC(/client, self_playtime, "View tracked playtime", "View the amount of playtime for roles the server has tracked.", "OOC")
if(!CONFIG_GET(flag/use_exp_tracking))
to_chat(usr, span_notice("Sorry, tracking is currently disabled."))
@@ -223,11 +193,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC
new /datum/job_report_menu(src, usr)
// Ignore verb
-/client/verb/select_ignore()
- set name = "Ignore"
- set category = "OOC"
- set desc ="Ignore a player's messages on the OOC channel"
-
+GAME_VERB_DESC(/client, select_ignore, "Ignore", "Ignore a player's messages on the OOC channel", "OOC")
// Make a list to choose players from
var/list/players = list()
@@ -305,11 +271,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC
to_chat(src, span_infoplain("You are now ignoring [selection] on the OOC channel."))
// Unignore verb
-/client/verb/select_unignore()
- set name = "Unignore"
- set category = "OOC"
- set desc = "Stop ignoring a player's messages on the OOC channel"
-
+GAME_VERB_DESC(/client, select_unignore, "Unignore", "Stop ignoring a player's messages on the OOC channel", "OOC")
// Check if we've ignored any players
if(!length(prefs.ignoring))
// Express that we haven't ignored any players in chat
@@ -342,25 +304,15 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC
// Express that we've unignored the selected player in chat
to_chat(src, span_infoplain("You are no longer ignoring [selection] on the OOC channel."))
-/client/proc/show_previous_roundend_report()
- set name = "Your Last Round"
- set category = "OOC"
- set desc = "View the last round end report you've seen"
+GAME_VERB_PROC_DESC(/client, show_previous_roundend_report, "Your Last Round", "View the last round end report you've seen", "OOC")
SSticker.show_roundend_report(src, report_type = PERSONAL_LAST_ROUND)
-/client/proc/show_servers_last_roundend_report()
- set name = "Server's Last Round"
- set category = "OOC"
- set desc = "View the last round end report from this server"
+GAME_VERB_PROC_DESC(/client, show_servers_last_roundend_report, "Server's Last Round", "View the last round end report from this server", "OOC")
SSticker.show_roundend_report(src, report_type = SERVER_LAST_ROUND)
-/client/verb/fit_viewport()
- set name = "Fit Viewport"
- set category = "OOC"
- set desc = "Fit the width of the map window to match the viewport"
-
+GAME_VERB_DESC(/client, fit_viewport, "Fit Viewport", "Fit the width of the map window to match the viewport", "OOC")
// Fetch aspect ratio
var/view_size = getviewsize(view)
var/aspect_ratio = view_size[1] / view_size[2]
@@ -439,11 +391,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC
if(fully_created)
INVOKE_ASYNC(src, VERB_REF(fit_viewport))
-/client/verb/policy()
- set name = "Show Policy"
- set desc = "Show special server rules related to your current character."
- set category = "OOC"
-
+GAME_VERB_DESC(/client, policy, "Show Policy", "Show special server rules related to your current character.", "OOC")
//Collect keywords
var/list/keywords = mob.get_policy_keywords()
var/header = get_policy(POLICY_VERB_HEADER)
@@ -462,33 +410,20 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC
browser.set_content(policytext.Join(""))
browser.open()
-/client/verb/fix_stat_panel()
- set name = "Fix Stat Panel"
- set hidden = TRUE
-
+GAME_VERB_HIDDEN(/client, fix_stat_panel, "Fix Stat Panel")
init_verbs()
-/client/proc/export_preferences()
- set name = "Export Preferences"
- set desc = "Export your current preferences to a file."
- set category = "OOC"
+GAME_VERB_PROC_DESC(/client, export_preferences, "Export Preferences", "Export your current preferences to a file.", "OOC")
ASSERT(prefs, "User attempted to export preferences while preferences were null!") // what the fuck
prefs.savefile.export_json_to_client(usr, ckey)
-/client/verb/map_vote_tally_count()
- set name = "Show Map Vote Tallies"
- set desc = "View the current map vote tally counts."
- set category = "OOC"
+GAME_VERB_DESC(/client, map_vote_tally_count, "Show Map Vote Tallies", "View the current map vote tally counts.", "OOC")
to_chat(mob, SSmap_vote.tally_printout)
-/client/verb/linkforumaccount()
- set category = "OOC"
- set name = "Link Forum Account"
- set desc = "Validates your byond account to your forum account. Required to post on the forums."
-
+GAME_VERB_DESC(/client, linkforumaccount, "Link Forum Account", "Validates your byond account to your forum account. Required to post on the forums.", "OOC")
var/uri = CONFIG_GET(string/forum_link_uri)
if(!uri)
to_chat(src, span_warning("This feature is disabled."))
diff --git a/code/modules/client/verbs/stat_panel.dm b/code/modules/client/verbs/stat_panel.dm
index b350c4ee887..f88e099a77e 100644
--- a/code/modules/client/verbs/stat_panel.dm
+++ b/code/modules/client/verbs/stat_panel.dm
@@ -1,6 +1,4 @@
-/client/verb/toggle_stat_panel()
- set name = "Toggle Stat Panel"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, toggle_stat_panel, "Toggle Stat Panel")
//Flip it
prefs.write_preference(GLOB.preference_entries[/datum/preference/toggle/statpanel], !prefs.read_preference(/datum/preference/toggle/statpanel))
diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm
index 6599507d6a8..d2745e0763d 100644
--- a/code/modules/client/verbs/suicide.dm
+++ b/code/modules/client/verbs/suicide.dm
@@ -1,8 +1,7 @@
/// Verb to simply kill yourself (in a very visual way to all players) in game! How family-friendly. Can be governed by a series of multiple checks (i.e. confirmation, is it allowed in this area, etc.) which are
/// handled and called by the proc this verb invokes. It's okay to block this, because we typically always give mobs in-game the ability to Ghost out of their current mob irregardless of context. This, in contrast,
/// can have as many different checks as you desire to prevent people from doing the deed to themselves.
-/mob/living/verb/suicide()
- set hidden = TRUE
+GAME_VERB_HIDDEN(/mob/living, suicide, "suicide")
handle_suicide()
/// Actually handles the bare basics of the suicide process. Message type is the message we want to dispatch in the world regarding the suicide, using the defines in this file.
diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm
index 30fdc0b686d..d02cce77b1b 100644
--- a/code/modules/client/verbs/who.dm
+++ b/code/modules/client/verbs/who.dm
@@ -1,9 +1,7 @@
#define DEFAULT_WHO_CELLS_PER_ROW 4
#define NO_ADMINS_ONLINE_MESSAGE "Adminhelps are also sent through TGS to services like IRC and Discord. If no admins are available in game, sending an adminhelp might still be noticed and responded to."
-/client/verb/who()
- set name = "Who"
- set category = "OOC"
+GAME_VERB(/client, who, "Who", "OOC")
var/msg = ""
@@ -69,9 +67,7 @@
msg += "Total Players: [length(Lines)]"
to_chat(src, fieldset_block(span_bold("Current Players"), span_infoplain(msg), "boxed_message"), type = MESSAGE_TYPE_INFO)
-/client/verb/adminwho()
- set category = "Admin"
- set name = "Adminwho"
+GAME_VERB(/client, adminwho, "Adminwho", "Admin")
var/list/lines = list()
var/payload_string = generate_adminwho_string()
diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm
index 5412910c3e2..a8b86221e44 100644
--- a/code/modules/clothing/head/soft_caps.dm
+++ b/code/modules/clothing/head/soft_caps.dm
@@ -20,8 +20,7 @@
flipped = FALSE
..()
-/obj/item/clothing/head/soft/verb/flipcap()
- set name = "Flip cap"
+GAME_VERB(/obj/item/clothing/head/soft, flipcap, "Flip cap", null)
flip(usr)
diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm
index c146677e4ab..9c3f517beb6 100644
--- a/code/modules/clothing/masks/hailer.dm
+++ b/code/modules/clothing/masks/hailer.dm
@@ -134,9 +134,8 @@ GLOBAL_LIST_INIT(hailer_phrases, list(
return TRUE
return FALSE
-/obj/item/clothing/mask/gas/sechailer/verb/halt()
- set name = "HALT"
- set src in usr
+GAME_VERB_SRC(/obj/item/clothing/mask/gas/sechailer, halt, usr, "HALT", null)
+
if(!isliving(usr) || !can_use(usr) || !COOLDOWN_FINISHED(src, hailer_cooldown))
return
if(broken_hailer)
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 6771e341100..7ac4cfb5aa9 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -45,9 +45,7 @@
AddElement(/datum/element/adjust_fishing_difficulty, fishing_modifier)
magpulse_fishing_modifier = fishing_modifier
-/obj/item/clothing/shoes/magboots/verb/toggle()
- set name = "Toggle Magboots"
- set src in usr
+GAME_VERB_SRC(/obj/item/clothing/shoes/magboots, toggle, usr, "Toggle Magboots", null)
if(!can_use(usr))
return
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 559467ea5e8..aef97b26d19 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -462,9 +462,7 @@
return all_accessories
-/obj/item/clothing/under/verb/toggle()
- set name = "Adjust Suit Sensors"
- set src in usr
+GAME_VERB_SRC(/obj/item/clothing/under, toggle, usr, "Adjust Suit Sensors", null)
var/mob/user_mob = usr
if(!can_toggle_sensors(user_mob))
return
@@ -532,10 +530,7 @@
return
pop_accessory(user)
-/obj/item/clothing/under/verb/jumpsuit_adjust()
- set name = "Adjust Jumpsuit Style"
- set category = null
- set src in usr
+GAME_VERB_SRC(/obj/item/clothing/under, jumpsuit_adjust, usr, "Adjust Jumpsuit Style", null)
if(!can_adjust)
balloon_alert(usr, "can't be adjusted!")
diff --git a/code/modules/discord/accountlink.dm b/code/modules/discord/accountlink.dm
index 3ef8ff527e4..83d73afe6f2 100644
--- a/code/modules/discord/accountlink.dm
+++ b/code/modules/discord/accountlink.dm
@@ -1,8 +1,5 @@
// IF you have linked your account, this will trigger a verify of the user
-/client/verb/verify_in_discord()
- set category = "OOC"
- set name = "Verify Discord Account"
- set desc = "Verify your discord account with your BYOND account"
+GAME_VERB_DESC(/client, verify_in_discord, "Verify Discord Account", "Verify your discord account with your BYOND account", "OOC")
// Safety checks
if(!CONFIG_GET(flag/sql_enabled))
diff --git a/code/modules/discord/toggle_notify.dm b/code/modules/discord/toggle_notify.dm
index b33c18d950c..462424e0dc0 100644
--- a/code/modules/discord/toggle_notify.dm
+++ b/code/modules/discord/toggle_notify.dm
@@ -1,8 +1,5 @@
// Verb to toggle restart notifications
-/client/verb/notify_restart()
- set category = "OOC"
- set name = "Notify Restart"
- set desc = "Notifies you on Discord when the server restarts."
+GAME_VERB_DESC(/client, notify_restart, "Notify Restart", "Notifies you on Discord when the server restarts.", "OOC")
// Safety checks
if(!CONFIG_GET(flag/sql_enabled))
diff --git a/code/modules/escape_menu/escape_menu.dm b/code/modules/escape_menu/escape_menu.dm
index f1a24d24901..947c214c733 100644
--- a/code/modules/escape_menu/escape_menu.dm
+++ b/code/modules/escape_menu/escape_menu.dm
@@ -2,10 +2,7 @@ GLOBAL_LIST_EMPTY(escape_menus)
/// Opens the escape menu.
/// Verb, hardcoded to Escape, set in the client skin.
-/client/verb/open_escape_menu()
- set name = "Open Escape Menu"
- set hidden = TRUE
-
+GAME_VERB_HIDDEN(/client, open_escape_menu, "Open Escape Menu")
var/current_escape_menu = GLOB.escape_menus[ckey]
if (!isnull(current_escape_menu))
qdel(current_escape_menu)
diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm
index 3f75e531d5b..9440baffdde 100644
--- a/code/modules/food_and_drinks/machinery/gibber.dm
+++ b/code/modules/food_and_drinks/machinery/gibber.dm
@@ -145,9 +145,8 @@
. = ..()
icon_state = panel_open ? "[base_icon_state]_open" : base_icon_state
-/obj/machinery/gibber/verb/eject()
- set name = "Empty gibber"
- set src in oview(1)
+GAME_VERB_SRC(/obj/machinery/gibber, eject, oview(1), "Empty gibber", null)
+
if (usr.stat != CONSCIOUS || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED))
return
if(!usr.can_perform_action(src))
diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm
index 6b0d997d228..5abbd12a0be 100644
--- a/code/modules/food_and_drinks/machinery/processor.dm
+++ b/code/modules/food_and_drinks/machinery/processor.dm
@@ -198,9 +198,8 @@
processing = FALSE
visible_message(span_notice("\The [src] finishes processing."))
-/obj/machinery/processor/verb/eject()
- set name = "Eject Contents"
- set src in oview(1)
+GAME_VERB_SRC(/obj/machinery/processor, eject, oview(1), "Eject Contents", null)
+
if(usr.stat != CONSCIOUS || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED))
return
if(!usr.can_perform_action(src))
diff --git a/code/modules/interview/interview.dm b/code/modules/interview/interview.dm
index d2620274257..3c04604c6e3 100644
--- a/code/modules/interview/interview.dm
+++ b/code/modules/interview/interview.dm
@@ -91,9 +91,7 @@
/**
* Verb for opening the existing interview, or if relevant creating a new interview if possible.
*/
-/mob/dead/new_player/proc/open_interview()
- set name = "Open Interview"
- set category = "Interview"
+GAME_VERB_PROC(/mob/dead/new_player, open_interview, "Open Interview", "Interview")
var/mob/dead/new_player/M = usr
if (M?.client?.interviewee)
var/datum/interview/I = GLOB.interviews.interview_for_client(M.client)
diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm
index ce4c1b4d3a7..b72e8af905d 100644
--- a/code/modules/keybindings/bindings_client.dm
+++ b/code/modules/keybindings/bindings_client.dm
@@ -1,8 +1,6 @@
// Clients aren't datums so we have to define these procs indpendently.
// These verbs are called for all key press and release events
-/client/verb/keyDown(_key as text, mousepos_x as num, mousepos_y as num, sizex as num, sizey as num)
- set instant = TRUE
- set hidden = TRUE
+GAME_VERB_HIDDEN_INSTANT(/client, keyDown, "keyDown", _key as text, mousepos_x as num, mousepos_y as num, sizex as num, sizey as num)
client_keysend_amount += 1
@@ -82,9 +80,7 @@
mob.focus?.key_down(_key, src, full_key)
mob.update_mouse_pointer()
-/client/verb/keyUp(_key as text, mousepos_x as num, mousepos_y as num, sizex as num, sizey as num)
- set instant = TRUE
- set hidden = TRUE
+GAME_VERB_HIDDEN_INSTANT(/client, keyUp, "keyUp", _key as text, mousepos_x as num, mousepos_y as num, sizex as num, sizey as num)
var/key_combo = key_combos_held[_key]
if(key_combo)
diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm
index 8bffeaed85c..c064b755fd3 100644
--- a/code/modules/mob/dead/dead.dm
+++ b/code/modules/mob/dead/dead.dm
@@ -22,7 +22,7 @@ INITIALIZE_IMMEDIATE(/mob/dead)
prepare_huds()
if(length(CONFIG_GET(keyed_list/cross_server)))
- add_verb(src, /mob/dead/proc/server_hop)
+ ASSIGN_GAME_VERB(src, /mob/dead, server_hop)
set_focus(src)
become_hearing_sensitive()
log_mob_tag("TAG: [tag] CREATED: [key_name(src)] \[[src.type]\]")
@@ -33,10 +33,7 @@ INITIALIZE_IMMEDIATE(/mob/dead)
#define SERVER_HOPPER_TRAIT "server_hopper"
-/mob/dead/proc/server_hop()
- set category = "OOC"
- set name = "Server Hop"
- set desc= "Jump to the other server"
+GAME_VERB_PROC_DESC(/mob/dead, server_hop, "Server Hop", "Jump to the other server", "OOC")
if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) // in case the round is ending and a cinematic is already playing we don't wanna clash with that (yes i know)
return
var/list/our_id = CONFIG_GET(string/cross_comms_name)
@@ -44,7 +41,7 @@ INITIALIZE_IMMEDIATE(/mob/dead)
var/pick
switch(length(csa))
if(0)
- remove_verb(src, /mob/dead/proc/server_hop)
+ UNASSIGN_GAME_VERB(src, /mob/dead, server_hop)
to_chat(src, span_notice("Server Hop has been disabled."))
if(1)
pick = csa[1]
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 7e038a23688..69f3edd141d 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -34,7 +34,7 @@
. = ..()
GLOB.new_player_list += src
- add_verb(src, /mob/dead/new_player/proc/reset_menu_hud)
+ ASSIGN_GAME_VERB(src, /mob/dead/new_player, reset_menu_hud)
/mob/dead/new_player/Destroy()
GLOB.new_player_list -= src
@@ -356,13 +356,11 @@
I.ui_interact(src)
// Add verb for re-opening the interview panel, fixing chat and re-init the verbs for the stat panel
- add_verb(src, /mob/dead/new_player/proc/open_interview)
+ ASSIGN_GAME_VERB(src, /mob/dead/new_player, open_interview)
add_verb(client, /client/verb/fix_tgui_panel)
///Resets the Lobby Menu HUD, recreating and reassigning it to the new player
-/mob/dead/new_player/proc/reset_menu_hud()
- set name = "Reset Lobby Menu HUD"
- set category = "OOC"
+GAME_VERB_PROC(/mob/dead/new_player, reset_menu_hud, "Reset Lobby Menu HUD", "OOC")
var/mob/dead/new_player/new_player = usr
if(!COOLDOWN_FINISHED(new_player, reset_hud_cooldown))
to_chat(new_player, span_warning("You must wait [DisplayTimeText(COOLDOWN_TIMELEFT(new_player, reset_hud_cooldown))] before resetting the Lobby Menu HUD again!"))
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index cde8790ee63..edeab5334bd 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -306,10 +306,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
/*
This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues.
*/
-/mob/living/verb/ghost()
- set category = "OOC"
- set name = "Ghost"
- set desc = "Relinquish your life and enter the land of the dead."
+GAME_VERB_DESC(/mob/living, ghost, "Ghost", "Relinquish your life and enter the land of the dead.", "OOC")
if(stat != CONSCIOUS && stat != DEAD)
succumb()
@@ -323,10 +320,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
ghostize(FALSE) // FALSE parameter is so we can never re-enter our body. U ded.
return TRUE
-/mob/eye/verb/ghost()
- set category = "OOC"
- set name = "Ghost"
- set desc = "Relinquish your life and enter the land of the dead."
+GAME_VERB_DESC(/mob/eye, ghost, "Ghost", "Relinquish your life and enter the land of the dead.", "OOC")
var/response = tgui_alert(usr, "Are you sure you want to ghost? If you ghost whilst still alive you cannot re-enter your body!", "Confirm Ghost Observe", list("Ghost", "Stay in Body"))
if(response != "Ghost")
@@ -368,8 +362,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(new_area != ambience_tracked_area)
update_ambience_area(new_area)
-/mob/dead/observer/verb/reenter_corpse()
- set name = "Re-enter Corpse"
+GAME_VERB(/mob/dead/observer, reenter_corpse, "Re-enter Corpse", null)
if(!client)
return
@@ -390,8 +383,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
mind.current.client.init_verbs()
return TRUE
-/mob/dead/observer/verb/do_not_resuscitate()
- set name = "Do Not Resuscitate"
+GAME_VERB(/mob/dead/observer, do_not_resuscitate, "Do Not Resuscitate", null)
if(!can_reenter_corpse)
to_chat(usr, span_warning("You're already stuck out of your body!"))
@@ -445,8 +437,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(sound)
SEND_SOUND(src, sound(sound))
-/mob/dead/observer/verb/dead_tele()
- set name = "Teleport"
+GAME_VERB(/mob/dead/observer, dead_tele, "Teleport", null)
if(!isobserver(usr))
to_chat(usr, span_warning("Not when you're not dead!"))
@@ -473,13 +464,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
usr.abstract_move(pick(L))
-/mob/dead/observer/verb/follow()
- set name = "Orbit"
+GAME_VERB(/mob/dead/observer, follow, "Orbit", null)
GLOB.orbit_menu.show(src)
-/mob/dead/observer/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak
- set name = "Jump to Mob"
+GAME_VERB(/mob/dead/observer, jumptomob, "Jump to Mob", null) //Moves the ghost instead of just changing the ghosts's eye -Nodrak
if(!isobserver(usr)) //Make sure they're an observer!
return
@@ -507,8 +496,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
else
to_chat(source_mob, span_danger("This mob is not located in the game world."))
-/mob/dead/observer/verb/change_view_range()
- set name = "View Range"
+GAME_VERB(/mob/dead/observer, change_view_range, "View Range", null)
if(SSlag_switch.measures[DISABLE_GHOST_ZOOM_TRAY] && !client?.holder)
to_chat(usr, span_notice("That verb is currently globally disabled."))
@@ -525,15 +513,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
else
client.view_size.resetToDefault()
-/mob/dead/observer/verb/toggle_ghostsee()
- set name = "Toggle Ghost Vision"
+GAME_VERB(/mob/dead/observer, toggle_ghostsee, "Toggle Ghost Vision", null)
toggle_ghost_hud_flag(GHOST_VISION)
update_sight()
to_chat(usr, span_boldnotice("You [(ghost_hud_flags & GHOST_VISION) ? "now" : "no longer"] have ghost vision."))
-/mob/dead/observer/verb/toggle_darkness()
- set name = "Toggle Darkness"
+GAME_VERB(/mob/dead/observer, toggle_darkness, "Toggle Darkness", null)
switch(lighting_cutoff)
if (LIGHTING_CUTOFF_VISIBLE)
@@ -547,13 +533,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
update_sight()
-/mob/dead/observer/verb/view_manifest()
- set name = "View Crew Manifest"
+GAME_VERB(/mob/dead/observer, view_manifest, "View Crew Manifest", null)
GLOB.manifest.ui_interact(src)
-/mob/dead/observer/verb/observe()
- set name = "Observe"
+GAME_VERB(/mob/dead/observer, observe, "Observe", null)
if(!isobserver(usr) || HAS_TRAIT(src, TRAIT_NO_OBSERVE)) //Make sure they're an observer!
return
@@ -582,8 +566,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
do_observe(chosen_target)
-/mob/dead/observer/verb/tray_view()
- set name = "T-ray scan"
+GAME_VERB(/mob/dead/observer, tray_view, "T-ray scan", null)
if(SSlag_switch.measures[DISABLE_GHOST_ZOOM_TRAY] && !client?.holder)
to_chat(usr, span_notice("That verb is currently globally disabled."))
@@ -591,8 +574,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
t_ray_scan(src)
-/mob/dead/observer/verb/toggle_data_huds()
- set name = "Toggle Sec/Med/Diag HUD"
+GAME_VERB(/mob/dead/observer, toggle_data_huds, "Toggle Sec/Med/Diag HUD", null)
toggle_ghost_hud_flag(GHOST_DATA_HUDS)
if(ghost_hud_flags & GHOST_DATA_HUDS)
@@ -600,8 +582,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
else
to_chat(src, span_notice("Data HUDs disabled."))
-/mob/dead/observer/verb/toggle_health_scan()
- set name = "Toggle Health Scan"
+GAME_VERB(/mob/dead/observer, toggle_health_scan, "Toggle Health Scan", null)
toggle_ghost_hud_flag(GHOST_HEALTH)
if(ghost_hud_flags & GHOST_HEALTH)
@@ -609,8 +590,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
else
to_chat(src, span_notice("Health scan disabled."))
-/mob/dead/observer/verb/toggle_chem_scan()
- set name = "Toggle Chem Scan"
+GAME_VERB(/mob/dead/observer, toggle_chem_scan, "Toggle Chem Scan", null)
toggle_ghost_hud_flag(GHOST_CHEM)
if(ghost_hud_flags & GHOST_CHEM)
@@ -618,8 +598,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
else
to_chat(src, span_notice("Chem scan disabled."))
-/mob/dead/observer/verb/toggle_gas_scan()
- set name = "Toggle Gas Scan"
+GAME_VERB(/mob/dead/observer, toggle_gas_scan, "Toggle Gas Scan", null)
toggle_ghost_hud_flag(GHOST_GAS)
if(ghost_hud_flags & GHOST_GAS)
@@ -627,8 +606,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
else
to_chat(src, span_notice("Gas scan disabled."))
-/mob/dead/observer/verb/restore_ghost_appearance()
- set name = "Restore Ghost Character"
+GAME_VERB(/mob/dead/observer, restore_ghost_appearance, "Restore Ghost Character", null)
set_ghost_appearance()
if(client?.prefs)
@@ -688,9 +666,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if (!isnull(client) && !isnull(client.eye))
reset_perspective(null)
-/mob/dead/observer/verb/add_view_range(input as num)
- set name = "Add View Range"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/mob/dead/observer, add_view_range, "Add View Range", input as num)
if(SSlag_switch.measures[DISABLE_GHOST_ZOOM_TRAY] && !client?.holder)
to_chat(usr, span_notice("That verb is currently globally disabled."))
@@ -989,15 +965,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
to_chat(G, message)
GLOB.observer_default_invisibility = amount
-/mob/dead/observer/proc/open_spawners_menu()
- set name = "Spawners Menu"
+GAME_VERB_PROC(/mob/dead/observer, open_spawners_menu, "Spawners Menu", null)
if(!spawners_menu)
spawners_menu = new(src)
spawners_menu.ui_interact(src)
-/mob/dead/observer/proc/open_minigames_menu()
- set name = "Minigames Menu"
+GAME_VERB_PROC(/mob/dead/observer, open_minigames_menu, "Minigames Menu", null)
if(!client)
return
if(!isobserver(src))
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 5fd9172e160..d61dcd47c5e 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -644,9 +644,7 @@
qdel(item)
return FALSE
-/mob/verb/quick_equip()
- set name = "quick-equip"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/mob, quick_equip, "quick-equip")
DEFAULT_QUEUE_OR_CALL_VERB(VERB_CALLBACK(src, PROC_REF(execute_quick_equip)))
diff --git a/code/modules/mob/living/basic/drone/verbs.dm b/code/modules/mob/living/basic/drone/verbs.dm
index a66d17048fd..e5a941d0a92 100644
--- a/code/modules/mob/living/basic/drone/verbs.dm
+++ b/code/modules/mob/living/basic/drone/verbs.dm
@@ -3,9 +3,7 @@
*
* See [/mob/living/basic/drone/var/laws]
*/
-/mob/living/basic/drone/verb/check_laws()
- set category = "Drone"
- set name = "Check Laws"
+GAME_VERB(/mob/living/basic/drone, check_laws, "Check Laws", "Drone")
to_chat(src, "Drone Laws")
to_chat(src, laws)
@@ -21,9 +19,7 @@
*
* Attaches area name to message
*/
-/mob/living/basic/drone/verb/drone_ping()
- set category = "Drone"
- set name = "Drone ping"
+GAME_VERB(/mob/living/basic/drone, drone_ping, "Drone ping", "Drone")
var/alert_s = input(src,"Alert severity level","Drone ping",null) as null|anything in list("Low","Medium","High","Critical")
diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm
index 00adadd33fd..09bcf02737e 100644
--- a/code/modules/mob/living/brain/MMI.dm
+++ b/code/modules/mob/living/brain/MMI.dm
@@ -259,12 +259,7 @@
/obj/item/mmi/proc/replacement_ai_name()
return brainmob.name
-/obj/item/mmi/verb/Toggle_Listening()
- set name = "Toggle Listening"
- set desc = "Toggle listening channel on or off."
- set category = "MMI"
- set src = usr.loc
- set popup_menu = FALSE
+GAME_VERB_SRC_DESC(/obj/item/mmi, Toggle_Listening, usr.loc, "Toggle Listening", "Toggle listening channel on or off.", "MMI")
if(brainmob.stat)
to_chat(brainmob, span_warning("Can't do that while incapacitated or dead!"))
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index a524b6c91b6..3de9f365c95 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -43,7 +43,7 @@
)
/mob/living/carbon/alien/Initialize(mapload)
- add_verb(src, /mob/living/proc/mob_sleep)
+ ASSIGN_GAME_VERB(src, /mob/living, mob_sleep)
add_verb(src, /mob/living/proc/toggle_resting)
create_bodyparts() //initialize bodyparts
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index bfebd95c028..d624f0b0090 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1,5 +1,5 @@
/mob/living/carbon/human/Initialize(mapload)
- add_verb(src, /mob/living/proc/mob_sleep)
+ ASSIGN_GAME_VERB(src, /mob/living, mob_sleep)
add_verb(src, /mob/living/proc/toggle_resting)
icon_state = "" //Remove the inherent human icon that is visible on the map editor. We're rendering ourselves limb by limb, having it still be there results in a bug where the basic human icon appears below as south in all directions and generally looks nasty.
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index ad9ebb59068..eaf193e7b06 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -515,9 +515,7 @@
//mob verbs are a lot faster than object verbs
//for more info on why this is not atom/pull, see examinate() in mob.dm
-/mob/living/verb/pulled(atom/movable/thing_pulled as mob|obj in oview(1))
- set name = "Pull"
-
+GAME_VERB(/mob/living, pulled, "Pull", null, atom/movable/thing_pulled as mob|obj in oview(1))
if(istype(thing_pulled) && Adjacent(thing_pulled))
start_pulling(thing_pulled)
@@ -541,8 +539,7 @@
log_message("points at [pointing_at]", LOG_EMOTE)
visible_message(span_infoplain("[span_name("[src]")] points at [pointing_at]."), span_notice("You point at [pointing_at]."))
-/mob/living/verb/succumb(whispered as num|null)
- set hidden = TRUE
+GAME_VERB_HIDDEN(/mob/living, succumb, "succumb", whispered as num|null)
if (!CAN_SUCCUMB(src))
if(HAS_TRAIT(src, TRAIT_SUCCUMB_OVERRIDE))
if(whispered)
@@ -600,9 +597,7 @@
// MOB PROCS //END
-/mob/living/proc/mob_sleep()
- set name = "Sleep"
- set hidden = TRUE
+GAME_VERB_PROC(/mob/living, mob_sleep, "Sleep", null)
if(IsSleeping())
to_chat(src, span_warning("You are already sleeping!"))
diff --git a/code/modules/mob/living/navigation.dm b/code/modules/mob/living/navigation.dm
index c63b4594b65..7d0ef67d107 100644
--- a/code/modules/mob/living/navigation.dm
+++ b/code/modules/mob/living/navigation.dm
@@ -8,9 +8,7 @@
/// Images of the path created by navigate().
var/list/navigation_images = list()
-/mob/living/verb/navigate()
- set name = "Navigate"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/mob/living, navigate, "Navigate")
if(incapacitated)
return
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 0689c2c59e5..7b630865df9 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -60,7 +60,7 @@
spark_system = new /datum/effect_system/basic/spark_spread(src, 5, FALSE)
spark_system.attach(src)
- add_verb(src, /mob/living/silicon/ai/proc/show_laws_verb)
+ ASSIGN_GAME_VERB(src, /mob/living/silicon/ai, show_laws_verb)
aiMulti = new(src)
aicamera = new/obj/item/camera/siliconcam/ai_camera(src)
@@ -68,13 +68,11 @@
deploy_action.Grant(src)
if(isturf(loc))
- add_verb(src, list(
- /mob/living/silicon/ai/proc/ai_network_change,
- /mob/living/silicon/ai/proc/ai_hologram_change,
- /mob/living/silicon/ai/proc/botcall,
- /mob/living/silicon/ai/proc/control_integrated_radio,
- /mob/living/silicon/ai/proc/set_automatic_say_channel,
- ))
+ ASSIGN_GAME_VERB(src, /mob/living/silicon/ai, ai_network_change)
+ ASSIGN_GAME_VERB(src, /mob/living/silicon/ai, ai_hologram_change)
+ ASSIGN_GAME_VERB(src, /mob/living/silicon/ai, botcall)
+ ASSIGN_GAME_VERB(src, /mob/living/silicon/ai, control_integrated_radio)
+ ASSIGN_GAME_VERB(src, /mob/living/silicon/ai, set_automatic_say_channel)
GLOB.ai_list += src
GLOB.shuttle_caller_list += src
@@ -224,10 +222,7 @@
ai_display.emotion = emote
ai_display.update()
-/mob/living/silicon/ai/verb/pick_icon()
- set category = "AI Commands"
- set name = "Set AI Core Display"
- set desc = "Choose what appears on your AI core display"
+GAME_VERB_DESC(/mob/living/silicon/ai, pick_icon, "Set AI Core Display", "Choose what appears on your AI core display", "AI Commands")
if(incapacitated)
to_chat(src, span_warning("You cannot access the core display controls in your current state."))
@@ -241,10 +236,7 @@
var/obj/item/aicard/card = loc
card.update_appearance()
-/mob/living/silicon/ai/verb/pick_status_display()
- set category = "AI Commands"
- set name = "Set AI Status Display"
- set desc = "Choose what appears on status displays around the station"
+GAME_VERB_DESC(/mob/living/silicon/ai, pick_status_display, "Set AI Status Display", "Choose what appears on status displays around the station", "AI Commands")
if(incapacitated)
to_chat(src, span_warning("You cannot access the status display controls in your current state."))
@@ -335,9 +327,7 @@
/mob/living/silicon/ai/cancel_camera()
view_core()
-/mob/living/silicon/ai/verb/ai_camera_track()
- set name = "track"
- set hidden = TRUE //Don't display it on the verb lists. This verb exists purely so you can type "track Oldman Robustin" and follow his ass
+GAME_VERB_HIDDEN(/mob/living/silicon/ai, ai_camera_track, "track") //Don't display it on the verb lists. This verb exists purely so you can type "track Oldman Robustin" and follow his ass
ai_tracking_tool.track_input(src)
@@ -355,9 +345,7 @@
if(eyeobj)
eyeobj.glide_size = new_glide_size
-/mob/living/silicon/ai/verb/toggle_anchor()
- set category = "AI Commands"
- set name = "Toggle Floor Bolts"
+GAME_VERB(/mob/living/silicon/ai, toggle_anchor, "Toggle Floor Bolts", "AI Commands")
if(!isturf(loc)) // if their location isn't a turf
return // stop
if(stat == DEAD)
@@ -517,10 +505,7 @@
eyeobj.setLoc(get_turf(C))
return TRUE
-/mob/living/silicon/ai/proc/botcall()
- set category = "AI Commands"
- set name = "Access Robot Control"
- set desc = "Wirelessly control various automatic robots."
+GAME_VERB_PROC_DESC(/mob/living/silicon/ai, botcall, "Access Robot Control", "Wirelessly control various automatic robots.", "AI Commands")
if(!robot_control)
robot_control = new(src)
@@ -574,9 +559,7 @@
//Replaces /mob/living/silicon/ai/verb/change_network() in ai.dm & camera.dm
//Adds in /mob/living/silicon/ai/proc/ai_network_change() instead
//Addition by Mord_Sith to define AI's network change ability
-/mob/living/silicon/ai/proc/ai_network_change()
- set category = "AI Commands"
- set name = "Jump To Network"
+GAME_VERB_PROC(/mob/living/silicon/ai, ai_network_change, "Jump To Network", "AI Commands")
ai_tracking_tool.reset_tracking()
var/cameralist[0]
@@ -617,10 +600,7 @@
//End of code by Mord_Sith
//I am the icon meister. Bow fefore me. //>fefore
-/mob/living/silicon/ai/proc/ai_hologram_change()
- set name = "Change Hologram"
- set desc = "Change the default hologram available to AI to something else."
- set category = "AI Commands"
+GAME_VERB_PROC_DESC(/mob/living/silicon/ai, ai_hologram_change, "Change Hologram", "Change the default hologram available to AI to something else.", "AI Commands")
if(incapacitated)
return
@@ -764,10 +744,7 @@
C.Togglelight(1)
lit_cameras |= C
-/mob/living/silicon/ai/proc/control_integrated_radio()
- set name = "Transceiver Settings"
- set desc = "Allows you to change settings of your radio."
- set category = "AI Commands"
+GAME_VERB_PROC_DESC(/mob/living/silicon/ai, control_integrated_radio, "Transceiver Settings", "Allows you to change settings of your radio.", "AI Commands")
if(incapacitated)
return
@@ -780,10 +757,7 @@
if(radio)
radio.make_syndie()
-/mob/living/silicon/ai/proc/set_automatic_say_channel()
- set name = "Set Auto Announce Mode"
- set desc = "Modify the default radio setting for your automatic announcements."
- set category = "AI Commands"
+GAME_VERB_PROC_DESC(/mob/living/silicon/ai, set_automatic_say_channel, "Set Auto Announce Mode", "Modify the default radio setting for your automatic announcements.", "AI Commands")
if(incapacitated)
return
@@ -981,10 +955,7 @@
playsound(get_turf(src), 'sound/machines/ding.ogg', 50, TRUE, ignore_walls = FALSE)
to_chat(src, "Hack complete. [apc] is now under your exclusive control.")
-/mob/living/silicon/ai/verb/deploy_to_shell()
- set category = "AI Commands"
- set desc = "Transfer to an available remote body."
- set name = "Deploy to Shell"
+GAME_VERB_DESC(/mob/living/silicon/ai, deploy_to_shell, "Deploy to Shell", "Transfer to an available remote body.", "AI Commands")
select_shell()
diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm
index 7895dd65882..a2864ca7cd4 100644
--- a/code/modules/mob/living/silicon/ai/ai_say.dm
+++ b/code/modules/mob/living/silicon/ai/ai_say.dm
@@ -68,11 +68,7 @@
// Make sure that the code compiles with AI_VOX undefined
#ifdef AI_VOX
#define VOX_DELAY 600
-/mob/living/silicon/ai/verb/announcement_help()
-
- set name = "Announcement Help"
- set desc = "Display a list of vocal words to announce to the crew."
- set category = "AI Commands"
+GAME_VERB_DESC(/mob/living/silicon/ai, announcement_help, "Announcement Help", "Display a list of vocal words to announce to the crew.", "AI Commands")
if(incapacitated)
return
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index d329b62f39f..0014c57959a 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -211,9 +211,7 @@
else
eyeobj.RemoveInvisibility(type)
-/mob/living/silicon/ai/verb/toggle_acceleration()
- set category = "AI Commands"
- set name = "Toggle Camera Acceleration"
+GAME_VERB(/mob/living/silicon/ai, toggle_acceleration, "Toggle Camera Acceleration", "AI Commands")
if(incapacitated)
return
diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm
index 2d21fd260dc..97d855d6bb9 100644
--- a/code/modules/mob/living/silicon/ai/laws.dm
+++ b/code/modules/mob/living/silicon/ai/laws.dm
@@ -1,9 +1,5 @@
-/mob/living/silicon/ai/proc/show_laws_verb()
- set category = "AI Commands"
- set name = "Show Laws"
- set desc = "Check what your laws are privately. \
- Also ensures all synced cyborgs are up to date with your laws, reminds them of your laws."
+GAME_VERB_PROC_DESC(/mob/living/silicon/ai, show_laws_verb, "Show Laws", "Check what your laws are privately. Also ensures all synced cyborgs are up to date with your laws, reminds them of your laws.", "AI Commands")
if(usr.stat == DEAD)
return //won't work if dead
src.show_laws()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 09208558022..434275a1333 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -199,9 +199,7 @@
/**
* Some kind of debug verb that gives atmosphere environment details
*/
-/mob/proc/Cell()
- set category = "Admin"
- set hidden = TRUE
+GAME_VERB_PROC(/mob, Cell, "Cell", "Admin")
if(!loc)
return
@@ -545,8 +543,7 @@
* [this byond forum post](https://secure.byond.com/forum/?post=1326139&page=2#comment8198716)
* for why this isn't atom/verb/examine()
*/
-/mob/verb/examinate(atom/examinify as mob|obj|turf in view()) //It used to be oview(12), but I can't really say why
- set name = "Examine"
+GAME_VERB(/mob, examinate, "Examine", null, atom/examinify as mob|obj|turf in view()) //It used to be oview(12), but I can't really say why
DEFAULT_QUEUE_OR_CALL_VERB(VERB_CALLBACK(src, PROC_REF(run_examinate), examinify))
@@ -808,9 +805,7 @@
*
* Only works if flag/allow_respawn is allowed in config
*/
-/mob/verb/abandon_mob()
- set name = "Respawn"
- set category = "OOC"
+GAME_VERB(/mob, abandon_mob, "Respawn", "OOC")
switch(CONFIG_GET(flag/allow_respawn))
if(RESPAWN_FLAG_NEW_CHARACTER)
@@ -876,31 +871,21 @@
/**
* Sometimes helps if the user is stuck in another perspective or camera
*/
-/mob/verb/cancel_camera()
- set name = "Cancel Camera View"
- set category = "OOC"
+GAME_VERB(/mob, cancel_camera, "Cancel Camera View", "OOC")
reset_perspective(null)
/**
* Helpful for when a players uplink window gets glitched to above their screen.
* preventing them from moving the UPLINK window.
*/
-/mob/verb/reset_ui_positions_for_mob()
- set name = "Reset UI Positions"
- set category = "OOC"
+GAME_VERB(/mob, reset_ui_positions_for_mob, "Reset UI Positions", "OOC")
SStgui.reset_ui_position(src)
//suppress the .click/dblclick macros so people can't use them to identify the location of items or aimbot
-/mob/verb/DisClick(argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num)
- set name = ".click"
- set hidden = TRUE
- set category = null
+GAME_VERB_HIDDEN(/mob, DisClick, ".click", argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num)
return
-/mob/verb/DisDblClick(argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num)
- set name = ".dblclick"
- set hidden = TRUE
- set category = null
+GAME_VERB_HIDDEN(/mob, DisDblClick, ".dblclick", argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num)
return
/// Adds this list to the output to the stat browser
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 93c9dce974e..9a0d3db4c33 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -3,8 +3,7 @@
*
* This is a hidden verb, likely for binding with winset for hotkeys
*/
-/client/verb/drop_item()
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, drop_item, "drop item")
if(!iscyborg(mob) && mob.stat == CONSCIOUS)
mob.dropItemToGround(mob.get_active_held_item())
return
@@ -403,9 +402,7 @@
*/
///Hidden verb to cycle through head zone with repeated presses, head - eyes - mouth. Bound to 8
-/client/verb/body_toggle_head()
- set name = "body-toggle-head"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, body_toggle_head, "body-toggle-head")
if(!check_has_body_select())
return
@@ -423,9 +420,7 @@
selector.set_selected_zone(next_in_line, mob)
///Hidden verb to target the head, unbound by default.
-/client/verb/body_head()
- set name = "body-head"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, body_head, "body-head")
if(!check_has_body_select())
return
@@ -434,9 +429,7 @@
selector.set_selected_zone(BODY_ZONE_HEAD, mob)
///Hidden verb to target the eyes, bound to 7
-/client/verb/body_eyes()
- set name = "body-eyes"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, body_eyes, "body-eyes")
if(!check_has_body_select())
return
@@ -445,9 +438,7 @@
selector.set_selected_zone(BODY_ZONE_PRECISE_EYES, mob)
///Hidden verb to target the mouth, bound to 9
-/client/verb/body_mouth()
- set name = "body-mouth"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, body_mouth, "body-mouth")
if(!check_has_body_select())
return
@@ -456,9 +447,7 @@
selector.set_selected_zone(BODY_ZONE_PRECISE_MOUTH, mob)
///Hidden verb to target the right arm, bound to 4
-/client/verb/body_r_arm()
- set name = "body-r-arm"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, body_r_arm, "body-r-arm")
if(!check_has_body_select())
return
@@ -467,9 +456,7 @@
selector.set_selected_zone(BODY_ZONE_R_ARM, mob)
///Hidden verb to target the chest, bound to 5
-/client/verb/body_chest()
- set name = "body-chest"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, body_chest, "body-chest")
if(!check_has_body_select())
return
@@ -478,9 +465,7 @@
selector.set_selected_zone(BODY_ZONE_CHEST, mob)
///Hidden verb to target the left arm, bound to 6
-/client/verb/body_l_arm()
- set name = "body-l-arm"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, body_l_arm, "body-l-arm")
if(!check_has_body_select())
return
@@ -489,9 +474,7 @@
selector.set_selected_zone(BODY_ZONE_L_ARM, mob)
///Hidden verb to target the right leg, bound to 1
-/client/verb/body_r_leg()
- set name = "body-r-leg"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, body_r_leg, "body-r-leg")
if(!check_has_body_select())
return
@@ -500,9 +483,7 @@
selector.set_selected_zone(BODY_ZONE_R_LEG, mob)
///Hidden verb to target the groin, bound to 2
-/client/verb/body_groin()
- set name = "body-groin"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, body_groin, "body-groin")
if(!check_has_body_select())
return
@@ -511,9 +492,7 @@
selector.set_selected_zone(BODY_ZONE_PRECISE_GROIN, mob)
///Hidden verb to target the left leg, bound to 3
-/client/verb/body_l_leg()
- set name = "body-l-leg"
- set hidden = TRUE
+GAME_VERB_HIDDEN(/client, body_l_leg, "body-l-leg")
if(!check_has_body_select())
return
@@ -522,10 +501,7 @@
selector.set_selected_zone(BODY_ZONE_L_LEG, mob)
///Verb to toggle the walk or run status
-/client/verb/toggle_walk_run()
- set name = "toggle-walk-run"
- set hidden = TRUE
- set instant = TRUE
+GAME_VERB_HIDDEN_INSTANT(/client, toggle_walk_run, "toggle-walk-run")
if(isliving(mob))
var/mob/living/user_mob = mob
user_mob.toggle_move_intent()
diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm
index 92931a028f8..9d564daae61 100644
--- a/code/modules/mob/mob_say.dm
+++ b/code/modules/mob/mob_say.dm
@@ -1,8 +1,7 @@
//Speech verbs.
///what clients use to speak. when you type a message into the chat bar in say mode, this is the first thing that goes off serverside.
-/mob/verb/say_verb(message as text)
- set name = VERB_SAY
+GAME_VERB(/mob, say_verb, VERB_SAY, null, message as text)
if(GLOB.say_disabled) //This is here to try to identify lag problems
to_chat(usr, span_danger("Speech is currently admin-disabled."))
@@ -14,8 +13,7 @@
QUEUE_OR_CALL_VERB_FOR(VERB_CALLBACK(src, TYPE_PROC_REF(/atom/movable, say), message), SSspeech_controller)
///Whisper verb
-/mob/verb/whisper_verb(message as text)
- set name = VERB_WHISPER
+GAME_VERB(/mob, whisper_verb, VERB_WHISPER, null, message as text)
if(GLOB.say_disabled) //This is here to try to identify lag problems
to_chat(usr, span_danger("Speech is currently admin-disabled."))
@@ -35,8 +33,7 @@
say(message, language = language)
///The me emote verb
-/mob/verb/me_verb(message as text)
- set name = VERB_ME
+GAME_VERB(/mob, me_verb, VERB_ME, null, message as text)
if(GLOB.say_disabled) //This is here to try to identify lag problems
to_chat(usr, span_danger("Speech is currently admin-disabled."))
diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm
index d366e6b74ff..6c68da7dcaa 100644
--- a/code/modules/modular_computers/computers/item/laptop.dm
+++ b/code/modules/modular_computers/computers/item/laptop.dm
@@ -70,9 +70,7 @@
else
return ..()
-/obj/item/modular_computer/laptop/verb/open_computer()
- set name = "Toggle Open"
- set src in view(1)
+GAME_VERB_SRC(/obj/item/modular_computer/laptop, open_computer, view(1), "Toggle Open", null)
try_toggle_open(usr)
diff --git a/code/modules/pai/debug.dm b/code/modules/pai/debug.dm
index 1cc0115c747..0677e10cc7a 100644
--- a/code/modules/pai/debug.dm
+++ b/code/modules/pai/debug.dm
@@ -1,13 +1,9 @@
-/client/proc/makepAI(turf/target in GLOB.mob_list)
- set category = "Admin.Fun"
- set name = "Make pAI"
- set desc = "Specify a location to spawn a pAI device, then specify a key to play that pAI"
-
+ADMIN_VERB(makepAI, R_FUN, "Make pAI", "Specify a location to spawn a pAI device, then specify a key to play that pAI", ADMIN_CATEGORY_FUN, turf/target in GLOB.mob_list)
var/list/available = list()
for(var/mob/player as anything in GLOB.player_list)
if(player.client && player.key)
available.Add(player)
- var/mob/choice = tgui_input_list(usr, "Choose a player to play the pAI", "Spawn pAI", sort_names(available))
+ var/mob/choice = tgui_input_list(user, "Choose a player to play the pAI", "Spawn pAI", sort_names(available))
if(isnull(choice))
return
@@ -16,7 +12,7 @@
return
if(!isobserver(choice))
- var/confirm = tgui_alert(usr, "[choice.key] isn't ghosting right now. Are you sure you want to yank them out of their body and place them in this pAI?", "Spawn pAI Confirmation", list("Yes", "No"))
+ var/confirm = tgui_alert(user, "[choice.key] isn't ghosting right now. Are you sure you want to yank them out of their body and place them in this pAI?", "Spawn pAI Confirmation", list("Yes", "No"))
if(confirm != "Yes")
return
var/obj/item/pai_card/card = new(target)
@@ -26,8 +22,8 @@
pai.real_name = pai.name
pai.PossessByPlayer(choice.key)
card.set_personality(pai)
- if(SSpai.candidates[key])
- SSpai.candidates -= key
+ if(SSpai.candidates[user.key])
+ SSpai.candidates -= user.key
BLACKBOX_LOG_ADMIN_VERB("Make pAI")
/**
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 5b2459d3caf..52d024df1b9 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -325,9 +325,7 @@
icon_state = initial(icon_state)
return ..()
-/obj/item/paper/verb/rename()
- set name = "Rename paper"
- set src in usr
+GAME_VERB_SRC(/obj/item/paper, rename, usr, "Rename paper", null)
if(!usr.can_read(src) || usr.is_blind() || INCAPACITATED_IGNORING(usr, INCAPABLE_RESTRAINTS|INCAPABLE_GRAB) || (isobserver(usr) && !isAdminGhostAI(usr)))
return
diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm
index 1d98d728b29..128d9e236bc 100644
--- a/code/modules/photography/photos/photo.dm
+++ b/code/modules/photography/photos/photo.dm
@@ -114,9 +114,7 @@
+ "