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