Teaching Resources

These resources may be helpful in teaching with Unfold Studio. They can be used as part of a coherent Curriculum Unit, or you can mix and match them to fit your needs. Unless otherwise noted, all were written by Chris Proctor, and are released free for noncommercial use.

Assessments

Story Portfolio

At the end of the unit, students will submit two stories they are proud of. One should show off the student’s best storytelling skills; the other should show off their technical skills.

Story portfolio rubric
Objective Advanced Proficient Basic
Storytelling AND The story feels fresh, bold, and powerful. Even if your story is completely fictional, it’s about real identities and worlds. The story creates a rich experience for the player. It’s a substantial story which includes lots of details so the reader can feel like they’re in the world. BUT the story might be short on details or might feel like it came together at the last minute. You might not have clearly explained what kind of experience you were trying to create, or it might be hard to see how the story matches the kind of experience you described.
Technical: State AND the story uses state skillfully, doing something important in the story. The story wouldn’t be the same without them. The story uses some explicit state, probably declared variables. The story uses flow correctly and meaningfully. Flow means using options to branch the story. BUT the use of state might be based closely on another story (for example, a fork). The use of state might “check the boxes” but not have much effect on the story’s meaning.
Technical: Flow AND the story uses flow skillfully, doing something important in the story. The story wouldn’t be the same without them. The story uses some advanced flow control. The story uses state correctly and meaningfully. Using state means using variables (either the built-in variables counting the number of visits to a knot, or your own variables), to keep track of something in the story and using it to change what happens in the future. BUT the use of flow might be based closely on another story (for example, a fork). The use of flow might “check the boxes” but not have much effect on the story’s meaning.

Broken Story

Students are given a broken interactive story and asked to fix it. Here is an example you may use as-is or adapt a version to fit your teaching context and the skills you want to assess.

This strategy for assessing computational thinking was developed by [WDCK12]. Creating a standardized assessment of computational thinking is tricky because a student’s ability to demonstrate mastery depends on her mastery of the programming language being used. The Broken Story assessment is particularly attractive for Unfold Studio because the assessment is much more like the practice of writing interactive stories than something like a multiple-choice test. It is also possible to automatically assess Broken Stories, though this is not yet available.

Rubric

Broken Story Rubric
Skill Evidence
Syntax
  • Story compiles with no errors
Choices match the graph
  • Add a choice to go from enter_peets to use_wifi.
Sticky choices
  • Make choice from use_wifi to read_news sticky (+)
  • Make choice from use_wifi to minecraft sticky (+)
  • Make choice from read_news to minecraft sticky (+)
  • Make choice from minecraft to read_news sticky (+)
Conditional choices
  • read_news to buy_tea should have {not buy_tea} condition
  • read_news to leave should have {buy_tea} condition
Conditional text
  • leave should have {minecraft: text | other text}

Story templates

These templates can be helpful in introducing new skills or concepts, or as prewriting exercises.

A map of your childhood

Note

This story prompt is a great first introduction to ink. It demonstrates some of the core language features and invites authors to explore using a simple structure.

Think of about five places you remember well from your childhood. Draw a graph showing how the places are connected to each other, like the one below. Choose one place where the player should start and add an arrow pointing to that place. Then take some time to freewrite descriptions of each place, as well as how you get from one place to another. For now, there will be no conditions on moving between connected places–it’s just a map the player can wander around.

A graph of childhood places

Now write this as an interactive story. Here is an example. Hold off on adding lots of description until you’re sure it works.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
It's 11pm on a Friday night, sometime in ninth grade. Two friends are sleeping over. 
-> bedroom    

=== bedroom ===
You are in your bedroom. 
+ Go outside 
    -> street

=== street ===
You are on a quiet, moonlit street. 
+ Go back inside.
    -> bedroom
+ Walk to the end of the street.
    -> path

=== path ===
You are on a dark path. 
+ Go back onto the street.
    -> street
+ Walk to 7-11. 
-> seven_eleven
+ Walk to the playground.
    -> playground

=== seven_eleven ===
You walk to 7-11. The garishly-bright interior feels incongruous 
with the peaceful night. 
+ Walk to the playground.
    -> playground
+ Walk back to the path.
    -> path

=== playground ===
You sit on the swings of a deserted playground.
+ Walk to 7-11.
    -> seven_eleven
+ Walk back to the path.
    -> path

Now think of two or three objects which might be found in this world, particularly objects that have some meaning for you. We are going to extend the world-map so that the player can collect these objects. Then we’ll have the world change depending on which objects the player has collected. To keep it simple, the model story will only add one object: a Slurpee. We’ll use a simple boolean (true/false) variable to keep track of whether we have a Slurpee. Note that we need to initialize the variable (line 1) before we can modify it (line 38).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
VAR has_slurpee = false

