Wide Ruled 2.0
Welcome to the Wide Ruled information page. Wide Ruled is an authoring tool that allows a user to design automatically generated interactive textual stories, using an underlying author goal-based planning system. It is based on the UNIVERSE model of story generation, modified to include additional object types, episodic memory, and asynchronous author-guided interactivity. It is an an experimental research and teaching tool developed by James Skorupski at the Expressive Intelligence Studio in the School of Engineering at the University of California, Santa Cruz.
There are two versions available, the full version and the updated files version. The full version is for those who have never downloaded Wide Ruled 2 before, and contains all the required components. The Updated Files version is a smaller download that contains only the updated components that have changed for the latest version, which can replace the old files for those who already have downloaded Wide Ruled 2.
- Latest Version: Wide Ruled 2, Release 3.61 (zip file)
Install and Run
- You will need:
- Windows XP/Vista/Windows 7/Windows 8 (Mac OS/Linux not supported, but should work with Virtual Machines like VMWare or Parallels)
- The Wide Ruled program files (download links above)
- Microsoft .NET 3.5 or later (download links above)
- Run the dotNetFx35setup.exe program. Follow the instructions.
- Extract the files from the WideRule2_ReleaseX_Full.zip file to somewhere on your computer.
- Double-click the “WideRuled2.exe” file, which has a blue icon.
- The Murder Mystery sample story comes with Wide Ruled and is located in the “Sample Story” folder inside the “Wide Ruled 2” folder which you extracted to your computer. It is is called “MurderMysteryInteractive.wr2”. You can also download the story individually here.
If you have any problems, please first read the Potential Problems and the General Debugging Notes sections first. They have good info in them that I have picked up as I have developed and used Wide Ruled.
If you have any more problems with Wide Ruled, please email me at firstname.lastname@example.org.
You can download the latest in-class presentation of Wide Ruled here. It covers, at a high level, all of the features of the system.
Alex Mitchell of NUS created a step-by-step tutorial for creating a Little Red Red Riding Hood story in Wide Ruled 2. You can look at it here. It does not use every feature in Wide Ruled (Environments, Relationships within Environments and Characters, and Author Goal Parameters are not used), but it gives a detailed walk-through of using the interface. In addition, it gives an example of creating an Interactive Action, that can be triggered while the story is being generated.
A Note About This Information
Most of Wide Ruled strives to be as straight forward as possible, even for those without programming or scripting experience. Where possible, it uses non technical language to describe information and processes. Obviously, due to the fact that this story generation model is indeed a lot like programming, there are concepts, such as the storing of variables, the passing of parameters, and the depth-first search style of goal execution that requires explanation for non-technical users. Because of this, the following description of features contains some detail that may be obvious for technical users.
General Wide Ruled Interface Tips
- The main window and Plot Fragment editor window have lists with big up and down arrows to the right. These are used to reorder the contents of the list. In the main window, reordering Characters/Environments/Plot Point Types has no effect on the story generation process, can be used to order items in a manner convenient for you. However, modifying the list of Precondition statements and Actions within the Plot Fragment editor has a direct effect on the order in which these statements or actions are process, and when they save data to variables.
- Whenever you can delete multiple items at once, indicated by the “Delete Selected” button below a list, you can select an item to delete by clicking the blank tile on the leftmost side of list. You can then hold down the control key and click other items to select them simultaneously. The “Delete selected items” button will then delete all the items that are selected, indicated by a coloring that distinguishes them from unselected items.
- In the Plot Fragment editor window, there are “Copy” buttons beneath the Precondition statement and Actions lists. This button duplicates the currently selected item in the list it is beneath. This action will also ensure that any saved variables within the Precondition statement or Action will be named differently than what was originally copied, because duplicate variable names within a plot fragment are not allowed. You can edit the new duplicated items in the usual manner.
- You can Save and Open your story world using the File Menu at the top of the main Wide Ruled Window. Wide Ruled 2 files end with a ”.wr2” suffix.
Basic Story World Objects
Characters are objects in the world that have two types of attributes: Traits and Relationships.. You create a character by clicking the “New…” button beneath Character list in the main window of Wide Ruled. Every character is given a name before it is created, and must have this attribute, as a way to identify each one while generating stories. Both of these types of attributes are shown in two separate lists.
Every character in the story world has the same shared list of Traits and Relationships. Which you can modify by clicking the “Edit Shared Traits” and “Edit Shared Relationships” buttons underneath each list.
Environments, like Characters, have Traits and Relationships. However, all Environments share the same set of named Traits and Relationships that other Environments, instead of Characters.
Plot Point Types
Plot point types are objects that have just a single list of Traits. Every Plot Point Type has a name, which is requested when you create one, and cannot be altered. When you edit a Plot Fragment in the main window, you are editing the TYPE of data that is stored within one of a specific name. You do not actually set the values within the Plot Fragment. This is because Plot Points are objects that do not exist before the story is generated, each of which is associated with a Plot Point Type which you create in the main window of Wide Ruled. They are potential events that occur throughout the generation of the story. Typically, they represent key moments, revelations, or steps that happen in a story, and are used to keep track of progress and save important information, relevant to the particular story being generated. For example, if a Murder mystery story is created with Wide Ruled, the author could use a Plot Point to store the name of the murder, along with other information such as location of the murder, and the number of victims killed. In the main window, he or she would create a Plot Point Type that would store the name of the murder, set as a Text value, name of the weapon, stored as Text, and number of victims killed as a Number. A Plot Point of this Plot Point Type would be created on the fly during generation within a Plot Fragment, and these values would be set (during story generation) and then checked in later plot fragments, to customize the story text and the events that occur.
Both Characters and Environments have Traits. The types of each trait can be Text, a Number, or a True/False. Depending on what type a Trait is, affects your ability to enter letters and numbers, numbers, or only true or false into the interface, respectively. As mentioned earlier, Traits are attributes that all Characters or Environments must have. All characters share one set of traits, and all Environments share another set. To edit the set of traits and their types, click the “Edit Shared Traits” button under the Trait list in either the Character or Environment editing windows. This button will let you modify the list of shared traits for Characters, or Environments, respectively. When editing the list of shared traits, click the “New” button beneath the current list, which will add a new trait with a default name and type. To edit the name and type, double click on the new item in the list. When you are finished creating, deleting, or editing share traits, click OK and the current character, along with all characters in Wide Ruled, will now have the updated list of shared traits.
When you modify the shared set of Traits, you can only alter the name of the Trait, and the type of data it can hold - Number, True/False, or Text. When you are done editing these shared Traits, you can then go back to the Character editor screen and enter values for each of these Traits. Each Character in the world will have it's own set of values for that same list of Traits. This is what distinguishes each Character from another.
Characters and Environments have Relationships to other Characters and Environments, respectively. Each Relationship has a name, and stores a reference to another Character or Relationship, as well as a Number value of the strength of this relationship. Creating a Relationship is not a symmetric process. If you add a relationship to Character B while editing Character A, Wide Ruled will NOT automatically add the same relationship to Character B from within Character A. This allows for non symmetric relationships in the story world.
When editing the Shared Relationship list, you are only modifying the names of each of those relationships. The individual targets of those relationships and the strengths belong to each individual Character or Environment, depending on which kind of story object you are editing.
Author Goals and Plot Fragments
Author Goals and Plot Fragments are the core of the Wide Ruled Story Generation model. Author Goals represent the intentions of the creator of a story, or the high level events that must occur when this goal is pursued. Each author goal has a set of associated Plot Fragments. These Plot Fragments represent HOW the general intention represented by the Author must happen. For example, a story might have an author goal “Characters Meet”, and each plot fragment for this goal could contain different way two characters could meet, such as at a party, in a class, or at work.
These plot fragments are indented underneath the bold text Author Goal names in the Author Goal list in the Main Screen of Wide Ruled. Each Plot Fragment has a set of preconditions that must be fulfilled for it to be activated. When a Plot Fragment is activated, it can do various Actions, such as perform and save a calculation, Output text to generate part of a story, add/remove/edit a Character, Plot Fragment, or Environment, and pursue a subgoal, which is another Author Goal. If a Plot Fragment chooses to Pursue a Subgoal (Author Goal) within it's set of Actions, the name of this Author Goal to pursue shoes up as italic text, indented underneath its Plot Fragment in the Author Goal list in the main window of Wide Ruled.
Author Goals can be created by clicking the “New …” button underneath the Author Goal list on the main window. When creating one, you are requested a required name for the Author Goal, and then you can modify the list of parameters for it. Parameters within author goals are pieces of data that can be passed on, at the time of story generation, to the Goal from a Plot Fragment that initiates that goal through a Pursue Subgoal Action in the Action list for that Plot Fragment. It enables an author to keep track of dynamic information and actively change the process of plot fragment execution. These parameters can be used within a Plot Fragment to test the value of attributes of Characters, Environments, and Plot Points, or alter the text generated for the story. You can edit these Parameter types and names by selecting an Author Goal in its list on the main window and clicking the “Edit …” button underneath the list.
Plot Fragments can be created by clicking the “New ..” button underneath the Author Goal list in the main window. You are required to enter a name for a Plot Fragment, and choose an Author Goal for which it will be a child. Once this is complete, you can edit the contents of your newly created Plot Fragment. This editing screen can be accessed by selecting a Plot Fragment from the Author Goal list in the main window and clicking the “Edit …” button beneath that list. Plot Fragments contain three main sections for editing: Author Goal, Precondition staements, and Steps.
The Author Goal section shows the current parent Author Goal for this Plot Fragment, which be changed by clicking the “Change Author Goal” button, and a list of the Goal parameters that will be sent to this Plot Fragment if it is chosen during the generation of a story. These parameters are available for use within this Plot Fragment, to compare to Characters/Environments/Plot Points in Preconditions, or assign to attributes of Characters/Environments/Plot Points in the list of Actions.
The Precondition statement list is the list of constraints on Characters/Environments/Plot Points that must be satisfied for this Plot Fragment to be available to execute for it's parent Author Goal, and therefore to fulfill that goal. You can create a new Precondition statement by clicking the “New …” button below this Precondition list. After clicking this button, you will then be asked what type of story object - Character, Environment, or Plot Point - you would like to constrain. You will then be requested to enforce whether the set of constraints you are about to create must satisfy an object that exists in the world or does NOT exist in the world. By allowing you to check for non-existence, a Plot Fragment could, for example, check to make sure that there is no character that has a trait value of “Alive” set to “False”, and the perform actions that set up a murder story that will eventually result in a character dying. When you are checking for non-existence, you cannot save any values, because by definition, that Character/Environment/Plot Point does not exist in the story world.
When you have chosen to check for existence or non-existence, you will then be presented with a list of constraints, initially blank, that look a Trait or Relationship, and compare it's value to another value or saved variable or parameter, and optionally save that trait/relationship that you just compared. Click the “New…” button below the constraint list to add a default constraint. A set of constraint details will show up at the bottom of the window, describing what is being examined and constrained for this specific constraint. The uppermost drop-down menu lets you select between three attributes to compare: Traits, Relationship Strength, and Relationship Target Name.
When the Traits option is selected from the uppermost drop-down list, you may choose a trait for the type of object you are currently constraining (which was chosen before this window was opened), then select from a comparison type in the middle, and finally what value you want to compare it to on the right. If you want to compare that Trait to a stored variable or parameter, select the “Use Saved Variable” checkbox underneath the rightmost box and a list of previously stored items will appear.
When the Relationship Strength option is chosen from the uppermost drop-down list, you may choose the name of the relationship to constrain, the comparison type, and the value or variable to which you want to compare the strength of that relationship.
When the Relationship Target Name option is chosen from that list, you can select a relationship name and then select a comparison type and value/variable to which you will compare the Name of the target Character/Environment which is associated with that relationship.
Beneath these menus, there is a button called “Save this Value ..” which, when clicked, requests a variable name and then enables the saving of the trait/relationship strength/relationship target name which you are constraining. When the constraint is set to save the trait/relationship value the button will allow you to edit the name of the variable that stores the information. This is useful, for example, in a story where you wish to find two characters that share an interesting relationship, such as being enemies, and then save the name of the enemy of one character for later use, or see how much of an enemy the other character is, by examining the strength of this relationship.
Any constraint that appears AFTER a trait/relationship strength/relationship target name is saved, is able to use this information within its own comparison.
To the right of the “Save Value” button, there is a check box called “Must Always Be True”. When enabled, the story generator will check this constraint not only when the plot fragment is first selected, but continuously until the ENTIRE plot fragment is finished executing. If, during any time before this plot fragment finishes, if the constraint becomes not true, then the entire Plot Fragment will fail and the story generator will look for another valid Plot Fragment. This feature is deceivingly powerful, because it will case the constraint to be constantly checked, EVEN when the plot fragment pursues ANOTHER author goal, and even if that author goal pursues another, etc. This means that this constraint, when set to be Always True, has the power to a Plot Fragment that can potentially contain within in many linked references to many other Plot Fragments. It can be useful, for example, if you want to allow for the possibility that a story goal could be abruptly interrupted by a Plot Fragment that initiates the elimination of a main character in your story. If you had an Author Goal called “Fight”, in which two characters battled each other in many subgoals, a constraint for a plot fragment for this goal could constantly enforce that both characters have an “Alive” attribute set to “True”. Some other plot fragment within a subgoal of this fragment, which describes the death of one character, could potentially be selected during story generation, causing the plot fragment to fail, and allowing the story to continue with an alternate series of events, consistent with this newly deceased Character.
Finally, at the top of the Constraint list, there is another save button. This allows the author to save the Character/Environment/Plot Point that is being constrained, so that it can later be modified or deleted in a Story Action within the same Plot Fragment.
The Wide Ruled Story Generation Model
Potential Problems, Slip-ups, or Bugs
Variable referencing and proper ordering*
Wide Ruled executes a plot fragment by first getting the parameters from the Author Goal, then doing the precondition tests and saving in the order which they appear in the Plot Fragment editor, then, assuming the preconditions are all met, it executes each plot fragment step in the same as order as displayed in the Plot Fragment window. With this order of execution, from a precondition, you cannot access data from a calculation in the Steps section of a plot fragment, because it will not exist yet during the generation of a story. Wide Ruled will warn you if you are trying to get to variables that have not yet been saved. For example, if a precondition performs a test on a saved name of a Character that is not saved until a later precondition, the value of the saved name will be blank during generation. Here is a table displaying the variable access rules:
|Plot Fragment Component||Variables that it can Access|
|Precondition statement||Goal Parameter Variables, PREVIOUS Precondition statement constraint variables (Those that come before it in the precondition statement list)|
|Constraint within a Precondition statement||Goal Parameter variables, all Precondition statement constraint variables BEFORE the parent Precondition statement, and all PREVIOUS constraint variables that are before it in the constraint list|
|Story Action||Goal Parameter Variables, All Precondition statement constraint Variables, PREVIOUS Step variables that come before it in Step list (calculation variables)|
Unexpected Text Output Later in a Story
A couple of times, while I have been putting together stories in Wide Ruled, I have added a Pursue Subgoal action in a plot fragment, and then added a Display Text action right after this pursuit. Most of the time, this order of operations - first pursue subgoal, then display text, was not what I wanted to happen. My mistake was having these two steps out of order, and the result was some story text appearing at the end or somewhere later in the middle of the story, out of place. Make sure your actions within a plot fragment are in the correct order. Often, pursuing a subgoal can lead to a very complex set of operations which generate a lot of story text, and placing a Text Output action after this pursuit can result a story messages appearing in very unpredictable locations later during story generation.
General Debugging Notes
A good way to debug problems in your story is to 1) Use the extra status message option to the right of the “Generate Story” button, and 2) save your story and start removing plot fragment precondition statements, or actions, one at a time, to narrow down and simplify the story.