- What I Want to Remember About This Day
- JavaFX vs. Swing
- Storytron 2.0 Directions
- LudoNarraCon 2019
- Storytron Fall 2019 Update
- James Veitch: This Is What Happens When You Reply To Spam Email & More Adventures In Replying to Spam
- Storytron Summer 2019 Update
- Trust & Betrayal: The Legacy of Crawford
- Other Forms of Gossip
- Could Siboot Be Revived?
When adjusting accordance traits for Gossip actors I noticed something interesting happening in the Actor editor.
As you switch between actors the values you set for their core personality traits is updated in the editor but the values for the corresponding accordance traits is not updated if the core trait’s Make Visible checkbox is checked, i.e. set to True.
This is by design since the showActor() code in ActorEditor.java sets the slider value only if Make Visible is unchecked.
for(TraitType tt:AUX_TRAIT_TYPES) for(FloatTrait t:dk.getActorTraits()) if (!t.isVisible()) ((Swat.Slider)(JComponent)boxes.get(tt).get(t)).getComponent(1)).mSetValue(toSlider(mActor.get(tt,t)));
The fourth line is where the trait slider’s accordance and weight values are updated if Make Visible is unchecked (the test for this is on the third line of code).
The help text associated with Make Visible says “If this is checked, then actors will perceive this trait in other actors every time they meet.” The More Special Operators page in the original SWAT tutorial talks about the Make Visible checkbox a bit more.
“Unclick the check box to the right of the trait. This means the trait is not readily detectable when two Actors meet (an example of a visible/detectable trait would be Short_Tall. An example of an invisible or non-detectable trait would be Cowardly_Courageous).”
So as I understand it you would uncheck the Make Visible checkbox for a trait like False_Honest, a trait that is not immediately apparent when one actor meets another actor, so the actors would have to use their perceived and confidence values of False_Honest that the hold for the other actor to determine how False_Honest one thinks the other is. For a visible trait like height or weight, a trait that can be visibly assessed, Make Visible should be checked (I am assuming that somewhere in the Storytron engine there is some code that uses Make Visible’s value in some way).
I can understand the logic behind that for “physical” traits. What I don’t understand is why the Make Visible flag is tied to the update of specific actor’s accordance and weight trait values in the Actor editor.
For False_Honest, the accordFalse_Honest and weightFalse_Honest traits are tied to a specific actor and are internal to that actor. Updating or not updating these traits in the editor based on the primary trait’s Make Visible value, especially while you are trying to set them for that particular actor, seems to be a design flaw.
For now I am going to uncheck Make Visible for any “mental” traits so I can see the changes in accordance and weight from actor to actor but it might make a code change to always update accordance and weight in the future.
Update: Chris Conley posted that the reason accordance and weight traits are tied to Make Visible is probably because of the physicality of the trait, no actor would have a different perception of another actor’s height or weight. It’s a good explanation. I don’t know why I didn’t think of it (probably just didn’t think it through to its final connection).
Teen Talk has three traits that model an actor’s personality.
- Gullible – How likely an actor will believe or disbelieve what another actor says
- Dishonest – How likely an actor will lie or tell the truth to another actor
- Vain – How likely an actor will believe what another actor tells them about themselves
The Storytron personality model has three default traits.
- Bad_Good – How pleasant or helpful an actor is
- False_Honest – The integrity and truthfulness of an actor
- Timid_Dominant – The charisma and force of personality of an actor
All traits, whether Teen Talk or Gossip, are relative to other actors.
Teen Talk’s Dishonest can be mapped directly to Storytron’s False_Honest. One down. I could add a Storytron Cynical_Gullible trait to map Teen Talk’s Gullible. There might be another way.
For each Storytron trait, which tells you what an actor is really like, there is an a corresponding accordance trait, which indicates how readily an actor accords or grants high values of an trait to others. For example, False_Honest has an accordance trait of accordFalse_Honest. If Vetvel has a high accord_False_Honest then he readily assumes that other actors have high values of False_Honest. In other words, he is gullible. So I can use Storytron’s accordFalse_Honest to indicate how Teen Talk Gullible an actor is.
I am going to add a new trait, Vain_Humble, to map Teen Talk’s Vain since none of the default Storytron traits or their accordance traits can handle that.
So the initial mapping to Teen Talk traits to Gossip traits looks like this.
While I don’t intend to use Bad_Good or Timid_Dominant in the initial version of the Gossip storyworld I will keep them in the personality model for possible future use.
The initial values for each Teen Talk character’s Gullible, Dishonest, and Vain are as follows.
Reviewing the Teen Talk code does not give any indication of the lower and upper limits of traits so I am going to make an assumption that that their lower and upper limits are 0.0 and 1.0 respectively.
Since the code is no help I took a look at the descriptions associated with each character and pulled out these phrases.
|Owen||“honest to a fault”|
“not at all gullible”
|Max||“believes anything people tell him”|
“lonely and wants to make friends”
|Ella||“spent years lying about her past to fit in”|
|Mort||“she found out he was lying to her [for two years]”|
“is a suspicious fellow”
|Zoe||“always changing her outfit because of something she read”|
“parents right, ton of clothes”
“other than those things, pretty normal”
So I believe my assumption that Teen Talk traits can have values from 0.0 to 1.0 is correct. I am going to make another assumption and say that the closer you are to 1.0, the more of that trait you are.
|Owen||“honest to a fault” (Dishonest 0.8)|
“not at all gullible” (Gullible 0.2)
|Max||“believes anything people tell him” (Gullible 0.8)|
is “lonely and wants to make friends” (Vain 0.7)
is “reasonably honest” (Dishonest 0.0)
|Ella||“spent years lying about her past to fit in (Dishonest 0.7)|
|Mort||“she found out he was lying to her” (Dishonest 0.8)|
“is a suspicious fellow” (Gullible 0.0)
|Zoe||“always changing her outfit because of something she read” |
(Vain 0.8, Gullible 0.7)
Notice the one outlier? How can Owen be “honest to a fault” with a Dishonest of 0.8? I was unable to find the original Java code that Chris Crawford sent me so I don’t know if the the mistake was in his code or mine. I am going to assume it was a mistake on my part and modify Owen’s Dishonest to reflect the description of him, changing it from 0.8 to 0.0.
So here is the final table to Teen Talk personality values. I am not including Bara in this table because she is the protagonist; you play her in the game so she is whatever you are (I don’t know why her Gullible is 0.5, probably another mistake on my part).
Translating the original trait numbers into BNumber values gives me some initial traits values for the Gossip storyworld.
These will serve as a starting point that can be modified as needed.
I believe I am ready to start writing the Gossip tutorial wiki. Yesterday I finished hooking up all the verbs in the 1.0.1 verb web together. Today I created an outline/map for the topics I want to cover and the corresponding entries in the SWAT wiki that will have to be written (the outline colors map to various wiki elements).
- Dark Purple – Tutorial topics
- Medium Purple – Tutorial sub-topics
- Light Purple – Links to SWAT manual information
For the SWAT wiki I believe I can start by cutting and pasting from the original Storytron tutorial and author’s guide. Probably a good idea since I’ve have no idea how long they will remain available (they’ve been up there for years but one never knows).
I have to admit that I find myself quite excited to start writing this tutorial. At first I thought it was going to be a chore but I remembered a question that was posted many years ago on the old Storytron board.
The question asked something like “Is SWAT Too Hard?” (I don’t remember the exact wording). My reply was something along the lines of “Yes, it is. A storyworld builder needs to have a significant dramatic experience within the first 5 or 10 minutes of opening SWAT.” I went on a bit more but that was the gist.
I think this new Gossip storyworld and tutorial will enable a storyworld author to have a that “dramatic” 5-10 minute experience with SWAT. I don’t know how “dramatic” their experience will be but it will certainly introduce them to some of the basic concepts of Storytronics and give them some things to try on their own to expand this tutorial storyworld, maybe even serve as a basis for their own storyworld.
I have no illusions about that happening. But it has to be done to achieve even the archival aims of this project.
I just finished hooking up the basic affinity verbs for the Gossip tutorial storyworld.
The version I implemented is a little more linear than the verb web I originally came up. All the verbs are the same but the links between individual verbs in the original design was more “web-like.”
I originally envisioned having multiple roles spawning off a single verb. After you greeted a character they would automatically return your greeting while you were selecting who you wanted to talk about. I did fool around with setting different Times To Prepare on individual verbs but that didn’t sequence things correctly.
It might be possible to implement my original design but it can wait until I get the basic tutorial storyworld up and running and start writing some pages for the tutorial wiki. For now this simple, “linear” verb web will suffice. It’s something I can build on and experiment with later.
Chris Crawford thinks that if I do a new Gossip I should dump the simple design that he used in his recreation and implement something more robust, something he calls Super Gossip. His idea would add activities that allow more complex interactions, verbs for things like insulting someone directly, bad-mouthing someone behind their back, and lying about something you said previously.
I think Chris’ suggestions are good but I am going to table these suggestion for now and work on implementing the simplified version of Gossip that I outlined earlier. I don’t want to fall victim to the “perfect is the enemy of good” syndrome and spend months, maybe years trying to create a Storytronic storyworld with a tool that is incapable of doing it. Gossip is intended to simply be a tutorial storyworld that illustrates some of the concepts of personality modeling and relationship dynamics, not a full-scale storyworld.
I have made some additional design decisions about Gossip.
- It will take place on a single stage with all of the six actors on that single stage. At this point it doesn’t matter what this stage actually is and having all the actors in a single location saves the hassle of having actors having to “call” one another.
- Because of the single stage the call_A and A_answer verbs are no longer needed. I will replace them with a greet_A verb. I will also probably provide an A_returns_greeting verb, something I did in Siboot, to give the protagonist an idea of the antagonist’s feelings towards them. For now the rest of the verb web or branch will probably remain the same.
- All of the original actors will appear in the storyworld—Bara, Owen, Max, Ella, Mort, and Zoe.
- I plan on using two of the three basic traits, Bad_Good and False_Honest, in this storyworld. I also am going to add a fourth trait, Vain_Humble. I still need to figure out how these traits map to the original Gossip’s Gullible, Dishonest, and Vain.
Regarding the last bullet point, Chris Conley thinks that Gullible could be mapped to False_Honest_accordance while I think it might be possible to map Gullible with a combination of Bad_Good_accordance and Bad_Good_weight. I like Chris’ simplified approach but I want to think about it a bit more.
For the Summer 2019 Update sometime in July I think I would like to include the beginnings of an integrated Encounter Editor into SWAT.
It won’t be completely functional. Probably all you will be able to do will be to display the Encounter editor screen by selecting an Encounters menu item from the Editors menu. There might be various controls on the screen but I don’t envision them being actually hooked up to anything behind the scenes for this release.
I am going to base this integrated encounter editor on version 3.11 of the code that Chris Crawford provided. The editor layout will follow Chris’ design but I plan on reshuffling the various sections to make things a bit clearer.
Here is a mockup showing how the various controls might be arranged in the individual sections.
It’s a bit tight but specific elements of the design might change as I move forward. I think as I try to figure out how to create a Java UI from scratch this will be a good introduction to the Swing framework and all its controls and layout elements.
I’ve also got a high-level breakdown of the work required to integrate the encounter editor into SWAT.
- Encounter Editor screen in SWAT, accessible from Editor menu.
- Read in storyworld .stw file. When? What if you change the storyworld after reading in the .stw file?
- Creating or editing an encounter.
- Creating and updating the storyworld .enc file.
- Displaying encounters in the Storyteller.
- Deciding how and when to call up an encounter based on storyworld conditions.
Chris Crawford has posted on his site about the four components of a story.
- Dramatically significant decisions
- Wondrous events
- Challenges to be overcome (which are always overcome)
- Interacting with other characters to develop relationships with them
He hasn’t written much more about this but I find his breakdown interesting. I also wonder how the various components would be implemented in a Storytronic storyworld. I think dramatically significant decisions would probably be handled using the verb web. I guess wondrous events and challenges to be overcome could be handled using encounters (though cut scenes and mini-games could also provide “color”). Interacting with other characters is handled using both the verb web and encounters so I don’t know why it is called out specifically since developing relationships is the raison d’etre of a Storytronic storyworld.
Hopefully Chris will write more on this topic in the future. Update: Chris has written about this some more in What Does the User Do?