verb macro system (pr 1/3) (#96720)

## About The Pull Request

just macro-izes all the usages of verbs in the codebase as a
pre-requisite to my follow up pr that serializes all the verbs arguments
so we can tgui-ify the command bar, so we can then put it on the
onscreen map.

this also basically does the same as #94487 so can easily be integrated
into the verb queueing stuff... but does not actually do any verb
queueing by itself. basically im just trying to be
https://github.com/tgstation/tgstation/labels/Atomic
## Why It's Good For The Game
it doesn't really do anything by itself but it does let us do more stuff

## Changelog
🆑
code: the backend to all verbs in the game has been played with, please
report any issues to github
/🆑

---------

Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
This commit is contained in:
harry
2026-07-04 02:45:07 -04:00
committed by GitHub
co-authored by harryob
parent e5afe71e87
commit ff006aa4a5
79 changed files with 369 additions and 565 deletions
+119
View File
@@ -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)
-11
View File
@@ -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)
+1 -4
View File
@@ -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]
+4 -6
View File
@@ -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
@@ -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)
+29
View File
@@ -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)
+1 -3
View File
@@ -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("<i>Voting is not set up yet!</i>"))
@@ -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)
+1 -3
View File
@@ -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
+1 -4
View File
@@ -71,10 +71,7 @@
var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext_char(cm, 1, 11))
. += "<a href=\"[CONFIG_GET(string/githuburl)]/pull/[tm.number]\">#[tm.number][details]</a><br>"
/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
+7 -1
View File
@@ -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
-10
View File
@@ -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, "<b><i>You flex your muscles and have a revelation...</i></b>")
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
+12
View File
@@ -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)
+2 -6
View File
@@ -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!"))
+1 -3
View File
@@ -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
+2 -6
View File
@@ -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
@@ -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))
@@ -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
+1 -2
View File
@@ -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()
@@ -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
@@ -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
+1 -1
View File
@@ -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")
+4 -4
View File
@@ -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 "<h1><b class='danger'>You could not be verified, and a DB connection couldn't be established. Please contact an admin with +PERMISSIONS to grant you permission.</b></h1>"
/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)
+1 -3
View File
@@ -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
+3 -11
View File
@@ -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? <a href='byond://?src=[REF(src)];tguiless_adminhelp=1'>Click here</a>"))
/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()
+1 -3
View File
@@ -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)
+1 -3
View File
@@ -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"))
@@ -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)))
+1 -3
View File
@@ -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
@@ -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
+4 -11
View File
@@ -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)
+1 -3
View File
@@ -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))
+8 -13
View File
@@ -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)
+2 -8
View File
@@ -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
+15 -80
View File
@@ -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, "<span class='infoplain'><div class=\"motd\">[motd]</div></span>", 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."))
+1 -3
View File
@@ -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))
+1 -2
View File
@@ -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.
+2 -6
View File
@@ -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 += "<b>Total Players: [length(Lines)]</b>"
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()
+1 -2
View File
@@ -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)
+2 -3
View File
@@ -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)
+1 -3
View File
@@ -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
+2 -7
View File
@@ -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!")
+1 -4
View File
@@ -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))
+1 -4
View File
@@ -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))
+1 -4
View File
@@ -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)
@@ -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))
@@ -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))
+1 -3
View File
@@ -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)
+2 -6
View File
@@ -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)
+3 -6
View File
@@ -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]
@@ -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 <b>[DisplayTimeText(COOLDOWN_TIMELEFT(new_player, reset_hud_cooldown))]</b> before resetting the Lobby Menu HUD again!"))
+21 -47
View File
@@ -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))
+1 -3
View File
@@ -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)))
+2 -6
View File
@@ -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, "<b>Drone Laws</b>")
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")
+1 -6
View File
@@ -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!"))
@@ -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
@@ -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.
+3 -8
View File
@@ -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!"))
+1 -3
View File
@@ -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
+16 -45
View File
@@ -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()
+1 -5
View File
@@ -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
@@ -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
+1 -5
View File
@@ -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()
+7 -22
View File
@@ -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
+12 -36
View File
@@ -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()
+3 -6
View File
@@ -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."))
@@ -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)
+5 -9
View File
@@ -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")
/**
+1 -3
View File
@@ -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
+1 -3
View File
@@ -114,9 +114,7 @@
+ "</body></html>", "window=photo_showing;size=[scribble ? "480x580" : "480x480"]")
onclose(user, "[name]")
/obj/item/photo/verb/rename()
set name = "Rename photo"
set src in usr
GAME_VERB_SRC(/obj/item/photo, rename, usr, "Rename photo", null)
var/n_name = tgui_input_text(usr, "What would you like to label the photo?", "Photo Labelling", max_length = MAX_NAME_LEN)
//loc.loc check is for making possible renaming photos in clipboards
+1 -2
View File
@@ -106,8 +106,7 @@
*
* overridden here and in /mob/dead/observer for different point span classes and sanity checks
*/
/mob/verb/pointed(atom/A as mob|obj|turf in view(client.view, src))
set name = "Point To"
GAME_VERB(/mob, pointed, "Point To", null, atom/A as mob|obj|turf in view(client.view, src))
if(isnull(A) || istype(A, /obj/effect/temp_visual/point) || isarea(A))
return FALSE
@@ -57,8 +57,7 @@
if(play_click)
playsound(src, 'sound/items/weapons/gun/general/ballistic_click.ogg', fire_sound_volume, vary_fire_sound, frequency = click_frequency_to_use)
/obj/item/gun/ballistic/revolver/verb/spin()
set name = "Spin Chamber"
GAME_VERB(/obj/item/gun/ballistic/revolver, spin, "Spin Chamber", null)
var/mob/user = usr
if(user.stat || !in_range(user, src))
@@ -137,9 +137,8 @@
current_range = spray_range
to_chat(user, span_notice("You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]."))
/obj/item/reagent_containers/spray/verb/empty()
set name = "Empty Spray Bottle"
set src in usr
GAME_VERB_SRC(/obj/item/reagent_containers/spray, empty, usr, "Empty Spray Bottle", null)
if(usr.incapacitated)
return
if (tgui_alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", list("Yes", "No")) != "Yes")
@@ -168,10 +168,7 @@
return
// The IC tab was removed recently as of commenting. This should probably be adjusted.
/mob/eye/imaginary_friend/dream_projection/verb/stop_projection()
set category = "IC"
set name = "Stop Projection"
set desc = "Stop astrally projecting and return to your body."
GAME_VERB_DESC(/mob/eye/imaginary_friend/dream_projection, stop_projection, "Stop Projection", "Stop astrally projecting and return to your body.", "IC")
qdel(src)
+1 -4
View File
@@ -183,10 +183,7 @@
*
* required uiref ref The UI that was closed.
*/
/client/verb/uiclose(window_id as text)
// Name the verb, and hide it from the user panel.
set name = "uiclose"
set hidden = TRUE
GAME_VERB_HIDDEN(/client, uiclose, "uiclose", window_id as text)
var/mob/user = src?.mob
if(!user)
return
+2 -6
View File
@@ -8,9 +8,7 @@
/**
* tgui panel / chat troubleshooting verb
*/
/client/verb/fix_tgui_panel()
set name = "Fix chat"
set category = "OOC"
GAME_VERB(/client, fix_tgui_panel, "Fix chat", "OOC")
var/action
log_tgui(src, "Started fixing.", context = "verb/fix_tgui_panel")
@@ -33,9 +31,7 @@
// Force show the panel to see if there are any errors
winset(src, OUTPUT_SELECTOR_LEGACY_OUTPUT_SELECTOR, "left=output_browser")
/client/verb/refresh_tgui()
set name = "Refresh TGUI"
set category = "OOC"
GAME_VERB(/client, refresh_tgui, "Refresh TGUI", "OOC")
for(var/window_id in tgui_windows)
var/datum/tgui_window/window = tgui_windows[window_id]
+9 -32
View File
@@ -1,8 +1,5 @@
//Please use mob or src (not usr) in these procs. This way they can be called in the same fashion as procs.
/client/verb/wiki()
set name = "wiki"
set desc = "Brings you to the Wiki"
set hidden = TRUE
GAME_VERB_HIDDEN(/client, wiki, "wiki")
var/wikiurl = CONFIG_GET(string/wikiurl)
if(!wikiurl)
@@ -21,10 +18,7 @@
output += "?title=Special%3ASearch&profile=default&search=[query]"
DIRECT_OUTPUT(src, link(output))
/client/verb/forum()
set name = "forum"
set desc = "Visit the forum."
set hidden = TRUE
GAME_VERB_HIDDEN(/client, forum, "forum")
var/forumurl = CONFIG_GET(string/forumurl)
if(!forumurl)
@@ -32,10 +26,7 @@
return
DIRECT_OUTPUT(src, link(forumurl))
/client/verb/rules()
set name = "rules"
set desc = "Show Server Rules."
set hidden = TRUE
GAME_VERB_HIDDEN(/client, rules, "rules")
var/rulesurl = CONFIG_GET(string/rulesurl)
if(!rulesurl)
@@ -43,10 +34,7 @@
return
DIRECT_OUTPUT(src, link(rulesurl))
/client/verb/github()
set name = "github"
set desc = "Visit Github"
set hidden = TRUE
GAME_VERB_HIDDEN(/client, github, "github")
var/githuburl = CONFIG_GET(string/githuburl)
if(!githuburl)
@@ -54,10 +42,7 @@
return
DIRECT_OUTPUT(src, link(githuburl))
/client/verb/config()
set name = "config"
set desc = "View the server configuration files."
set hidden = TRUE
GAME_VERB_HIDDEN(/client, config, "config")
var/configurl = CONFIG_GET(string/configurl)
if(!configurl)
@@ -65,9 +50,7 @@
return
DIRECT_OUTPUT(src, link(configurl))
/client/verb/reportissue()
set name = "report-issue"
set desc = "Report an issue"
GAME_VERB_DESC(/client, reportissue, "report-issue", "Report an issue", null)
var/githuburl = CONFIG_GET(string/githuburl)
if(!githuburl)
@@ -109,9 +92,7 @@
DIRECT_OUTPUT(src, link(jointext(concatable, "")))
/client/verb/changelog()
set name = "Changelog"
set category = "OOC"
GAME_VERB(/client, changelog, "Changelog", "OOC")
if(!GLOB.changelog_tgui)
GLOB.changelog_tgui = new /datum/changelog()
@@ -121,18 +102,14 @@
prefs.lastchangelog = GLOB.changelog_hash
prefs.save_preferences()
/client/verb/hotkeys_help()
set name = "Hotkeys Help"
set hidden = TRUE
GAME_VERB_HIDDEN(/client, hotkeys_help, "Hotkeys Help")
if(!GLOB.hotkeys_tgui)
GLOB.hotkeys_tgui = new /datum/hotkeys_help()
GLOB.hotkeys_tgui.ui_interact(mob)
/client/verb/emote_panel()
set name = "Emote Panel"
set hidden = TRUE
GAME_VERB_HIDDEN(/client, emote_panel, "Emote Panel")
if(!isliving(mob))
to_chat(mob, span_notice("You can only use this while you're alive!"))
+3
View File
@@ -275,6 +275,7 @@
#include "code\__DEFINES\unit_tests.dm"
#include "code\__DEFINES\uplink.dm"
#include "code\__DEFINES\vehicles.dm"
#include "code\__DEFINES\verb.dm"
#include "code\__DEFINES\verb_manager.dm"
#include "code\__DEFINES\visual_helpers.dm"
#include "code\__DEFINES\vv.dm"
@@ -782,6 +783,7 @@
#include "code\controllers\subsystem\unplanned_ai_idle_controllers.dm"
#include "code\controllers\subsystem\unplanned_controllers.dm"
#include "code\controllers\subsystem\verb_manager.dm"
#include "code\controllers\subsystem\verbs.dm"
#include "code\controllers\subsystem\vis_overlays.dm"
#include "code\controllers\subsystem\vote.dm"
#include "code\controllers\subsystem\wardrobe.dm"
@@ -901,6 +903,7 @@
#include "code\datums\stock_market_events.dm"
#include "code\datums\tgs_event_handler.dm"
#include "code\datums\verb_callbacks.dm"
#include "code\datums\verb_metadata.dm"
#include "code\datums\view.dm"
#include "code\datums\visual_data.dm"
#include "code\datums\voice_of_god_command.dm"
+7
View File
@@ -158,6 +158,13 @@ if $grep '^/[\w/]\S+\(.*(var/|, ?var/.*).*\)' "${code_files[@]}"; then
st=1
fi;
part "manual verb definition"
if $grep '\tset\s*(name|desc|category|hidden|popup_menu|instant)\s*=\s*(.*)\s' "${code_files[@]}" -g '!code/__DEFINES/**' -g '!code/__HELPERS/**' -g '!tools/**'; then
echo
echo -e "${RED}ERROR: Found a manual verb attribute set. Use GAME_VERB() or ADMIN_VERB() instead.${NC}"
st=1
fi;
part "improperly pathed static lists"
if $grep -i 'var/list/static/.*' "${code_files[@]}"; then
echo