Add initial restroom description
[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 openedbackpack = 1;
46 Global openedtray = 1;
47 Global takencd = 1;
48 Global beeping = 1;
49 !=========================================================================
50 ! The Game Objects
51
52 Object  break_room "Break Room"
53   with  description
54             "Your standard break room. A fridge, and a long counter
55             take up one wall. East is the outside world and west is
56             the hallway to the server room.",
57         w_to hallway,
58         e_to
59             "You take one look outside and think better of it. The
60             daystar is too bright and terrible to face today. Besides,
61             you have work to do.",
62   has   light;
63
64 Object  fridge "refrigerator" break_room
65   with  description
66             "This refrigerator makes a statement with a sleek, modern
67             and minimal stainless steel design. Featuring large doors
68             it seems quite an impressive refrigerator that can hold a
69             lot.",
70         name 'fridge' 'refrigerator',
71   has   container openable scenery;
72
73 Object  counter "long counter" break_room
74   with  description
75             "A long counter. You can't quite determine the color,
76             it's somewhere between green and brown. On the counter is
77             a microwave.",
78         name 'counter',
79   has   static supporter scenery;
80
81 Object  microwave "microwave" counter
82   with  description
83             "A combination of silver and black, this microwave looks
84             like a real workhorse. It's compact, quiet, and works
85             great.",
86         name 'microwave' 'micro',
87   has   container openable scenery;
88
89 Object  table "table" break_room
90   with  description "It's a table. Were you expecting something else?",
91         name 'table',
92         before [;
93           Take:
94             "Let me spell it out for you: it is a T A B L E and you
95             are NOT Superman.";
96         ],
97   has   supporter;
98
99 Object  backpack "backpack" table
100   with  description
101             "This backpack looks like a modern art piece that was
102             made using brown and light blue-green watercolors. A black
103             line was traced around to make the stitching lines.
104             Well-worn and quite suitable for travel, it looks like it
105             could carry a lot of belongings.",
106         name 'pack' 'back' 'bag' 'backpack',
107         article "your",
108         before [;
109           Open:
110             if (openedbackpack == 1) {
111                 score = score + 2;
112                 openedbackpack = 2;
113             }
114         ],
115   has   clothing container openable;
116
117 Object  disc "Trisquel CD" backpack
118   with  description
119             "An automatic recovery CD, guaranteed to fix almost any
120             server.^^Ok, it's just an install CD that auto-installs
121             Trisquel, but hey, if it works, it works.",
122         name 'disk' 'disc' 'Trisquel' 'cd',
123         after [;
124           Take:
125             if (takencd == 1) {
126                 score = score + 2;
127                 takencd = 2;
128                 print_ret "You pick up the Trisquel CD.^";
129             }
130         ],
131   has   ;
132
133 Object  hallway "Hallway"
134   with  description
135             "Bereft of features, adornment or even adequate lighting,
136             this hallway is as plain as they come. Doors lead east
137             back to the break room, north to the server room, or
138             west to the restrooms.",
139         e_to break_room,
140         n_to
141             "You use your key card to open the server room door but
142             instead of a beep of approval and an unlocked door you
143             get a buzz of denial and the door remains locked. Plus:
144             Through the window in the door you can see someone moving
145             around inside but there shouldn't be anyone else here
146             today.",
147         w_to restroom,
148   has   light;
149
150 Object  restroom "Restroom"
151   with  description
152             "This average-sized, square restroom has a sink set into a
153             resin counter. The floor is tiled, the ceiling has
154             removable tiles, and the walls are painted with a
155             wallpapered dado. Light is provided by ceiling lights. The
156             room is done in colors that remind you of the sky and
157             overall looks very eclectic.",
158         e_to hallway,
159   has   light;
160
161 Object  server_room "Server Room"
162   with  description
163             "The fans, the lights, the chill . . . yep, it's a server
164             room. Full of servers from a dozen different
165             manufacturers, each with their own quirks.^^Your
166             attention is immediately drawn to a server 2/3 of the way
167             up rack 7. The little indicator light is blinking red, and
168             it is beeping.",
169         s_to hallway,
170         each_turn [;
171             beeping = random(7);
172             switch (beeping) {
173               1:
174                 "^The beeping is driving you crazy.";
175               2:
176                 "^It's hard to think, with all of the beeping.";
177               3:
178                 "^The monotony of the beeping is maddening.";
179               4:
180                 "^You can't stand the beeping.";
181               5:
182                 "^The beeping reminds you of your alarm clock.";
183               6:
184                 "^beep . . . beep . . . beep . . . beep . . . beep
185                 . . . beep . . .";
186               7:
187                 "^If you don't stop the beeping soon, you'll loose
188                 what little hair you have left.";
189             }
190         ],
191   has   light;
192
193 Object  server "server" server_room
194   with  description
195             "The indicator light on this ancient server is blinking
196             orange. The rest the front is featureless except for the
197             CD tray. The beeping seems to emanate from somewhere
198             inside the server.",
199         name 'server' 'machine' 'computer' 'ancient' 'old',
200   has   scenery;
201
202 Object  tray "tray" server_room
203   with  description "It's a CD tray. Just like every other CD tray.",
204         name 'cd' 'tray',
205         before [;
206           Receive:
207             if (noun ~= disc)
208                 print_ret (The) noun, " is too big to fit.";
209           Open:
210             if (openedtray == 1) {
211                 score = score + 2;
212                 openedtray = 2;
213             }
214         ],
215         after [;
216           Open:
217             print_ret "You press the button and the CD tray pops out.";
218           Close:
219             if (disc in self) {
220                 deadflag = 5;
221                 print_ret
222                     "^With the CD in the tray, you quickly reboot the
223                     server.^^After the bios posts, your disc starts
224                     doing its thing and before you know it the server
225                     is happily running Trisquel, and even more than
226                     that, the beeping has stopped. Yay!";
227             }
228         ],
229   has   container openable scenery;
230
231 !=========================================================================
232 ! Entry point routines
233
234 [ Initialise;
235     location = break_room;
236     "^^^^It's Saturday, a nice one at that, and you've been called in
237     to fix a server that's on the blink. Again.^^You've had it. This
238     server is going to run GNU/Linux from this day forward! The
239     process will be easy - just put the disc into the server and away
240     we go. Now where is that Trisquel CD?^";
241 ];
242
243 [ Deathmessage;
244     if (deadflag == 5)
245         print "You have won";
246 ];
247
248 !=========================================================================
249 ! Standard and Extended Grammar
250 Include "grammar";
251 !=========================================================================