Home
  • Home
  • About
    • Features
    • History
  • PlayPlay
  • Community
    • Discord
    • Elvenrunes
    • Links
    • Interviews
    • Wiki
  • News
    • War
    • Game News
    • Web News
  • Resources
    • Newcomers
    • Help
    • Rules
    • Dictionary
    • Boards
    • Download
    • Restricted
  • Search

MUME Help

Index: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

GENERIC MUD COMMUNICATION PROTOCOL, GMCP


The Generic Mud Communication Protocol (GMCP) allows for out-of-band information to be sent from the MUD server to the client.

The messages are sent as telnet commands, invisible to the player. Clients that support GMCP can receive such messages and also send GMCP messages to the game. See below for supported GMCP commands.

MUME tries to keep a level playing field for all players and clients by not providing additional information over GMCP that might disadvantage players on more basic clients.

Note: GMCP module and message names are not case-sensitive but message body key names are case-sensitive.

See https://www.gammon.com.au/gmcp and https://tintin.mudhalla.net/protocols/gmcp for more information on GMCP.

Supported modules

Core core functionality
Char information about a character
Client information for the map and Mudlet client package
Comm.Channel communication channels
External.Discord information about the MUME Discord channel
Room information about the current room
Room.Chars information about characters present in the room

Supported messages by modules

Core

Sent by client

Core.Hello

  • Needs to be the first message sent on the initial connection to identify the client
  • Example: Core.Hello { "client": "Mudlet", "version": "3.0.0" }

Core.Supports.Set

  • Sent with the supported packages of the client and overriding previous packages
  • Message body is an array of strings, each consisting of the module name and version, separated by a space
  • Module version is a positive non-zero integer
  • Example: Core.Supports.Set [ "Char 1", "External.Discord 1", "Room 1" ]

Core.Supports.Add

  • Sent to add modules that are supported by the client
  • Message body and behavior is identical to Set if no packages have been sent yet
  • Previous packages versions are overridden if they are resubmitted
  • Example: Core.Supports.Add [ "Char 1" ]

Core.Supports.Remove

  • Sent to remove modules that are not desired by the client
  • Message body format is identical to Set and Add
  • Module version can be omitted
  • Example: Core.Supports.Remove [ "Char", "External.Discord" ]

Core.KeepAlive

  • Causes the server to reset the idle/void timeout for the logged character.
  • No message body

Core.Ping

  • Causes the server to send a Core.Ping back
  • Message body is an optional number which indicates average ping time from previous requests
  • Example: Core.Ping 120

Sent by server

Core.Ping

  • Sent in reply to Core.Ping
  • No message body

Core.Goodbye

  • Sent before closing the connection
  • Message body can optionally explain why the connection was terminated
  • Example: Core.Goodbye "Goodbye!"

Char

Sent by client

Char.Login

  • Used to log in a character, only interpreted if no character is logged in for that connection
  • Message body is an object with keys name and password
  • Example: Char.Login { "name": "gandalf", "password": "mellon" }

Sent by server

Char.Name

  • Contains the characters's name and the complete name including title.
  • Message body in an object with keys name and fullname; the values are strings
  • Example: Char.Name { "name": "Gandalf", "fullname": "Gandalf the Grey"}

Char.Vitals

  • Message body is an object containing several variables representing basic character attributes such as health, mana, etc.
  • Example: Char.Vitals { "hp": 71, "maxhp": 100, "mana": 90, "maxmana": 100, "mp": 121, "maxmp": 121 }
  • Possible values:
    hp current health points (*)
    maxhp maximum health points
    mana current mana points (*)
    maxmana maximum mana points
    mp current movement points (*)
    maxmp maximum movement points
    xp current experience points
    tp current travel points
    carrying string describing how heavy load you are carrying
    ride true if currently riding; otherwise false
    ridden true if currently ridden by someone; otherwise false
    climb null, "c", or "C"
    swim null, "s", or "S"
    light "*", "!", ")", or "o"
    fog null, "-" or "="
    weather "~", "'", "\"", or "*"
    alertness "normal", "careful", etc.
    mood "wimpy", "prudent", etc.
    spell-effort "quick", "fast", etc.
    position "standing", "fighting", "sitting", "resting", "sleeping", "stunned", "incapacitated", or "dying"
    mount-moves "rested", "slow", etc.
    opponent the short name of your current fight opponent; or null
    buffer the short name of your current fight opponent's opponent; or null
    opponent-hits "healthy", "fine", etc.
    buffer-hits "healthy", "fine", etc.

    (*) These may be limited in precision due to combat or other factors.

    See help prompt and help weather for explanations on some of the values.

Char.StatusVars

  • Sent by server after a successful login, after the module is enabled, or when any contained value changes.
  • Message body is an object where each member is a name-caption pair; name is the internal name and caption the user-readable one
  • Example: Char.StatusVars { "race": "Troll", "subrace": "Cave Troll" }
  • Possible values:
    fullname current character name and title
    level character's level
    name current character name
    next-level-tp travel points needed to reach the next level; or null
    next-level-xp experience points needed to reach the next level; or null
    race player's race
    subclass current subclass
    subrace subrace

Client

Mudlet automatic package installation GMCP module

Sent by server

