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