It's 11pm on a Friday night, sometime in ninth grade. Two friends are sleeping over. 
-> bedroom    

=== bedroom ===
You are in your bedroom. 
+ Go outside 
    -> street

=== street ===
You are on a quiet, moonlit street. 
+ Go back inside.
    -> bedroom
+ Walk to the end of the street.
    -> path

=== path ===
You are on a dark path. 
+ Go back onto the street.
    -> street
+ Walk to 7-11. 
-> seven_eleven
+ Walk to the playground.
    -> playground

=== seven_eleven ===
You walk to 7-11. The garishly-bright interior feels incongruous 
with the peaceful night. 
+ Buy a Slurpee.
   -> buy_slurpee 
+ Walk to the playground.
    -> playground
+ Walk back to the path.
    -> path

=== buy_slurpee ===
~ has_slurpee = true
Your sleepy eyes are mesmerized by the spinning slush in the Slurpee machine. 
You slowly fill the cup with cherry slush, then switch to root beer 
all the way to the top of the rounded lid. 
+ Walk to the playground.
    -> playground
+ Walk back to the path.
    -> path

=== playground ===
You sit on the swings of a deserted playground.
+ Walk to 7-11.
    -> seven_eleven
+ Walk back to the path.
    -> path

Now the player can get a Slurpee, but it has no effect on the rest of the story. Let’s make the story react. This is an opportunity to craft an experience for your readers: when they take an action, even something seemingly insignificant like choosing to buy a Slurpee, they become invested in your world. This can be a chance to let them feel an emotion, have a sensory experience, or experience life in someone else’s shoes.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
VAR has_slurpee = false

It's 11pm on a Friday night, sometime in ninth grade. Two friends are sleeping over. 
-> bedroom    

=== bedroom ===
You are in your bedroom. 
+ Go outside 
    -> street

=== street ===
You are on a quiet, moonlit street. 
+ Go back inside.
    -> bedroom
+ Walk to the end of the street.
    -> path

=== path ===
You are on a dark path. 
+ Go back onto the street.
    -> street
+ Walk to 7-11. 
-> seven_eleven
+ Walk to the playground.
    -> playground

=== seven_eleven ===
You walk to 7-11. The garishly-bright interior feels incongruous 
with the peaceful night. 
{has_slurpee:
    If you go back in there with your Slurpee, the cashier might think you 
    haven't paid for it. Better not to take the risk. You take an idle sip 
    and wander off into the night.
    -> path
}

+ Buy a Slurpee.
   -> buy_slurpee 
+ Walk to the playground.
    -> playground
+ Walk back to the path.
    -> path

=== buy_slurpee ===
~ has_slurpee = true
Your sleepy eyes are mesmerized by the spinning slush in the Slurpee machine. 
You slowly fill the cup with cherry slush, then switch to root beer
all the way to the top of the rounded lid. 
+ Walk to the playground.
    -> playground
+ Walk back to the path.
    -> path

=== playground ===
{has_slurpee:
    You sit on the swings of a deserted playground, gently rocking as you sip
    on your Slurpee. You remember other nights here with friends, arguing
    about philsophy until the fringe of dawn appeared in the sky. 
- else:
    The playground is deserted, completely still in the moonlight. You feel
    the night mist settling over you and shiver. 
}
+ Walk to 7-11.
    -> seven_eleven
+ Walk back to the path.
    -> path

Collaborative world-building

This is about discovering the possibilities in working together to create a story.

Architecture: there should be one central story which stubs out all the locations and intiializes all the variables. Make this public so everyone can update it.

People might want to grow this further; they could create libraries of descriptions or functions to re-use. You might be able to create various characters who could be put in conversation with one another!

Argumentation

Many disciplines have an essentially dialogic argumentation style (Elbow’s You Say, I Say). You could implement this in stories. Particularly valuable for seeing how people argue through stories.

Literary analysis

Multiple levels of meaning. I’m currently working on an example where the main character reads and re-reads a sonnet, layering in more possibilities each time.

Personalizing political, economic, and historical forces

Write a first-person story in which the main character interacts with broad-scale political, economic, or historical forces. The consequences following a player’s choices should illustrate how the forces work, and should be supported by evidence. As part of the research process, interview at least two people who have experienced similar situations. Part of each interview should include playing and discussing your draft of the story.

For example, you might read this article about cash bail in America and then write an interactive story playing out the various choices someone might make after being arrested and unable to make bail. You might then interview someone who has been arrested, someone whose family member has been arrested, a police officer, an employer, etc.

Mini-lessons

Inventory

Todo

Add inventory mini-lesson