PlotPoints are an device for providing your storyworld with something like a plot. It isn't a true plot, of course, but they give you a way to provide your storyworld with some dramatic evolution. Without PlotPoints, a storyworld meanders aimlessly, more like a soap opera than a story with a beginning, a middle, and an end. PlotPoints allow you to provide milestones in the experience of your storyworld.
A PlotPoint is a very special kind of verb that differs from all other verbs in that it automatically activates at regular intervals. All other verbs activate as reactions to events; PlotPoints can happen spontaneously. The three basic PlotPoints are built into every storyworld and are called HourlyPlotPoint, DailyPlotPoint, and WeeklyPlotPoint. Each one triggers once per interval.
When a PlotPoint triggers, it acts much like a regular verb, except that the Subject is always Fate. Thus, every hour on the hour, the following storyatom will take place: Fate HourlyPlotPoint Fate &emdash; but it will not be recorded in the HistoryBook. Your decision script will then be used to determine what happens at that point.
The first decision you must make is whether the action you intend to happen should be contemplated on an hourly basis, a daily basis, or a weekly basis. The only reason for this differentiation is the efficiency of operation of the storyworld. An hourly PlotPoint is reconsidered every single hour of storytime, and it takes some time for the computer to carry out the calculation. If you schedule a once-in-a-lifetime verb for consideration in the HourlyPlotPoint, then the storyengine will waste millions of machine cycles considering that once-in-a-lifetime verb every single hour. It's better to put such verbs into the WeeklyPlotPoint. The HourlyPlotPoint should only be used for verbs that you want to happen many times.
Once you've decided which of the three PlotPoint verbs to utilize for your action, you create the special verb that you have in mind with the New Verb command. Remember that this verb will always have the same Subject: Fate; set up your reaction formula accordingly.
Now go back to your chosen PlotPoint verb and add the newly-created verb as an option to the PlotPoint verb's first role. In the Decision script, the real task is not choosing among options, as is the case with normal verbs, but deciding whether the circumstances merit triggering the verb. This is best done with a reaction formula. (Although if you're really clever and perverse, you could probably figure out a way to do it with inclination formulas. You could also write a story in Morse code.)
The reaction formula should state the logical circumstances that would trigger the event. You should probably set the inclination value to 1, and you'll need to carefully figure the DirObject and any secondary objects that will be needed for that verb you created earlier.
Let's take a very simple example: a romantic storyworld in which a boy meets a girl, they fall in love, get married, and live happily ever after. That, at least, is your overall plan. Remember, this is interactive storytelling; you can't make the player do anything. You can only set up the circumstances.
Your first PlotPoint is the easiest: you must arrange for the boy to meet the girl. Presumably this should happen early in the experience, but not immediately. Thus, the logical circumstances controlling its triggering is simply time. I'd set it up as a DailyPlotPoint, with the reaction formula simply based on the time:
React if (GameDay IsSameNumberAs 2)
This insures that, on the second day of the story, the event will trigger. There is only one option for this role: the verb DecreesFirstMeeting. The rest of the decision script will look like this:
Inclination[DecreesFirstMeeting] <= 1
NewDirObject[DecreesFirstMeeting] <= Romeo
NewCharacterObject1[DecreesFirstMeeting] <= Juliet
Thus, on the second day, Fate will DecreeFirstMeeting of Romeo and Juliet. (Remember, Fate must be the Subject of this atom because Fate is always the Actor in a PlotPoint.) The verb DecreesFirstMeeting will then have a role for the DirObject (Romeo):
React if (Actor IsSamePersonAs DirObject)
Inclination[FirstMeets] <= 1
NewDirObject[FirstMeets] <= CharacterObject1
Now suppose that we want to trigger a crisis in their relationship halfway into the experience. Presumably they have met and hit it off. So let's inject a confrontation between Juliet's father and Romeo. The verb here will be PaternalConfrontation; you create that new verb. Then, working backwards, you must create the verb that allows Fate to set it up: DecreePaternalConfrontation. This verb must be triggered by a PlotPoint. But we are already using DailyPlotPoint for DecreeFirstMeeting! No problem: we simply create a new role. The entire decision script for this new role would look like this:
React if (GameDay IsSameNumberAs 12)
Inclination[DecreePaternalConfrontation] <= 1
NewDirObject[DecreePaternalConfrontation] <= JulietsFather
NewCharacterObject1[DecreePaternalConfrontation] <= Romeo
and the decision script for DecreePaternalConfrontation looks like this:
React if (Actor IsSamePersonAs DirObject)
Inclination[PaternalConfrontation] <= 1
NewDirObject[PaternalConfrontation] <= CharacterObject1
These two plotpoints should be sufficient for the entire story; presumably the outcome will proceed as a direct (if convoluted) result of howsoever Romeo chooses to handle the PaternalConfrontation.
What about repetitive events?
OK, you want more: how about a weekly disaster? Or perhaps a new and different stranger who wanders into your cozy little Western town every week? Or perhaps a new and different planet for your starship to encounter every week, with a different color exotic female/male for your male/female captain to seduce? The easiest way to do this is to randomly select a new secondary object with each WeeklyPlotPoint:
React if true
Inclination[DecreeEncounter] <= 1
NewDirObject[DecreeEncounter] <= OurHero
NewCharacterObject1[DecreeEncounter] <= modulo(Random, 16)
This presumes that you have 16 different characters available for the encounter. You might want to insert some HistoryBook checking to prevent repeat appearances. If you want a random disaster rather than a random character, create eight disaster verbs and set them all up as options, then use RangeSelect with a random range selector value. If you want more than eight disasters, create more roles and differentiate them by whatever arbitrary scheme you wish (e.g., technodisasters, personal disasters, natural disasters, slapstick disasters).
What about conditional events?
Suppose that you want a plotpoint that is dependent upon what's happened so far in the story. Suppose, for example, that you desire Juliet to start a lover's quarrel with Romeo if they haven't gotten married within three weeks of the start of the story. No problem: you just create the appropriate verbs, an additional role for WeeklyPlotPoint, and use this reaction formula for that role:
alpha <= (NOT(EventHappened(Romeo, Marries, Juliet, GameTime)))
React if ((GameWeek IsSameNumberAs 3) AND alpha)
You can extend this to remarkable levels of complexity should you be so inclined.