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