mmch.inf 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755
  1. !%
  2. Constant Story "Margaret Morrison Carnegie Hall";
  3. Constant Headline "^A less-than-honest building simulator
  4. ^By Vincent Zeng^
  5. ^(for more info, type 'about')^^";
  6. Release 0;
  7. Include "Parser";
  8. Object LibraryMessages
  9. with before [;
  10. Miscellany:
  11. if (lm_n == 44 && action_to_be == ##Take)
  12. "You don't have enough hands to take everything at once.";
  13. ];
  14. [ ChooseObjects obj code
  15. retval;
  16. obj = obj; ! Avoid a compiler warning
  17. switch (code) {
  18. 0: ! Parser is excluding obj from ALL
  19. ; ! ... accept parser's decision
  20. 1: ! Parser is including obj in ALL
  21. if (action_to_be == ##Take) retval = 2; ! ... force exclusion if TAKE; accept otherwise
  22. 2: ! Parser is asking for 'appropriateness' hint
  23. ; ! ... but we don't provide one
  24. }
  25. return retval;
  26. ];
  27. Include "VerbLib";
  28. Include "Menus";
  29. Include "Grammar";
  30. Constant ShowRooms;
  31. Include "dirs_2";
  32. Global HANDS_FULL;
  33. Global HEAVY_LOAD;
  34. Constant BUTTON_ON = "X";
  35. Constant BUTTON_OFF = " ";
  36. !====CLASSES
  37. Class Room
  38. with cant_go [;
  39. "There's no way out in that direction.";
  40. ],
  41. before [;
  42. Examine:
  43. if (noun == self) {
  44. <<Look>>;
  45. } else {}
  46. Listen:
  47. if (noun == false) {
  48. "Just a distant clicking of machinery that has not yet shut down.";
  49. }
  50. Smell:
  51. if (noun == false) {
  52. "It smells dank.";
  53. }
  54. Take, Open, Unlock, Push, Lock, Close, Rub, Attack, Climb, Wave:
  55. if (HANDS_FULL) {
  56. "Your hands are full with carrying that ", (name) HEAVY_LOAD, "!";
  57. }
  58. ],
  59. after [;
  60. Take:
  61. if (noun.encumberance > 9) {
  62. HANDS_FULL = 1;
  63. HEAVY_LOAD = noun;
  64. }
  65. Drop:
  66. if (noun.encumberance > 9) {
  67. HANDS_FULL = 0;
  68. }
  69. ],
  70. has light;
  71. Class Passageway
  72. with cant_go [;
  73. "The hallway doesn't go that direction.";
  74. ],
  75. name 'hallway' 'passageway' 'hall',
  76. before [;
  77. Examine:
  78. if (noun == self) {
  79. <<Look>>;
  80. } else {}
  81. Enter:
  82. if (noun == false ) {
  83. "Be more specific about what you want to enter.";
  84. } else {}
  85. Listen:
  86. if (noun == false) {
  87. "Just a distant clicking of machinery that has not yet shut down.";
  88. }
  89. Smell:
  90. if (noun == false) {
  91. "It smells dank.";
  92. }
  93. Take, Open, Unlock, Push, Lock, Close, Rub, Attack, Climb, Wave:
  94. if (HANDS_FULL) {
  95. "Your hands are full with carrying that ", (name) HEAVY_LOAD, "!";
  96. }
  97. ],
  98. after [;
  99. Take:
  100. if (noun.encumberance > 9) {
  101. HANDS_FULL = 1;
  102. HEAVY_LOAD = noun;
  103. }
  104. Drop:
  105. if (noun.encumberance > 9) {
  106. HANDS_FULL = 0;
  107. }
  108. ],
  109. has light;
  110. Class Structure
  111. with describe [; rtrue; ],
  112. has static transparent;
  113. Class Alarm
  114. with description [;
  115. font off;
  116. style reverse;
  117. print " ______________________________ ^";
  118. print "| |^";
  119. print "| ALARM STATUS: ";
  120. if (self.armed) {
  121. print " ";
  122. } else {
  123. print "UN";
  124. }
  125. print "ARMED |^";
  126. print "| INTRUDER STATUS: ";
  127. if (self has on) {
  128. print "!ALARM!";
  129. } else {
  130. print " SAFE ";
  131. }
  132. print " |^";
  133. print "| |^";
  134. print "| 1 2 3 |^";
  135. print "| (";
  136. print (string) self.b1;
  137. print ")(";
  138. print (string) self.b2;
  139. print ")(";
  140. print (string) self.b3;
  141. print ") |^";
  142. print "| 4 5 6 |^";
  143. print "| (";
  144. print (string) self.b4;
  145. print ")(";
  146. print (string) self.b5;
  147. print ")(";
  148. print (string) self.b6;
  149. print ") |^";
  150. print "| 7 8 9 |^";
  151. print "| (";
  152. print (string) self.b7;
  153. print ")(";
  154. print (string) self.b8;
  155. print ")(";
  156. print (string) self.b9;
  157. print ") |^";
  158. print "| * 0 # |^";
  159. print "| (";
  160. print (string) self.ba;
  161. print ")(";
  162. print (string) self.b0;
  163. print ")(";
  164. print (string) self.bp;
  165. print ") |^";
  166. print "|______________________________|^";
  167. print " ^";
  168. style roman;
  169. font on;
  170. new_line;
  171. rtrue;
  172. ],
  173. name 'alarm' 'security' 'panel' 'buttons' 'keypad' 'pad',
  174. armed,
  175. b0 BUTTON_OFF,
  176. b1 BUTTON_OFF,
  177. b2 BUTTON_OFF,
  178. b3 BUTTON_OFF,
  179. b4 BUTTON_OFF,
  180. b5 BUTTON_OFF,
  181. b6 BUTTON_OFF,
  182. b7 BUTTON_OFF,
  183. b8 BUTTON_OFF,
  184. b9 BUTTON_OFF,
  185. ba BUTTON_OFF,
  186. bp BUTTON_OFF,
  187. describe [;
  188. rtrue;
  189. ],
  190. before [;
  191. Listen:
  192. if (self has on) {
  193. "IT'S MAKING A HORRIBLE BLARING NOISE."; }
  194. SwitchOff:
  195. !"You can't just turn it off! You need the code!";
  196. ],
  197. disarm [;
  198. give self ~on;
  199. self.armed = 0;
  200. ],
  201. arm [;
  202. give self ~on;
  203. self.armed = 1;
  204. ],
  205. buttonpress [ buttonkey buttonstatus;
  206. self.buttonkey = buttonstatus;
  207. ],
  208. each_turn [;
  209. if (self has on) {
  210. box "!!ALARM ALARM ALARM!!";
  211. style underline;
  212. print "^The security alarm is making an awful racket!";
  213. style roman;
  214. new_line;
  215. rtrue;
  216. }
  217. ],
  218. has static transparent switchable;
  219. Class AlarmButton
  220. with when_on "It's lit up.",
  221. key,
  222. pushbutton [;
  223. if (self has on) {
  224. parent(self).buttonpress(self.key, BUTTON_OFF);
  225. give self ~on;
  226. "The button clicks under your finger and goes dark.";
  227. } else {
  228. parent(self).buttonpress(self.key, BUTTON_ON);
  229. give self on;
  230. "The button clicks down under your finger and lights up.";
  231. }
  232. new_line;
  233. rtrue;
  234. ],
  235. before [;
  236. Push, SwitchOn, SwitchOff:
  237. return self.AlarmButton::pushbutton();
  238. ],
  239. has static switchable;
  240. Class Takeable
  241. with encumberance 0,
  242. has ;
  243. Class Furniture
  244. with describe [; rtrue; ],
  245. before [;
  246. Take: "Don't bother.";
  247. Push: "It doesn't budge.";
  248. PutOn:
  249. if (noun.encumberance < 5) {
  250. move noun to self;
  251. "You put ", (the) noun, " on ", (the) self, ".";
  252. } else {
  253. "It's too big for that.";
  254. }
  255. ],
  256. has supporter;
  257. Class Prop
  258. with before[ ;
  259. Take, Push, PushDir:
  260. "Don't bother.";
  261. ],
  262. has scenery;
  263. Class BarricadeDoor
  264. with before [;
  265. Open, Unlock, Attack, Push: "It's not happening. That door is well-sealed against intruders.";
  266. ],
  267. describe [; rtrue; ],
  268. has static;
  269. Class OfficeDoorGreen
  270. with describe [; rtrue;],
  271. with_key greenkey,
  272. has door lockable openable static locked transparent;
  273. Class OfficeDoorBlue
  274. with describe [; rtrue;],
  275. with_key bluekey,
  276. has door lockable openable static locked transparent;
  277. Class Drain
  278. with after [;
  279. Receive:
  280. if (noun.encumberance < 5) {
  281. remove noun;
  282. print_ret (The) noun, " slips past the grate and falls down the drain. You'll never see it again.";
  283. } else {
  284. move noun to location;
  285. "It gets caught on the grate, too big to fit through.";
  286. }
  287. ],
  288. react_after [;
  289. Drop:
  290. if (noun.encumberance < 5 ) "It almost went into the drain. Close call.";
  291. ],
  292. describe [; rtrue; ],
  293. has open container static;
  294. !====== ROOMS
  295. Room c_lockroom "C-Level: Under the Stairs"
  296. with description
  297. "A dim, dusty crawlspace formed by the bottom of painted metal stairs. It opens into the stairwell to the north.",
  298. !initial
  299. !"^^This part of the building has existed for as long as the rest of the building, but people tend to forget it's here. Over the years, it's changed hands through various departments, clubs, and contractors, none of whom had much regard for its history.",
  300. name 'crawlspace' 'space' 'dim' 'dusty' 'dust',
  301. n_to c_stairs,
  302. has ;
  303. Structure cbstairs "stairs"
  304. with description
  305. "Old steel girders and thick, grey paint that is beginning to flake off.",
  306. name 'stairs' 'stair' 'step' 'painted' 'metal' 'girder' 'paint' 'girders' 'stairwell',
  307. before [;
  308. Climb:
  309. if (location == c_lockroom) {
  310. "You scramble along the underside of the stairs for a moment, then fall heavily to the ground. You'd do better starting from the stairwell.";
  311. } else {
  312. if (location == b_cstairs) {
  313. print "Your feet pound heavily down the stairs.^";
  314. <<Go d_obj>>;
  315. } else {
  316. print "Your feet pound heavily up the stairs.^";
  317. <<Go u_obj>>;
  318. }
  319. }
  320. default: ;
  321. ],
  322. found_in c_stairs c_lockroom b_cstairs,
  323. has pluralname;
  324. Room c_stairs "C-Level: Bottom of the Stairwell"
  325. with description
  326. "A northern door leads towards the Digital Fabrication lab. The stairs curl around to form a dark crawlspace to the south. B-level is upstairs.",
  327. s_to c_lockroom, u_to b_cstairs,
  328. before [;
  329. Go: if (noun == n_obj) { "The door is shut."; }
  330. ],
  331. has ;
  332. BarricadeDoor -> dfabdoor "dFAB door"
  333. with description [;
  334. print "A heavy metal door, painted white, with a narrow glass window";
  335. if (dfabletters in self) {
  336. print " and a peeling vinyl sticker.";
  337. } else {
  338. print ".";
  339. }
  340. new_line;
  341. rtrue;
  342. ],
  343. name 'door' 'dfab' 'south' 's//',
  344. has transparent;
  345. Structure -> -> dfabwindow "dFAB window"
  346. with description
  347. "A narrow glass window with safety wire, smudged with grime. It's dark on the other side.",
  348. name 'window' 'glass',
  349. has ;
  350. Takeable -> -> dfabletters "vinyl door sticker"
  351. with description
  352. "A light green vinyl sticker with laser-cut lettering that reads 'digital fabrication lab'.",
  353. name 'stickers' 'letters' 'dfab' 'vinyl' 'peeling' 'green' 'digital' 'fabrication' 'lab' 'sticker' 'label',
  354. peeled 0,
  355. before [;
  356. Take:
  357. if (self in player ) {
  358. "You already have that.";
  359. } else {
  360. move self to player;
  361. if (self.peeled == 0) {
  362. self.peeled++;
  363. "You carefully peel the sticker from the door. It probably won't stick to anything else now.";
  364. } else {
  365. "Taken.";
  366. }
  367. }
  368. Taste: "Still somehow has that new plastic taste.";
  369. ],
  370. has ;
  371. Room b_cstairs "B-Level: Top of the Stairwell"
  372. with description
  373. "The landing overlooks the entrance to C-level down below. A northern door leads to the former Scotch'n'Soda storeroom. B-Level continues south.",
  374. d_to c_stairs, s_to b_hall1,
  375. before [;
  376. Go: if (noun == n_obj) { "The door is shut."; }
  377. ],
  378. has ;
  379. BarricadeDoor -> snsdoor "Scotch'n'Soda door"
  380. with description
  381. "A heavy metal door, painted white.",
  382. name 'door' 'heavy' 'scotch' 'soda' 'scotch^n^soda' 'storeroom' 'white',
  383. has ;
  384. Passageway b_hall1 "B-Level: Hallway"
  385. with description [;
  386. print "A north-south hallway with a wide metal grate that stretches across the hallway before the stairwell.^^A door west leads to the faculty office.";
  387. if (greenkey in grate1) {
  388. if (greenkey.seen == 1) {
  389. print "^^A key glints from under the grate.";
  390. } else {
  391. print "^^Something glints from under the grate.";
  392. }
  393. }
  394. if (door_fac has open) {
  395. style underline;
  396. print "^^Someone left the door open.";
  397. style roman;
  398. }
  399. new_line;
  400. rtrue;
  401. ],
  402. n_to b_cstairs, w_to door_fac, s_to b_hall2,
  403. has ;
  404. Drain -> grate1 "grate"
  405. with description [;
  406. print "A heavy metal grate, painted safety yellow, with holes so wide that a foot could easily slip into it. It covers a wide drain in the floor.";
  407. if (greenkey in self) {
  408. print " ^^A small brass key rests just short of tumbling down the drain.";
  409. }
  410. new_line;
  411. rtrue;
  412. ],
  413. name 'grate' 'metal' 'yellow' 'wide',
  414. before [;
  415. LookUnder: <<Search self>>;
  416. ],
  417. after [;
  418. Examine, Search:
  419. greenkey.seen = 1;
  420. ],
  421. has ;
  422. Prop -> -> glint "glint"
  423. with description [;
  424. print "A bit of light reflecting off ";
  425. if (greenkey.seen == 1) {
  426. print "a key ";
  427. } else {
  428. print "something ";
  429. }
  430. print "under the grate.";
  431. new_line;
  432. rtrue;
  433. ],
  434. name 'glint' 'shiny' 'light' 'reflecting' 'something' 'reflection',
  435. before [;
  436. Take: "It's just a glint of light.";
  437. Search: <<Examine self>>;
  438. ],
  439. has ;
  440. Drain -> -> drain1 "drain"
  441. with description[;
  442. print "A wide drain that tapers into a 6~ pipe.";
  443. if (greenkey in grate1) {
  444. print " A small brass key rests just short of tumbling down the hole.";
  445. }
  446. new_line;
  447. rtrue;
  448. ],
  449. after [;
  450. Examine, Search:
  451. greenkey.seen = 1;
  452. ],
  453. name 'drain' 'hole',
  454. has ;
  455. Takeable -> -> greenkey "worn brass key"
  456. with description
  457. "A small, well-worn brass key numbered 6007-M and labeled 'DO NOT DUPLICATE'.",
  458. name 'key' 'brass' 'worn' 'small' '6007' '6007-m',
  459. seen, used,
  460. before [;
  461. Examine:
  462. if (self.seen == 1 ) {
  463. self.description();
  464. } else {
  465. print "What key?";
  466. new_line;
  467. }
  468. rtrue;
  469. Take:
  470. if (self in player ) {
  471. "You already have that.";
  472. } else {
  473. if (self in grate1) {
  474. if (self.seen == 1) {
  475. move self to player;
  476. remove glint;
  477. "You carefully reach past the grate and pluck the key from its resting spot.";
  478. } else {
  479. "What key?";
  480. }
  481. } else {
  482. move self to player;
  483. "Taken.";
  484. }
  485. }
  486. ],
  487. encumberance 1,
  488. has ;
  489. OfficeDoorGreen door_fac "faculty office door"
  490. with description
  491. "A green metal door with a large window.",
  492. name 'door' 'green' 'metal' 'office' 'faculty' 'west' 'w//',
  493. found_in b_fac b_hall1,
  494. door_to [;
  495. if (self in b_hall1) return b_fac;
  496. else return b_hall1;
  497. ],
  498. door_dir [;
  499. if (self in b_hall1) return w_obj;
  500. else return e_obj;
  501. ],
  502. has ;
  503. Structure -> facwindow "faculty office window"
  504. with description
  505. "A large glass window with safety wire.",
  506. name 'window' 'glass' 'faculty' 'office',
  507. has ;
  508. Room b_fac "B-Level: Faculty Office"
  509. with description [item i;
  510. print "Former photography faculty used this office to hold student meetings; it didn't take long for the room to turn into a place to stash leftover photography student work, which is still piled on the desk.";
  511. if (children(facdesk) > 1){
  512. print "^^There is also ";
  513. objectloop (item in facdesk) {
  514. i++;
  515. if (i < children(facdesk)) {
  516. print (a) item, " ";
  517. if (i < children(facdesk)-1) {
  518. print "and ";
  519. }
  520. }
  521. }
  522. print "on the desk.";
  523. }
  524. print "^^A door east leads back to the hallway.";
  525. new_line;
  526. rtrue;
  527. ],
  528. e_to door_fac,
  529. has ;
  530. Furniture -> facdesk "desk"
  531. with description
  532. "A metal-sided desk with a hutch.",
  533. name 'desk' 'metal' 'table' 'shelf' 'hutch',
  534. has ;
  535. Prop -> -> studwork "student work"
  536. with description
  537. "A pile of abandoned photographs, left behind by students past. None of it is particularly interesting.",
  538. name 'work' 'student' 'leftover' 'abandoned' 'prints' 'photographs' 'pictures',
  539. has ;
  540. Passageway b_hall2 "B-Level: Hallway"
  541. with description [;
  542. print "A north-south hallway that's a little uncomfortably narrow.^^A door east leads to the quartermaster depot, and a door west leads to the equipment office.";
  543. if (door_qmd has open) {
  544. style underline;
  545. if (door_equ has open ) {
  546. print "^^Someone left both doors open.";
  547. } else {
  548. print "^^Someone left the door to the quartermaster depot open.";
  549. }
  550. style roman;
  551. } else if (door_equ has open ) {
  552. style underline;
  553. print "^^Someone left the door to the equipment office open.";
  554. style roman;
  555. }
  556. new_line;
  557. rtrue;
  558. ],
  559. n_to b_hall1, e_to door_qmd, w_to door_equ, s_to b_hall3,
  560. has ;
  561. OfficeDoorGreen door_qmd "quartermaster depot door"
  562. with description [;
  563. print "A green metal door";
  564. if (qmd_signs in self ) {
  565. print " covered in a ripped sign.";
  566. } else {
  567. print ".";
  568. }
  569. new_line;
  570. rtrue;
  571. ],
  572. name 'door' 'green' 'qmd' 'quartermaster' 'depot' 'east' 'e//',
  573. found_in b_qmd b_hall2,
  574. door_to [;
  575. if (self in b_hall2) return b_qmd;
  576. else return b_hall2;
  577. ],
  578. door_dir [;
  579. if (self in b_hall2) return e_obj;
  580. else return w_obj;
  581. ],
  582. has ;
  583. Takeable -> qmd_signs "ripped sign"
  584. with description
  585. "A paper sign that used to read 'Quartermaster Depot'.",
  586. name 'sign' 'ripped' 'paper',
  587. peeled 0,
  588. before [;
  589. Take:
  590. if (self in player ) {
  591. "You already have that.";
  592. } else {
  593. move self to player;
  594. if (self.peeled == 0) {
  595. self.peeled++;
  596. "You rip the sign from the door.";
  597. } else {
  598. "Taken.";
  599. }
  600. }
  601. ],
  602. has ;
  603. OfficeDoorGreen door_equ "equipment office door"
  604. with description
  605. "A green metal door with a large window.",
  606. name 'door' 'green' 'metal' 'equipment' 'office' 'west' 'w//',
  607. found_in b_equ b_hall2,
  608. door_to [;
  609. if (self in b_hall2) return b_equ;
  610. else return b_hall2;
  611. ],
  612. door_dir [;
  613. if (self in b_hall2) return w_obj;
  614. else return e_obj;
  615. ],
  616. has ;
  617. Structure -> equwindow "equipment office window"
  618. with description
  619. "A large glass window with safety wire.",
  620. name 'window' 'glass' 'equipment' 'office',
  621. has ;
  622. Room b_qmd "B-Level: Quartermaster Depot"
  623. with description [item i;
  624. print "The former quartermaster had an excess of broken bullshit and tools, and not enough space to keep it organized. It's a wonder that anything can be found in this mess. The door to the closet has been removed to give quicker access to the shelf and mini-fridge.";
  625. print "^^The table in the center of the room";
  626. if (children(qmd_table) > 0){
  627. print " has a remarkably low amount of clutter, other than ";
  628. objectloop (item in qmd_table) {
  629. i++;
  630. print (a) item;
  631. if (i < children(qmd_table)) {
  632. print " and ";
  633. }
  634. }
  635. } else {
  636. print " is completely devoid of clutter, as if in defiance to the rest of the room.";
  637. }
  638. print ".";
  639. print "^^A door west leads back to the hallway.";
  640. new_line;
  641. rtrue;
  642. ],
  643. before[;
  644. Drop:
  645. if (noun.encumberance < 5) {
  646. move noun to bs;
  647. "As soon as you let it go, it becomes a part of the mess.";
  648. } else {}
  649. Take:
  650. if (noun in player) {
  651. "You already have that.";
  652. } else {
  653. move noun to player;
  654. if (noun.encumberance < 5) {
  655. "You dig through the mess to rescue it.";
  656. } else {"Taken.";}
  657. }
  658. ],
  659. w_to door_qmd,
  660. has ;
  661. Furniture -> qmd_table "table"
  662. with description
  663. "A rickety table with a layered MDF top and black iron pipe legs.",
  664. name 'table' 'rickety' 'mdf' 'pipe' 'black' 'iron' 'legs' 'desk',
  665. before [;
  666. Push:
  667. "It wobbles, but refuses to tip over.";
  668. ],
  669. has ;
  670. Prop -> bs "broken bullshit"
  671. with description
  672. "Stuff is just scattered all over the place.",
  673. name 'tools' 'jumble' 'bullshit' 'broken' 'busted' 'bs' 'camera' 'equipment' 'mess' 'tool' 'stuff',
  674. before [item i;
  675. Search:
  676. print "There's more crap than anyone can reasonably deal with";
  677. if (children(self) > 0) {
  678. print ", but some of it is has potential. ^^You manage to spot ";
  679. objectloop (item in self) {
  680. i++;
  681. print (a) item;
  682. if (i < children(self)) {
  683. print " and ";
  684. }
  685. }
  686. }
  687. print ".";
  688. new_line;
  689. rtrue;
  690. ],
  691. has transparent container open;
  692. Takeable -> -> flashlight "flashlight"
  693. with description
  694. "A small black maglight.",
  695. name 'flashlight' 'maglight' 'light' 'torch',
  696. encumberance 1,
  697. after [;
  698. SwitchOn: give self light;
  699. SwitchOff: give self ~light;
  700. ],
  701. before [;
  702. Open:
  703. "Don't do that.";
  704. ],
  705. has switchable;
  706. Structure -> qmd_closet "closet"
  707. with description
  708. "A closet that's missing its doors. It has a shelf about waist-high.",
  709. name 'closet' 'cabinet',
  710. before [;
  711. Enter:
  712. "It's too small for you.";
  713. Take:
  714. "You can't take a whole closet.";
  715. ],
  716. has container open transparent;
  717. Furniture -> -> qmd_shelf "shelf"
  718. with description
  719. "A white wooden board that stretches the width of the closet at about waist height.",
  720. name 'shelf' 'board' 'white' 'wooden',
  721. has static;
  722. Furniture -> -> qmd_fridge "mini-fridge"
  723. with description
  724. "A black mini-fridge wedged under the shelf.",
  725. name 'fridge' 'refridgerator' 'mini-fridge' 'cooler' 'icebox' 'black',
  726. before [;
  727. PutOn:
  728. "There isn't enough room between the fridge and the shelf for you to put anything there.";
  729. ],
  730. has container openable ~supporter;
  731. Room b_equ "B-Level: Equipment Office"
  732. with description [item i;
  733. print "A cozy little office that would certainly be too small for two people to share. A window on the western wall lets in a little bit of light. Wooden cubbies line the rest of the walls, in order to keep equipment and tools neatly organized.";
  734. if (children(equ_desk) > 0) {
  735. print "^^The former photography administrator kept the desk immaculate, except for ";
  736. objectloop (item in equ_desk) {
  737. i++;
  738. print (a) item;
  739. if (i < children(equ_desk)) {
  740. print " and ";
  741. }
  742. }
  743. print ".";
  744. } else {
  745. print "^^The former photography administrator kept the desk immaculate.";
  746. }
  747. print "^^A door east leads back to the hallway.";
  748. new_line;
  749. rtrue;
  750. ],
  751. e_to door_equ,
  752. has ;
  753. Structure -> equ_window "equipment office window"
  754. with description
  755. "Thick glass cubes give a distorted view of the outside world. All you can tell is that there's still daylight out.",
  756. name 'window' 'glass' 'cubes' 'outside' 'out',
  757. has ;
  758. Furniture -> equ_desk "equipment office desk"
  759. with description
  760. "A metal-sided desk about four feet wide and two feet deep.",
  761. name 'desk' 'table' 'metal',
  762. has ;
  763. Takeable -> -> green_cup "green coffee cup"
  764. with description
  765. "A little green ceramic cup, perfect for holding the exact amount of coffee you'd like.",
  766. name 'cup' 'coffee' 'green' 'ceramic' 'mug',
  767. encumberance 1,
  768. before [;
  769. Receive:
  770. "It's not worth putting anything in the cup.";
  771. ],
  772. has container open;
  773. Takeable -> -> yellow_cup "yellow coffee cup"
  774. with description
  775. "A little yellow ceramic cup with a bright and colorful design.",
  776. name 'cup' 'coffee' 'mug' 'ceramic' 'yellow',
  777. before [;
  778. Receive:
  779. "It's not worth putting anything in the cup.";
  780. ],
  781. encumberance 1,
  782. has container open;
  783. Structure -> equ_cubbies "cubbies"
  784. with description
  785. "Wooden cubbies line the walls. Each one contains an assortment of cameras, tools, and spare parts.",
  786. name 'cameras' 'camera' 'cubbies' 'wooden' 'assortment' 'tools' 'tool' 'spare' 'parts' 'part' 'shelves' 'shelf' 'cubby',
  787. before [;
  788. Search:
  789. "It's not worth looking there.";
  790. Receive:
  791. "The photography administrator would be annoyed at you if you put random crap into his cubbies.";
  792. Take,Push:
  793. "The photography administrator would be annoyed at you for messing with his organization.";
  794. ],
  795. has container open transparent pluralname;
  796. Passageway b_hall3 "B-Level: Hallway"
  797. with description [;
  798. print "A north-south hallway that could be a little roomier.^^A door east leads to the classroom.";
  799. if (door_class has open ) {
  800. style underline;
  801. print "^^Someone left the door open.";
  802. style roman;
  803. }
  804. new_line;
  805. rtrue;
  806. ],
  807. n_to b_hall2, e_to door_class, s_to b_hall4,
  808. has ;
  809. OfficeDoorGreen door_class "classroom door"
  810. with description
  811. "A green metal door with a large window.",
  812. name 'door' 'green' 'metal' 'class' 'classroom' 'east' 'e//',
  813. found_in b_class b_hall3,
  814. door_to [;
  815. if (self in b_hall3) return b_class;
  816. else return b_hall3;
  817. ],
  818. door_dir [;
  819. if (self in b_hall3) return e_obj;
  820. else return w_obj;
  821. ],
  822. has ;
  823. Room b_class "B-Level: Classroom"
  824. with description
  825. "This room feels way too small to be a classroom, but it's labeled as such. It's startlingly empty, as if people refused to use it out of spite.^^A door west leads back to the hallway.",
  826. with w_to door_class,
  827. has ;
  828. Passageway b_hall4 "B-Level: Hallway"
  829. with description
  830. "The hallway turns here, continuing both east and north. The floor slopes gently upwards towards the east, so OSHA-compliance required a handrail installed on one wall. A bulletin board on the opposite wall is covered in out of date flyers.",
  831. n_to b_hall3, e_to b_hall5,
  832. has ;
  833. Structure -> hall4_handrail "handrail"
  834. with description
  835. "A long metal handrail, painted red, securely fixed to the wall.",
  836. name 'handrail' 'rail' 'railing' 'metal' 'red',
  837. has ;
  838. Prop -> hall4_bb "bulletin board"
  839. with description
  840. "A bulletin board that seems to be part of the wall. The flyers advertise photography shows and artist talks that happened months ago.",
  841. name 'board' 'bulletin' 'bb' 'flyers' 'posters' 'flyer' 'poster' 'ads' 'ad' 'advertisement' 'paper' 'papers' 'sign' 'signs',
  842. has ;
  843. Passageway b_hall5 "B-Level: Hallway"
  844. with description [;
  845. print "The hallway turns at the top of a long, gentle slope, and continues both southeast and west. It opens directly south to an elevator area.^^A door north leads to the darkroom.";
  846. if (door_dr has open) {
  847. style underline;
  848. print "^^Someone left the door open.";
  849. style roman;
  850. }
  851. new_line;
  852. rtrue;
  853. ],
  854. w_to b_hall4, n_to door_dr, s_to b_hall6, se_to b_hall7,
  855. has ;
  856. OfficeDoorGreen door_dr "darkroom door"
  857. with description
  858. "A green metal door.",
  859. name 'green' 'metal' 'door' 'north' 'darkroom' 'dr' 'n//',
  860. found_in b_hall5 b_dr,
  861. door_to [;
  862. if (self in b_hall5) return b_dr;
  863. else return b_hall5;
  864. ],
  865. door_dir [;
  866. if (self in b_hall5) return n_obj;
  867. else return s_obj;
  868. ],
  869. has ;
  870. Room b_dr "B-Level: Main Darkroom"
  871. with description[;
  872. print "An area full of abandoned prints and spilled photo chemistry. The two film changing rooms had their doors ripped off the hinges.^^Openings in the wall to the northeast and northwest lead to darker spaces.";
  873. print "^^A door south leads back to the hallway.";
  874. new_line;
  875. rtrue;
  876. ],
  877. s_to door_dr, ne_to b_bdr, nw_to b_adr,
  878. has ;
  879. Structure -> dr_filmroom "film changing rooms"
  880. with description
  881. "Rooms that once could have been light-tight, except the doors are gone.",
  882. name 'film' 'changing' 'rooms' 'room' 'dark',
  883. has pluralname;
  884. Prop dr_prints "abandoned prints"
  885. with description
  886. "Student photography work thrown everywhere.",
  887. name 'prints' 'print' 'photo' 'photos' 'work' 'student' 'pictures' 'picture' 'photograph' 'photographs',
  888. found_in b_dr b_bdr,
  889. has pluralname;
  890. Prop dr_chemistry "spilled chemistry"
  891. with description
  892. "Stains and crusty sediment.",
  893. name 'chemistry' 'spilled' 'mess' 'chemicals' 'stains' 'stain' 'crust' 'crusty',
  894. found_in b_dr b_adr b_bdr,
  895. has pluralname;
  896. Room b_bdr "B-Level: Beginning Darkroom"
  897. with description [;
  898. print "A large sink takes up the center of the room, an island of black fiberboard and dark grey plastic. The exhaust hood over the sink remains silent, blocking one's view across the sink. Printing stations ring the four walls of the room, with enlargers looming in each stall like a cabalistic meeting of archaic practices. Contrast filters and curled up bits of photo paper litter the floor.^^The main darkroom is through an opening to the south.";
  899. new_line;
  900. rtrue;
  901. ],
  902. s_to b_dr, sw_to b_dr, w_to b_dr,
  903. has ~light;
  904. Takeable -> filters "contrast filters"
  905. with description
  906. "Sheets of pinkish-orange plastic, about 4~x4~, used in some photographic printing proccesses.",
  907. name 'filter' 'filters' 'contrast' 'plastic',
  908. encumberance 1,
  909. describe [; rtrue; ],
  910. after [;
  911. "You collect a few of them, but there's more scattered around than you can ever hope to collect.";
  912. ],
  913. has pluralname;
  914. Structure -> bdr_sink "sink"
  915. with description
  916. "A large sink, six feet across and tent feet wide, made of dark grey plastic that sits on top of black fiberboard shelving.",
  917. name 'sink' 'faucet' 'plastic',
  918. has supporter open;
  919. Structure -> bdr_shelf "shelf under the sink"
  920. with description
  921. "A shelf built into the space leftover under the sink.",
  922. name 'shelf' 'shelves' 'shelving' 'fiberboard',
  923. has container open;
  924. Structure -> bdr_hood "exhaust hood"
  925. with description
  926. "A massive metal hood, ten feet wide and a foot thick, that once drew an impressive amount of air out of the space above the sink.",
  927. name 'hood' 'exhaust' 'vent' 'ventilation',
  928. has ;
  929. Structure enlargers "enlargers"
  930. with description
  931. "Old machinery, black brackets and cables, creaking bellows, and cracked lenses. Once, they churned out the hopes and dreams of photography students.",
  932. name 'enlarger' 'enlargers' 'machine' 'machines' 'machinery' 'brackets' 'bracket' 'cable' 'cables' 'bellows' 'lenses' 'lens' 'stall' 'stations' 'station' 'printing',
  933. found_in b_adr b_bdr,
  934. has pluralname;
  935. Room b_adr "B-Level: Advanced Darkroom"
  936. with description
  937. "A large sink juts out from one wall, filled with mysterious chemical stains. Printing stations form a horseshoe around it, with enlargers covered by plastic tarps and trash bags sitting ghostlike in each stall. Cyanotypes are scattered all over the floor.^^The main darkroom is south.",
  938. s_to b_dr, se_to b_dr, e_to b_dr,
  939. has ~light;
  940. Structure -> adr_sink "sink"
  941. with description
  942. "A large sink, six feet across and tent feet wide, made of dark grey plastic that sits on top of black fiberboard shelving.",
  943. name 'sink' 'faucet' 'plastic',
  944. has supporter open;
  945. Structure -> adr_shelf "shelf under the sink"
  946. with description
  947. "A shelf built into the space leftover under the sink.",
  948. name 'shelf' 'shelves' 'shelving' 'fiberboard',
  949. has container open;
  950. Structure -> adr_hood "exhaust pipe"
  951. with description
  952. "There's just an open pipe about a foot wide, hanging from the ceiling. Something must have happened to the rest of the hood.",
  953. name 'hood' 'exhaust' 'vent' 'ventilation' 'pipe',
  954. has ;
  955. Takeable -> cyanotypes "cyanotypes"
  956. with description
  957. "The earliest known photographic process still has some modern practitioners. Small sheets of white paper with mysterious blue marks all over them, like remnants of specimens.",
  958. name 'cyanotype' 'cyanotypes' 'blue' 'white' 'paper' 'cyan',
  959. after [;
  960. "You grab a handful off the floor, but there are more than you can ever hope to gather.";
  961. ],
  962. has pluralname;
  963. Passageway b_hall6 "B-Level: Elevator Area"
  964. with description [;
  965. print "A dead-end at a wide metal grate that stretches across the hallway, which continues north.^^An elevator is to the east, its doors stuck open. A door to the west leads to the shooting studio.";
  966. if (door_ss has open ) {
  967. style underline;
  968. print "^^Someone left the door open.";
  969. style roman;
  970. }
  971. new_line;
  972. rtrue;
  973. ],
  974. n_to b_hall5, w_to door_ss, e_to elevator,
  975. has ;
  976. Structure -> callbutton "call button"
  977. with description
  978. "A round button with an up arrow. It's unlit.",
  979. name 'button' 'call' 'up' 'arrow' 'buttons',
  980. before [;
  981. Touch, Push, Attack:
  982. "It flashes weakly when you touch it, but nothing else happens.^^The elevator is already here.";
  983. ],
  984. has ;
  985. Structure ele_doors "elevator doors"
  986. with description
  987. "The elevator doors are retracted into the wall, and refuse to close.",
  988. name 'door' 'doors' 'elevator' 'stuck' 'open',
  989. found_in b_hall6 elevator,
  990. before [;
  991. Open, Close:
  992. "They're firmly stuck open. At least you're not trapped inside.";
  993. Enter:
  994. if (location == b_hall6) <<Go e_obj>>;
  995. Exit:
  996. if (location == elevator) <<Go w_obj>>;
  997. ],
  998. has openable open;
  999. Room elevator "Elevator"
  1000. with description [;
  1001. print "A cramped elevator covered in rude graffiti. None of the buttons on the main panel are lit up, and the button next to the emergency help phone ";
  1002. if (ele_help.jammed ==1 ) {
  1003. print "appears jammed.";
  1004. } else {
  1005. print "looks promising.";
  1006. }
  1007. "^^The doors are stuck open, and lead west back to the hallway.";
  1008. ],
  1009. before [;
  1010. Exit:
  1011. <<Go w_obj>>;
  1012. ],
  1013. w_to b_hall6,
  1014. has ;
  1015. Structure -> ele_help "help phone"
  1016. with description [;
  1017. print "A red button labeled 'HELP' next to a speaker set into the wall.";
  1018. if (self.jammed) {
  1019. " It's currently jammed.";
  1020. }
  1021. new_line;
  1022. rtrue;
  1023. ],
  1024. name 'help' 'emergency' 'red' 'speaker' 'button' 'jammed' 'phone',
  1025. jammed 1,
  1026. before [;
  1027. Attack:
  1028. self.jammed = 0;
  1029. "You give the button a good smack, and it pops right back up.";
  1030. Touch, Push:
  1031. if (self.jammed == 0) {
  1032. "A brief pause, then static on the other end. Bummer.";
  1033. } else {
  1034. "The button is jammed too tightly. It probably needs a good punch.";
  1035. }
  1036. ],
  1037. has ;
  1038. Prop -> ele_graffiti "graffiti"
  1039. with description
  1040. "Someone peeled the paint off the elevator walls in precise shapes that resemble genitalia and wild animals.",
  1041. name 'graffiti' 'rude' 'paint' 'walls' 'wall' 'shape' 'dong' 'penis' 'butt' 'boobs' 'boob' 'dick' 'dicks' 'wang' 'animal' 'animals' 'butts' 'dongs',
  1042. has ;
  1043. Structure -> ele_buttons "floor buttons"
  1044. with description
  1045. "The main elevator panel has buttons for the following floors: 2B, 1B, 1, 2, 3, 4. It also has a 'door open' button.",
  1046. name 'panel' 'button' 'buttons' 'open' '2b' '1b' '1//' '2//' '3//' '4//' 'one' 'two' 'three' 'four' 'open' 'floor',
  1047. before [;
  1048. Touch, Push, Attack:
  1049. "The button clicks, but nothing happens.";
  1050. ],
  1051. has ;
  1052. Drain -> grate2 "grate"
  1053. with description
  1054. "A heavy metal grate, painted safety yellow, with holes so wide that a foot could easily slip into it. It covers a wide drain in the floor.",
  1055. name 'grate' 'metal' 'yellow' 'wide',
  1056. has ;
  1057. Drain -> -> drain2 "drain"
  1058. with description
  1059. "A wide drain that tapes into a 6~ pipe.",
  1060. name 'drain' 'hole',
  1061. has ;
  1062. OfficeDoorGreen door_ss "shooting studio door"
  1063. with description
  1064. "A green metal door.",
  1065. name 'door' 'green' 'metal' 'studio' 'shooting' 'ss' 'hall' 'hallway' 'west' 'w//',
  1066. found_in b_hall6 b_ss,
  1067. door_to [;
  1068. if (self in b_hall6) return b_ss;
  1069. else return b_hall6;
  1070. ],
  1071. door_dir [;
  1072. if (self in b_hall6) return w_obj;
  1073. else return e_obj;
  1074. ],
  1075. has ;
  1076. Room b_ss "B-Level: Shooting Studio"
  1077. with description[;
  1078. print "This lighting studio has seen more than any room should ever have to deal with. There was once a joke that a CCTV camera monitored the space to catch studio policy infractions, which was quickly met with backlash from art students who thought it was a safe place to hold naked photoshoots. ^^Now, the room is startlingly empty, except for a whiteboard on the wall near the door";
  1079. if (ladder in self) {
  1080. print ", and a ladder standing in the middle of the floor";
  1081. }
  1082. print ".^^The shadowy southern corner leads to a storage closet";
  1083. if (door_ssc has open ) {
  1084. print ", and the door is wide open";
  1085. }
  1086. ". A door east leads back to the hallway.";
  1087. ],
  1088. e_to door_ss, s_to door_ssc,
  1089. has ;
  1090. Prop -> ss_whiteboard "whiteboard"
  1091. with description [;
  1092. if (self.cleaned == 0) {
  1093. "Someone drew a map of the floor on the whiteboard, with big Xs over both stairwells and the emergency exit.";
  1094. } else {
  1095. "It's blank.";
  1096. }
  1097. ],
  1098. cleaned,
  1099. before [;
  1100. Rub:
  1101. if (self.cleaned > 0) {
  1102. "There's nothing on the whiteboard to clean.";
  1103. }
  1104. self.cleaned++;
  1105. "You run your hands all over the board until nothing remains.";
  1106. ],
  1107. name 'whiteboard' 'board' 'white' 'dry-erase',
  1108. has ;
  1109. Prop -> ss_camera "camera"
  1110. with description
  1111. "It was just a joke.",
  1112. name 'camera' 'cctv' 'monitor' 'security',
  1113. before [;
  1114. default:
  1115. "Really. Just a joke. There's no security camera here.";
  1116. ],
  1117. has ;
  1118. Takeable -> ladder "ladder"
  1119. with description
  1120. "A rickety wooden ladder.",
  1121. name 'ladder' 'rickety' 'wooden',
  1122. encumberance 10,
  1123. describe [;
  1124. if (location == b_ss) {
  1125. rtrue;
  1126. }
  1127. ],
  1128. before [;
  1129. Climb, Enter:
  1130. move player to self;
  1131. "You scramble up the ladder. It wobbles under you, but you manage to keep your balance.";
  1132. ],
  1133. has supporter enterable;
  1134. OfficeDoorGreen door_ssc "storage closet door"
  1135. with description
  1136. "A green metal door.",
  1137. name 'door' 'green' 'metal' 'storage' 'closet' 'south' 's//',
  1138. found_in b_ssc b_ss,
  1139. door_to [;
  1140. if (self in b_ss) return b_ssc;
  1141. else return b_ss;
  1142. ],
  1143. door_dir [;
  1144. if (self in b_ss) return s_obj;
  1145. else return n_obj;
  1146. ],
  1147. has ;
  1148. Room b_ssc "B-Level: Shooting Studio Closet"
  1149. with description
  1150. "You really don't want to know what's in here.^^A door north leads back to the shooting studio.",
  1151. n_to door_ssc,
  1152. before [;
  1153. Smell: "A heavy fragrance, like someone left a can of peaches open for a month and promptly forgot about it.";
  1154. Listen: "Ominous dripping, though nothing looks wet.";
  1155. ],
  1156. has ~light;
  1157. Takeable -> bluekey "shiny brass key"
  1158. with description
  1159. "A small, shiny brass key numbered 6002-M and labeled 'DO NOT DUPLICATE'.",
  1160. name 'key' 'brass' 'shiny' '6002' '6002-m',
  1161. encumberance 1,
  1162. has ;
  1163. Passageway b_hall7 "B-Level: Gallery Hall"
  1164. with description [;
  1165. print "This long, curving hallway has stark white walls full of pinholes and track lighting that makes the space way brighter than it needs to be.";
  1166. "^^Stairs up to A-level are to the east. The hallway continues northeast and northwest.";
  1167. ],
  1168. nw_to b_hall5, e_to b_astairs, ne_to b_hall8, u_to b_astairs,
  1169. has ;
  1170. Prop -> gallerywall "gallery wall"
  1171. with description
  1172. "The gallery walls are painted the purest of whites, pockmarked with small holes from years of student work being nailed up for display.",
  1173. name 'holes' 'pinholes' 'white' 'gallery' 'wall' 'walls' 'hole' 'pin',
  1174. has ;
  1175. Class BlueChair (9)
  1176. with description
  1177. "A blue plastic chair, made out of one smoothly rounded shape. It's not very comfortable for sitting on, and it looks like it belongs on the set of a children's television show.",
  1178. name 'blue' 'chair' 'unstacked' 'unstack',
  1179. short_name [;
  1180. if (self.location == b_hall7 ) { "unstacked chair"; }
  1181. "blue chair";
  1182. ],
  1183. plural [;
  1184. if (self.location == b_hall7) { "unstacked chairs"; }
  1185. "blue chairs";
  1186. ],
  1187. article "a",
  1188. before [;
  1189. PutOn:
  1190. if ((second ofclass BlueChair) || (second == chairstack)) {
  1191. "The thing with these chairs is that once unstacked, they are impossible to stack together again. Try as you might, you can't get the weirdly curved legs to fit together.";
  1192. }
  1193. Enter:
  1194. move player to self;
  1195. "You make an attempt to recline luxuriously on the chair, but it's really uncomfortable.";
  1196. ],
  1197. describe [;
  1198. if (player in self) {
  1199. "You're sitting on an uncomfortable blue chair.";
  1200. }
  1201. ],
  1202. encumberance 10,
  1203. has supporter enterable;
  1204. Object -> chairstack "stack of blue chairs"
  1205. with description [;
  1206. if (BlueChair.remaining() > 0 ) {
  1207. print "A stack of ";
  1208. print BlueChair.remaining();
  1209. " chairs.";
  1210. } else {
  1211. "A single chair that once supported a whole stack.";
  1212. }
  1213. ],
  1214. describe [;
  1215. if (BlueChair.remaining() > 1) {
  1216. "^A single column of blue chairs has been stacked neatly against the wall.";
  1217. } else {
  1218. "The chairs for the gallery area used to be stacked neatly against the wall, but only one of them is where it's supposed to be.";
  1219. }
  1220. ],
  1221. name 'stack' 'chair' 'chairs' 'blue' 'plastic',
  1222. before [ new_chair;
  1223. Take:
  1224. if (HANDS_FULL == 0) {
  1225. if (BlueChair.remaining() > 0) {
  1226. new_chair = BlueChair.create();
  1227. move new_chair to player;
  1228. HANDS_FULL = 1;
  1229. HEAVY_LOAD = new_chair;
  1230. if (BlueChair.remaining() > 0) {
  1231. "You separate a chair from the stack.";
  1232. } else {
  1233. remove self;
  1234. "You take the last chair from where the stack once was.";
  1235. }
  1236. }
  1237. }
  1238. ],
  1239. has static;
  1240. Room b_astairs "B-Level: Stairwell"
  1241. with description
  1242. "The top of the stairs has been heavily barricaded, and you have no hope of getting through.^^The hallway leads back to B-level to the west.",
  1243. w_to b_hall7, d_to b_hall7,
  1244. has ;
  1245. Passageway b_hall8 "B-Level: Hallway"
  1246. with description [;
  1247. print "A weirdly narrow hallway, which continues east and southwest.^^A door to the north leads to the letterpress lab. A door to the south leads to the letterpress office.";
  1248. if (door_lpl has open) {
  1249. style underline;
  1250. if (door_lpo has open) {
  1251. print "^^Someone left both doors open.";
  1252. } else {
  1253. print "^^Someone left the door to the letterpress lab open.";
  1254. }
  1255. style roman;
  1256. } else if (door_lpo has open ) {
  1257. style underline;
  1258. print "^^Someone left the door to the letterpress office open.";
  1259. style roman;
  1260. }
  1261. new_line;
  1262. rtrue;
  1263. ],
  1264. sw_to b_hall7, n_to door_lpl, s_to door_lpo, e_to b_hall9,
  1265. has ;
  1266. OfficeDoorBlue door_lpl "letterpress lab door"
  1267. with description
  1268. "A blue metal door",
  1269. name 'letterpress' 'lab' 'door' 'north' 'n//' 'blue',
  1270. found_in b_hall8 b_lpl,
  1271. door_to [;
  1272. if (self in b_hall8) return b_lpl;
  1273. else return b_hall8;
  1274. ],
  1275. door_dir [;
  1276. if (self in b_hall8) return n_obj;
  1277. else return s_obj;
  1278. ],
  1279. has ;
  1280. OfficeDoorBlue door_lpo "letterpress office door"
  1281. with description
  1282. "A blue metal door.",
  1283. name 'letterpress' 'office' 'door' 'south' 'blue' 'metal' 's//',
  1284. found_in b_hall8 b_lpo,
  1285. door_to [;
  1286. if (self in b_hall8) return b_lpo;
  1287. else return b_hall8;
  1288. ],
  1289. door_dir [;
  1290. if (self in b_hall8) return s_obj;
  1291. else return n_obj;
  1292. ],
  1293. has ;
  1294. Room b_lpl "B-Level: Letterpress Lab"
  1295. with description
  1296. "A room full of smashed presses and scattered type pieces. A door to the south leads back to the hallway.",
  1297. s_to b_hall8,
  1298. has ;
  1299. Room b_lpo "B-Level: Letterpress Office"
  1300. with description
  1301. "A room full of scattered unbound books. A door to the east leads to a small closet. A door to the north leads back to the hallway.",
  1302. n_to b_hall8, e_to door_lpoc,
  1303. has ;
  1304. OfficeDoorBlue door_lpoc "letterpress closet"
  1305. with description
  1306. "A blue metal door.",
  1307. name 'closet' 'door' 'lettepress',
  1308. found_in b_lpo b_lpoc,
  1309. door_to [;
  1310. if (self in b_lpo) return b_lpoc;
  1311. else return b_lpo;
  1312. ],
  1313. door_dir [;
  1314. if (self in b_lpo) return e_obj;
  1315. else return w_obj;
  1316. ],
  1317. has ;
  1318. Room b_lpoc "B-Level: Letterpress Office Closet"
  1319. with description
  1320. "A cramped, dark space full of empty boxes. A door to the south doesn't seem like it should lead anywhere. A door to the west leads back to the letterpress office.",
  1321. w_to door_lpoc, s_to door_hole,
  1322. has ;
  1323. OfficeDoorBlue door_hole "mystery door"
  1324. with description
  1325. "A blue metal door.",
  1326. name 'blue' 'door' 'mystery',
  1327. found_in b_lpoc b_hole,
  1328. door_to [;
  1329. if (self in b_lpoc) return b_hole;
  1330. else return b_lpoc;
  1331. ],
  1332. door_dir [;
  1333. if (self in b_lpoc) return s_obj;
  1334. else return n_obj;
  1335. ],
  1336. has ~locked;
  1337. Room b_hole "B-Level: ?????????"
  1338. with description
  1339. "A wall of rock that was dumped here some time ago. A door to the north leads back to the letterpress closet.",
  1340. n_to door_hole,
  1341. has ;
  1342. Passageway b_hall9 "B-Level: Hallway"
  1343. with description [;
  1344. print "The hallway turns here, continuing west and north. A door to the south leads to the Reese Office. A door to the east leads to the Reese Lab.";
  1345. if (door_ro has open) {
  1346. style underline;
  1347. if (door_reese has open) {
  1348. print "^^Someone left both doors open.";
  1349. } else {
  1350. print "^^Someone left the door to the Reese Office open.";
  1351. }
  1352. style roman;
  1353. } else if (door_reese has open ) {
  1354. style underline;
  1355. print "^^Someone left the door to the Reese Lab open.";
  1356. style roman;
  1357. }
  1358. new_line;
  1359. rtrue;
  1360. ],
  1361. each_turn [;
  1362. if (dlab_alarm has on) {
  1363. box "!!ALARM ALARM ALARM!!";
  1364. style underline;
  1365. print "^The security alarm is making an awful racket!";
  1366. style roman;
  1367. }
  1368. ],
  1369. w_to b_hall8, s_to door_ro, e_to door_reese, n_to b_hall10,
  1370. has ;
  1371. OfficeDoorBlue door_ro "Reese office door"
  1372. with description
  1373. "A blue metal door.",
  1374. name 'blue' 'door' 'metal' 'reese' 'office' 'south' 's//',
  1375. found_in b_hall9 b_ro,
  1376. door_to [;
  1377. if (self in b_hall9) return b_ro;
  1378. else return b_hall9;
  1379. ],
  1380. door_dir [;
  1381. if (self in b_hall9) return s_obj;
  1382. else return n_obj;
  1383. ],
  1384. has ;
  1385. Room b_ro "B-Level: Reese Office"
  1386. with description
  1387. "A room full of potted plants that are somehow thriving. A door to the north leads back to the hallway.",
  1388. n_to door_ro,
  1389. has ;
  1390. OfficeDoorBlue door_reese "Reese Lab door"
  1391. with description
  1392. "A blue metal door with a wide window.",
  1393. name 'blue' 'metal' 'door' 'reese' 'lab' 'east' 'e//',
  1394. found_in b_hall9 b_reese,
  1395. door_to [;
  1396. if (self in b_hall9) return b_reese;
  1397. else return b_hall9;
  1398. ],
  1399. door_dir [;
  1400. if (self in b_hall9) return e_obj;
  1401. else return w_obj;
  1402. ],
  1403. has ;
  1404. Room b_reese "B-Level: Reese Lab"
  1405. with description
  1406. "A room full of abandoned printouts and smashed iMacs. A door to the west leads back to the hallway.",
  1407. w_to door_reese,
  1408. has ;
  1409. Passageway b_hall10 "B-Level: Hallway"
  1410. with description [;
  1411. print "The hallway dead-ends at an emergency exit to the east. A door to the north leads to the digital lab. The hallway continues south.";
  1412. if (door_dlab has open ) {
  1413. style underline;
  1414. print "^^Someone left the door open.";
  1415. style roman;
  1416. }
  1417. new_line;
  1418. rtrue;
  1419. ],
  1420. each_turn [;
  1421. if (dlab_alarm has on) {
  1422. box "!!ALARM ALARM ALARM!!";
  1423. style underline;
  1424. print "^The security alarm is making an awful racket!";
  1425. style roman;
  1426. }
  1427. ],
  1428. s_to b_hall9, n_to door_dlab,
  1429. has ;
  1430. Prop fake_dlabalarm "security alarm"
  1431. with description
  1432. "The alarm is in the digital lab.",
  1433. name 'alarm' 'security',
  1434. found_in [;
  1435. if (dlab_alarm has on){
  1436. if (door_dlab has open) {
  1437. if ((location == b_hall10) || (location == b_hall9) || (location == b_hall8) || (location == b_hall7)){
  1438. rtrue;
  1439. } else { rfalse; }
  1440. } else {
  1441. return "b_hall10 b_hall9";
  1442. }
  1443. } else {
  1444. return false;
  1445. }
  1446. ],
  1447. each_turn [;
  1448. if ((dlab_alarm has on) && (self in location)) {
  1449. box "!!ALARM ALARM ALARM!!";
  1450. style underline;
  1451. print "^The security alarm is making an awful racket!";
  1452. style roman;
  1453. new_line;
  1454. rtrue;
  1455. }
  1456. ],
  1457. has ;
  1458. BarricadeDoor -> exitdoor "emergency exit door"
  1459. with description
  1460. "A heavy metal door, painted green, and labeled 'EMERGENCY EXIT.",
  1461. name 'heavy' 'metal' 'green' 'emergency' 'exit' 'barricade' 'east' 'e//' 'door',
  1462. has transparent;
  1463. OfficeDoorGreen door_dlab "Digital Lab door"
  1464. with description
  1465. "A blue metal door with a wide window.",
  1466. name 'digital' 'lab' 'dlab' 'door' 'blue' 'metal' 'north' 'n//',
  1467. found_in b_hall10 b_dlab,
  1468. door_to [;
  1469. if (self in b_hall10) return b_dlab;
  1470. else return b_hall10;
  1471. ],
  1472. door_dir [;
  1473. if (self in b_hall10) return n_obj;
  1474. else return s_obj;
  1475. ],
  1476. after [;
  1477. Open:
  1478. if ((location == b_hall10) && (dlab_alarm.armed) && (dlab_alarm hasnt on)) {
  1479. give dlab_alarm on;
  1480. box "!!ALARM ALARM ALARM!!";
  1481. style underline;
  1482. print "^You set off the security alarm!";
  1483. style roman;
  1484. new_line;
  1485. rtrue;
  1486. }
  1487. ],
  1488. before [;
  1489. Push:
  1490. "(if you meant to push the button on the keypad, type 'push button 1'!)";
  1491. ],
  1492. has ;
  1493. Room b_dlab "B-Level: Digital Lab"
  1494. with description
  1495. "A room full of computers under plastic tarps. A door to the south leads back to the hallway.",
  1496. s_to door_dlab,
  1497. has ;
  1498. Alarm -> dlab_alarm "digital lab alarm"
  1499. with armed 1,
  1500. has ;
  1501. AlarmButton -> -> dlab_1 "1 button"
  1502. with description "A rubbery button with the number 1 printed on it.",
  1503. name '1//' 'button' 'one',
  1504. key b1,
  1505. has ;
  1506. AlarmButton -> -> dlab_2 "2 button"
  1507. with description "A rubbery button with the number 2 printed on it.",
  1508. name '2//' 'button',
  1509. key b2,
  1510. has ;
  1511. AlarmButton -> -> dlab_3 "3 button"
  1512. with description "A rubbery button with the number 3 printed on it.",
  1513. name '3//' 'button',
  1514. key b3,
  1515. has ;
  1516. AlarmButton -> -> dlab_4 "4 button"
  1517. with description "A rubbery button with the number 4 printed on it.",
  1518. name '4//' 'button',
  1519. key b4,
  1520. has ;
  1521. AlarmButton -> -> dlab_5 "5 button"
  1522. with description "A rubbery button with the number 5 printed on it.",
  1523. name '5//' 'button',
  1524. key b5,
  1525. has ;
  1526. AlarmButton -> -> dlab_6 "6 button"
  1527. with description "A rubbery button with the number 6 printed on it.",
  1528. name '6//' 'button',
  1529. key b6,
  1530. has ;
  1531. AlarmButton -> -> dlab_7 "7 button"
  1532. with description "A rubbery button with the number 7 printed on it.",
  1533. name '7//' 'button',
  1534. key b7,
  1535. has ;
  1536. AlarmButton -> -> dlab_8 "8 button"
  1537. with description "A rubbery button with the number 8 printed on it.",
  1538. name '8//' 'button',
  1539. key b8,
  1540. has ;
  1541. AlarmButton -> -> dlab_9 "9 button"
  1542. with description "A rubbery button with the number 9 printed on it.",
  1543. name '9//' 'button',
  1544. key b9,
  1545. has ;
  1546. AlarmButton -> -> dlab_0 "0 button"
  1547. with description "A rubbery button with the number 0 printed on it.",
  1548. name '0//' 'button',
  1549. key b0,
  1550. has ;
  1551. AlarmButton -> -> dlab_pound "# button"
  1552. with description "A rubbery button with a # printed on it.",
  1553. name '#//' 'button',
  1554. key bp,
  1555. has ;
  1556. AlarmButton -> -> dlab_star "* button"
  1557. with description "A rubbery button with a * printed on it.",
  1558. name '*//' 'button',
  1559. key ba,
  1560. has ;
  1561. !=======other bs=============
  1562. !=======menus================
  1563. Menu about_menu "Underground";
  1564. Option -> "Info"
  1565. with description "This is a map of Margaret Morrison Carnegie Hall, an actual building that exists in the world. Some details are omitted or modified in this representation.^
  1566. ^To nagivate, type cardinal directions (n, s, e, w, ne, se, nw, se).^
  1567. ^If you get lost, I'm sorry.^
  1568. ^Pretty standard IF controls apply.^
  1569. ^If you are new to IF, type commands like 'examine' (abbreviated to 'x') for any noun you see in your environment to get a closer look, 'take' to attempt to move something to your inventory, 'inv' or 'i' to check your inventory, 'drop' to get rid of something.^
  1570. ^You can also 'switch on' some things, 'drop (noun) into (noun)', 'look in/on (noun)', 'open/close', 'lock/unlock', 'smell', 'listen', 'taste', 'climb', and plenty more commands.";
  1571. Option -> "Credits"
  1572. with description "By Vincent Zeng [hvincent@@64modgethanc.com], residing quartermaster (yes, that's my office you're messing with).^
  1573. ^Beta-tested by various patient friends and faculty, including Jamie, Leo, and gwillen.";
  1574. Verb 'help' 'about' 'menu' 'hints' 'info' 'credits' 'author'
  1575. * -> Help;
  1576. [ HelpSub;
  1577. about_menu.select();
  1578. ];
  1579. !=======initializing==========
  1580. [ Initialise ;
  1581. location = b_hall10;
  1582. lookmode = 2;
  1583. player.description = "You are awesome.";
  1584. move greenkey to player;
  1585. ];