a munch adventure
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

1114 行
40 KiB

  1. (() => {
  2. function checkSuspicion(add = 0) {
  3. const old = getStat("suspicion");
  4. if (add >= 0) {
  5. add *= state.info.awareness.value;
  6. }
  7. changeStat("suspicion", add);
  8. if (getStat("suspicion") >= 100) {
  9. print(["Geta spots you!", "You're snatched up and tossed into the fox's bowl of cereal."]);
  10. goToRoom("in-bowl");
  11. return false;
  12. } else if (getStat("suspicion") >= 75 && old < 75) {
  13. print(["The fox is very suspicious. You're going to get caught if you keep this up..."]);
  14. }
  15. return true;
  16. }
  17. function randomBodyPart() {
  18. const choices = Object.entries(state.player.limbs).filter(([name, status]) => {
  19. return status;
  20. }).map(([name, status]) => name);
  21. return choices[Math.floor(Math.random() * choices.length)];
  22. }
  23. function limbsLost() {
  24. return Object.entries(state.player.limbs).filter(([name, status]) => {
  25. return !status;
  26. }).length;
  27. }
  28. function statLerp(stat, change, duration) {
  29. // pretty sure this'll be a random id...
  30. const id = new Date().getTime() + Math.random();
  31. const iterations = duration / 1000 * 60;
  32. startTimer({
  33. id: id,
  34. func: () => {
  35. changeStat(stat, change / iterations);
  36. return true;
  37. },
  38. delay: 1000 / 60,
  39. loop: true,
  40. classes: [
  41. ]
  42. });
  43. startTimer({
  44. id: id + "-stopper",
  45. func: () => {
  46. stopTimer(id);
  47. return false;
  48. },
  49. delay: duration,
  50. loop: false,
  51. classes: [
  52. ]
  53. });
  54. }
  55. const limbs = {
  56. head: "head",
  57. leftArm: "left arm",
  58. rightArm: "right arm",
  59. leftLeg: "left leg",
  60. rightLeg: "right leg"
  61. };
  62. stories.push({
  63. "id": "geta-unaware",
  64. "name": "Geta's Breakfast",
  65. "tags": [
  66. "Player Prey",
  67. "Digestion",
  68. "Macro/Micro",
  69. "Hard Vore"
  70. ],
  71. "intro": {
  72. "start": "pepper-grinder",
  73. "setup": () => {
  74. state.info.awareness = {
  75. id: "awareness",
  76. name: "Geta's Awareness",
  77. type: "counter",
  78. value: 1,
  79. get render() {
  80. if (this.value < 1) {
  81. return "Distracted";
  82. } else if (this.value == 1) {
  83. return "Normal"
  84. } else {
  85. return "Alert"
  86. }
  87. }
  88. }
  89. state.geta = {};
  90. state.player.stats.health = { name: "Health", type: "meter", value: 100, min: 0, max: 100, color: "rgb(255,55,55)" };
  91. state.player.stats.suspicion = { name: "Suspicion", type: "meter", value: 0, min: 0, max: 100, color: "rgb(100,100,100)" };
  92. state.player.stats.mawPos = { "name": "Struggle", "type": "meter", "value": 0.5, "min": 0, "max": 1, "color": "rgb(0,255,0)", hidden: true }
  93. state.info.time.value = 60 * 60 * 7 + 60 * 17;
  94. state.player.limbs = {};
  95. state.player.limbs.head = true;
  96. state.player.limbs.leftArm = true;
  97. state.player.limbs.rightArm = true;
  98. state.player.limbs.leftLeg = true;
  99. state.player.limbs.rightLeg = true;
  100. startTimer({
  101. id: "clock",
  102. func: () => {
  103. state.info.time.value += 1;
  104. state.info.time.value %= 86000;
  105. return true;
  106. },
  107. delay: 1000,
  108. loop: true,
  109. classes: [
  110. ]
  111. });
  112. startTimer({
  113. id: "suspicion-decay",
  114. func: () => {
  115. checkSuspicion(-0.1);
  116. return true;
  117. },
  118. delay: 100,
  119. loop: true,
  120. classes: [
  121. "free"
  122. ]
  123. });
  124. startTimer({
  125. id: "timeout",
  126. func: () => {
  127. if (state.info.time.value == 60 * 60 * 7 + 60 * 19) {
  128. print(["The fox is almost done with his breakfast..."]);
  129. }
  130. if (state.info.time.value >= 60 * 60 * 7 + 60 * 20) {
  131. print(["Time's up! In you go."]);
  132. goToRoom("maw");
  133. return false;
  134. }
  135. return true;
  136. },
  137. delay: 1000,
  138. loop: true,
  139. classes: [
  140. "free"
  141. ]
  142. });
  143. startTimer({
  144. id: "geta-action",
  145. func: () => {
  146. const random = Math.random();
  147. if (random < 0.7) {
  148. print(["Geta slurps up a spoonful of cereal."]);
  149. return Math.random() * 3000 + 3000
  150. } else if (random < 0.9) {
  151. state.info.awareness.value = 0.1;
  152. print(["The fox yawns and stretches."]);
  153. startTimer({
  154. id: "yawn-end",
  155. func: () => {
  156. print(["Geta finishes his stretch"]);
  157. state.info.awareness.value = 1;
  158. return true;
  159. },
  160. delay: 5000,
  161. loop: false,
  162. classes: [
  163. "free"
  164. ]
  165. });
  166. return Math.random() * 3000 + 5000
  167. } else {
  168. state.info.awareness.value = 2;
  169. print(["Geta narrows his eyes and looks around the table. Something seems off to him..."]);
  170. startTimer({
  171. id: "squint-end",
  172. func: () => {
  173. print(["He goes back to his breakfast."]);
  174. state.info.awareness.value = 1;
  175. return true;
  176. },
  177. delay: 5000,
  178. loop: false,
  179. classes: [
  180. "free"
  181. ]
  182. });
  183. return Math.random() * 1000 + 6000
  184. }
  185. },
  186. delay: 5000,
  187. loop: true,
  188. classes: [
  189. "free"
  190. ]
  191. });
  192. },
  193. "intro": () => {
  194. print(["Game started", newline, "Exposition goes here later."]);
  195. }
  196. },
  197. "sounds": [
  198. "loop/stomach.ogg",
  199. "sfx/absorb.ogg",
  200. "sfx/swallow.ogg"
  201. ],
  202. "preload": [
  203. ],
  204. "refresh": () => {
  205. setBackgroundColor(50 - state.player.stats.health.value / 2, 0, 0);
  206. },
  207. "world": {
  208. "pepper-grinder": {
  209. "id": "pepper-grinder",
  210. "name": "Pepper Grinder",
  211. "desc": "You're hiding behind a pepper grinder",
  212. "move": (room) => {
  213. print(["You dart over to the pepper grinder, which looms over you like a greatwood."]);
  214. },
  215. "enter": (room) => {
  216. },
  217. "exit": (room) => {
  218. },
  219. "actions": [
  220. {
  221. name: "Tap",
  222. desc: "Bang on the pepper shaker",
  223. execute: (room) => {
  224. print(["You thump the pepper shaker, making a dull thud."]);
  225. const safe = checkSuspicion(25);
  226. if (safe && getStat("suspicion") > 50) {
  227. print(["Geta leans in to have a closer look. He's going to catch you if you don't move!"]);
  228. startTimer({
  229. id: "pepper-investigate",
  230. func: () => {
  231. if (state.player.location == "pepper-grinder") {
  232. print(["He catches you.", newline, "You're tossed into the fox's jaws."]);
  233. goToRoom("maw");
  234. } else {
  235. print(["You evaded the fox."]);
  236. }
  237. },
  238. delay: 3000,
  239. loop: false,
  240. classes: [
  241. "free"
  242. ]
  243. });
  244. }
  245. },
  246. show: [
  247. ],
  248. conditions: [
  249. ]
  250. },
  251. {
  252. name: "Wait",
  253. desc: "Wait for the fox to finish his breakfast. Surely you'll be able to escape after that...right?",
  254. execute: (room) => {
  255. state.info.time.value = 60 * 60 * 7 + 60 * 20;
  256. },
  257. show: [
  258. ],
  259. conditions: [
  260. ]
  261. },
  262. ],
  263. "exits": {
  264. "up": {
  265. "target": "bowl",
  266. "desc": "Walk up to the cereal bowl",
  267. "show": [
  268. ],
  269. "conditions": [
  270. ],
  271. "hooks": [
  272. (room, exit) => {
  273. return checkSuspicion(10);
  274. }
  275. ]
  276. },
  277. "left": {
  278. "target": "table",
  279. "desc": "Run out into the open",
  280. "show": [
  281. ],
  282. "conditions": [
  283. ],
  284. "hooks": [
  285. ]
  286. },
  287. },
  288. "hooks": [
  289. ],
  290. "data": {
  291. "stats": {
  292. }
  293. }
  294. },
  295. "bowl": {
  296. "id": "bowl",
  297. "name": "Behind the Bowl",
  298. "desc": "You're crouched behind Geta's bowl of cereal",
  299. "move": (room) => {
  300. print(["You scurry up to the looming bowl, staying low and out of Geta's sight."]);
  301. },
  302. "enter": (room) => {
  303. },
  304. "exit": (room) => {
  305. },
  306. "actions": [
  307. ],
  308. "exits": {
  309. "ascend": {
  310. "target": "in-bowl",
  311. "desc": "Climb into Geta's cereal",
  312. "show": [
  313. ],
  314. "conditions": [
  315. ],
  316. "hooks": [
  317. ]
  318. },
  319. "down": {
  320. "target": "pepper-grinder",
  321. "desc": "Run back behind the pepper grinder",
  322. "show": [
  323. ],
  324. "conditions": [
  325. ],
  326. "hooks": [
  327. (room, exit) => {
  328. return checkSuspicion(15);
  329. }
  330. ]
  331. },
  332. },
  333. "hooks": [
  334. ],
  335. "data": {
  336. "stats": {
  337. }
  338. }
  339. },
  340. "table": {
  341. "id": "table",
  342. "name": "Table",
  343. "desc": "You're out in the open!",
  344. "move": (room) => {
  345. },
  346. "enter": (room) => {
  347. startTimer({
  348. id: "table-suspicion",
  349. func: () => {
  350. checkSuspicion(1.5);
  351. return true;
  352. },
  353. delay: 100,
  354. loop: true,
  355. classes: [
  356. "free"
  357. ]
  358. });
  359. },
  360. "exit": (room) => {
  361. stopTimer("table-suspicion");
  362. },
  363. "actions": [
  364. ],
  365. "exits": {
  366. "right": {
  367. "target": "pepper-grinder",
  368. "desc": "Run back to cover",
  369. "show": [
  370. ],
  371. "conditions": [
  372. ],
  373. "hooks": [
  374. ]
  375. },
  376. },
  377. "hooks": [
  378. ],
  379. "data": {
  380. "stats": {
  381. }
  382. }
  383. },
  384. "in-bowl": {
  385. "id": "in-bowl",
  386. "name": "Bowl",
  387. "desc": "You're in the cereal bowl...",
  388. "move": (room) => {
  389. print(["Why did you do that?"]);
  390. },
  391. "enter": (room) => {
  392. state.player.stats.suspicion.hidden = true;
  393. stopClassTimers("free");
  394. startTimer({
  395. id: "geta-eat",
  396. func: () => {
  397. if (Math.random() < 0.6) {
  398. print(["Geta scoops up a spoonful of cereal; you narrowly avoid being caught."]);
  399. return true;
  400. } else {
  401. print(["Geta scoops you up and slurps you into his maw."]);
  402. goToRoom("maw");
  403. return false;
  404. }
  405. },
  406. delay: 3000,
  407. loop: true,
  408. classes: [
  409. "free"
  410. ]
  411. });
  412. },
  413. "exit": (room) => {
  414. },
  415. "actions": [
  416. ],
  417. "exits": {
  418. "ascend": {
  419. "target": "bowl",
  420. "desc": "Try to climb back out!",
  421. "show": [
  422. ],
  423. "conditions": [
  424. ],
  425. "hooks": [
  426. (room, exit) => {
  427. print([
  428. "You grab at the rim of the bowl and try to pull yourself out. Alas, your struggles are for naught; Geta easily scoops you up in his spoon and, a heartbeat later, slurps you into his sloppy jaws. You didn't stand a chance."
  429. ]);
  430. goToRoom("maw");
  431. return false;
  432. }
  433. ]
  434. },
  435. },
  436. "hooks": [
  437. ],
  438. "data": {
  439. "stats": {
  440. }
  441. }
  442. },
  443. "maw": {
  444. "id": "maw",
  445. "name": "Geta's Maw",
  446. "desc": "You've been slurped up into the fox's jaws",
  447. "move": (room) => {
  448. },
  449. "enter": (room) => {
  450. state.player.stats.suspicion.hidden = true;
  451. stopClassTimers("free");
  452. state.player.stats.mawPos.hidden = false;
  453. state.geta.slurps = 0;
  454. state.geta.chews = 0;
  455. state.geta.swallowsLeft = 3 + Math.floor(Math.random() * 3);
  456. state.geta.mawMovement = 1;
  457. startTimer({
  458. id: "maw-random-movement",
  459. func: () => {
  460. const time = new Date().getTime();
  461. const movementFactor = (state.geta.mawMovement + limbsLost());
  462. const fastPart = Math.sin(time / 200) / 1600 / 3;
  463. const slowPart = Math.sin(time / 1000) / 1600;
  464. changeStat("mawPos", movementFactor * (fastPart + slowPart));
  465. if (getStat("mawPos") <= 0.02) {
  466. print(["You slip too far back. Geta doesn't even have to try to swallow you like the food you are."]);
  467. goToRoom("throat");
  468. return false;
  469. } else if (getStat("mawPos") >= 0.98) {
  470. print(["Geta's jaws close like a falling guillotine's blade. You're crushed like an insect. A sharp gulp drags you down to the fox's guts."]);
  471. changeStat("health", -90);
  472. goToRoom("stomach");
  473. return false;
  474. }
  475. return true;
  476. },
  477. delay: 1000 / 60,
  478. loop: true,
  479. classes: [
  480. "maw-struggle"
  481. ]
  482. });
  483. startTimer({
  484. id: "maw-struggle",
  485. func: () => {
  486. if (state.geta.swallowsLeft <= 0) {
  487. print(["Geta picks up his bowl of cereal and drinks it down, swallowing you in the process."]);
  488. state.geta.swallowsLeft = -1;
  489. goToRoom("throat");
  490. return false;
  491. }
  492. let choice;
  493. if (Math.random() < 0.2) {
  494. const choices = [
  495. "slosh",
  496. "tilt-back"
  497. ];
  498. choice = choices[Math.floor(Math.random() * choices.length)];
  499. } else if (Math.random() > state.geta.slurps / 3) {
  500. choice = "slurp";
  501. } else if (state.geta.chews - Math.floor(Math.random() * 3) < state.geta.slurps) {
  502. choice = "chew";
  503. } else {
  504. choice = "swallow";
  505. }
  506. if (choice == "swallow") {
  507. if (getStat("mawPos") < 0.15) {
  508. print(["Swallowed!"]);
  509. goToRoom("throat");
  510. return false;
  511. } else {
  512. print(["Swallows"]);
  513. statLerp("mawPos", -0.25, 500);
  514. state.geta.slurps = 0;
  515. state.geta.chews = 0;
  516. state.geta.swallowsLeft -= 1;
  517. return Math.random() * 1500 + 2500;
  518. }
  519. } else if (choice == "slurp") {
  520. statLerp("mawPos", -0.1, 250);
  521. print(["Slurps"]);
  522. state.geta.slurps += 1;
  523. return Math.random() * 1000 + 1500;
  524. } else if (choice == "chew") {
  525. if (getStat("mawPos") > 0.85) {
  526. const limb = randomBodyPart();
  527. state.player.limbs[limb] = false;
  528. const limbName = limbs[limb];
  529. if (limb == "head") {
  530. print(["He chewed your head :((("]);
  531. changeStat("health", -100);
  532. goToRoom("stomach");
  533. } else {
  534. print(["He chewed your " + limbName + " :("]);
  535. changeStat("health", -40);
  536. return true;
  537. }
  538. } else {
  539. print(["Chews"]);
  540. state.geta.chews += 1;
  541. return Math.random() * 500 + 1000;
  542. }
  543. } else if (choice == "slosh") {
  544. print(["Geta's tongue sloshes from side to side, throwing you around his maw like a ship in a storm."]);
  545. state.geta.mawMovement = 3;
  546. startTimer({
  547. id: "maw-slosh-end",
  548. func: () => {
  549. state.geta.mawMovement = 1;
  550. print(["The sloshing ends."]);
  551. return true;
  552. },
  553. delay: 4000,
  554. loop: false,
  555. classes: [
  556. "maw-struggle"
  557. ]
  558. });
  559. return Math.random() * 1500 + 4500;
  560. } else if (choice == "tilt-back") {
  561. print(["Geta tilts his head back, sending rivults of slobber flowing down into that yawning gullet."]);
  562. state.geta.mawMovement = 0.2;
  563. statLerp("mawPos", -1, 4000);
  564. startTimer({
  565. id: "maw-tilt-text",
  566. func: () => {
  567. print(["The fox's muzzle tilts back down as he SWALLOWS hard."]);
  568. statLerp("mawPos", -0.3, 500);
  569. state.geta.swallowsLeft -= 1;
  570. state.geta.slurps = 0;
  571. state.geta.chews = 0;
  572. return true;
  573. },
  574. delay: 4000,
  575. loop: false,
  576. classes: [
  577. ]
  578. });
  579. return 5000 + Math.random() * 1000;
  580. }
  581. },
  582. delay: 0,
  583. loop: true,
  584. classes: [
  585. "maw-struggle"
  586. ]
  587. });
  588. startTimer({
  589. id: "maw-taunts",
  590. func: () => {
  591. printRandom([
  592. ["\"Did you really think I wouldn't notice you?\""],
  593. ["\"You're going to feel good dying in my guts.\""],
  594. ["\"I could just crush you...but where's the fun in that?\""]
  595. ]);
  596. return Math.random() * 5000 + 5000;
  597. },
  598. delay: 5000,
  599. loop: true,
  600. classes: [
  601. "maw-struggle"
  602. ]
  603. });
  604. },
  605. "exit": (room) => {
  606. },
  607. "actions": [
  608. {
  609. name: "Struggle",
  610. desc: "Pull yourself away from the fox's throat! Just don't go too far forward...",
  611. execute: (room) => {
  612. print(["You drag yourself forward"]);
  613. statLerp("mawPos", 0.15 + Math.random() * 0.05, 250);
  614. },
  615. show: [
  616. ],
  617. conditions: [
  618. ]
  619. },
  620. {
  621. name: "Slip Back",
  622. desc: "Slide back towards Geta's gullet",
  623. execute: (room) => {
  624. if (Math.random() < 0.9) {
  625. print(["You let yourself slip back."]);
  626. statLerp("mawPos", -0.2 - Math.random() * 0.1, 250);
  627. } else {
  628. print(["You lose your grip, sliding back quite far!"]);
  629. statLerp("mawPos", -0.3 - Math.random() * 0.15, 250);
  630. }
  631. },
  632. show: [
  633. ],
  634. conditions: [
  635. ]
  636. },
  637. {
  638. name: "Dive In",
  639. desc: "Throw yourself towards the fox's throat",
  640. execute: (room) => {
  641. print(["Resigned to your fate, you toss yourself into Geta's throat. He seems surprised by your eagerness to submit, but swallows you all the same."]);
  642. goToRoom("throat");
  643. },
  644. show: [
  645. ],
  646. conditions: [
  647. ]
  648. },
  649. ],
  650. "exits": {
  651. },
  652. "hooks": [
  653. ],
  654. "data": {
  655. "stats": {
  656. }
  657. }
  658. },
  659. "throat": {
  660. "id": "throat",
  661. "name": "Geta's Gullet",
  662. "desc": "GULP!",
  663. "move": (room) => {
  664. },
  665. "enter": (room) => {
  666. playSfx("sfx/swallow.ogg");
  667. state.player.stats.mawPos.hidden = true;
  668. stopClassTimers("maw-struggle");
  669. startTimer({
  670. id: "throat-swallow",
  671. func: () => {
  672. print(["You slush down into Geta's stomach"]);
  673. goToRoom("stomach");
  674. return true;
  675. },
  676. delay: 7000,
  677. loop: false,
  678. classes: [
  679. ]
  680. });
  681. },
  682. "exit": (room) => {
  683. },
  684. "actions": [
  685. {
  686. name: "Struggle",
  687. desc: "Try to climb back out!",
  688. execute: (room) => {
  689. print(["Nope"]);
  690. },
  691. show: [
  692. ],
  693. conditions: [
  694. ]
  695. },
  696. {
  697. name: "Give up",
  698. desc: "Dive down into Geta's stomach",
  699. execute: (room) => {
  700. print(["You submit to your predator."]);
  701. goToRoom("stomach");
  702. stopTimer("throat-swallow");
  703. },
  704. show: [
  705. ],
  706. conditions: [
  707. ]
  708. },
  709. ],
  710. "exits": {
  711. },
  712. "hooks": [
  713. ],
  714. "data": {
  715. "stats": {
  716. }
  717. }
  718. },
  719. "stomach": {
  720. "id": "stomach",
  721. "name": "Geta's Stomach",
  722. "desc": "Glorp",
  723. "move": (room) => {
  724. },
  725. "enter": (room) => {
  726. playLoop("loop/stomach.ogg");
  727. stopClassTimers("maw-struggle");
  728. state.geta.acidStrength = 1;
  729. startTimer({
  730. id: "digest-random",
  731. func: () => {
  732. const choices = [
  733. () => {
  734. const crushed = randomBodyPart();
  735. const name = limbs[crushed];
  736. if (name == "head") {
  737. print(["A powerful fold of muscle grips your head, crushing it like a grape and killing you instantly."]);
  738. changeStat("health", -100);
  739. return false;
  740. } else {
  741. print(["Geta's stomach grips your " + name + " and crushes it with a horrific CRACK"]);
  742. changeStat("health", -40);
  743. return true;
  744. }
  745. },
  746. () => {
  747. printRandom([["Geta squeezes in on his gut with both hands, sloshing you around in the sickly stew of cereal, milk, and enzymatic slime."],
  748. ["Your organic prison snarls and churns, soaking you in fresh acids and hastening your wretched demise."]]);
  749. changeStat("health", -10);
  750. return true;
  751. },
  752. () => {
  753. if (state.geta.swallowsLeft == 0) {
  754. print(["A deep series of *glurks* rattles your bones."]);
  755. startTimer({
  756. id: "stomach-milk",
  757. func: () => {
  758. print(["A torrent of cold milk pours into the fox's stomach."]);
  759. return false;
  760. },
  761. delay: 3000,
  762. loop: false,
  763. classes: [
  764. "digestion"
  765. ]
  766. });
  767. } else if (state.geta.swallowsLeft > 0) {
  768. print(["Muffled chewing comes from far above. A moment later, you hear a wet *gluk*"]);
  769. startTimer({
  770. id: "stomach-cereal",
  771. func: () => {
  772. print(["A slimy heap of well-chewed corn flakes splatters down around you."]);
  773. return false;
  774. },
  775. delay: 4000,
  776. loop: false,
  777. classes: [
  778. ]
  779. });
  780. } else if (state.geta.swallowsLeft < 0) {
  781. print(["You hear a few light swallows."]);
  782. startTimer({
  783. id: "stomach-coffee",
  784. func: () => {
  785. print(["Gouts of hot, bitter coffee pour into the fox's guts."]);
  786. return false;
  787. },
  788. delay: 3000,
  789. loop: false,
  790. classes: [
  791. ]
  792. });
  793. }
  794. return true;
  795. },
  796. () => {
  797. print(["\"You were barely worth eating,\" murmurs the fox. \"So small. So weak.\""]);
  798. return true;
  799. }
  800. ];
  801. return choices[Math.floor(Math.random() * choices.length)]();
  802. },
  803. delay: 5000,
  804. loop: true,
  805. classes: [
  806. "digestion"
  807. ]
  808. });
  809. startTimer({
  810. id: "digest",
  811. func: () => {
  812. changeStat("health", -0.3 * state.geta.acidStrength);
  813. if (getStat("health") <= 0) {
  814. print(["You're digested before too long."]);
  815. goToRoom("digested");
  816. return false;
  817. }
  818. return true;
  819. },
  820. delay: 100,
  821. loop: true,
  822. classes: [
  823. "digestion"
  824. ]
  825. });
  826. },
  827. "exit": (room) => {
  828. },
  829. "actions": [
  830. {
  831. name: "Squirm",
  832. desc: "Rub at the walls of the fox's churning stomach",
  833. execute: (room) => {
  834. printRandom([
  835. ["You punch and kick at the walls"],
  836. ["A powerful churn grabs hold of you, stifling any attempts at struggling"],
  837. ["Your little thumps and kicks do little to faze your captor"]
  838. ]);
  839. },
  840. show: [
  841. ],
  842. conditions: [
  843. ]
  844. },
  845. {
  846. name: "Beg",
  847. desc: "Plead for your life",
  848. execute: (room) => {
  849. printRandom([
  850. [
  851. "\"PLEASE!\" you scream, thumping on the walls of the vulpine's gut. \"Let me out!\"",
  852. ]
  853. ])
  854. if (Math.random() < 0.7) {
  855. print(["Your pleas fall on deaf ears."]);
  856. } else {
  857. printRandom([
  858. ["\"Shhhh,\" growls Geta, \"you're going to die in me. Stop whimpering.\""],
  859. ["A long moment passes. \"Poor thing,\" says your captor."]
  860. ])
  861. }
  862. },
  863. show: [
  864. ],
  865. conditions: [
  866. ]
  867. },
  868. {
  869. name: "Scream",
  870. desc: "IT HURTS",
  871. execute: (room) => {
  872. printRandom([
  873. [
  874. "\"Oh god, oh god, oh god,\" you wail...quivering and quaking as you're digested alive. \"GETA!\""
  875. ],
  876. [
  877. "A blood-curdling scream bellows from your burning lungs."
  878. ],
  879. [
  880. "You let out a hideous wail as the fox digests you alive."
  881. ]
  882. ]);
  883. if (Math.random() < 0.5) {
  884. print(["Geta doesn't notice."]);
  885. } else {
  886. print(["A booming chuckle rocks your body."]);
  887. printRandom([
  888. ["\"I hope you're suffering in there.\""],
  889. ["\"Pathetic little snack.\""],
  890. ["\"Ready to die?\""]
  891. ]);
  892. }
  893. },
  894. show: [
  895. ],
  896. conditions: [
  897. ]
  898. },
  899. ],
  900. "exits": {
  901. },
  902. "hooks": [
  903. ],
  904. "data": {
  905. "stats": {
  906. }
  907. }
  908. },
  909. "digested": {
  910. "id": "digested",
  911. "name": "Fat",
  912. "desc": "You're just fat now",
  913. "move": (room) => {
  914. },
  915. "enter": (room) => {
  916. stopClassTimers("digestion");
  917. playSfx("sfx/absorb.ogg");
  918. },
  919. "exit": (room) => {
  920. },
  921. "actions": [
  922. {
  923. name: "Gurgle",
  924. desc: "Glorp",
  925. execute: (room) => {
  926. printRandom([
  927. ["Grrrrgle"],
  928. ["Glorp"],
  929. ["Glrrrrrrnnnnnn..."],
  930. ["Gwoooooorgle"]
  931. ]);
  932. },
  933. show: [
  934. ],
  935. conditions: [
  936. ]
  937. },
  938. ],
  939. "exits": {
  940. },
  941. "hooks": [
  942. ],
  943. "data": {
  944. "stats": {
  945. }
  946. }
  947. },
  948. }
  949. });
  950. })();