beproductive.inf 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. !% -SD
  2. Constant Story "Be Productive";
  3. Constant Headline "^A game about work ethic^
  4. ^By Vincent Zeng^^";
  5. !Release 1;
  6. Release 2;
  7. Include "Parser";
  8. Include "VerbLib";
  9. Include "Grammar";
  10. Include "Menus";
  11. Constant MAX_TURNS = 50;
  12. Constant No_score;
  13. !=== classes
  14. Class Room
  15. with cant_go
  16. "You can't go that way.",
  17. each_turn [;
  18. if (turns >= MAX_TURNS) {
  19. deadflag = 3;
  20. "^The bell sounds to conclude work. The door to your workstation unlocks. The drone arrives to take you to your sleeping quarters. ^
  21. ^You produced ", productivity.productsCompleted, " products. Ask yourself if you are proud, and return again in the morning.";
  22. }
  23. if (random(6) == 1) {
  24. print "^The monitor beeps.^";
  25. font off;
  26. box "!!REMAIN PRODUCTIVE!!";
  27. font on;
  28. }
  29. ],
  30. before [;
  31. Listen:
  32. if (noun == false)
  33. "An anxious buzzing.";
  34. Smell:
  35. if (noun == false)
  36. "An impatient tapping.";
  37. Wait:
  38. if (noun == false)
  39. "The monitor blinks impatiently.";
  40. ],
  41. has light;
  42. Class Product (MAX_TURNS)
  43. with description
  44. "A completed product.",
  45. name 'product' 'complete',
  46. plural "products",
  47. short_name "product",
  48. before [;
  49. Take:
  50. "Leave it there for the drones.";
  51. Examine:
  52. default:
  53. "Not for you to worry about.";
  54. ],
  55. has ;
  56. Class PartA (MAX_TURNS)
  57. with description
  58. "A whirlfly for assembly. It has a notch for a stargrab.",
  59. name 'whirlfly' 'fly' 'whirl',
  60. plural "whirlflies",
  61. short_name "whirlfly",
  62. before [new_product;
  63. Take:
  64. "You hold it uselessly in one hand for a moment, then put it back down. You'll need both hands free to assemble parts.";
  65. Tie, Insert:
  66. if (second ofclass PartB) {
  67. new_product = Product.create();
  68. move new_product to location;
  69. print "^You make a new product and let it drop to the floor.^";
  70. productivity.productsCompleted++;
  71. remove self;
  72. remove second;
  73. return true;
  74. } else {
  75. "Those aren't compatible.";
  76. }
  77. Listen:
  78. "A quiet whirling sound that you can only hear if you get very close.";
  79. Taste:
  80. "A slight tang of escamism.";
  81. Smell:
  82. "A void.";
  83. Think:
  84. "It's a smaller part of a larger whole. It wants to be combined with a stargrab.";
  85. ],
  86. after [;
  87. ! Drop:
  88. ! self.short_name = "dropped whirlfly";
  89. ! self.plural = "dropped whirlflies";
  90. ! Take:
  91. ! self.short_name = "part";
  92. ! self.plural = "parts";
  93. ],
  94. has ;
  95. Class PartB (MAX_TURNS)
  96. with description
  97. "A stargrab for assembly. It has a protrusion for a whirlfly.",
  98. name 'stargrab' 'star' 'grab',
  99. plural "stargrabs",
  100. short_name "stargrab",
  101. before [new_product;
  102. Take:
  103. "You hold it uselessly in one hand for a moment, then put it back down. You'll need both hands free to assemble parts.";
  104. Tie, Insert:
  105. if (second ofclass PartA) {
  106. new_product = Product.create();
  107. move new_product to location;
  108. print "^You make a new product and let it drop to the floor.^";
  109. productivity.productsCompleted++;
  110. remove self;
  111. remove second;
  112. return true;
  113. } else {
  114. "Those aren't compatible.";
  115. }
  116. Listen:
  117. "A desperate pulsing.";
  118. Taste:
  119. "The worst you've ever tasted.";
  120. Smell:
  121. "Infinity.";
  122. Think:
  123. "It's a smaller part of a larger whole. It wants to be combined with a whirlfly.";
  124. ],
  125. has ;
  126. Class PartC (MAX_TURNS)
  127. with description
  128. "A jumpbolt for assembly. It doesn't seem to fit anything.",
  129. name 'bolt' 'jump' 'jumpbolt',
  130. plural "jumpbolts",
  131. short_name "jumpbolt",
  132. before [;
  133. Take:
  134. "You hold it uselessly in one hand for a moment, then put it back down. You'll need both hands free to assemble parts.";
  135. Tie, Insert:
  136. "Those aren't compatible.";
  137. Listen:
  138. "A long pause.";
  139. Taste:
  140. "Hopeful and familiar.";
  141. Smell:
  142. "Mysterious.";
  143. Think:
  144. "It's a smaller part of a larger whole, but you can't quite figure out why it's here.";
  145. ],
  146. has ;
  147. Class Readout
  148. with before [;
  149. Examine:
  150. style reverse;
  151. font off;
  152. default:
  153. "Just read it.";
  154. ],
  155. after [;
  156. Examine:
  157. font on;
  158. style roman;
  159. ],
  160. has ;
  161. Class Concept
  162. with before [;
  163. Examine:
  164. Think:
  165. print_ret (string) self.description;
  166. default:
  167. "...";
  168. ],
  169. found_in [;
  170. return true;
  171. ],
  172. has scenery;
  173. !=== rooms
  174. Room workstation "Your workstation"
  175. with description
  176. "The room is small and distraction-free. The conveyor belt gently whirs from an opening in one wall to an opening in the other, under the flickering monitor that faces you. The door is behind you, securely closed.",
  177. before [;
  178. Look:
  179. Jump, Sing, Go, Exit, Desperate, Sleep, Open, Strong, Mild, Attack, Climb, Dig, Eat, Rub, Pray:
  180. !default:
  181. font off;
  182. box "!!DO NOT ENGAGE IN UNPRODUCTIVE BEHAVIORS!!";
  183. font on;
  184. "The monitor sounds an ugly note before you can manage that.";
  185. ],
  186. has ;
  187. Object station "workstation" workstation
  188. with description
  189. "A small space next to a monitor and a conveyor belt for you to do your work.",
  190. name 'station' 'workstation' 'room',
  191. before [;
  192. Think:
  193. "You've been assigned to this workstation for as long as you can remember. Even though it is supposed to be functionally identical to every other workstation, there is something about it that is undoutably yours. The smells and sounds that drift through are subtle, but can never be completely erradicated.";
  194. ],
  195. has scenery;
  196. Object stool "stool" workstation
  197. with description
  198. "A solid piece of metal rising from the floor, contoured to support limbs not critical for work.",
  199. name 'stool' 'metal' 'chair' 'seat',
  200. initial
  201. "You are comfortable on your stool.",
  202. before [;
  203. Taste:
  204. "You can't bend over far enough to taste it.";
  205. Smell:
  206. "You can't bend over far enough to smell it.";
  207. Listen:
  208. "Silent and steady.";
  209. Think:
  210. "Sometimes you're not sure if the stool has been matched to you, or if you have been matched to the stool.";
  211. ],
  212. has static supporter enterable;
  213. Object conveyorbelt "conveyor belt" workstation
  214. with description
  215. "A 6-inch wide nonslip-textured belt that feeds from right to left.",
  216. name 'belt' 'conveyor',
  217. each_turn[ new_part part;
  218. if (random(3) <= 1) {
  219. part = random(3);
  220. switch (part) {
  221. 1:
  222. new_part = PartA.create();
  223. style bold;
  224. print "^A new whirlfly appears on the belt.^";
  225. style roman;
  226. 2:
  227. new_part = PartB.create();
  228. style bold;
  229. print "^A new stargrab appears on the belt.^";
  230. style roman;
  231. 3:
  232. new_part = partC.create();
  233. style bold;
  234. print "^A new jumpbolt appears on the belt.^";
  235. style roman;
  236. }
  237. move new_part to self;
  238. rtrue;
  239. }
  240. ],
  241. before [;
  242. Listen:
  243. "It hums impatiently as it moves.";
  244. Smell:
  245. "Anxious movement whistles past your nose.";
  246. Taste:
  247. "You'd hurt yourself if you tried.";
  248. Think:
  249. "You're not sure how long the belt extends beyond your room. Something about it always feels unfair to you.";
  250. Touch:
  251. "You pull back your hand before you make contact. It might hurt.";
  252. ],
  253. has static scenery supporter transparent;
  254. Object floor "floor" workstation
  255. with description
  256. "Polished white tile.",
  257. name 'floor' 'ground' 'tile',
  258. before [;
  259. Listen:
  260. "Clicking noises reverberate.";
  261. Smell:
  262. "Like the bottoms of your feet, or the tread of the drone.";
  263. Taste:
  264. "Don't do that.";
  265. Think:
  266. "Such a stable, supportive thing in your life.";
  267. ],
  268. has scenery;
  269. Object ceiling "ceiling" workstation
  270. with description
  271. "Prisitine white plaster, out of your reach.",
  272. name 'ceiling' 'roof' 'plaster',
  273. before [;
  274. Listen:
  275. "A distant thrum.";
  276. Smell, Taste:
  277. "If only you could reach.";
  278. Think:
  279. "How high does the ceiling reach? Have you ever tried to touch it?";
  280. Touch:
  281. "It's out of reach. You've never been tall enough.";
  282. ],
  283. has scenery;
  284. Object walls "walls" workstation
  285. with description
  286. "Pristine white plaster everywhere you look.",
  287. name 'wall' 'walls' 'plaster',
  288. before [;
  289. Listen:
  290. "A muffled chatter.";
  291. Smell:
  292. "Clean.";
  293. Taste:
  294. "Don't do that.";
  295. Think:
  296. "You're glad the walls contain you.";
  297. ],
  298. has scenery;
  299. Object lightsource "light" workstation
  300. with description
  301. "A crisp, neutral glow that produces ideal ilumination.",
  302. name 'light',
  303. before [;
  304. Think:
  305. "If there was no light, no one would be able to see you.";
  306. ],
  307. has scenery;
  308. Object air "air" workstation
  309. with description
  310. "Calculated freshness.",
  311. name 'air' 'atmosphered',
  312. before [;
  313. Think:
  314. "It's good.";
  315. ],
  316. has scenery;
  317. Object stationdoor "door" workstation
  318. with description
  319. "The door out of your workstation. You know that's where the drone comes from.",
  320. name 'door' 'exit',
  321. before [;
  322. Think:
  323. "You wouldn't even consider trying to operate the door without authority.";
  324. ],
  325. door_dir n_to,
  326. has door lockable locked scenery static openable;
  327. Object left_opening "left side opening" workstation
  328. with description
  329. "A 6-inch by 4-inch hole into which the conveyor belt feeds.",
  330. name 'left' 'opening' 'side' 'hole',
  331. before [;
  332. Listen:
  333. "A cozy hum.";
  334. Smell:
  335. "An expected scent.";
  336. Enter:
  337. "Too small.";
  338. Think:
  339. "You've never wondered where this goes.";
  340. ],
  341. has scenery;
  342. Object right_opening "right side opening" workstation
  343. with description
  344. "A 6-inch by 4-inch hole from which the conveyor belt feeds.",
  345. name 'right' 'opening' 'side' 'hole',
  346. before [;
  347. Listen:
  348. "A gentle hum.";
  349. Smell:
  350. "A comforting scent.";
  351. Enter:
  352. "Too small.";
  353. Think:
  354. "You've never wondered where this comes from.";
  355. ],
  356. has scenery;
  357. Object monitor "monitor" workstation
  358. with description
  359. "A small, glowing screen embedded in the wall that displays your current directive and a report of your productivity.",
  360. name 'monitor' 'screen' 'display' 'computer',
  361. initial
  362. "The monitor awaits your activity.",
  363. before [;
  364. Think:
  365. "Isn't is wonderful how informative and observant it is?";
  366. Listen:
  367. "It waits silently.";
  368. Smell:
  369. "It waits.";
  370. Taste:
  371. "It waits.";
  372. Touch:
  373. "It's warm.";
  374. ],
  375. has static light transparent;
  376. Readout productivity "productivity" monitor
  377. with description
  378. "| CURRENT PRODUCTIVITY: | ",
  379. name 'productivity' 'current' 'progress' 'meter' 'report',
  380. productsCompleted 0,
  381. before [;
  382. Think:
  383. print_ret "You wonder how much work you should do.";
  384. ],
  385. after [;
  386. Examine:
  387. print "| ";
  388. print self.productsCompleted;
  389. if (self.productsCompleted < 10){
  390. print " ";
  391. }
  392. print " | ";
  393. font on;
  394. style roman;
  395. ],
  396. has ;
  397. Readout directive "directive" monitor
  398. with description
  399. "| HELLO. YOUR PARTS FOR ASSEMBLY WILL AUTOMATICALLY APPEAR. |
  400. ^| PLEASE PRODUCE AS MANY PRODUCTS AS YOU ARE ABLE. |
  401. ^| FOR ASSISTANCE, REFER TO THE HELPER DRONE. | ",
  402. name 'directive' 'instructions' 'order' 'orders' 'instruction',
  403. before [;
  404. Think:
  405. "You better do as the directive requires.";
  406. ],
  407. has ;
  408. Object drone "drone" workstation
  409. with description
  410. "It's not here.",
  411. name 'drone' 'robot' 'helper' 'assistance',
  412. before [;
  413. Think:
  414. "The drone does exactly what the drone does.";
  415. default:
  416. "The drone's not here.";
  417. ],
  418. has concealed;
  419. Object limbs "limbs" workstation
  420. with description
  421. "You have four limbs, but only two of them are critical for work. The other two dangle uselessly over the edge of the stool.",
  422. name 'limbs' 'limb' 'leg' 'legs' 'foot' 'feet' 'arm' 'arms' 'hand' 'hands' 'wrist' 'wrists',
  423. before [;
  424. Think:
  425. "What nice things to have.";
  426. ],
  427. has scenery;
  428. Concept work "work"
  429. with description
  430. "There is little to do besides work. This is your life as it exists.",
  431. name 'work' 'duty' 'task' 'project' 'exist',
  432. has ;
  433. Concept yourlife "life"
  434. with description
  435. "Your life is work. Your life is free.",
  436. name 'life',
  437. has ;
  438. Concept freedom "freedom"
  439. with description
  440. "You are free to choose. You are free to do as you wish. You are free to work. You are free to be happy.",
  441. name 'free' 'freedom' 'choice' 'wish' 'desire' 'choose',
  442. has ;
  443. Concept happy "happiness"
  444. with description
  445. "You are as happy as you think you are.",
  446. name 'happy' 'joy' 'happiness' 'bliss',
  447. has ;
  448. Concept thinking "thought"
  449. with description
  450. "Thought is free. You can think.",
  451. name 'think' 'thought' 'mind',
  452. has ;
  453. Concept information "information"
  454. with description
  455. "The monitor is the only authorized source of information.",
  456. name 'information' 'info' 'authority' 'authorized',
  457. has ;
  458. Concept observation "observation"
  459. with description
  460. "The monitor is the only true observer.",
  461. name 'observation' 'observe' 'watcher' 'watch' 'them' 'they',
  462. has ;
  463. Concept activity "activity"
  464. with description
  465. "There is always someting that could be done.",
  466. name 'activity' 'busy' 'movement',
  467. has ;
  468. !=== extra grammar
  469. Verb 'flail' 'panic' 'thrash' 'curse' 'scream' 'yell' 'holler'
  470. * -> Desperate;
  471. [ DesperateSub;
  472. print_ret "...";
  473. ];
  474. Verb 'combine' 'notch' 'assemble' 'make'
  475. * noun 'with' noun -> Tie
  476. * noun 'and' noun -> Tie
  477. * noun 'to' noun -> Tie;
  478. Verb 'consider' 'ponder' 'wonder' 'cogitate'
  479. * 'about' noun -> Think
  480. * noun -> Think;
  481. Verb 'help' 'info' 'about' 'why' 'how' 'what' 'hints' 'spoiler' 'credits' 'walkthrough'
  482. * -> About;
  483. [ AboutSub;
  484. turns--;
  485. about_menu.select();
  486. ];
  487. Menu about_menu "Be Productive";
  488. Option -> "ABOUT"
  489. with description
  490. "This is a small game about how much you are willing to work.^
  491. ^Originally put together as a submission to Method&Apparatus (http://methodandapparat.us) Fall 2014.";
  492. Option -> "GAMEPLAY"
  493. with description
  494. "Standard interactive fiction controls apply here. ^
  495. ^You can examine your surroundings by typing 'look' (abbreviated as 'l'), or examine specific objects by typing 'x (object)'.^
  496. ^Your non-visual senses are applicable as well; you can 'smell (object)' and 'listen to (object)' and 'taste (object)'.^
  497. ^You can also 'consider (object)' or 'attach (object) to (object)'.^
  498. ^Time is always passing.";
  499. Option -> "SPOILERS"
  500. with description
  501. "There are three different types of objects that will appear on the belt. Type 'combine (one object) with (another object)' to make a new thing.^
  502. ^The only objects that can combine are the stargrab and the whirlfly.^
  503. ^The drone never arrives.^
  504. ^The only person who cares what your productivity value is is you. There is no real 'win' state.";
  505. Option -> "CREDITS"
  506. with description
  507. "Vincent Zeng is hvincent@@64modgethanc.com; bugs and reactions are welcome through email.";
  508. !=== initialization
  509. [ Initialise ;
  510. location = stool;
  511. player.description = "You don't need to worry about yourself.";
  512. ];