Client.GUI

  • Sent by server after a successful login with a default Mudlet package
  • See https://wiki.mudlet.org/w/Manual:GMCP_Extensions for more details
  • Example: Client.GUI { "version": "1", "url": "https://mume.org/download/clients/mudlet/mume_gui.mpackage" }

Client.Map

  • Sent by server after a successful login with the default MMP base map
  • See https://wiki.mudlet.org/w/Standards:MMP for more details
  • Example: Client.GUI { "url": "https://mume.org/download/mapper/arda-base.xml" }

External.Discord

Sent by client

External.Discord.Hello

  • Sent to request a Discord server invite
  • No message body

Sent by server

External.Discord.Info

  • Sent as a reply to External.Discord.Hello
  • Message body is an object containing the invite link for users to join the Discord chat alongside other metadata
  • Example: External.Discord.Info { "inviteurl": "https://discord.gg/J8z8fGR", "applicationid": "667607001282510879" }

External.Discord.Status

  • Sent whenever new status data should be synchronized with the client
  • Allows certain clients like Mudlet to show that the player is playing MUME
  • Message body includes the full state rather than a delta
  • Example: External.Discord.Status { "game": "MUME", "details": "Multi-Users in Middle-earth" }

Comm.Channel

Sent by client

Comm.Channel.Enable

  • The message body is a string which is the name of the communication channel to enable ("songs")
  • Example: Comm.Channel.Enable "tales"

Sent by server

Comm.Channel.List

  • Sent automatically as the Comm.Channel module is enabled
  • Contains a list of the available communication channel
  • The message is an array of objects with the following keys:
    name name of this channel ("songs")
    caption human-readable description ("Songs")
    command game command used ("sing")
  • Example: Comm.Channel.List { { "caption": "Tells", "command": "tell", "name": "tells" } }

Comm.Channel.Text

  • Sent as a message is heard or sent
  • The message is an object with the following keys:
    channel channel name
    destination (for sent messages) name of the recipient
    talker name of the sender; "you" for sent messages
    text text heard (may include ANSI codes)
  • Examples:
    • Comm.Channel.Text { "channel: "tells", "talker": "Gandalf", "text": "Gandalf tells you 'Fly, you fools!'" }
    • Comm.Channel.Text { "channel: "questions", "talker": "you", "destination": "Frodo" "text": "Where is the ring?" }

Room

Sent by server

Room.Info

  • Sent when a player moves into a new room
  • Contains information about the room that the player is in
  • Message body is an object with the following keys:
    name string with the room name without the preposition; null if not visible
    area string containing the zone area name
    environment string of the room terrain type
    exits
    object containing exits; the key is a direction (n, e, s, w, u, or d); the value is an object with the following optional keys
    name string with the door name
    flags array with exit flag strings
  • Example: Room.Info { "name": "The Inn's Rooms", "area": "Bree", "environment": "building", "exits": { "e": { "name": "gate" }, "d": {} } }
  • Possible exit flag strings:
    broken door is broken
    climb-down is a downward climb
    climb-up is an upward climb
    closed door is closed; if not set any door is open
    magic is a portal
    road is a road
    sundeath causes sundeath (Troll only)
    sunny is sunny (Troll and Orc only)
    trail is a trail
    water leads to water

Room.UpdateExits

  • Sent when the state of exits change
  • Message body is an object containing the new state of exits like the exits field in the Room.Info message
  • Only exits that changed state are included
  • If an exit is removed, its value becomes false
  • Example: Room.UpdateExits { "n": false, "e": { "flags": ["closed"], "name": "gate" } } means the exit to the north was removed and that there now is a closed gate to the east

Room.Chars

Sent by server

  • Room.Chars.<command> are sent from the server as something changes about the characters in the room.
  • The client must keep a set of currently known characters (in their room), as identified by their id numbers. This set is maintained using the Add, Update, Remove, and Set commands.
  • A <character> is an object with the following (optional) keys:
    id a number identifying this character (the only mandatory field)
    name the character's name (a string)
    desc the current one-line description (a string)
    flags temporary states (an array of strings)
    labels labels (an array of strings); only Ainur can have multiple
    position current position (a string)
    weapon current weapon (false or a string)
    fighting currently attacking (*)
    driving currently driving; first rider of (*)
    riding currently riding; not-first rider (*)

    (*) These fields can be a string ("you", "Someone", …), an id number representing another character, or null.

Room.Chars.Add

  • Sent whenever a new character is added to the known set
  • Message body is a <character>

Room.Chars.Update

  • Sent whenever state for an already known character, as identified by the id key, should be updated
  • Message body is a <character>; the included keys are the ones that should be updated

Room.Chars.Remove

  • Sent when a character, identified by its id key, is removed from the set
  • Message body is the <id> (a number)

Room.Chars.Set

  • Sent when the set of characters should be completely replaced
  • Message body is an array of <character>
See also: MUME CLIENT PROTOCOL, XML

Generated on Sun Mar 26 19:51:04 2023

What is MUME?

MUME, Multi-Users in Middle-earth, is a multiplayer text-based online game based upon J. R. R. Tolkien’s Middle-earth during the epic wars of the late Third Age between the forces of the Dark Lord and the armies of the Free peoples. MUME is completely at no cost and has been continuously running, expanded, and remastered by a community of volunteers since 1991.

Ready to explore?
Play Now