Adding text/choices to the "end the story" options

Hey All-

So here are the ending text/options :

The End
Would you like to RESTART, RESTORE a saved game, QUIT or UNDO the last command?

I want to keep this, but add some text and another option. I can’t find an example in the docs, probably because there are hundreds of examples that include “end the story” code, and I don’t want to read them all to find one that deals with adding stuff. Can someone point me to one? Is it just something like some “report ending the story” code?

1 Like

I think the Recipe Book section 11.6 might have what you’re looking for. It shows how that final list is constructed via a table.

6 Likes

Aha. In “out of world actions”, not in “ending the story”. But of course.

Thanks, B.J!

** Edit: Whoa, that is some tortured syntax to change ending the story. I think I’ll read through that really well, then just cheat instead of trying to mess with it.

4 Likes

I looked into it after seeing the thread. I was curious. So it does seem rather tortuous. First, like the thing says, you have to add to a table (you can find the table of final question options in the standard rules). In this example, I added a “Joyce” command that quotes the beginning of A Portrait of the Artist as a Young Man.

The first column in the table is the text displayed in the end-of-story list. The second column is fine as false, unless you have multiple final endings. The third column is the command that fires that option, and the third column is the rule that kicks off. In this case, the rule just displays some extra text. The last column is for an activity, but that’s a lot of trouble if you don’t need one.

Edit: Let me know if you can’t seen the Borogrove snippet. It shows sample code and is playable.

These snippets are amazing. Total game changer!

3 Likes

One other thing I’ve found from personal experience tinkering with the ending.

First, it’s valuable to have a “win” command to just win the game right away to test things.

It may also be valuable to have a sandbox project to prototype things. In other words, have an otherwise empty game you can win on the first move, so you can tinker with the end menu.

If you want control over the text, you can poke at the Table of Final Questions in the standard rules, or you can even combine two rules like so. I’ve found this useful for detailed punctuation tweaks.

to win-the-game: end the story finally saying "Everybody betrayed you. You're fed up with this world!";

Table of Final Question Options (continued)
final question wording	only if victorious	topic	final response rule	final response activity
"Continue as [b]MARK[r], [b]LISA[r], or [b]DENNY[r]"	true	"mark"	the continue as Mark rule	--
--	true	"lisa"	the continue as Lisa rule	--
--	true	"denny"	the continue as Denny rule	--

While it would be possible to put “mark” and “lisa” in separate final question wordings, or say “Continue as Mark, Continue as Lisa, Continue as Denny,” this makes slightly smoother text.

Also note the blanks in the final question wording can be used to create a dummy or hidden option.

1 Like

I have a good cheat in place, and hopefully it will pass the smell test. If a tester complains then I’ll fool with these tables. Definitely good to know how Inform handles ending the story, though. I like writing teeny tiny games just to mess with one thing, and this is next on my list to tinker with.

2 Likes

The end-of-game machinery has… never seemed to me to have a payoff commensurate with how clunky and cumbersome it is.

lab is a room.

The player carries the foil-jacketed potato.
The oven is an open container in the lab.

Endgame is a scene.
Endgame begins when the potato is in the oven.

When endgame begins: say "You won! You can now Restore, Restart, Quit, or Amusing."

amusing is an action out of world.
understand "amusing" as amusing when endgame is happening.
carry out amusing: say "Try putting the potato in the oven."

[ "endgame action" is a totally arbitrary label that has no connection to the scene name
  and "action" is just part of the arbitrary label. It could be Amusing is garglefoop.]
restarting the game is an endgame action.
restoring the game is an endgame action.
amusing is an endgame action.
quitting the game is an endgame action.

before doing anything except an endgame action when endgame is happening,
  instead say "Only Restore, Restart, Quit, or Amusing are available."
1 Like

I think the intended payoff is circumventing all the usual game loop machinery, which means you don’t need to rewrite your “every turn” rules to turn off once the endgame starts, or watch out for overly-broad “after reading a command” rules, and so on. It’s the same reason “if the player consents” circumvents the usual input-parse-execute loop instead of just using the “saying yes” and “saying no” actions.

1 Like

eh, The every turn stage rule does nothing when endgame is happening. And maybe deactivate a few other turn sequence rules. Yeah, you’d have to remember to add when endgame is not happening to After reading a command rules. But all of that still sounds easier to me than trying to customize behavior with the existing framework.

1 Like

I do agree with that. But in another thread zarf pointed out that various design decisions in Inform have to take into account the tendency of authors to do all their parsing in “after reading a command” rules, or in “understand as a mistake” lines.

As a side note, out-of-world actions ignore “before” rules, so I don’t think the “endgame action” category is currently doing anything. (The idea being, “instead of doing anything except waiting during My Scene” shouldn’t prevent restoring a game or quitting.)

1 Like

I think it’s a bit overcooked, but it isn’t bad if you get the structure of the table and understand appending it. I feel the documentation could be more granular in this regard. I also think the sample shouldn’t feature a footnote-style rule with another table to deal with. Finally, I got tripped up examining the original table in the Standard Rules because the options all seem to fire off I6 rules, which I don’t know anything about. I’m speaking as a novice who thinks, theoretically, this is a straightforward task I can complete: add to a table and write a rule.

Something simple (as a recipe) would have been better. Advanced coders shouldn’t have trouble figuring out what to do if they want something more sophisticated, since it’s ultimately just implementing a rule (though I can’t speak to the activity option).

E: Note, I actually made an activity first because I didn’t fully understand the table.

1 Like

Good point. In fact, the consequences for my code above are worse than that: since out of world actions short-circuit the whole early action-processing sequence and go straight to the action-specific rules, I’d need individual Check rules to print the “only these are available” message for Verify and Superbrief and whatnot.

1 Like

I’m pretty sure this isn’t what you’re saying here, but your post made me imagine a game that’s played entirely via the end-of-game options menu…

“Sure, you escaped the dungeon. But can you escape… The Table of Final Question Options?”

3 Likes

*** The End ***

Would you like to: Enter the small brick building, Follow the stream south, or Go west into the forest?

After all, you can edit the Table of Final Question Options at any time during play…

1 Like

There’s definitely a game idea here. Because I am such a nice person, I hereby gift this idea to you. Go thou forth and make a game of endings.

1 Like

Yeah, and of course any of these rules could alter the game state arbitrarily, so you could fully re-implement the standard rules if you wanted to do something that wasn’t just a CYOA-hack… it’d be fairly tedious for a joke game but maybe worth it.

1 Like

It could even be an easter egg stealth game lurking unsuspected at the end of a different game!

1 Like

Finally, a way to combine parser and choice-based gameplay in Inform 7 without any extensions!

2 Likes

ok, there’s more to ending the game than I’d thought about. I just pushed an Endgame extension to my fork of the Friends of I7 repo that I think this does a reasonably thorough job of deactivating things. As written, though, it doesn’t work for versions prior to the current development version, 'cause the scene changing rules used to be anonymous; they didn’t get names till right after 10.1’s release.

As @Draconis pointed out, one would also have to be mindful of adding when game on to any of several things one might have added (or that the extensions one has included might have added): after reading a command, understand statements, or any rules added to the action-processing or turn sequence rules. And of adding check statements similar to the ones in the extension to any new Out of World actions. And you’d probably want to deactivate or rewrite the status bar.

1 Like