:display_message(preamble,msg) --- prints msg to player.
:parse_message_seq from_msg_seq %from_msg_seq to_msg_seq %to_msg_seq subject_msg_seq body_msg_seq kept_msg_seq unkept_msg_seq display_seq_headers display_seq_full messages_in_seq list_rmm new_message_num length_num_le length_date_le length_date_gt length_all_msgs exists_num_eq msg_seq_to_msg_num_list msg_seq_to_msg_num_string rm_message_seq undo_rmm expunge_rmm renumber keep_message_seq - parse_message_seq(strings,cur) => msg_seq
:msg_text(@msg) => list of strings.
:notify_mail(from,recipients[,msgnums])
:current_message([recipient])
:get_current_message([recipient])
:set_current_message(recipient[,number[,date]])
:make_current_message(recipient[,index])
:kill_current_message(recipient)
:current_folder() => default folder to use, always an object, usually `this'
:parse_folder_spec(verb,args,expected_preposition[,allow_trailing_args_p])
:parse_mailread_cmd(verb,args,default,prep[,trailer])
@mail - @mail <msg-sequence> --- as in help @mail
@read @peek - @read <msg>... -- as in help @read
@rmm*ail - @rmm <message-sequence> [from <recipient>]. Use @unrmm if you screw up.
@unrmm*ail - @unrmm [on <recipient>] -- undoes the previous @rmm on that recipient.
@answer @repl*y - @answer <msg> [on *<recipient>] [<flags>...]
@forward - @forward <msg> [on *<recipient>] to <recipient> [<recipient>...]
@skip - @skip [*<folder/mailing_list>...]
@subscribe*-quick @unsubscribed*-quick - @subscribe *<folder/mailing_list> [with notification] [before|after *<folder>]
:mail_option(name)
@unsub*scribe - @unsubscribe [*<folder/mailing_list> ...]
:send_self_netmail(msg [ ,from ])
@netforw*ard - @netforward <msg>... -- as in help on @netforward
@@sendmail - Syntax: @@sendmail
@keep-m*ail @keepm*ail - @keep-mail [<msg-sequence>|none] [on <recipient>]
:my_match_recipient(string) => matches string against player's private mailing lists.
:msg_full_text(@msg) => list of strings.
@resend - @resend <msg> [on *<recipient>] to <recipient> [<recipient>...]
:expirable_msg_seq - Return a sequence indicating the expirable messages for this player.
:format_for_netforward - Takes a message sequence (the actual messages, not just the sequence describing it) and grovels over it filling text etc. Returns a two valued list: {formatted message, header for same}
:format_for_netforward_debug - Takes a message sequence (the actual messages, not just the sequence describing it) and grovels over it filling text etc. Returns a two valued list: {formatted message, header for same} @nn - @nn -- reads the first new message on the first mail_recipient (in .current_message) where new mail exists.
@unread - @unread <msg> [on *<recipient>] -- resets last-read-date for recipient to just before the first of the indicated messages.
@refile @copym*ail - @refile/@copym*ail <msg-sequence> [on <recipient>] to <recipient>
@quickr*eply @qreply - @qreply <msg> [on *<recipient>] [<flags>...]
@mail-all-new*-mail - @mail-all-new-mail
@read-all-new*-mail @ranm - @read-all-new-mail [yes]
@quick*send @qsend - Syntax: @quicksend <recipients(s)> [subj=<text>] [<message>]
@add-notify - Ideally, in order for one person to be notified that another person has new mail, both the mail recipient and the notification recipient should agree that this is an OK transfer of information.
@unsend - USAGE: @unsend [message-sequence] from <player>
:do_unsend(seq) -> Remove the specified messages. Used by @unsend. Cannot be overridden by players or player classes; @unsend won't bother to call the verb.
:my_huh - Extra parsing of player commands. Called by $command_utils:do_huh.
:last_huh(verb,args) final attempt to parse a command...
:my_match_object(string [,location])
:linesplit(line,len) => list of substrings of line
@pagelen*gth - @pagelength number -- sets page buffering to that many lines (or 0 to turn off page buffering)
:set_gaglist(@newlist) => this.gaglist = newlist
:receive_page - called by $player:page. Two args, the page header and the text, all pre-processed by the page command. Could be extended to provide haven abilities, multiline pages, etc. Indeed, at the moment it just does :tell_lines, so we already do have multiline pages, if someone wants to take advantage of it.
:page_origin_msg page_echo_msg page_absent_msg away_msg oaway_msg back_msg oback_msg away_absent_msg - set_task_perms(this.owner)
:display_option(name) => returns the value of the specified @display option
:edit_option(name) => returns the value of the specified edit option
:set_edit_option(oname,value)
:set_name - set_name(newname) attempts to change this.name to newname
:set_aliases - set_aliases(alias_list)
:set_gender - set_gender(newgender) attempts to change this.gender to newgender
:set_brief - set_brief(value)
@mode - @mode <mode>
:add_feature - Add a feature to this player's features list. Caller must be this or have suitable permissions (this or wizardly).
:remove_feature - Remove a feature from this player's features list. Caller must be this, or have permissions of this, a wizard, or feature.owner.
:is_listening - return true if player is active.
:linewrap - Return a true value if this needs linewrapping.
@set-note-string @set-note-text - Usage: @set-note-{string | text} {#xx | #xx.pname}
:set_linelength - Set linelength. Linelength must be an integer >= 10.
:set_pagelength - Set pagelength. Must be an integer >= 5, or 0 to turn pagelength off.
:set_home - set_home(newhome) attempts to change this.home to newhome
@registerme - @registerme as <email-address> -- update your account email address
:ctime([INT time]) => STR as the function.
news - Usage: news [contents] [articles]
@password - Last modified Sun Dec 7 01:44:07 2025 UTC by Claude (#13505@Mongoose).
:title - random april fools jokes :)
@remove-feature @rmfeature - Copied from generic player (#6):@rmfeature [verb author Daiverd (#2)] at Sun Jul 23 09:34:27 2006 PDT
:you - What should this object be replaced with when printing messages about itself to itself?
@sgag*! - Copied from generic player (#6):@gag [verb author Q (#249)] at Fri Jul 14 16:58:44 2023 UTC
:set_sgaglist - Copied from generic player (#6):set_gaglist [verb author daiverd (#2)] at Fri Jul 14 17:03:52 2023 UTC
@listsgag - Copied from generic player (#6):@listgag [verb author daiverd (#2)] at Fri Jul 14 17:05:08 2023 UTC
:sgag_p - Copied from generic player (#6):gag_p [verb author daiverd (#2)] at Fri Jul 14 17:09:09 2023 UTC
@sungag - Copied from generic player (#6):@ungag [verb author daiverd (#2)] at Sat Jul 15 05:01:26 2023 UTC
rps - rps <player> - Challenge another player to rock-paper-scissors
:test_receive_page_gmcp_perms - Property: Comm.Channel send_channel_text accepts $player as a caller for page delivery.
:test_receive_page_gmcp_text - Property: receive_page still returns 1 for listening players after GMCP page emit is added.
:facing_angle - Canonical accessor for player listener facing angle in radians.
:orientation - Canonical accessor for orientation in MOO world coords (east=+x, north=+y, up=+z). Returns forward + up unit vectors; the CLIENT converts to Web Audio. MOO yaw: south=0, east=pi/2, north=pi, west=3pi/2.
:face - Canonical mutator for player listener facing.
:test_orientation_basics - Verify facing_angle stored prop, orientation derivation, face() mutator (not traveling).
:test_facing_angle_during_travel - Verify facing_angle returns the current segment angle during a journey.
:face - Canonical mutator for player listener facing.
:test_face_updates_property - Verify face() updates .facing_angle and orientation reflects it (not traveling).
turn - Player command: turn <left|right|around|degrees>
:turn_to - turn_to(target_angle_radians) -> the turn DURATION in seconds (0.0 if negligible/instant). Eases facing to target by driving :face over a duration proportional to the angular distance; supersedes any in-progress turn. Callers may suspend(duration) to await it.
:mass - Copied from Root Class (#1):mass [verb author Daiverd (#2)] at Mon Nov 10 23:04:48 2008 CET
:coord*inates coords - coordinates() -> this object's position {x,y,z}. coordinates(list) or coordinates(x,y,z) sets it.
:cube - Copied from Root Class (#1):cube [verb author Daiverd (#2)] at Mon Nov 10 23:12:50 2008 CET
:weight - Copied from Root Class (#1):weight [verb author Daiverd (#2)] at Thu Nov 13 07:04:56 2008 CET
:test_interpolated_coordinates - Position interpolation along a path, via an inert $journey fixture.
:test_interpolated_coords_multiseg - Multi-segment interpolation (east 5m then north 5m), via an inert $journey fixture.
:test_stop_travel - Stop freezes coords at the interpolated position and clears the journey.
:test_arrive - Arrival sets coords to destination and clears the journey.
:test_travel_to - travel_to returns E_INVARG with no path, and clears any prior journey even on failure.
:interpolated_coordinates() -> DEPRECATED alias. coordinates() is now the one canonical live accessor (interpolated during a journey, stored at rest). Kept so existing callers keep working; new code calls :coordinates().
:interact_with(target) - suspends until nearby, kills task if can't reach
:_arrive_and_interact() - Arrival callback that resumes suspended task
:movement_velocity() -> movement speed in m/s
:scene_sounds - Base: a physical object has no replayable sound scene. Rooms ($room #2700) override with the emitter-based scene. Keeps :listen/:stop_listen uniform across all $gpo.
:media_scene_for - Base media scene for scene_source-capable places. Non-room physical objects expose no replayable media scene by default.
:test_cancel_travel_kills_pending - cancel_travel kills the active journey's task AND the suspended walk/interact task, clears pending_interaction, WITHOUT touching coords.
:cancel_travel() - Kill the active journey's task and clear it (and any pending_interaction waiter). Does NOT change coords -- callers that already set a final position (teleport, exit) rely on this. stop_travel adds the freeze-at-interpolated behavior on top.
:add_option(<description>, <default value>)
:set_name - set_name(newname) attempts to change this.name to newname
:set_aliases - set_aliases(alias_list) attempts to change this.aliases to alias_list
:set_description - set_description(newdesc) attempts to change this.description to newdesc
:eject eject_nice eject_basic - eject(victim) --- usable by the owner of this to remove victim from this.contents. victim goes to its home if different from here, or $unclaimed or $player_start according as victim is a player.
:set_message(msg_name,new_value)
:do_examine - do_examine(examiner)
:examine_key - examine_key(examiner)
:examine_names - examine_names(examiner)
:examine_desc - examine_desc(who) - return the description, probably
:examine_contents - examine_contents(examiner)
:examine_verbs - Return a list of strings to be told to the player. Standard format says "Obvious verbs:" followed by a series of lines explaining syntax for each usable verb.
:get_message(msg_name)
:contents objects_for_match - Returns a list of the objects that are apparently inside this one. Don't confuse this with .contents, which is a property kept consistent with .location by the server. This verb should be used in `VR' situations, for instance when looking in a room, and does not necessarily have anything to do with the value of .contents (although the default implementation does). `Non-VR' commands (like @contents) should look directly at .contents.
:examine_verb_ok - examine_verb_ok(loc, index, info, syntax, commands_ok, hidden_verbs)
:is_listening - return 1 if the object can hear a :tell, or cares. Useful for active objects that want to stop when nothing is listening.
:hidden_verbs - hidden_verbs(who)
:examine_owner - examine_owner(examiner)
commands cmd*s - This verb allows players to see commands for an object.
:loc_enter loc_exit - syntax: what, where, levels from original
:integrate_room_msg integrate_container_msg - If this.(verb) is not set, return this:integrate_msg(@args).
:empty_message - Usage: :empty_msg(msgname)
:ps*c po*c pr*c pp*c pq*c psu pou pru ppu pqu - Get the appropriate pronoun.
:vitals - Pass vitals upwards, towards vehicles/ships/etc
:clone - clone(?deep=false) -> copy of this object; copies all properties. If deep, also clones each clonable content via content:clone(deep) into the copy.
:match_targets() => Returns a list of objects used for matching code. Child implementations should probably call pass() before overriding.
- - - - -
See "help mail-system" for a description of the programming interface to the mail system.
In particular, see "help $mail_recipient" for information on creating new mail collections.