NAV

Introduction

Hey there! If you’re here you’re interested in making a game for Twitch Plays WYLTR. Awesome! Either that or you’re just here to be nosey in which case welcome, you may need a crash course on JSON before you understand the code panels!

By submitting your game you are saying you have the legal rights and copyrights to do so. You give us a non-exclusive right to host and distribute* your content. We can’t accept game ports from third party submissions where we can’t verify adequate permission is in place. This applies to the game text, the story, any included artwork, and any other media resources you provide with the game.

Submitted games may also be played on the podcast- the information from the credit and website fields will be given vocally at the end of the episode and will be listed in the shownotes

* By distribute we mean display to the user. We’re not going to package up your game and sell it, we just need the rights to be able to allow the game to play to an audience!

Just to clarify by non-exclusive we mean we’re not taking any rights from you. You still retain the rights to do whatever you wish with your game elsewhere. Set up a rival podcast, set up a rival game channel, turn it into a book, turn it into a movie, whatever you’d normally be able to do with your own IP. We want to promote the text adventure genre, not perform a hostile takeover of it!

Rules

We have a few rules for games to be included and those are

We reserve the right to reject a game for any of these reasons or for any new reasons invented to cover something missed here. We don’t intend on doing this, we just want to be able to make it a fun and inviting environment for players.

We also reserve the right to alter your credit and website details as needed, for example if your domain expires we’re going to blank out the website details before spammers/scammers register it. You’ll always be credited if your game is in active rotation, we just don’t want to risk users being exposed to dodgy links. In the ideal world if we’re able to we’ll replace the link with one of your social network addresses (e.g. we may switch it up for a Twitter profile link if your site vanishes)

Notes

Submitting your game

game-name.zip

game-name/
game-name/locations/
game-name/locations/example-location.json
game-name/game.json
...

Everything in order in the legal and rules section? Sweet! Please zip up your game files in a way that when extracted there’s a single directory that contains your game within. In Windows for example you’d go to the parent directory and right click your game folder, send to, compressed (zip)

If the resulting file is less than 20 megabytes email it to submission@wouldyouliketorestart.com. If it’s larger than that please get in touch before sending (Our mail server will reject files larger than that). We’ll reply with a Dropbox file request link where you can submit your game.

The game file

This is the main game file, it’s where the engine will start and contains the initial game state. It’s always named game.json or nothing will happen. That would be quite boring.

game.json

{
    "name": "Example Game",
    "credit": "Your Name Here",
    "website": "http://www.example.com",
    "active": true,
    "location": "Your House",
    "intro": "You're in your house. It's the place you live at.",
    "variables": {
      "time": "day"
    },
    "inventory": {
        "flashlight": {
            "brief": "a flashlight",
            "inspect": "Your trusty flashlight, complete with batteries."
        },
        "rock": {
            "brief": "a rock",
            "inspect": "Your pet rock. It's not the greatest pet in the world, but it's *your* pet."
        }
    },
    "exits": {
        "out": {
            "description": "Your garden outside. Lovely little thing.",
            "nextroom": "garden"
        }
    }
}
Name What it does
name Bit of an obvious one. This is the name of your game.
credit Your credit string. Credit yourself! The string will display as link text, in on-screen credits, and with a prepended © in relevant places - just use your name, company name, or alias for this field
website This is where your credit will link to if displayed on a webpage, otherwise it’ll be in the credits below/beside credit. Please do specify “http(s)://” in the URL
active You don’t need to worry about this one, it’s our internal way to enable and disable games. Set it to true. We’ll only change it to false if we need to take a game out of rotation.
location Your game’s starting location. It doesn’t neccesarily have to be a location we later come back to. For example if you started in a house this location could be a bed that the player initially gets out of. Can be blank but if so the game needs an exit named “start” if so. Read on.
intro The initial introduction to the story. The intro in the game.json file will only ever be displayed when the game starts.
variables An optional array of initial variables. We can set variables later so you don’t need to pre-define them here. For example if you want to store the state of a weapon, e.g. “loaded”, then later in the game check to see if it’s loaded - set that up here. Later on if the player uses the weapon you can set the gun variable to “empty” and any future checks can use the state to determine an output. It’s a little complicated but if you need them you’ll be glad it’s here. You don’t need to set any variables if the standard loot system works for you.
inventory An optional starting inventory - an array of items. If you want the player to start with items, list them here. Check the Inventory section for more information.
exits An array of exits. Every location needs at least one exit otherwise the player can’t go anywhere and the game becomes boring fast. The name “start” is a reserved exit name in the main game.json file - If specified the game will output the intro and automatically move the player into the specified nextroom. This is useful if you want to provide an intro text that’s not repeated every time the player comes back to the starting room. It will only be repeated if the game is restarted.

