All objects have actions. These are described as parser commands, followed by a consequential “flow”. I use the parser predominantly as an authoring tool, although players can use it too 
Actions are collected up and some are elevated to choice. These choices are merged with any existing authored choices.
Game script is usually generated from a diagram. That’s how i author now.
This map will generate the code below.

//////////////////////// the cloakroom ///////////
CLOAKROOMIMG
CLOAKROOMAUDIO
AUDIOSTOP
XCLOAKROOM
You are in the cloakroom.
CLOAKROOM@ INSIDE
* name
the cloakroom
* img it
CLOAKROOMIMG
* x it
> img it
CLOAKROOMAUDIO
XCLOAKROOM
* e
GOFOYER
*+!= go to FOYER
GOFOYER
GOCLOAKROOM
> put PLAYER in CLOAKROOM
XHERE
//////////////////////// the bar ///////////
BARIMG
BARAUDIO
AUDIOSTOP
XBAR
You are in the bar.
BAR@ INSIDE
* name
the bar
* img it
BARIMG
* x it
> img it
BARAUDIO
XBAR
* n
GOFOYER
*+!= go to FOYER
GOFOYER
GOBAR
> put PLAYER in BAR
XHERE
//////////////////////// the foyer ///////////
FOYERIMG
FOYERAUDIO
AUDIOSTOP
XFOYER
You are in the foyer.
FOYER@ INSIDE
* name
the foyer
* img it
FOYERIMG
* x it
> img it
FOYERAUDIO
XFOYER
* s
GOBAR
*+!= go to BAR
GOBAR
* w
GOCLOAKROOM
*+!= go to CLOAKROOM
GOCLOAKROOM
GOFOYER
> put PLAYER in FOYER
XHERE
Doc for choice elevation:
Choice Elevation
This is the process of elevating a parser command to a choice.
Example 1:
Let’s say you have a cake with “eat me” written on it;
CAKE@ GETTABLE
* name
the cake
* x it
It has the words "eat me" written on it.
You obviously want to allow the player to eat it. So;
CAKE@ GETTABLE
* name
the cake
* x it
It has the words "eat me" written on it.
* eat it
You scoff the cake.
> put it in HELL
But, since this is the obvious thing to do, you wish to offer “eat the cake” as a choice as well. So;
CAKE@ GETTABLE
* name
the cake
* x it
It has the words "eat me" written on it.
*= eat it
You scoff the cake.
> put it in HELL
Just add “=” to the command, and it is marked as “elevate to choice”. So here, we can either make the choice or type the command.
Example 2:
You want to offer the choice to get something, but only if not already carried.
CHALICE@ GETTABLE
* name
the golden chalice
* x it
It's what you've always wanted.
This will already be gettable as indicated. So get chalice will already work. But it won’t be prompted as a command. So;
CHALICE@ GETTABLE
* name
the golden chalice
* x it
It's what you've always wanted.
*=+ get yon it
> get it
How does this work?
- add a “get” override
- mark with “=” to indicate elevate to choice
- mark with “=+” to work more than once
- use the word “yon” to filter only on non-carried items.
- redirect action to the parent “get” with
> get it