Scoring doesn't need global variables
[the-server-room.git] / the-server-room.inf
1 !% -SD
2 !=========================================================================
3 ! Copyright (C) 2019 Jason Self <j@jxself.org>
4 !
5 ! This program is free software: you can redistribute it and/or modify
6 ! it under the terms of the GNU Affero General Public License as
7 ! published by the Free Software Foundation, either version 3 of the
8 ! License, or (at your option) any later version.
9 !
10 ! This program is distributed in the hope that it will be useful,
11 ! but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ! GNU Affero General Public License for more details.
14 !
15 ! You should have received a copy of the GNU Affero General Public
16 ! License along with this program. If not, see
17 ! <https://www.gnu.org/licenses/>.
18 !
19 !This file incorporates work covered by the following copyright and
20 !permission notice:
21 !
22 ! Copyright (C) 2008 Daniel Bartholomew
23 !
24 ! This program is free software: you can redistribute it and/or modify
25 ! it under the terms of the GNU General Public License as published by
26 ! the Free Software Foundation, either version 3 of the License, or
27 ! (at your option) any later version.
28 !
29 ! This program is distributed in the hope that it will be useful,
30 ! but WITHOUT ANY WARRANTY; without even the implied warranty of
31 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32 ! GNU General Public License for more details.
33 !
34 ! You should have received a copy of the GNU General Public License
35 ! along with this program. If not, see
36 ! <https://www.gnu.org/licenses/>.
37 !=========================================================================
38 Constant Story "The Server Room";
39 Constant Headline "^An Interactive Fiction by Daniel Bartholomew.^";
40 Release 1;
41 Serial "190908";
42 Constant MAX_SCORE = 6;
43 Include "parser";
44 Include "verblib";
45 Global beeping = 1;
46 !=========================================================================
47 ! The Game Objects
48
49 Object  break_room "Break Room"
50   with  description
51             "This break room is a calm, quiet and peaceful for people
52             to unwind and eat. Well kept and organized, the area is
53             clean and inviting. A large television is mounted to one
54             of the walls, next to a refrigerator. Even though no
55             one's around the smell of a pleasant coffee blend still
56             hangs in the air. A cool-looking counter and white couch
57             take up another wall. The remaining walls have posters of
58             various sports teams of the previous four years. East is
59             the outside world and west is the hallway to the server
60             room.",
61         w_to hallway,
62         e_to
63             "You take one look outside and think better of it. The
64             daystar is too bright and terrible to face today. Besides,
65             you have work to do.",
66   has   light;
67
68 Object  fridge "refrigerator" break_room
69   with  description
70             "This refrigerator makes a statement with a sleek, modern
71             and minimal stainless steel design. Featuring large doors
72             it seems quite an impressive refrigerator that can hold a
73             lot.",
74         name 'fridge' 'refrigerator',
75   has   container openable scenery;
76
77 Object  counter "long counter" break_room
78   with  description
79             "It's a beautiful, stylish, and high-quality solid wood
80             counter that runs the length of the wall. You can't quite
81             determine the color of the sleek countertop, it's
82             somewhere between green and brown. The design on the
83             countertop consists of geometric patterns. It seems a
84             sturdy, durable, and solid counter.",
85         name 'counter',
86   has   static supporter scenery;
87
88 Object  microwave "microwave" counter
89   with  description
90             "A combination of silver and black, this microwave looks
91             like a real workhorse. It's compact, quiet, and works
92             great.",
93         name 'microwave' 'micro',
94   has   container openable;
95
96 Object  table "table" break_room
97   with  description "It's a table. Were you expecting something else?",
98         name 'table',
99         before [;
100           Take:
101             "Let me spell it out for you: it is a T A B L E and you
102             are NOT Superman.";
103         ],
104   has   supporter;
105
106 Object  backpack "backpack" table
107   with  description
108             "This backpack looks like a modern art piece that was
109             made using brown and light blue-green watercolors. A black
110             line was traced around to make the stitching lines.
111             Well-worn and quite suitable for travel, it looks like it
112             could carry a lot of belongings.",
113         name 'pack' 'back' 'bag' 'backpack',
114         article "your",
115         before [;
116           Open:
117             if (backpack hasnt visited) {
118                 score = score + 2;
119                 give backpack visited;
120             }
121         ],
122   has   clothing container openable;
123
124 Object  disc "Trisquel CD" backpack
125   with  description
126             "An automatic recovery CD, guaranteed to fix almost any
127             server.^^Ok, it's just an install CD that auto-installs
128             Trisquel, but hey, if it works, it works.",
129         name 'disk' 'disc' 'Trisquel' 'cd',
130         after [;
131           Take:
132             if (disc hasnt visited) {
133                 score = score + 2;
134                 give disc visited;
135             }
136         ],
137   has   ;
138
139 Object  hallway "Hallway"
140   with  description
141             "Bereft of features, adornment or even adequate lighting,
142             this hallway is as plain as they come. Doors lead east
143             back to the break room, north to the server room, or
144             west to the restrooms.",
145         e_to break_room,
146         n_to
147             "You use your key card to open the server room door but
148             instead of a beep of approval and an unlocked door you
149             get a buzz of denial and the door remains locked. Plus:
150             Through the window in the door you can see someone moving
151             around inside but there shouldn't be anyone else here
152             today.",
153         w_to restroom,
154   has   light;
155
156 Object  restroom "Restroom"
157   with  description
158             "This average-sized, square restroom has a sink set into a
159             resin counter. The floor is tiled, the ceiling has
160             removable tiles, and the walls are painted with a
161             wallpapered dado. Light is provided by ceiling lights. The
162             room is done in colors that remind you of the sky and
163             overall looks very eclectic.",
164         e_to hallway,
165   has   light;
166
167 Object  server_room "Server Room"
168   with  description
169             "The fans, the lights, the chill . . . yep, it's a server
170             room. Full of servers from a dozen different
171             manufacturers, each with their own quirks.^^Your
172             attention is immediately drawn to a server 2/3 of the way
173             up rack 7. The little indicator light is blinking red, and
174             it is beeping.",
175         s_to hallway,
176         each_turn [;
177             beeping = random(7);
178             switch (beeping) {
179               1:
180                 "^The beeping is driving you crazy.";
181               2:
182                 "^It's hard to think, with all of the beeping.";
183               3:
184                 "^The monotony of the beeping is maddening.";
185               4:
186                 "^You can't stand the beeping.";
187               5:
188                 "^The beeping reminds you of your alarm clock.";
189               6:
190                 "^beep . . . beep . . . beep . . . beep . . . beep
191                 . . . beep . . .";
192               7:
193                 "^If you don't stop the beeping soon, you'll loose
194                 what little hair you have left.";
195             }
196         ],
197   has   light;
198
199 Object  server "server" server_room
200   with  description
201             "The indicator light on this ancient server is blinking
202             orange. The rest the front is featureless except for the
203             CD tray. The beeping seems to emanate from somewhere
204             inside the server.",
205         name 'server' 'machine' 'computer' 'ancient' 'old',
206   has   scenery;
207
208 Object  tray "tray" server_room
209   with  description "It's a CD tray. Just like every other CD tray.",
210         name 'cd' 'tray',
211         before [;
212           Receive:
213             if (noun ~= disc)
214                 print_ret (The) noun, " is too big to fit.";
215           Open:
216             if (tray hasnt visited) {
217                 score = score + 2;
218                 give tray visited;
219             }
220         ],
221         after [;
222           Open:
223             print_ret "You press the button and the CD tray pops out.";
224           Close:
225             if (disc in self) {
226                 deadflag = 5;
227                 print_ret
228                     "^With the CD in the tray, you quickly reboot the
229                     server.^^After the bios posts, your disc starts
230                     doing its thing and before you know it the server
231                     is happily running Trisquel, and even more than
232                     that, the beeping has stopped. Yay!";
233             }
234         ],
235   has   container openable scenery;
236
237 !=========================================================================
238 ! Entry point routines
239
240 [ Initialise;
241     location = break_room;
242     "^^^^It's Saturday, a nice one at that, and you've been called in
243     to fix a server that's on the blink. Again.^^You've had it. This
244     server is going to run GNU/Linux from this day forward! The
245     process will be easy - just put the disc into the server and away
246     we go. Now where is that Trisquel CD?^";
247 ];
248
249 [ Deathmessage;
250     if (deadflag == 5)
251         print "You have won";
252 ];
253
254 !=========================================================================
255 ! Standard and Extended Grammar
256 Include "grammar";
257 !=========================================================================