xyzzy help

What even is this bot?

A brief history

A long time ago, some guy made an interactive text adventure about exploring a cave for his kids. Gameplay consisted of entering commands into the game to tell the main character what to do, marking the first entry in the Interactive Fiction genre.

Some students and staff at MIT, later inspired by the game, created another one called Zork, later founding Infocom, the company that truly jumpstarted Interactive Fiction.

The variety of platforms available at the time were numerous and incompatible. Having to port each and every game the company released to every platform would be a daunting task, and so the Z-Machine was created. A virtual machine that only served to be emulated, it was easier to port the Z-Machine to every platform and have the games run on that, instead of porting each game individually.

As the genre grew in popularity, more and more games had been created for the Z-Machine, and fanatics had ported it onto more modern (at the time) platforms, including iOS, Android, Palm OS and the Game Boy.

Where we are now

The Z-Machine is now available through this bot, allowing you to play Interactive Fiction games on Discord.

As there are a wild selection of games in the genre, some may differ from others. This guide will apply to most games and help you get started, but there may be a few with different systems of input.

The older games may be quite hard because people back then weren't fun or good at game design. Additionally, due to piracy concerns, the solutions to some puzzles may have only been found in feelies, physical items like photographs, maps or brochures that shipped with the game, back when you could still buy them in a box. For this reason, it is recommended that you look up more information about a game if you are stuck.

User Commands

Gameplay Commands

These commands are available to most or all users of xyzzy, and assist in playing or controlling games.

The Backtick Rule

All commands submitted should be flanked by Grave Accent characters, or "Backticks" as they're known to xyzzy.

The grave character can be found next to the 1 key on a standard US QWERTY keyboard and on an iOS stock keyboard by holding down the apostrophe key and swiping left, looking like this: `. Therefore, a proper xyzzy command should look like this before you send it:

`>command`

This backtick rule is turned off by default and can be enabled if you wish to enforce it for yourself.

>>backticks [ on | off ]

Enables or disables the requirement for xyzzy to require backticks before and after each command. This is off by default.

Using this command only changes the setting for you.

>input

Any command submitted with a single greater than sign will be submitted to the game running inside of xyzzy. I.E., if xyzzy was playing Zork and you wanted to pick up a lantern, you would do >get lantern.

>>unprefixed [ on | off ]

Enables or disables the requirement for game inputs to require a prefix. When enabled, this means that doing get lantern will work as well as >get lantern. If you wish to speak normally without triggering the game in this mode, you can start your message with # or // for it to be ignored. This is off by default.

Using this command only changes the setting for you.

>>play [ Game name ]

Tells xyzzy to start playing the game specified in [Game name] in the current channel. If no game is found with that name, xyzzy will show you any close matches it can find, and if there is only one, start that one.

Alternatively, you can also attach a save file from a game with this command, and it will attempt to match a game in its database to your save and load it.

>>upload

Attaching a save file with this command will upload the save file to your channel instance, allowing you to use a RESTORE game command to load them.

>>indent [ indent level ]

Will make xyzzy scrap the first [indent level] characters for each line in his output. If you're noticing random spaces after each line break, use this command.

[Indent level] must be an integer between 0 and the total console width. (Usually 80.)

>>forcequit or >>mortim

After confirmation, terminates the process running the xyzzy game you are playing. It is recommended to try to exit the game using an in-game method before using this command. >quit usually works.

This command has an alias in >>mortim

>>modes

Lists and describes all possiblle game input modes.

>>mode [ anarchy | democracy | driver ]

Sets a game input mode if a game is running on the current channel.

>>transfer @mention#1234

Transfers input rights to the mentioned user. Only usable in Driver mode.

Bot Status and Health

>>list

Sends you a direct message containing all stories in xyzzy's library.

Moderation Commands

These commands are only available to users that have the permission to kick other users from the Discord server they are invoked on.

>>block [ @User Mention#1234 ] or >>plugh

For each user mentioned, disables their ability to send commands to the bot in the server this command was invoked.

Blocked users will be sent a Direct Message stating that they are blocked when they try to send a command.

This command has an alias in >>plugh

>>unblock [ @User Mention#1234 ]

For each user mentioned, reenables their ability to send commands to the bot in the server this command was invoked.

If the user was never blocked, this command fails silently.

Debug Commands

These commands are only available to a specific set of users, and can be catastrophic. They are listed here for completeness.

>>debug [ python ]

Executes arbitrary Python code.

>>nowplaying

Sends you a direct message containing all currently running xyzzy instances across Discord.

>>announce [ Announcement ]

For each channel currently playing a game, sends the text in [Announcement].

>>output

Toggles whether the text being sent to this channel from a currently playing story also should be printed to the terminal. This is functionally useless in most cases.

>>shutdown

After confirmation, shuts down the bot and all running games.