It's time to move into the implementation of the story. I plan on taking what I have, which is sort of a rough outline, and implementing it-- a rough sketch of the overall gameplay but without too much in the way of actual constraints. So the events/places/items/etc. will be laid out something like how they need to be in the final draft, but without worrying about constraints just yet.
So, if the gameplay graph is a requirements graph with nodes and lines between them indicating requirements (i.e., "to get to Y you need X") then the first step is just to put the nodes in without worry to connections. Interestingly, this is the same approach I have taken with enemy AI. Draw a graph of the enemy's behaviour, and then implement each state, then worry about the transitions separately. Works smashingly!
On the technical side of things, I'm starting to run into some trouble with the player interaction model. Essentially, drones (enemies) could "take control" of the player; for instance, a mummy drags the player underground, so to do this, we freeze the players control and then the mummy AI takes over. This works, but only to a point, since what happens if two mummy's want to grab control? Or worse yet, what if a story element takes place?
My idea is that this control scheme has to be transferred onto the actual player. So the player becomes it's own state array, with transitions in between states. This isn't perfect; I think that the individual AI states will need to have a "default" behaviour. Imagine if there is a player.set_state_dragdown () method, which causes the player to be dragged underground. This will return true if it was possible to transition to this state, or false if it wasn't. The mummy needs to call set_state_dragdown () when he wants to drag the player underground, but also needs to respond to the true/false conditions.
This is probably the cleanest solution to this particular problem, and not difficult to implement and keep organized. Since the enemies already have a broad range of effects they can carry out on the player, it's important to keep these all in one place where the relationships and transitions between them can be carefully analyzed, rather than spread out ad-hoc over all the enemy AI routines.