Assignment 2: Step
Monster High
Introduction 
In	this	assignment,	we’ll write Step code to select and execute content	units. Our content	units are	plot	
points for a soap opera	 world called Monster	High. In	this	world,	students,	who	also	happen to be 
monsters, engage	in conflicts and romance.
The	provided	code sets	up	the	framework for the	assignment.	You’ll	be	adding	code to two of the	files,	
Queries.step and	PlotPoints.step,	as well as potentially changing the initial	state of	the	world in	
Students.step to test your code.	
This	code works by testing	the	state	of the world to see	 which plot points	are	potentially applicable	and	
then	picking	one	to execute. Two entry	points have been provided	for	testing the code.	The	 task	
[Events] selects and executes six	random	plot	points.	The	task	[ShowPlotPointMenu] shows	a	
menu of	all	the	plot	points available	in the current	story state.	The	user	can	select one,	it executes,	and	a	
menu of	plot	points available in the	new	state	is	displayed.	Plot	points will be represented as tuples,	so	if	
you	haven’t	done the	reading	on	tuples,	do that	now.
For	example,	we	might	represent	the	plot	point that Jayden	confesses their love to	Tiana with the tuple:	
[confess_love	jayden tiana]. However, this only makes	sense if	we	know	that	Jayden	has	a	
crush	on	Tiana,	otherwise, why would	they	confess? And	it doesn’t make sense	if	the	two	are	already	
dating. So you need to	make	sure	that	the	confess_love plot	point is	only	available	when	there’s	an	
attraction that isn’t being acted	on. When this plot	point executes, it might	be	printed	as	“Jayden	
confesses their love to	Tiana”.	Additionally,	when the	plot	point executes,	it changes the	
state	of	the world so	that	Tiana now knows	that	Jayden	as	a crush	on	Tiana:	Knows	Tiana [CrushOn	
Jayden	Tiana].	Here we’re also using tuples to	represent	what it	is	Tiana	knows.
We’re	using	fluents to	represent	the	changing state of	the	world as	plot	points execute.	Read more	
about fluents	in	tutorial	8.	
Note also that we’ve	provided	you	with	a version	of	Mention that	understands	things	like	pronoun	
generation and capitalization of	character	names. You	don’t need to	do	anything	with	it,	just	realize	that	
it’s	there. If	you	don’t know	what Mention is,	read	part	6 of	the	tutorial	on	generating text in	context.
Getting started
To	begin with,	drag	the	Monster	High folder	into	the	Documents/Step	folder on	your machine	(the	Step	
folder	inside your Documents	folder). Then, open the	Monster	High folder	you	just	put	inside the Step	
folder in	Visual	Studio	Code.
Replace	the	earlier	version	of	Step	that	you	downloaded	with	the	new	version	provided	in	the	
assignment	zip	archive.	This	new	version	of	Step	fixes a	bug	that	affects the assignment.	
Finally,	start	Step,	and	type	“project	Monster	High”.
Optional: Making a student body
The	file	Students.step defines	the	student	body,	including what type of	monster	each	student	is,	
what clubs	people	are	in,	and	who	has	crushes,	is	dating,	and	are	friends.	For	the	purposes	of	testing	
your code, you may want to create your	own	student	body with a	specific	initial state. However,	you	
don’t need to	do	this	if you don’t	want to.
Note that the	Mention code	we	gave you will	 use	they as	the	pronoun	for	all	characters by	default. If	
you	prefer,	you	may	optionally specify	preferred	 pronouns  for some or	all	of your characters. To	do	
that,	just	add	statements to	your Students.step file	of	the	form:
PreferredPronoun student pronoun.
Where	student	is	the	student you’re specifying a	pronoun	for,	and	pronoun is either	he or she. You can	
specify	they, but	since that’s	the	default	anyway,	there’s	no	particular point in	doing so. Anyone	you	
don’t specify	a pronoun for will	be	referred	to	using they.
Part one: Queries
The	file	Queries.Step defines predicate	rules to	infer	interesting	relations	in	the	story	world.	
Examples	include:
UnrequitedLove   ( a	is	crushing b ,	but	not	vice	versa)	and,
CheatingOn  cheater cheatee ( cheater	is	dating cheatee and is	also	dating	someone	else).	
Write	predicate	rules	for	each	of	the	predicates specified	in	Queries.Step.	
Part two: Plot Points
Where:
• eventType is the	kind	of event	(e.g.	confess_love,	star_crossed_lovers,	etc.)
• other-information is	the	other	information	that	appears	in	that	kind	of	event:	definitely the	
characters participating in it,	but	for	some of	them,	there are	things like the monster	types or	
clubs	the	students	belong	to
• condition is	the	information	to	determine whether	this	plot	point is	allowed	in	the	current	state	
of	the	story	world.	
Here’s	an	example. For	the	breakup	plot	point,	it	only	makes sense for it to happen if	the characters	are	
already	dating	and	have had	a	fight. So	the	rule	for	that	would look like:
Will	generate:
I	like	Jayden. They	 read books.
If	Jayden’s	preferred	pronoun	is	they,	but:
I	like	Jayden.		He reads books.
If	Jayden’s	preferred	pronoun	is	he.
The	magic	[s] task	only	works	for	regular	verbs. If	you	want to	handle a	different	verb, then	grab	the	
code	for	Is from	Mention.step and	just	change	it for your verb.		
Part four: Invent some more plot points
Now write PlotPoint and	ExecutePlotPoint methods	for	two	more kinds	of	plot	points. They	can	
be	anything	of your	choosing, although they need to	depend	on	the	story world. Feel	free	to add	new	
information	to the	story	world	if	you	like.
Some ideas:
• Two characters have a heart-to-heart discussion while	at their club. This would obviously only	
make sense when	they’re	in	the	same	club.
• Two characters become	friends after	a	fight. For that,	there’d	need to	be	a reason	for	them	to	
have the	fight. And	they	probably	shouldn’t be	dating,	since people	who	are	dating should	
probably	already	be	friends. Maybe they	become	friends	because	they	have a shared friend.
• A	werewolf	character	does	something on	the	full	moon
• A	vampire	character	bites a human	character
Turning it in
Save all	your files, reload	(control-R)	to	make sure everything	really does load. Assuming everything	
seems okay, make a	zip	file	of	your Monster	High directory and upload	it to	canvas.