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

All commands need to be prefixed with a mention of the bot (@xyzzy) in order to work.

Gameplay Commands

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

>input

Any command submitted with a single greater than sign after the mention 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 @xyzzy >get lantern.

You can also omit the mention if you reply-ping to a message sent from xyzzy, e.g. just >get lantern

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.