A very simple method you can use is to generate an absolute trigger that overrides the default scene. Iām using this in the game Iām writing now. In my case it is based on ātimeā (or ātime remainingā).
My default scene is similar to yours, in that you select an option from several available, go and do some stuff, then you return back to this default scene. What you want to do is, if a particular trigger has fired, to mandate what happens next.
This is an excerpt from my (very rough) WiP
*if (Hour = "09") and (Min = "00")
*goto_scene 6_arrival
*temp AddS
*set HoursRemaining 8 - Hour
*set MinsRemaining 60 - Min
*set AddS ""
*if (Hour = "07") and (Min = "00")
*set HoursRemaining 2
*set MinsRemaining 0
*set AddS "s"
[b] ${Hour}:${Min} [/b]
You now have ${HoursRemaining} hour${AddS} and ${MinsRemaining} minutes until Thom and his friends pick you up to go camping. You packed your bags last night and they are by the door waiting. What would you like to do?
*if PhoneCharging = true
Your phone has ${PhoneCharge}% charge.
*choice
#Grab your phone and get caught up
*goto_scene 3_1_phone
This portion of the game uses a clock (and associated ātime remainingā) - each action takes time and the clock rolls on. At 09:00 I want to end this part of the game and move onto the next.
So the ādefaultā scene is everything under *temp AddS (thereās more than just that one option) - this will display over and over as the player selects an action, resolves it and returns to this scene. You can see an example here of them using their phone (thereās going to be 6 or so total possible actions).
The very first line is the override - if the time is 09:00 then we go to a different scene and the default scene is not played again. Of course, you can return back to this default scene at any time easily enough.
You might also be interested in how I control specific events being available:
*selectable_if ((Eaten = false) and ((MinsRemaining >= 5) or (HoursRemaining > 0))) #Go in search of food
*goto_scene 3_2_food
When you select this option, then āEatenā is set to true - so you canāt select this option again. You also canāt select this option if less than 5 minutes are remaining (itās 08:55).
To apply it to your game a bit more, you can use individual variables as flags. For example
*create DateWithDiana false
Here's some stuff the player did
#Here's some choices
They pick this choice
*Goto_scene default scene
Player picks an option in default scene
They meet Diana
#They ask Diana out
*set DateWithDiana true
goto default scene
Default scene has a trigger right at the top
*if DateWithDiana = true
*goto_scene DianaDate
Default scene doesn't play
When the DianaDate scene plays, set DateWithDiana false
Then return to default scene and you'll display it as normal (unless another flag is triggered).
Iāve done a fair bit of thinking around this topic, so happy to delve into it deeper if you find this approach useful to explore.
A second method I have in mind for another game is to use a semi random process.
So at the start of the default scene you generate a random number, then compare that against a trigger number (e.g. generate number between 1 and 10, then *if number < 5 go and do something).
You can then use āwheelsā to really mix things up, for example:
Wheel 1 is for common events:
- Random 1-50 (if <= 10 then do an event)
If wheel 1 misses (11-50), then spin wheel 2 - which is for adventures
- Random 1-50 (if <= 8 then do adventure)
If wheel 2 misses (9 - 50), then spin wheel 3 - which is for romance
- Random 1-50 (if <=12 then do romance)
If wheel 3 misses, you revert to the default scene.
You can then of course augment the randomness to ensure that certain things do happen, or increase in likelihood if they havenāt been seen in a while
Again, happy to explore in more detail if this sounds useful to you.
Edit: Thereās some very simple stuff you can do if you just want a new option to appear only in certain circumstances (alongside all the other existing choices) - rather than redirecting to a whole new scene - I added an example of this to my first method.