Within each item in the inventory array

Name What it does
brief A brief description of the item to be used in lists. Used when the player checks their inventory. In our example the player using the >inventory command would result in “A flashlight, and a rock” (the game engine will do capitalisation and fancypants listing)
inspect The full item description which will be used when a player inspects the item specifically, e.g. >inspect rock would return “Your pet rock. It’s not the greatest pet in the world, but it’s your pet.”
verbs Other verbs the player can do with this item, e.g. wear

Within each item in the exits array

Name What it does
description A descriptive name for the location. If the player inspects the location this description be displayed.
nextroom Matches up to a filename within the locations/ directory. Don’t include the “.json” file extension, the game engine will assume it’s .json because no other file extensions are possible in this scenario.

Locations

The locations directory contains all of the locations in your game as you might expect. Every file within the directory ends in .json (because it’s a json file, shocker!)

locations/garden.json

{
    "location": "The Garden",
    "intro": "You're in your garden. A lovely place to be.",
    "lootables": {
        "plantpot": {
            "brief": "a plant pot",
            "inspect": "It's a lovely place to put plants."
        }
    },
    "exits": {
        "south": {
            "description": "Outside into the street. A quiet road lined with houses like yours.",
            "nextroom": "street"
        },
        "north": {
            "description": "Your back garden. Yet more beauty you've lovingly crafted.",
            "nextroom": "back-garden"
        }
    }
}
Name What it does
location The name of the location - to be used in headers
intro The text to be displayed every time the player arrives in this location
lootables An array of items in this location (Automatically adjusted when the player picks up or drops items in this location)
exits An array of places the player can visit from this location

Within the lootables array

Name What it does
brief A brief description of the item to be used in lists. Used when the player has picked up the item and then checks their inventory.
inspect The full item description which will be used when a player inspects the item specifically, e.g. >inspect plant pot would return “It’s a lovely place to put plants.”
verbs Other verbs the player can do with this item, e.g. wear

Within each item in the exits array

Name What it does
description A descriptive name for the location. If the player inspects the location this description be displayed.
nextroom Matches up to a filename within the locations/ directory. Don’t include the “.json” file extension, the game engine will assume it’s .json because no other file extensions are possible.

Inventory system

{
    "inventory": {
        "magnet": {
            "brief": "a magnet",
            "inspect": "A rather magnetic magnet."
        }
    },
    "lootables": {
        "plantpot": {
            "brief": "a plant pot",
            "inspect": "It's a lovely place to put plants."
        }
    }
}

Priming the inventory in game.json (and in locations if it applies to your game) is performed by providing an “inventory” array of objects.

If you’d like to make it so that the player has to pick the item(s) up before they get added to the inventory, define them in the same way under “lootables” instead.

Within the item’s object you can specify verbs the user can do with the item. The brief variable is a special variable that should be short and sweet, exist in lowercase, and contain no formatting. It’s used when the player has this item in their inventory and does the >INVENTORY command.

Other special variables within an item are “lootable” and “visible”, which can be either true or false. If lootable is false, the game will not allow the person to pick up the item but will still allow them to inspect it. If “visible” is false the player can pick up the item but will not see it when inspecting the room. If both are set to false the item will effectively not exist.

You can use this to unlock items as the game progresses. Internally this is how we keep track of whether an item has already been picked up, both will be set to false once the person >TAKEs the item to avoid them being able to pick it up multiple times if they lose it (e.g. by using a limited use item in the story or >DROPing it elsewhere) and come back to this room.

People

{
    "people": {
        "self": {
            "inspect": "You take a glance at yourself. It turns out you're an Orc. Neat."
        },
        "bob": {
            "inspect": "This guy named Bob is here too.",
            "attack": "You give Bob a slap. He did not enjoy it."
        }
    }
}

Defining people in the world is done with the people array. You can provide verbs in the person definition the same way you can with the inventory system.

If you want to provide INSPECT self you can add self as a person. Probably best to define self in the main game.json but if your game requires it you can also re-define briefs (both people and other items) when the player arrives at new locations too. The inspect command will return the latest definition the player has come across and will not revert when the player leaves a location.

Dictionary mappings

Certain words are mapped to other words to allow us to be a little more flexible when receiving commands. Aliases listed on the right are mapped to the primary word on the left.

Not all words are commands, for example >check pockets maps to >check inventory (which then maps to >inspect inventory).

Command Aliases
inspect examine, look, look at, check, eyeball

Certain words also have mappings

Word Aliases
inventory pocket, pockets
self me, myself