So you may already know that I run this text-based internet role-playing game called FiranMUX. My wife and I opened it about 12-13 years ago and it's been entertaining hundreds of players pretty consistently for most of that time.
I decided to code up Daniel Solis' game, Happy Birthday, Robot!, as a game that Firan players can play. The players need to know the rules to a certain extent. That was one of my personal design constraints. That is, I didn't want to take money away from Daniel.
Coding it was harder than I thought. First of all, the game interface is entirely text-based (as it must be for a game like Firan). Managing text required commands to append words, insert words, and edit words in sentences. A lot of the code just manages state: Whose turn is it to be the Storyteller? Whose turn is it to add to the sentence? Has Epilogue been triggered yet? If so, has the round been completed for all the players? Who writes next? Who writes next if it's in the Epilogue? These things would be slightly tricky to manage in a normal language. The MUX scripting language has its own arcane problems that made coding HBR extra difficult.
I set up the game so that anyone on Firan can play, even if they're otherwise occupied with normal role-play. All HBR output goes to a [HBR] "channel" (out-of-character communication stream) that players can "spawn" to a separate window of their client, if they like. It also gives them a place to chat about the game.
The most important command turns out to be the "hb who" command, which lists all the players, their dice and coins, and the story-in-progress. It also marks the Storyteller and the person currently writing with * and > characters, respectively. Firan players become HBR players by typing "hb join" and can leave the game with "hb leave."
This report is the third game I ran on Firan. The first two were riddled with halts while I fixed bugs. The first two used the traditional start, "Happy Birthday, Robot!", with "Robot" and "Robot's" as free words for BLANKs. The third game, discussed here, switched up things a bit. We used a Firan-themed start: "Welcome to the Masked Ball!" and made two characters free BLANK words: "Lucretia," "Lucretia's," "Waldrik," and "Waldrik's." I used the game's "hb conf" commands to reconfigure the starting parameters. I should have then run "hb new story," but I forgot and ended up tweaking some data elements manually.
We had five players. Daniel tells me the game breaks under a load of five players, but I did not see this problem any of the times I ran the game. Each game I ran took about 2-2.5 hours to complete. Everything takes longer online.
I found that I didn't have to explain all the rules (or all of the commands) at once. I explained the goal of the game (cooperate to tell a story), the dice (only that they had BLANK, AND, and BUT sides), and that three people at a time would write a sentence. Then I showed them the "hb who" command and the "hb roll" command, and told the first Storyteller to roll until it stopped them. The code does detect when a Neighbor has 4 AND or 4 BUT dice and it prompts the Storyteller to start a sentence, and it tells everyone how many words they get to write (including free words for TAILS). It lists the words the player can use for free at that time. It tells them to use the "hb write" command to start or add to the sentence. The "hb write" command limits the number of words the player can write. If you write less than you're permitted, it tells you how many are left, but also offers "hb done" as a way to discard any leftover words.
Once the Storyteller writes, it prompts the AND Neighbor. Once she writes, it prompts the BUT Neighbor. Once he writes, it prompts the Storyteller to type "hb next" when "everyone is satisfied with the sentence." I explained that they could use "hb edit" to fix grammar or spelling here. This was also a good time to tell them that anyone could use those commands, for instance, to add a comma to the end of a word before writing their words. They caught onto this quickly. I also offered them the "hb insert" command to push commands into the middle of the sentence.
The "hb next" command also awards HEADS coins to the Storyteller. I explained that these had no value except to give them away. That giving them away flipped them to TAILS and gave that player extra words for the rest of the game. That the sooner they gave out their coins, the longer their story would be. After one or two turns, and the group moved quickly through their sentences. They had a ton of fun and laughed at the Firan in-jokes in the story.
New players have trouble understanding that the BUT Neighbor is supposed to close/complete the sentence, despite my telling them this and despite the code telling them this. Once corrected, they learn quickly, however.
I also explained that as soon as a player had 10 coins, the Epilogue would be triggered, except that everyone got to finish their turns first. I had some trouble interpreting the rule here. Code is very picky, where game texts are not. Who edited this text, anyway? Geez. I interpreted the rules as this: If a player has 10 coins even for a brief moment, Epilogue is triggered, but does not actually start until the player who started the game is Storyteller again. For example: Adam, Beth, Carol, and Daniel are playing, and Adam started as the first Storyteller and they play in alphabetical order. Carol has 6 coins, writes 4 BLANK words, and at the end of that sentence earns 4 more coins. She instantly gives them to Daniel, but it's too late. She has triggered Epilogue. However, no one writes an Epilogue sentence until Daniel finishes his turn as Storyteller.
Furthermore, the rules call for people to play in order of how many coins they have (most to least). What if people give away HEADS during Epilogue? I interpreted this rule as requiring the code to find the player with the most coins and who had not yet written an Epilogue sentence. If a player gave away coins during Epilogue, this could change the order of play, but no one would be asked to write a second Epilogue sentence.
Once everyone had written their Epilogue the game tacked "The End" onto the story and printed out the entire thing. For space reasons, I jammed all the sentences together in one paragraph rather than put one sentence per line.
One of the most useful commands I coded was "hb undo," which rewinds the game state to the last action. The game checkpoints every internal state variable on every meaningful player action, and can back up to the last, one at a time, all the way back to the game's beginning if you want. This was helpful when the game failed to detect the Epilogue condition and the "last turn before Epilogue completed" condition. I tweaked some code, ran undo a few times, then ran "hb next" to advance and retrigger the conditions. It took two or three attempts, but I fixed the code and the players continued. It only took me 3-4 minutes to fix things.
If you're curious, read the complete transcript of play
. Because it is online, every conversation and every step is recorded.