summaryrefslogtreecommitdiff
path: root/demo.stage
blob: 2b04bd481ab0a8d9d98777c4bb73c368b5ccf5d6 (plain)
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157

game.title = "Demo game";
game.author = "Mike Buland";
game.version = 1;
game.revision = 0;
game.start = <<start>>;

global
{
	/**
	 * This is an example of a very general "travelling" command.  It inspects
	 * the current situation to see what exits are available, and if the given
	 * exit is in the situation.exits dictionary it goes that way.
	 */
	command: "go" dir
	{
		if exists(situation.exits) then
		{
			if dir in situation.exits then
			{
				goto( situation.exits[dir] );
			}
		}
		display('''You're not really sure how to do that...''');
	}

	/**
	 * A simple command that lists the currently visible exits.
	 */
	command: "exits"
	{
		if exists(situation.exits) then
		{
			display( "Obvious exits are: " + join(
				keys( situation.exits ),
				", "
			) );
		}
		else
		{
			display("There are no obvious exits.");
		}
	}

	/**
	 * Takes an item from the current situation, if it's there, and adds it to
	 * the user's inventory.
	 */
	command: "take" item
	{
		if exists(situation.items) then
		{
			if item in situation.items then
			{
				situation.items -= item;
				player.inventory += item;
				display("You take the " + item);
				return();
			}
		}
		display("You don't see that anywhere.");
	}

	/**
	 * Lists items that are in the user's inventory.
	 */
	command: "inventory"
	{
		out = 'You are carrying: ' + join( player.inventory, ", " );
		display( out );
	}

	// You should always have a global exit, quit, escape, something for
	// dev-testing at least.
	command: "quit"
	{
		exit();
	}
}

situation <<start>>
{
	setup
	{
		player.inventory = [];

		display('''You awaken after a long, dreamless sleep to find yourself
			lying on a hard, cold, deserted beach.  You have no memory of how
			you got here.  After a few minutes your eyes adjust to the bright,
			glinting daylight shinning off the crests of the waves in the ocean.
			You don't seem to have anything with you but the clothes you're
			wearing.  (You also posses an eerily accurate innate sense of
			direction.)''');
	}

	enter
	{
		goto( <<beachEast>> );
	}
}

situation <<beachEast>>
{
	/**
	 * This overrides the global go command for the east parameter.
	 */
	command: "go" "east"
	{
		display("Those rocks are far too sharp and jagged, you don't think you
			could make it over them.");
	}

	setup
	{
		situation.exits = {
			'west': <<beachCenter>>
		};
	}
	enter
	{
		display('''You're standing on a narrow stretch of beach.  The ocean
			sparkles to the north, there's a cliff face just to the south.  The
			beach extends [green>westward<green].  To the east are some jagged
			rocks.''');
	}
}

situation <<beachCenter>>
{
	setup
	{
		situation.exits = {
			'east': <<beachEast>>,
			'west': <<beachWest>>
		};
		situation.items = ['stick'];
	}
	enter
	{

	}
}

situation <<beachWest>>
{
	setup
	{
		situation.exits = {
			'east': <<beachCenter>>
		};
	}

	enter
	{
	}
}