big steppy
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

4246 lines
204 KiB

  1. 'use strict';
  2. /*jshint browser: true*/
  3. var rules = {};
  4. var defaults = {};
  5. const synonyms = {
  6. heavy: ["heavy", "weighty"],
  7. huge: ["huge", "massive", "gigantic", "large"],
  8. cosmic: ["cosmic", "utterly colossal", "star-spanning"],
  9. gulp: ["gulp", "gluk", "glrk", "glp"],
  10. swallow: ["swallow", "gulp"],
  11. looming: ["looming", "imposing", "awe-inspiring", "menacing"],
  12. putrid: ["putrid", "foul", "wretched", "choking", "rancid", "utterly foul", "miasma-shrouded", "eye-wateringly foul"],
  13. moan: ["moan", "gasp", "growl"]
  14. }
  15. function plural(quantity, singular, plural) {
  16. return quantity > 1 ? plural : singular;
  17. }
  18. function capitalize(string) {
  19. return string.charAt(0).toUpperCase() + string.slice(1);
  20. }
  21. function getDefault(name) {
  22. let tokens = name.split("-");
  23. for (let i=0; i<tokens.length; i++) {
  24. tokens[i] = tokens[i].charAt(0).toUpperCase() + tokens[i].slice(1);
  25. }
  26. let funcName = "default" + tokens.join("");
  27. return window[funcName];
  28. }
  29. function getDefaultVictim(name) {
  30. let tokens = name.split("-");
  31. for (let i=0; i<tokens.length; i++) {
  32. tokens[i] = tokens[i].charAt(0).toUpperCase() + tokens[i].slice(1);
  33. }
  34. let funcName = "default" + tokens.join("");
  35. return window[funcName];
  36. }
  37. var action_keys = ["eat","chew","vomit","stomp","stomp-wedge","flex-toes","kick","anal-vore","ass-crush","ass-grind","tail-slap","tail-vore","tails-vore","cleavage-stuff","cleavage-crush","cleavage-drop","cleavage-absorb","breast-crush","breast-vore","breast-milk","unbirth","sheath-stuff","sheath-clench","sheath-crush","sheath-absorb","foreskin-stuff","foreskin-clench","foreskin-crush","foreskin-absorb","cock-vore","cockslap","ball-smother","male-spurt","male-orgasm","female-spurt","female-orgasm","grind","pouch-stuff","pouch-rub","pouch-eat","pouch-absorb","soul-vore","soul-absorb-paw","paw-stench","ass-stench","piss-stench","scat-stench","male-orgasm-musk","female-orgasm-musk","male-spurt-musk","female-spurt-musk","belch","fart","stomach","tail","tail-to-stomach","womb","balls","bowels","bowels-to-stomach","breasts","bladder","soul-digest","wings","wings-to-stomach","wear-shoe","remove-shoe","wear-sock","remove-sock","stuff-shoe","dump-shoe","stuff-sock","dump-sock","piss","bladder-vore","scat","sheath-toy","foreskin-toy","slit-toy","breast-toy","melt","solidify","flood","stomp-goo","goo-digest","ass-goo","goo-stomach-pull","goo-stomach-push","goo-bowels-pull","goo-bowels-push","goo-womb-pull","goo-womb-push","goo-balls-pull","goo-balls-push","goo-breasts-pull","goo-breasts-push","goo-tail-pull","goo-tail-push","goo-paws-pull","goo-paws-push","paw-vore","paw-vore-toes","paws","crop-swallow","crop-transfer","breath-fire","breath-ice","breath-electric","breath-smoke","breath-radiation","breath-foul","drool","magic-shrink","magic-hypnotize","wings-flap","wings-vore"];
  38. var victim_keys = ["victim-cum-flood", "victim-femcum-flood", "victim-stomped", "victim-flex-toes", "victim-eaten", "victim-ass-crush", "victim-ass-ground", "victim-humped", "victim-vomit", "victim-chew", "victim-drool", "victim-anal-vore", "victim-tail-slap", "victim-tail-vore", "victim-cock-slap", "victim-cock-vore", "victim-ball-smother", "victim-sheath-crush", "victim-sheath-absorb", "victim-foreskin-crush", "victim-foreskin-absorb", "victim-cum-flood", "victim-male-spurt-musk", "victim-male-orgasm-musk", "victim-unbirth", "victim-femcum-flood", "victim-female-spurt-musk", "victim-female-orgasm-musk", "victim-breast-crush", "victim-cleavage-crush", "victim-cleavage-absorb", "victim-cleavage-drop", "victim-milk-flood", "victim-breast-vore", "victim-pouch-absorb", "victim-soul-digest", "victim-soul-paw", "victim-paw-stench", "victim-ass-stench", "victim-gas-belch", "victim-gas-fart", "victim-piss", "victim-bladder-vore", "victim-piss-stench", "victim-scat", "victim-scat-stench", "victim-goo", "victim-paw-vore", "victim-breath-fire", "victim-breath-ice", "victim-breath-electric", "victim-breath-smoke", "victim-breath-radiation", "victim-breath-foul", "victim-wings-flap", "victim-wings-vore"]
  39. for (let i=0; i<action_keys.length; i++) {
  40. rules[action_keys[i]] = [];
  41. }
  42. function isNonFatal(macro) {
  43. return macro.brutality == 0;
  44. }
  45. function isFatal(macro) {
  46. return macro.brutality >= 1;
  47. }
  48. function isGory(macro) {
  49. return macro.brutality >= 2;
  50. }
  51. function isSadistic(macro) {
  52. return macro.brutality >= 3;
  53. }
  54. function hasNothing(container, thing, amount) {
  55. for (var key in container.contents) {
  56. if (container.contents.hasOwnProperty(key))
  57. return false;
  58. }
  59. return true;
  60. }
  61. function hasLessThan(container, thing, amount) {
  62. if (container.contents.hasOwnProperty(thing))
  63. if (container.contents[thing].count < amount && container.contents[thing].count > 0)
  64. return true;
  65. return false;
  66. }
  67. function hasAtleast(container, thing, amount) { //this function does not trigger in situations where you have a single object(..., 1 [thing], ...) nested inside of a larger group. If you have a case where that can feasibly happen it is reccomended to put a parent ofject of the one you want as an and condition.
  68. if (container.contents.hasOwnProperty(thing))
  69. if (container.contents[thing].count >= amount)
  70. return true;
  71. return false;
  72. }
  73. function hasExactly(container, thing, amount) {
  74. if (!container.contents.hasOwnProperty(thing) && amount == 0)
  75. return true;
  76. if (container.contents.hasOwnProperty(thing) && container.contents[thing].count == amount)
  77. return true;
  78. return false;
  79. }
  80. function hasOnly(container, things) {
  81. if (!hasNothingElse(container, things))
  82. return false;
  83. for (var i=0; i<things.length; i++) {
  84. if (!container.contents.hasOwnProperty(things[i]))
  85. return false;
  86. }
  87. return true;
  88. }
  89. function hasNothingElse(container, things) {
  90. for (var key in container.contents) {
  91. if (container.contents.hasOwnProperty(key))
  92. if (!things.includes(key))
  93. return false;
  94. }
  95. return true;
  96. }
  97. function nothingLarger(container, thing) {
  98. for (var key in container.contents)
  99. if (container.contents.hasOwnProperty(key))
  100. if (areas[key] > areas[thing])
  101. return false;
  102. return true;
  103. }
  104. function describe(action, container, macro, verbose=true, flat=false, extra1=0) {
  105. var options = [];
  106. for (var i = 0; i < rules[action].length; i++) {
  107. if(rules[action][i].test(container, macro, extra1)) {
  108. options.push(rules[action][i].desc);
  109. }
  110. }
  111. if (flat) {
  112. container = flatten(container);
  113. }
  114. if (options.length > 0 && Math.random() > (1 / (2 + options.length))) {
  115. let choice = Math.floor(Math.random() * options.length);
  116. return options[choice](container, macro, verbose, flat, extra1);
  117. }
  118. else {
  119. return getDefault(action)(container, macro, verbose, flat, extra1);
  120. }
  121. }
  122. function describeVictim(action, macro) {
  123. return getDefaultVictim(action)(macro);
  124. }
  125. function pickString(...array){
  126. var strings = array;
  127. var pick = strings[~~(Math.random() * strings.length)];
  128. return pick;
  129. }
  130. function pickStringChance(chance, ...array) {
  131. if (Math.random() < chance) {
  132. return pickString(...array);
  133. } else {
  134. return ""
  135. }
  136. }
  137. // DEFAULTS
  138. function defaultEat(container, macro, verbose, flat) {
  139. console.log(verbose);
  140. if (container.count == 0)
  141. return "You reach down for a delicious treat and grab - oh, nothing.";
  142. else
  143. return pickString([
  144. "You",
  145. pickString("snatch up", "grab", "pluck up", "seize", "catch"),
  146. container.describe(verbose) + ",",
  147. "then",
  148. pickString("swallow", "devour", "consume"),
  149. (container.count > 1 ? "them" : "it"),
  150. "whole."
  151. ], [
  152. "Your maw envelops",
  153. container.describe(verbose),
  154. "in a tight embrace of flesh.",
  155. (container.count > 1 ? "They sink" : "Your victim sinks"),
  156. "down deep with a little <i>gulp</i>."
  157. ]).join(" ");
  158. }
  159. function defaultChew(container, macro, verbose, flat) {
  160. let pronoun = (container.count > 1 ? "them" : "it");
  161. if (container.count == 0)
  162. return "You reach down for a delicious treat and grab - oh, nothing.";
  163. else if (isSadistic(macro))
  164. return "Your greedy fingers gather up " + container.describe(verbose) + ", stuffing " + pronoun + " into your " + macro.jawDesc(true) + ". A slow, lazy bite " + macro.biteDesc(true) + " " + pronoun + ", rending flesh, snapping bone, and crushing everything between your savage " + macro.jawDesc(true) + ". You tip back your head and swallow...consigning the gory remains to your roiling gut.";
  165. else if (isNonFatal(macro))
  166. return defaultEat(container, macro, verbose, flat);
  167. else {
  168. return "You scoop up " + container.describe(verbose) + " and " + macro.biteDesc() + " " + pronoun + " with your " + macro.jawDesc(true) + ", then swallow them down.";
  169. }
  170. }
  171. function defaultVomit(container, macro, verbose, flat) {
  172. if (container.count == 0) {
  173. return "You retch, but nothing happens.";
  174. } else if (isSadistic(macro)) {
  175. return "You gag and lean over, vomiting up " + container.describeSimple(flat) + ". A thick, hissing slurry of molten meat and acid drenches your still-writhing prey, searing flesh and ensuring their wretched, rancid deaths.";
  176. } else if (isGory(macro)) {
  177. return "You retch and vomit up " + container.describeSimple(flat) + ", spewing them out amidst a thick slurry of chyme and leaving them to melt.";
  178. } else if (isFatal(macro)) {
  179. return "You vomit up " + container.describeSimple(flat) + ", leaving them to stew in your stomach juices.";
  180. } else {
  181. return "You hack up " + container.describeSimple(flat) + ".";
  182. }
  183. }
  184. function defaultStomp(container, macro, verbose, flat) {
  185. if (container.count == 0)
  186. return "Your " + macro.footDesc() + " thumps the ground.";
  187. else if (isSadistic(macro))
  188. return "Your " + macro.footDesc(false) + " comes down on " + container.describe(verbose) + ", crushing your prey into gore and rubble with ease as your " + macro.toeDesc(true) + " shear bone and snap metal.";
  189. else if (isFatal(macro))
  190. return pickString([
  191. "You",
  192. pickString("crush", "smash", "flatten"),
  193. container.describe(verbose),
  194. pickString("under", "beneath", "with"),
  195. "your",
  196. (macro.stenchEnabled ? pickString(...synonyms.putrid) + "," : ""),
  197. pickStringChance(0.4, ...synonyms.looming),
  198. macro.footDesc(false,false,true) + "."
  199. ], [
  200. capitalize(container.describe(verbose)),
  201. (container.count > 1 ? "are" : "is"),
  202. pickString("crushed", "flattened"),
  203. pickString("under", "beneath"),
  204. "your",
  205. (macro.stenchEnabled ? pickString(...synonyms.putrid) : pickString("heavy", "weighty", "powerful")),
  206. macro.footDesc(false,false,true) + "."
  207. ], [
  208. "A swift stroke of your",
  209. macro.footDesc(false,false,true),
  210. pickString("crushes", "smashes", "flattens"),
  211. container.describe(verbose)
  212. ]).filter(Boolean).join(" ");
  213. else
  214. return "You step on " + container.describe(verbose) + ".";
  215. }
  216. function defaultStompWedge(container, macro, verbose, flat) {
  217. return [
  218. capitalize(container.describe(verbose)),
  219. (container.count > 1 ? "are" : "is"),
  220. pickString("wedged", "trapped", "left stuck", "jammed"),
  221. pickString("in", "between", "within"),
  222. "your",
  223. (macro.stenchEnabled ? pickString(...synonyms.putrid) : ""),
  224. macro.toeDesc(true)
  225. ].filter(Boolean).join(" ")
  226. }
  227. function defaultFlexToes(container, macro, verbose, flat) {
  228. if (container.count == 0) {
  229. if (macro.footShoeWorn) {
  230. return "You flex your " + macro.toeNoShoeDesc(true) + " inside your " + macro.footDesc(true) + ".";
  231. } else {
  232. return "You flex your " + macro.toeDesc(true) + ".";
  233. }
  234. } else {
  235. if (macro.footShoeWorn || macro.footSockWorn) {
  236. if (macro.brutality == 0) {
  237. return "You clench your " + macro.toeNoShoeDesc(true) + ", grinding them against the " + container.describeSimple(flat) + " trapped between your " + macro.footDesc(true) + " and your " + macro.toeOnlyDesc(true) + ".";
  238. } else {
  239. return "You clench your " + macro.toeNoShoeDesc(true) + ", crushing " + container.describeSimple(flat) + " between your " + macro.footDesc(true) + " and your " + macro.toeOnlyDesc(true) + ".";
  240. }
  241. } else {
  242. if (macro.brutality == 0) {
  243. return "You flex your " + macro.toeNoShoeDesc(true) + ", causing " + container.describeSimple(flat) + " to tumble out and fall to the ground.";
  244. } else {
  245. return "You flex and squeeze your " + macro.toeNoShoeDesc(true) + ", crushing " + container.describeSimple(flat) + " between them.";
  246. }
  247. }
  248. }
  249. }
  250. function defaultKick(container, macro, verbose, flat) {
  251. if (container.count == 0)
  252. return "You swing your mighty " + macro.footDesc() + "..and hit nothing.";
  253. else
  254. return "You punt " + container.describe(verbose) + ", destroying " + (container.count > 1 ? "them" : "it") + ".";
  255. }
  256. function defaultAnalVore(container, macro, verbose, flat) {
  257. if (container.count == 0)
  258. return "You're pretty sure you just sat on a rock.";
  259. else
  260. return pickString([
  261. "You sit yourself down on",
  262. container.describe(false) + ". ",
  263. (container.count > 1 ? "They slide" : "It slides"),
  264. "inside with ease."
  265. ], [
  266. "You grab",
  267. container.describe(false) + ",",
  268. "shoving",
  269. (container.count > 1 ? "your victims" : "your victim"),
  270. "right up your rear with a muffled <i>shlrkh</i>."
  271. ]
  272. ).join(" ");
  273. }
  274. function defaultAssCrush(container, macro, verbose, flat) {
  275. let count = get_living_prey(container.sum());
  276. if (container.count == 0)
  277. return "You take a seat. It's good to have a break!";
  278. else if (isSadistic(macro))
  279. return "You lower your heavy ass to the ground, biting your lip as you feel " + container.describe(verbose) + " collapse beneath your massive cheeks. " + (count > 1 ? count + " lives are" : "A life is") + " snuffed out as you settle down, grinding your ass into the remains before slowly rising back up.";
  280. else if (isFatal(macro))
  281. return "Your heavy ass obliterates " + container.describe(verbose) + ". ";
  282. else
  283. return "You sit on " + container.describe(verbose);
  284. }
  285. function defaultAssGrind(container, macro, verbose, flat) {
  286. if (container.count == 0) {
  287. return "You rub your ass on a wall.";
  288. } else {
  289. return "You grind your ass against " + container.describe(verbose) + ", flattening " + (container.count == 1 ? "it" : "them") + " under your weight.";
  290. }
  291. }
  292. function defaultTailSlap(container, macro, verbose, flat) {
  293. if (container.count == 0)
  294. return "Your " + (macro.tailCount > 1 ? "tails swing" : "tail swings") + " to and fro";
  295. else if (isFatal(macro))
  296. return "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails swing" : " tail swings") + " into " + container.describe(verbose) + ", smashing everything in " +
  297. (macro.tailCount > 1 ? "their" : "its") + " path.";
  298. else
  299. return "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails slap" : " tail slaps") + " against " + container.describe(verbose) + ", bowling them over.";
  300. }
  301. function defaultTailVore(container, macro, verbose, flat) {
  302. if (container.count == 0)
  303. return "Your drooling tail lashes about, but can't seem to chow down on anyone...";
  304. else if (isFatal(macro))
  305. return "Your tail lunges, maw agape, at " + container.describe(verbose) +
  306. ". It scarfs down everything in seconds, gulping forcefully to drag your prey into your sloppy confines.";
  307. else
  308. return "Your tail lunges, maw agape, at " + container.describe(verbose) +
  309. ". It scarfs down everything in a second, gulping forcefully and pulling your prey inside.";
  310. }
  311. function defaultTailsVore(container, macro, verbose, flat) {
  312. if (container.count == 0)
  313. return "Your drooling tails swing to and fro";
  314. else if (isFatal(macro))
  315. return "Your $COUNT tails lunge, maws agape, at " + container.describe(verbose) +
  316. ". They scarf down everything in seconds, gulping forcefully to drag your prey into your sloppy confines.";
  317. else
  318. return "Your $COUNT tails lunge, maws agape, at " + container.describe(verbose) +
  319. ". They scarf down your prey, gulping forcefully and pulling them deep inside.";
  320. }
  321. function defaultCleavageStuff(container, macro, verbose, flat) {
  322. if (container.count == 0)
  323. return "You can't fit anything into your cleavage right now.";
  324. else
  325. return "You snatch up " + container.describe(verbose) + " and stuff " + (container.count > 1 ? "them" : "it") + " into your cleavage.";
  326. }
  327. function defaultCleavageCrush(container, macro, verbose, flat) {
  328. if (container.count == 0)
  329. return "You grasp your breasts and forcefully squeeze them together.";
  330. else if (isSadistic(macro))
  331. return "You grasp your breasts and slowly bring them together, steadily crushing the life from " + container.describeSimple(flat) + " trapped in between - savoring every last <i>pop</i> and <i>crunch</i> as you exterminate your prey.";
  332. else if (isGory(macro))
  333. return "You grasp your breasts and forcefully shove them together, crushing the life from " + container.describeSimple(flat) + ".";
  334. else if (isFatal(macro))
  335. return "You grasp your breasts and forcefully shove them together, crushing " + container.describeSimple(flat) + ".";
  336. else
  337. return "You grasp your breasts and squish them together, smooshing " + container.describeSimple(flat) + ".";
  338. }
  339. function defaultCleavageDrop(container, macro, verbose, flat) {
  340. if (container.count == 0)
  341. return "You pull your breasts apart and give them a shake.";
  342. if (isFatal(macro))
  343. return "You pull your breasts apart far enough for the " + container.describeSimple(flat) + " trapped within to fall out, tumbling to the ground and smashing to bits.";
  344. else
  345. return "You pull your breasts apart far enough for the " + container.describeSimple(flat) + " trapped within to fall out.";
  346. }
  347. function defaultCleavageAbsorb(container, macro, verbose, flat) {
  348. if (container.count == 0)
  349. return defaultCleavageCrush(container, macro, verbose, flat);
  350. else
  351. return "Your squeeze your breasts together, swiftly absorbing " + container.describeSimple(flat) + " into your chest.";
  352. }
  353. function defaultBreastCrush(container, macro, verbose, flat) {
  354. if (container.count == 0)
  355. return "Your thump your breasts against the ground.";
  356. else if (isFatal(macro))
  357. return "Your heavy breasts obliterate " + container.describe(verbose) + ". ";
  358. else
  359. return "You smoosh " + container.describe(verbose) + " with your breasts.";
  360. }
  361. function defaultBreastVore(container, macro, verbose, flat) {
  362. let prey = new Container();
  363. macro.breasts.contents.forEach(function(x) {
  364. prey = prey.merge(x);
  365. });
  366. if (container.count == 0)
  367. return "It'd be pretty hot to stick someone in your breasts. Shame you can't right now.";
  368. else
  369. return pickString([
  370. "Your breasts squish against",
  371. container.describe(verbose),
  372. "as",
  373. (container.count > 1 ? "they're" : "it's"),
  374. "forced right into your nipples! They stretch and",
  375. pickString("envelop", "consume", "suck in"),
  376. "your prey,",
  377. pickStringChance(0.5, "swiftly", "easily"),
  378. "burying them in those warm,",
  379. (macro.lactationEnabled ? "milky" : "heavy"),
  380. "mounds."
  381. ], [
  382. capitalize(container.describe(verbose)),
  383. (container.count > 1 ? "are" : "is"),
  384. pickStringChance(0.35, "abruptly", "swiftly"),
  385. pickString("stuffed", "slipped"),
  386. "into your breasts",
  387. (container.count > 1 ? "their" : "its"),
  388. "form lost within your bosom.",
  389. (prey.count > 0 ? (prey.count > 1 ? "The " + prey.describe(false) : capitalize(prey.describe(true))) + " within " + (prey.count > 1 ? "slosh" : "sloshes") + " about as " + (prey.count > 1 ? "they're" : "it's") + " joined by fresh prey." : "")
  390. ]).filter(Boolean).join(" ")
  391. }
  392. function defaultBreastMilk(container, macro, verbose, flat) {
  393. if (container.count == 0)
  394. return "You squeeze your breasts, coaxing out $VOLUME of warm, creamy milk that splatters on the ground.";
  395. else if (isFatal(macro))
  396. return "You squeeze your breasts, coaxing out $VOLUME of warm, creamy milk that floods " + container.describe(verbose) + " in an unstoppable wave of white.";
  397. else
  398. return "You squeeze your breasts, coaxing out $VOLUME of warm, creamy milk that floods " + container.describe(verbose) + ".";
  399. }
  400. function defaultUnbirth(container, macro, verbose, flat) {
  401. if (container.count == 0)
  402. return "You grab " + (macro.victimsHuman ? new Human(1).describe(verbose) : new Person(1).describe(verbose)) + " and grind them against your slit...but they won't fit.";
  403. else {
  404. return pickString([
  405. "You",
  406. pickString(...synonyms.moan),
  407. "as",
  408. container.describe(verbose),
  409. (container.count > 1 ? "spread" : "spreads"),
  410. "open your",
  411. pickString("sex", macro.describeVagina + " slit") + ",",
  412. pickString("swallowed", "sucked", "drawn"),
  413. pickString("within", "inside", "down deep"),
  414. "by",
  415. pickString("tender", "sensuous", "lustful"),
  416. pickString("folds", "muscle") + "."
  417. ], [
  418. capitalize(container.describe(verbose)),
  419. "fall prey to your",
  420. pickString("sex", macro.describeVagina + " slit"),
  421. "with a messy",
  422. pickString("<i>SQUELCH</i>,", "<i>SQUISH</i>,"),
  423. "vanishing into your womb and sending a",
  424. pickString("jolt", "surge", "shock"),
  425. "of ecstasy up your spine."
  426. ]).filter(Boolean).join(" ");
  427. }
  428. }
  429. function defaultSheathStuff(container, macro, verbose, flat) {
  430. if (container.count == 0)
  431. return "You grab a " + (macro.victimsHuman ? new Human(1).describe(verbose) : new Person(1).describe(verbose)) + " and grind them against your sheath-slit...but they won't fit.";
  432. else
  433. return "You pluck " + container.describe(verbose) + " from the ground and slip them into your musky sheath.";
  434. }
  435. function defaultForeskinStuff(container, macro, verbose, flat) {
  436. if (container.count == 0)
  437. return "You grab a " + (macro.victimsHuman ? new Human(1).describe(verbose) : new Person(1).describe(verbose)) + " and grind them against your foreskin...but they won't fit.";
  438. else
  439. return "You pluck " + container.describe(verbose) + " from the ground and slip them into your musky foreskin.";
  440. }
  441. function defaultBreastToy(container, macro, verbose, flat) {
  442. if (container.count > 0) {
  443. return "You smush your breasts together, squeezing " + container.describeSimple(flat) + " between the heavy mounds.";
  444. } else {
  445. return "You smush your breasts together.";
  446. }
  447. }
  448. function defaultSlitToy(container, macro, verbose, flat) {
  449. if (container.count > 0) {
  450. return "You slip your fingers into your snatch, teasing yourself and pushing the " + container.describeSimple(flat) + " within a little deeper.";
  451. } else {
  452. return "Your slp your fingers into your snatch and tease yourself.";
  453. }
  454. }
  455. function defaultSheathToy(container, macro, verbose, flat) {
  456. if (container.count > 0) {
  457. if (macro.orgasm) {
  458. return "You stroke your spurting cock, then reach down to give your sheath a firm <i>squeeze</i>. Anything within has been ground away to nothingness by the force of your orgasm.";
  459. } else if (macro.arousal < 25) {
  460. return "You grip your soft sheath and give it a squeeze, feeling " + container.describeSimple(flat) + " within rub against your " + macro.describeDick + ".";
  461. } else if (macro.arousal < 75) {
  462. return "You grip your swelling sheath and squeeze, feeling " + container.describeSimple(flat) + " within grind against your " + macro.describeDick + ".";
  463. } else if (macro.arousal < 150) {
  464. return "You run your fingers down your " + macro.describeDick + " and grip your sheath, squeezing it to feel " + container.describeSimple(flat) + " being smothered against the musky walls by your throbbing cock.";
  465. } else {
  466. return "Trembling with your impending orgasm, your fingers play over your sheath, feeling " + container.describeSimple(flat) + " within rub against your " + macro.describeDick + ".";
  467. }
  468. } else {
  469. if (macro.orgasm) {
  470. return "You stroke your spurting cock, then reach down to give your sheath a firm <i>squeeze</i>. Anything within has been ground away to nothingness by the force of your orgasm.";
  471. } else if (macro.arousal < 25) {
  472. return "You grip your soft sheath and give it a squeeze.";
  473. } else if (macro.arousal < 75) {
  474. return "You grip your swelling sheath and squeeze.";
  475. } else if (macro.arousal < 150) {
  476. return "You run your fingers down your " + macro.describeDick + " and grip your sheath, squeezing it gently.";
  477. } else {
  478. return "Trembling with your impending orgasm, your fingers play over your sheath.";
  479. }
  480. }
  481. }
  482. function defaultSheathClench(container, macro, verbose, flat) {
  483. if (container.count == 0)
  484. return "You squeeze your sheath.";
  485. else if (isGory(macro))
  486. return "You squeeze your packed sheath, reducing " + container.describeSimple(flat) + " to a gory paste that slickens your throbbing shaft.";
  487. else if (isFatal(macro))
  488. return "Your fingers run over your packed sheath, squeezing on the " + macro.describeDick + " within and smashing " + container.describeSimple(flat);
  489. else
  490. return "Your squeeze your sheath, pushing " + container.describeSimple(flat) + " out of your sheath.";
  491. }
  492. function defaultSheathCrush(container, macro, verbose, flat) {
  493. if (container.count == 0)
  494. return "Your orgasm causes your " + macro.describeDick + " to swell and surge.";
  495. else if (isGory(macro))
  496. return "Your powerful orgasm causes your throbbing " + macro.describeDick + " to swell and crush the life from everything in your sheath, reducing " + container.describeSimple(flat) + " to a gory paste that slickens your spurting shaft.";
  497. else if (isFatal(macro))
  498. return "Your orgasm causes your " + macro.describeDick + " to throb and swell, smashing " + container.describeSimple(flat) + " trapped in your musky sheath.";
  499. else
  500. return "Your orgasm causes your " + macro.describeDick + " to swell, squeezing " + container.describeSimple(flat) + " out from your sheath.";
  501. }
  502. function defaultSheathAbsorb(container, macro, verbose, flat) {
  503. if (container.count > 0)
  504. return "You grip your sheath and give it a firm <i>squeeze</i>, abruptly absorbing " + container.describeSimple(flat) + " into your musky body.";
  505. else
  506. return defaultSheathToy(container, macro, verbose, flat);
  507. }
  508. function defaultForeskinToy(container, macro, verbose, flat) {
  509. if (container.count > 0) {
  510. if (macro.orgasm) {
  511. return "You stroke your spurting cock. Anything within your foreskin has been ground away to nothingness by the force of your orgasm.";
  512. } else if (macro.arousal < 25) {
  513. return "You slip your fingers into your sheath and give your shaft a squeeze, feeling " + container.describeSimple(flat) + " within rub against your " + macro.describeDick + " cock.";
  514. } else if (macro.arousal < 75) {
  515. return "You grip your swelling cock and squeeze, feeling " + container.describeSimple(flat) + " between your " + macro.describeDick + " and your foreskin.";
  516. } else if (macro.arousal < 150) {
  517. return "You run your fingers down your " + macro.describeDick + ", squeezing it to feel " + container.describeSimple(flat) + " being smothered against your throbbing cock.";
  518. } else {
  519. return "Trembling with your impending orgasm, your fingers play over your taut foreskin, feeling " + container.describeSimple(flat) + " within rub against your " + macro.describeDick + " cock.";
  520. }
  521. } else {
  522. if (macro.orgasm) {
  523. return "You stroke your spurting cock. Anything within your foreskin has been ground away to nothingness by the force of your orgasm.";
  524. } else if (macro.arousal < 25) {
  525. return "You grip your soft foreskin and give it a squeeze.";
  526. } else if (macro.arousal < 75) {
  527. return "You grip your swelling cock and squeeze.";
  528. } else if (macro.arousal < 150) {
  529. return "You run your fingers over your " + macro.describeDick + " and grip your taut foreskin, squeezing it gently.";
  530. } else {
  531. return "Trembling with your impending orgasm, your fingers play over your shaft.";
  532. }
  533. }
  534. }
  535. function defaultForeskinClench(container, macro, verbose, flat) {
  536. if (container.count == 0)
  537. return "You squeeze your foreskin.";
  538. else if (isGory(macro))
  539. return "You squeeze your foreskin, reducing " + container.describeSimple(flat) + " to a gory paste that slickens your throbbing shaft.";
  540. else if (isFatal(macro))
  541. return "Your fingers run over your packed foreskin, squeezing on the " + macro.describeDick + " within and smashing " + container.describeSimple(flat);
  542. else
  543. return "Your squeeze your foreskin, pushing " + container.describeSimple(flat) + " out of your foreskin.";
  544. }
  545. function defaultForeskinCrush(container, macro, verbose, flat) {
  546. if (container.count == 0)
  547. return "Your orgasm causes your " + macro.describeDick + " to swell and surge.";
  548. else if (isGory(macro))
  549. return "Your powerful orgasm causes your throbbing " + macro.describeDick + " to swell and crush the life from everything in your foreskin, reducing " + container.describeSimple(flat) + " to a gory paste that slickens your spurting shaft.";
  550. else if (isFatal(macro))
  551. return "Your orgasm causes your " + macro.describeDick + " to throb and swell, smashing " + container.describeSimple(flat) + " trapped in your musky foreskin.";
  552. else
  553. return "Your orgasm causes your " + macro.describeDick + " to swell, squeezing " + container.describeSimple(flat) + " out from your foreskin.";
  554. }
  555. function defaultForeskinAbsorb(container, macro, verbose, flat) {
  556. if (container.count > 0)
  557. return "You grip your cock and give it a firm <i>squeeze</i>, abruptly absorbing " + container.describeSimple(flat) + " into your musky foreskin.";
  558. else
  559. return defaultForeskinToy(container, macro, verbose, flat);
  560. }
  561. function defaultCockVore(container, macro, verbose, flat) {
  562. if (container.count == 0)
  563. return "You grab " + (macro.victimsHuman ? new Human(1).describe(verbose) : new Person(1).describe(verbose)) + " and grind them against your cock...but they won't fit.";
  564. else
  565. return "You stuff " + container.describe(verbose) + " into your throbbing shaft, forcing them down to your heavy balls.";
  566. }
  567. function defaultCockslap(container, macro, verbose, flat) {
  568. if (container.count == 0)
  569. return "Your " + macro.describeDick + " swings through the air. Lewd!";
  570. else if (isFatal(macro))
  571. return "Your swaying " + macro.describeDick + " crushes " + container.describe(verbose) + ". ";
  572. else
  573. return "You smack " + container.describe(verbose) + " with your " + macro.describeDick + ".";
  574. }
  575. function defaultBallSmother(container, macro, verbose, flat) {
  576. if (container.count == 0)
  577. return "You rest your heavy balls on the ground.";
  578. else if (isFatal(macro))
  579. return "Your weighty balls spread over " + container.describe(verbose) + ", drowning them in musk.";
  580. else
  581. return "Your weighty balls spread over " + container.describe(verbose) + ".";
  582. }
  583. function defaultMaleSpurt(container, macro, verbose, flat) {
  584. if (container.count == 0)
  585. return "Your " + macro.describeDick + " spews $VOLUMEs of bitter precum.";
  586. else if (isFatal(macro))
  587. return "Your " + macro.describeDick + " spurts out bitter precum, drowning " + container.describe(verbose) + " in $VOLUMEs of slick musky fluid.";
  588. else
  589. return "Your " + macro.describeDick + " spurts precum, splooging " + container.describe(verbose) + " in $VOLUMEs of slick musky fluid.";
  590. }
  591. function defaultMaleOrgasm(container, macro, verbose, flat) {
  592. if (container.count == 0)
  593. return "Your " + macro.describeDick + " spurts, gushing out a $VOLUME glob of cum.";
  594. else if (isFatal(macro))
  595. return "You're cumming! Your " + macro.describeDick + " erupts, obliterating " + container.describe(verbose) + " in a $VOLUME-torrent of cum.";
  596. else
  597. return "You're cumming! Your " + macro.describeDick + " spews a thick rope of seed, splooging " + container.describe(verbose) + " in a $VOLUME-torrent of cum.";
  598. }
  599. function defaultFemaleSpurt(container, macro, verbose, flat) {
  600. if (container.count == 0)
  601. return "Your moist slit splatters $VOLUME of slick juices.";
  602. else if (isSadistic(macro))
  603. return "Your dripping slit splatters $VOLUME of your intoxicating juices, dissolving " + container.describe(verbose) + ".";
  604. else if (isFatal(macro))
  605. return "Your moist slit splatters $VOLUME of slick juices, drowning " + container.describe(verbose) + " in your building lust.";
  606. else
  607. return "Your moist slit splatters $VOLUME of slick juices, splooging " + container.describe(verbose) + ".";
  608. }
  609. function defaultFemaleOrgasm(container, macro, verbose, flat) {
  610. if (container.count == 0)
  611. return "Your moist slit gushes $VOLUME of slick femcum.";
  612. else if (isSadistic(macro))
  613. return "Your quivering slit sprays $VOLUME of your intoxicating femcum, dissolving " + container.describe(verbose) + " in an unstoppable torrent of deadly lust.";
  614. else if (isFatal(macro))
  615. return "Your moist slit sprays $VOLUME of slick femcum, obliterating " + container.describe(verbose) + " in a torrent of nectar.";
  616. else
  617. return "Your moist slit sprays $VOLUME of slick femcum, splooging " + container.describe(verbose) + " as you swoon with orgasmic lust.";
  618. }
  619. function defaultGrind(container, macro, verbose, flat) {
  620. var mid = isFatal(macro) ? ", smashing them apart" : ", using them as a toy";
  621. var end = macro.arousalEnabled ? " to fuel your lust." : ".";
  622. var desc = container.count > 0 ? container.describe(verbose) + mid + end : "the ground.";
  623. if (macro.maleParts && macro.femaleParts) {
  624. return "You grind your " + macro.describeDick + " and " + macro.describeVagina + " slit against " + desc;
  625. } else if (macro.maleParts && !macro.femaleParts) {
  626. return "You grind your " + macro.describeDick + " against " + desc;
  627. } else if (!macro.maleParts && macro.femaleParts) {
  628. return "You grind your " + macro.describeVagina + " slit against " + desc;
  629. } else {
  630. return "You grind your hips against " + desc;
  631. }
  632. }
  633. function defaultPouchStuff(container, macro, verbose, flat) {
  634. if (container.count == 0)
  635. return "You grab " + (macro.victimsHuman ? new Human(1).describe(verbose) : new Person(1).describe(verbose)) + " and stuff them against your pouch...but they won't fit!";
  636. else
  637. return "You grab " + container.describe(verbose) + " and stuff " + (container.count > 1 ? "them" : "it") + " into your pouch.";
  638. }
  639. function defaultPouchRub(container, macro, verbose, flat) {
  640. if (container.count == 0)
  641. return "You rub your empty pouch.";
  642. else
  643. return "You rub your bulging pouch, feeling at " + container.describeSimple(flat) + " trapped within.";
  644. }
  645. function defaultPouchEat(container, macro, verbose, flat) {
  646. if (container.count == 0)
  647. return "There's nothing in your pouch!";
  648. else
  649. return "You snatch " + container.describe(verbose) + " from your pouch and shove " + (container.count > 1 ? "them" : "it") + " down your gullet!";
  650. }
  651. function defaultPouchAbsorb(container, macro, verbose, flat) {
  652. if (container.count == 0)
  653. return "There's nothing in your pouch!";
  654. else
  655. return "Your pouch flattens as it absorbs " + container.describeSimple(flat);
  656. }
  657. function defaultSoulVore(container, macro, verbose, flat) {
  658. if (container.count == 0)
  659. return "No souls here.";
  660. else
  661. return "You open your " + macro.jawDesc(true) + " and inhale, ripping the souls from " + container.describe(verbose) + " and dragging them down deep inside.";
  662. }
  663. function defaultSoulAbsorbPaw(container, macro, verbose, flat) {
  664. let sum = get_living_prey(container.sum());
  665. if (container.count == 0)
  666. return "Your " + macro.footDesc() + " thumps against the ground";
  667. else if (sum == 0)
  668. return "Your " + macro.footDesc() + " slams down on " + container.describe(verbose) + "...but there aren't any souls within!";
  669. else
  670. return "Your " + macro.footDesc() + " slams down on " + container.describe(verbose) + ", smashing them to pieces and absorbing " + sum + (sum == 1 ? " soul" : " souls") + " into your pads.";
  671. }
  672. function defaultPawStench(container, macro, verbose, flat) {
  673. let sum = get_living_prey(container.sum());
  674. if (isSadistic(macro))
  675. return "Horrific miasma flows from your " + macro.footDesc(true)+ ", the corrsoive fumes reducing " + (sum > 1 ? sum + " people" : "a person") + " to charred flesh as they wash over " + container.describeSimple(flat) + ".";
  676. if (isFatal(macro))
  677. return "Vile fumes waft from your " + macro.footDesc(true) + " , choking the life from " + (sum > 1 ? sum + " people." : "a person.");
  678. else
  679. return "Your stinky " + macro.footDesc(true) + " overwhelms " + (sum > 1 ? sum + " people" : "a person") + " with your scent!";
  680. }
  681. function defaultAssStench(container, macro, verbose, flat) {
  682. let sum = get_living_prey(container.sum());
  683. if (isSadistic(macro))
  684. return "Rancid fumes from your ass sear the flesh of " + (sum > 1 ? sum + " people" : "a person") + " as they wash over " + container.describeSimple(flat) + ", corroding everything in their path.";
  685. if (isFatal(macro))
  686. return "Vile miasma from your bitter ass snuffs out " + (sum > 1 ? sum + " people" : "a person") + ", suffocating them in your stench.";
  687. else
  688. return "Your stinky butt sickens " + (sum > 1 ? sum + " people" : "a person") + " with your scent!";
  689. }
  690. function defaultPissStench(container, macro, verbose, flat) {
  691. let sum = get_living_prey(container.sum());
  692. if (isSadistic(macro))
  693. return "Waves of corrosive fumes waft from your piss, the toxic cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + ".";
  694. if (isFatal(macro))
  695. return "Vile fumes waft from your piss, choking the life from " + (sum > 1 ? sum + " people." : "a person.");
  696. else
  697. return "Your stinky piss overwhelms " + (sum > 1 ? sum + " people" : "a person") + " with your scent!";
  698. }
  699. function defaultScatStench(container, macro, verbose, flat) {
  700. let sum = get_living_prey(container.sum());
  701. if (isSadistic(macro))
  702. return "A rancid miasma spews from your shit - a thick, choking avalanche of toxic vapors that reduce " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " to nothing but bones as it melts " + container.describeSimple(flat) + ".";
  703. if (isFatal(macro))
  704. return "Vile fumes waft from your scat, choking the life from " + (sum > 1 ? sum + " people." : "a person.");
  705. else
  706. return "Your stinky scat overwhelms " + (sum > 1 ? sum + " people" : "a person") + " with your scent!";
  707. }
  708. function defaultMaleSpurtMusk(container, macro, verbose, flat) {
  709. let sum = get_living_prey(container.sum());
  710. if (isSadistic(macro))
  711. return "Waves of corrosive musk waft from your precum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + ".";
  712. if (isFatal(macro))
  713. return "Powerful musk wafts from your precum, choking the life from " + (sum > 1 ? sum + " people." : "a person.");
  714. else
  715. return "Your musky precum overwhelms " + (sum > 1 ? sum + " people" : "a person") + " with your scent!";
  716. }
  717. function defaultFemaleSpurtMusk(container, macro, verbose, flat) {
  718. let sum = get_living_prey(container.sum());
  719. if (isSadistic(macro))
  720. return "Waves of corrosive musk waft from your precum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + ".";
  721. if (isFatal(macro))
  722. return "Powerful musk wafts from your precum, choking the life from " + (sum > 1 ? sum + " people." : "a person.");
  723. else
  724. return "Your musky precum overwhelms " + (sum > 1 ? sum + " people" : "a person") + " with your scent!";
  725. }
  726. function defaultMaleOrgasmMusk(container, macro, verbose, flat) {
  727. let sum = get_living_prey(container.sum());
  728. if (isSadistic(macro))
  729. return "Waves of corrosive musk waft from your cum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + ".";
  730. if (isFatal(macro))
  731. return "Powerful musk wafts from your cum, choking the life from " + (sum > 1 ? sum + " people." : "a person.");
  732. else
  733. return "Your musky cum overwhelms " + (sum > 1 ? sum + " people" : "a person") + " with your scent!";
  734. }
  735. function defaultFemaleOrgasmMusk(container, macro, verbose, flat) {
  736. let sum = get_living_prey(container.sum());
  737. if (isSadistic(macro))
  738. return "Waves of corrosive musk waft from your cum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + ".";
  739. if (isFatal(macro))
  740. return "Powerful musk wafts from your cum, choking the life from " + (sum > 1 ? sum + " people." : "a person.");
  741. else
  742. return "Your musky cum overwhelms " + (sum > 1 ? sum + " people" : "a person") + " with your scent!";
  743. }
  744. function defaultBelch(container, macro, verbose, flat) {
  745. let sum = get_living_prey(container.sum());
  746. if (container.count == 0)
  747. return "An ominous groan precedes a crass belch.";
  748. if (isSadistic(macro))
  749. return "A disgusting torrent of gas erupts from your rancid stomach, the vile green gale stopping hearts and burning flesh as it annihilates " + container.describe(verbose) + ".";
  750. if (isFatal(macro))
  751. return "A rancid belch flows from your " + macro.jawDesc(verbose) + ", corroding " + container.describe(verbose) + " with your vile fumes.";
  752. else
  753. return "You let out a loud burp, blowing over " + container.describe(verbose) + "!";
  754. }
  755. function defaultFart(container, macro, verbose, flat) {
  756. let sum = get_living_prey(container.sum());
  757. if (container.count == 0)
  758. return "An ominous groan precedes a loud, pungent fart.";
  759. if (isSadistic(macro))
  760. return "Your intestines snarl and lurch, expelling a powerful jet of utterly rancid stench from your bitter ass. The plume gushes over " + container.describe(verbose) + ", ending " + (sum > 1 ? sum + " lives" : "a life") + " and annihilating everything in its path.";
  761. if (isFatal(macro))
  762. return "An ominous groan precedes a loud, pungent fart, corroding " + container.describe(verbose) + " with truly vile vapors.";
  763. else
  764. return "You let out a crass fart, blowing over " + container.describe(verbose) + "!";
  765. }
  766. function defaultStomach(container, macro, verbose, flat) {
  767. if (isSadistic(macro))
  768. return [
  769. "Your",
  770. pickString("churning gut", "graveyard of a stomach", "fatal belly"),
  771. pickString("crushes", "grinds", "mulches"),
  772. "your prey into a gory paste,",
  773. pickStringChance(0.5, "utterly", "completely"),
  774. "annihilating",
  775. container.describeSimple(flat),
  776. "and",
  777. pickStringChance(0.5, "swiftly"),
  778. "reducing everything within to",
  779. pickString("rancid", "putrid", "horrifying"),
  780. pickString("sludge.", "slop.")
  781. ].filter(Boolean).join(" ");
  782. else if (isGory(macro))
  783. return [
  784. "Your caustic stomach",
  785. pickString("crushes", "grinds"),
  786. container.describeSimple(flat),
  787. "to a gory pulp."
  788. ].filter(Boolean).join(" ");
  789. else if (isFatal(macro))
  790. return [
  791. "Your stomach",
  792. pickString("gurgles", "snarls", "sloshes"),
  793. "as it digests",
  794. container.describeSimple(flat) + "."
  795. ].filter(Boolean).join(" ");
  796. else
  797. return [
  798. "Your stomach",
  799. pickString("squeezes", "groans", "shifts"),
  800. "and absorbs",
  801. container.describeSimple(flat) + "."
  802. ].filter(Boolean).join(" ");
  803. }
  804. function defaultTail(container, macro, verbose, flat) {
  805. if (isSadistic(macro))
  806. return "Your " + macro.tailDesc + " " + (macro.tailCount > 1 ? "clench" : "clenches") + ", crushing " + container.describeSimple(flat) + " into unrecognizable paste.";
  807. else if (isGory(macro))
  808. return "Your fatal " + (macro.tailCount > 1 ? "tails crush " : "tail crushes ") + container.describeSimple(flat) + " to a gory pulp.";
  809. else if (isFatal(macro))
  810. return "Your " + (macro.tailCount > 1 ? "tails gurgles as they digest " : "tail gurgles as it digests ") + container.describeSimple(flat) + ".";
  811. else
  812. return "Your " + (macro.tailCount > 1 ? "tails groan and absorb " : "tail groans and absorbs ") + container.describeSimple(flat) + ".";
  813. }
  814. function defaultTailToStomach(container, macro, verbose, flat) {
  815. if (isFatal(macro))
  816. return "Your " + (macro.tailCount > 1 ? "tails clench" : "tail clenches") + ", squeezing " + container.describeSimple(flat) + " into your gurgling stomach.";
  817. else
  818. return "Your " + (macro.tailCount > 1 ? "tails squeeze" : "tail squeezes") + " " + container.describeSimple(flat) + " into your belly.";
  819. }
  820. function defaultBowels(container, macro, verbose, flat) {
  821. if (isSadistic(macro))
  822. return "Your rancid bowels clench and churn, crushing " + container.describeSimple(flat) + " into a paste of gore and rubble - and then swiftly absorbing everything.";
  823. if (isFatal(macro))
  824. return "Your bowels churn as they melt down " + container.describeSimple(flat) + " and absorb them into your body";
  825. else
  826. return "Your bowels churn as they absorb " + container.describeSimple(flat);
  827. }
  828. function defaultBowelsToStomach(container, macro, verbose, flat) {
  829. if (isFatal(macro))
  830. return "Your bowels clench, forcing " + container.describeSimple(flat) + " into your roiling, caustic stomach.";
  831. else
  832. return "Your bowels clench, squeezing " + container.describeSimple(flat) + " into your belly.";
  833. }
  834. function defaultWomb(container, macro, verbose, flat) {
  835. if (isFatal(macro))
  836. return "Your womb squeezes and dissolves " + container.describeSimple(flat) + ", turning them into $VOLUME of slick femcum.";
  837. else
  838. return "Your womb squeezes as it absorbs " + container.describeSimple(flat);
  839. }
  840. function defaultBalls(container, macro, verbose, flat) {
  841. if (isFatal(macro))
  842. return "Your balls slosh as they digest " + container.describeSimple(flat) + " into $VOLUME of cum";
  843. else
  844. return "Your balls slosh as they absorb " + container.describeSimple(flat);
  845. }
  846. function defaultBreasts(container, macro, verbose, flat) {
  847. if (isFatal(macro) && macro.lactationEnabled)
  848. return "Your breasts grrgle as they digest " + container.describeSimple(flat) + " into $VOLUME of milk";
  849. else
  850. return "Your breasts slosh as they absorb " + container.describeSimple(flat);
  851. }
  852. function defaultBladder(container, macro, verbose, flat) {
  853. if (isSadistic(macro)) {
  854. let fatalities = get_living_prey(container.sum());
  855. let line = "Your bladder swells as " + container.describeSimple(flat) + " are dissolved in your acrid piss, digesting them down to $VOLUME of fresh urine";
  856. if (fatalities > 0) {
  857. line += " " + (fatalities > 1 ? fatalities + " lives are" : "a life is") + " snuffed out by the horrific yellow tide, corroded and annihilated amongst the unbearable stench of urine.";
  858. }
  859. return line;
  860. } else if (isFatal(macro))
  861. return "Your bladder swells as it dissolves " + container.describeSimple(flat) + " into $VOLUME of acrid piss";
  862. else
  863. return "Your bladder squeezes as it absorbs " + container.describeSimple(flat);
  864. }
  865. function defaultSoulDigest(container, macro, verbose, flat) {
  866. let sum = get_living_prey(container.sum());
  867. switch(macro.soulVoreType) {
  868. case "release":
  869. return (sum > 1 ? sum + " souls escape" : "A soul escapes") + " your depths.";
  870. case "body":
  871. return "Your body claims " + (sum > 1 ? sum + " souls" : "a soul") + ", imprisoning " + (sum > 1 ? "them" : "it") + " in your body for good.";
  872. case "oblivion":
  873. return "Energy washes through your depths as you annihilate " + (sum > 1 ? sum + " souls" : "a soul") + ", crushing " + (sum > 1 ? "them" : "it") + " into nothingness.";
  874. }
  875. }
  876. function defaultWings(container, macro, verbose, flat) {
  877. if (isSadistic(macro))
  878. return "Your " + macro.wingDesc + " wings slacken as the " + container.describeSimple(flat) + " within melts into a slurry of meat and wreckage.";
  879. if (isFatal(macro))
  880. return "Your " + macro.wingDesc + " wings squeeze tightly as they absorb " + container.describeSimple(flat) + " into your body";
  881. else
  882. return "Your " + macro.wingDesc + " wings squeeze as they absorb " + container.describeSimple(flat);
  883. }
  884. function defaultWingsToStomach(container, macro, verbose, flat) {
  885. if (isFatal(macro))
  886. return "Your " + macro.wingDesc + " wings clench, forcing " + container.describeSimple(flat) + " deeper and into your stomach.";
  887. else
  888. return "Your " + macro.wingDesc + " wings squeeze " + container.describeSimple(flat) + " into your belly.";
  889. }
  890. function defaultWearShoe(container, macro, verbose, flat) {
  891. if (container.count == 0) {
  892. return "You slip on your " + macro.shoeDesc(true,false) + ".";
  893. } else {
  894. return "You slip on your " + macro.shoeDesc(true,false) + ", " + macro.toeDesc(true) + " wriggling against " + container.describeSimple(flat) + " trapped within!";
  895. }
  896. }
  897. function defaultRemoveShoe(container, macro, verbose, flat) {
  898. if (container.count == 0) {
  899. return "You pull off your " + macro.shoeDesc(true,false) + ".";
  900. } else {
  901. return "You pull off your " + macro.shoeDesc(true,false) + ", " + macro.toeDesc(true) + " rubbing against " + container.describeSimple(flat) + " on the way out.";
  902. }
  903. }
  904. function defaultWearSock(container, macro, verbose, flat) {
  905. if (container.count == 0) {
  906. return "You slip on your " + macro.sockDesc(true,false) + ".";
  907. } else {
  908. return "You slip on your " + macro.sockDesc(true,false) + ", " + macro.toeDesc(true) + " grinding against " + container.describeSimple(flat) + " trapped in the cotton tube!";
  909. }
  910. }
  911. function defaultRemoveSock(container, macro, verbose, flat) {
  912. if (container.count == 0) {
  913. return "You pull off your " + macro.sockDesc(true,false) + ". Cool air washes over your " + macro.toeOnlyDesc(true);
  914. } else {
  915. return "You pull off your " + macro.sockDesc(true,false) + ", leaving " + container.describeSimple(flat) + " trapped at the bottom.";
  916. }
  917. }
  918. function defaultStuffShoe(container, macro, verbose, flat) {
  919. if (container.count == 0) {
  920. return "You don't have anything to stuff into your " + macro.shoeDesc(true) + ".";
  921. } else {
  922. return "You grab " + container.describe(verbose) + " and stuff " + (container.count > 1 ? "them" : "it") + " into your " + macro.shoeDesc(true) + "!";
  923. }
  924. }
  925. function defaultStuffSock(container, macro, verbose, flat) {
  926. if (container.count == 0) {
  927. return "You don't have anything to stuff into your " + macro.sockDesc(true) + ".";
  928. } else {
  929. return "You grab " + container.describe(verbose) + " and stuff " + (container.count > 1 ? "them" : "it") + " into your " + macro.sockDesc(true) + "!";
  930. }
  931. }
  932. function defaultDumpShoe(container, macro, verbose, flat) {
  933. if (container.count == 0) {
  934. return "Your " + macro.shoeDesc(true) + " are empty, silly.";
  935. } else {
  936. return "You shake out your " + macro.shoeDesc(true) + ", dumping " + container.describeSimple(flat) + " onto the ground.";
  937. }
  938. }
  939. function defaultDumpSock(container, macro, verbose, flat) {
  940. if (container.count == 0) {
  941. return "You don't have anything to stuff into your " + macro.sockDesc(true) + ".";
  942. } else {
  943. return "You turn your " + macro.shoeDesc(true) + " inside-out, dumping " + container.describeSimple(flat) + " onto the ground.";
  944. }
  945. }
  946. function defaultPiss(container, macro, verbose, flat) {
  947. if (macro.maleParts) {
  948. if (container.count == 0) {
  949. return "You sigh with relief as $VOLUME of piss erupts from your " + macro.describeDick + ".";
  950. } else if (isSadistic(macro)) {
  951. return "You sigh with relief as $VOLUME of hot, rancid piss erupts from your " + macro.describeDick + ", inundating " + container.describe(verbose) + " in a disgusting tide of yellow death."
  952. } else {
  953. return "You sigh with relief as $VOLUME of piss erupts from your " + macro.describeDick + ", spraying down " + container.describe(verbose) + " in a shower of golden, musky fluid.";
  954. }
  955. } else if (macro.femaleParts) {
  956. if (container.count == 0) {
  957. return "You sigh with relief as $VOLUME of piss erupts from your " + macro.describeVagina + " slit.";
  958. } else if (isSadistic(macro)) {
  959. return "You sigh with relief as $VOLUME of hot, rancid piss erupts from your " + macro.describeVagina + " slit, inundating " + container.describe(verbose) + " in a disgusting tide of yellow death."
  960. } else {
  961. return "You sigh with relief as $VOLUME of piss erupts from your " + macro.describeVagina + " slit, spraying down " + container.describe(verbose) + " in a shower of golden, musky fluid.";
  962. }
  963. } else {
  964. if (container.count == 0) {
  965. return "You sigh with relief as $VOLUME of piss erupts from between your legs.";
  966. } else if (isSadistic(macro)) {
  967. return "You sigh with relief as $VOLUME of hot, rancid piss erupts from between your legs, inundating " + container.describe(verbose) + " in a disgusting tide of yellow death."
  968. } else {
  969. return "You sigh with relief as $VOLUME of piss erupts from between your legs, spraying down " + container.describe(verbose) + " in a shower of golden, musky fluid.";
  970. }
  971. }
  972. }
  973. function defaultBladderVore(container, macro, verbose, flat) {
  974. if (container.count == 0) {
  975. return "You don't have anything to shove into your bladder!";
  976. }
  977. else {
  978. if (macro.maleParts) {
  979. return "You snatch up " + container.describe(verbose) + " and stuff them into your " + macro.describeDick + ", grinding them to its base and forcing them into your musky bladder.";
  980. } else if (macro.femaleParts) {
  981. return "You snatch " + container.describe(verbose) + " in your iron grip, grinding them against your " + macro.describeVagina + " slit before stuffing them into your urethra, sealing them away in your musky bladder.";
  982. } else {
  983. return "You grab " + container.describe(verbose) + " and grind them between your legs, slipping them into your urethra and imprisoning them in your bladder.";
  984. }
  985. }
  986. }
  987. function defaultScat(container, macro, verbose, flat) {
  988. let sum = get_living_prey(container.sum());
  989. if (macro.scatStorage.amount == 0) {
  990. return "Your bowels are empty.";
  991. } else if (container.count == 0) {
  992. return "You squat down and let out a $MASS log of shit.";
  993. } else if (isSadistic(macro)) {
  994. let line = "You squat down, letting out a grunt as your rancid bowels force out a $MASS, $LENGTH-long heap of shit. The fatally-pungent scat buries " + container.describe(verbose) + ", ending " + numberRough(sum,"of") + (sum > 1 ? " lives" : " life") + " and entombing them in your shit.";
  995. if (macro.scatStorage.victims.count > 0) {
  996. line += " Embedded in the vomit-inducing heap are the mangled, crushed remains of " + listSum(macro.scatStorage.victims.sum()) + ", " + numberRough(get_living_prey(macro.scatStorage.victims.sum()), "of") + " living creatures converted to noxious scat by your disgusting depths.";
  997. }
  998. return line;
  999. } else if (macro.brutality > 0 && macro.scatStorage.victims.count > 0) {
  1000. return "You squat down, grunting as your lower guts squeeze out a $MASS, $LENGTH-long log of scat that smothers " + container.describe(verbose) + ". Embedded in the thick, chunky waste are the remains of " + listSum(macro.scatStorage.victims.sum()) + ", now little more than bones and wreckage in your shit.";
  1001. } else {
  1002. return "You squat down, grunting as your lower guts squeeze out a $MASS, $LENGTH-long log of scat that smothers " + container.describe(verbose);
  1003. }
  1004. }
  1005. function defaultMelt(container, macro, verbose, flat) {
  1006. if (container.count == 0) {
  1007. return "Your body turns gooey.";
  1008. } else {
  1009. return "Your body turns gooey, sucking " + container.describeSimple(flat) + " into your molten self.";
  1010. }
  1011. }
  1012. function defaultSolidify(container, macro, verbose, flat) {
  1013. if (container.count == 0) {
  1014. return "Your body turns solid.";
  1015. } else if (macro.gooDigest > 0) {
  1016. return "Your body turns solid, pushing out " + container.describeSimple(flat) + ".";
  1017. } else {
  1018. return "Your body turns solid, swiftly absorbing " + container.describeSimple(flat) + ".";
  1019. }
  1020. }
  1021. function defaultFlood(container, macro, verbose, flat) {
  1022. if (container.count == 0) {
  1023. return "Your gooey body melts and floods outward..but doesn't catch anything.";
  1024. } else {
  1025. return "Your gooey body melts and floods outward, burying " + container.describe(verbose) + " in your thick, slimy self. You slowly reform, grinning as you feel " + numberRough(get_living_prey(container.sum()), "of") + " prey sloshing about within.";
  1026. }
  1027. }
  1028. function defaultStompGoo(container, macro, verbose, flat) {
  1029. if (container.count == 0) {
  1030. return "Your gooey paw hits the ground.";
  1031. } else {
  1032. return "Your gooey paws falls over " + container.describe(verbose) + ", smothering them in goo and pulling them into your body.";
  1033. }
  1034. }
  1035. function defaultAssGoo(container, macro, verbose, flat) {
  1036. if (container.count == 0) {
  1037. return "Your gooey ass sits down on the ground.";
  1038. } else {
  1039. return "You sit your gooey ass down on " + container.describe(verbose) + ", pulling them right into your body.";
  1040. }
  1041. }
  1042. function defaultGooDigest(container, macro, verbose, flat) {
  1043. return "Your goopy depths dissolve " + container.describeSimple(flat) + ".";
  1044. }
  1045. function defaultGooStomachPull(container, macro, verbose, flat) {
  1046. return "Your molten depths squeeze in around the " + container.describeSimple(flat) + " imprisoned in your stomach, drawing them into the viscous goo.";
  1047. }
  1048. function defaultGooStomachPush(container, macro, verobse) {
  1049. return "Your churning goo herds " + container.describeSimple(flat) + " into your gurgling stomach.";
  1050. }
  1051. function defaultGooBowelsPull(container, macro, verbose, flat) {
  1052. return "Your molten depths squeeze in around the " + container.describeSimple(flat) + " imprisoned in your bowels, drawing them into the viscous goo.";
  1053. }
  1054. function defaultGooBowelsPush(container, macro, verobse) {
  1055. return "Your churning goo herds " + container.describeSimple(flat) + " into your clenching bowels.";
  1056. }
  1057. function defaultGooWombPull(container, macro, verbose, flat) {
  1058. return "Your molten depths squeeze in around the " + container.describeSimple(flat) + " imprisoned in your womb, drawing them into the viscous goo.";
  1059. }
  1060. function defaultGooWombPush(container, macro, verobse) {
  1061. return "Your churning goo herds " + container.describeSimple(flat) + " into your slick womb.";
  1062. }
  1063. function defaultGooBallsPull(container, macro, verbose, flat) {
  1064. return "Your molten depths squeeze in around the " + container.describeSimple(flat) + " imprisoned in your balls, drawing them into the viscous goo.";
  1065. }
  1066. function defaultGooBallsPush(container, macro, verobse) {
  1067. return "Your churning goo herds " + container.describeSimple(flat) + " into your musky balls.";
  1068. }
  1069. function defaultGooBreastsPull(container, macro, verbose, flat) {
  1070. return "Your molten depths squeeze in around the " + container.describeSimple(flat) + " imprisoned in your breasts, drawing them into the viscous goo.";
  1071. }
  1072. function defaultGooBreastsPush(container, macro, verobse) {
  1073. return "Your churning goo herds " + container.describeSimple(flat) + " into your breasts.";
  1074. }
  1075. function defaultGooTailPull(container, macro, verbose, flat) {
  1076. return "Your molten depths squeeze in around the " + container.describeSimple(flat) + " imprisoned in your " + macro.tailDesc + ", drawing them into the viscous goo.";
  1077. }
  1078. function defaultGooTailPush(container, macro, verobse) {
  1079. return "Your churning goo herds " + container.describeSimple(flat) + " into your " + macro.tailDesc;
  1080. }
  1081. function defaultGooPawsPull(container, macro, verbose, flat) {
  1082. return "Your molten depths squeeze in around the " + container.describeSimple(flat) + " imprisoned in your " + macro.footOnlyDesc(true) + ", drawing them into the viscous goo.";
  1083. }
  1084. function defaultGooPawsPush(container, macro, verobse) {
  1085. return "Your churning goo herds " + container.describeSimple(flat) + " into your " + macro.footOnlyDesc(true) + ".";
  1086. }
  1087. function defaultPawVore(container, macro, verbose, flat) {
  1088. return "Your " + macro.footOnlyDesc(true) + " smother over " + container.describeSimple(flat) + ", absorbing them into your soles!";
  1089. }
  1090. function defaultPawVoreToes(container, macro, verbose, flat) {
  1091. return "The " + container.describeSimple(flat) + " trapped between your toes " + (container.count > 1 ? "are" : "is") + " sucked inside.";
  1092. }
  1093. function defaultPaws(container, macro, verbose, flat) {
  1094. return "Your " + macro.footOnlyDesc(true) + " fully absorb " + container.describeSimple(flat) + ".";
  1095. }
  1096. function defaultCropSwallow(container, macro, verbose, flat) {
  1097. if (container.count == 0)
  1098. return "You reach down for a delicious treat and grab - oh, nothing.";
  1099. else
  1100. return "You scoop up " + container.describe(verbose) + " and swallow " + (container.count > 1 ? "them" : "it") + " whole, pulling your prey into your crop.";
  1101. }
  1102. function defaultCropTransfer(container, macro, verbose, flat) {
  1103. if (container.count == 0)
  1104. return "You have nothing in your crop";
  1105. else
  1106. return "Your throat squeezes, forcing " + container.describe(verbose) + " out of your crop and in to your stomach.";
  1107. }
  1108. function nonFatalBreath(container, macro, verbose, flat, type, verb) {
  1109. if (macro.breathStyle == "line") {
  1110. return "You exhale a narrow gout of " + type + ", " + verb + " " + container.describe(verbose) + ".";
  1111. } else if (macro.breathStyle == "cone") {
  1112. return "You exhale a broad cone of " + type + ", " + verb + " " + container.describe(verbose) + ".";
  1113. }
  1114. }
  1115. function defaultBreathFire(container, macro, verbose, flat) {
  1116. if (isNonFatal(macro)) {
  1117. return nonFatalBreath(container, macro, verbose, flat, "fire", "blasting");
  1118. }
  1119. if (isFatal(macro)) {
  1120. if (macro.breathStyle == "line") {
  1121. return "A withering spear of fire gouts from your maw, spearing through " + container.describe(verbose) + " and incinerating it in a torrid display of power.";
  1122. } else if (macro.breathStyle == "cone") {
  1123. return "You exhale a broad cone of powerful fire, burning " + container.describe(verbose) + " to a crisp in an inescapable tide of flames.";
  1124. }
  1125. }
  1126. return "FIRE" + container.describe(verbose);
  1127. }
  1128. function defaultBreathIce(container, macro, verbose, flat) {
  1129. if (isNonFatal(macro)) {
  1130. return nonFatalBreath(container, macro, verbose, flat, "cold", "freezing");
  1131. }
  1132. if (isFatal(macro)) {
  1133. if (macro.breathStyle == "line") {
  1134. return "You heave a lance of frigid cold from your gullet, freezing " + container.describe(verbose) + " to the core.";
  1135. } else if (macro.breathStyle == "cone") {
  1136. return "A blizzard erupts from your maw, flash-freezing " + container.describe(verbose) + ". " + (container.count > 1 ? "They" : "It") + " shatters a heartbeat later, reduced to dust by your power.";
  1137. }
  1138. }
  1139. return "ICE" + container.describe(verbose);
  1140. }
  1141. function defaultBreathElectric(container, macro, verbose, flat) {
  1142. if (isNonFatal(macro)) {
  1143. return nonFatalBreath(container, macro, verbose, flat, "electricity", "shocking");
  1144. }
  1145. if (isFatal(macro)) {
  1146. if (macro.breathStyle == "line") {
  1147. return "A blinding lance of lightning blasts from your spread " + macro.jawDesc(true) + ", cooking " + container.describe(verbose) + " from the inside out.";
  1148. } else if (macro.breathStyle == "cone") {
  1149. return "You exhale a brilliant, forking spray of lightning. The flickering bolts arc through " + container.describe(verbose) + ", cooking everything to a crisp.";
  1150. }
  1151. }
  1152. return "ELECTRIC" + container.describe(verbose);
  1153. }
  1154. function defaultBreathSmoke(container, macro, verbose, flat) {
  1155. if (isNonFatal(macro)) {
  1156. return nonFatalBreath(container, macro, verbose, flat, "smoke", "smothering");
  1157. }
  1158. if (isFatal(macro)) {
  1159. if (macro.breathStyle == "line") {
  1160. return "You part your " + macro.jawDesc(true) + " a touch and blow, casting a thin gout of smoke that envelops " + container.describe(verbose) + ". Your prey is snuffed out like a candle.";
  1161. } else if (macro.breathStyle == "cone") {
  1162. return "You open wide and exhale. A rolling storm of smoke pours forth, smothering " + container.describe(verbose) + " in a pyroclastic flow.";
  1163. }
  1164. }
  1165. return "SMOKE" + container.describe(verbose);
  1166. }
  1167. function defaultBreathRadiation(container, macro, verbose, flat) {
  1168. if (isNonFatal(macro)) {
  1169. return nonFatalBreath(container, macro, verbose, flat, "radiation", "frying");
  1170. }
  1171. if (isFatal(macro)) {
  1172. if (macro.breathStyle == "line") {
  1173. return "Your depths pour out a narrow beam of crackling green energy, striking " + container.describe(verbose) + " and frying it to a crisp, turning your prey to dust in the wind.";
  1174. } else if (macro.breathStyle == "cone") {
  1175. return "You part your " + macro.jawDesc(true) + ", roaring as a massive tide of radiation spews forth. It rolls over " + container.describe(verbose) + ", evaporating " + (container.count > 1 ? "them" : "it") + " in seconds.";
  1176. }
  1177. }
  1178. return "RADIATION" + container.describe(verbose);
  1179. }
  1180. function defaultBreathFoul(container, macro, verbose, flat) {
  1181. if (isNonFatal(macro)) {
  1182. return nonFatalBreath(container, macro, verbose, flat, "foul air", "withering");
  1183. }
  1184. if (isFatal(macro)) {
  1185. if (macro.breathStyle == "line") {
  1186. return "You blow a narrow stream of breath, withering " + container.describe(verbose) + " in a focused torrent of foul, humid fumes.";
  1187. } else if (macro.breathStyle == "cone") {
  1188. return "You yawn wide and sigh, snuffing out " + container.describe(verbose) + " under a tide of hot, humid breath.";
  1189. }
  1190. }
  1191. return "FOUL" + container.describe(verbose);
  1192. }
  1193. function defaultDrool(container, macro, verbose, flat) {
  1194. if (container.count == 0)
  1195. return "$VOLUME of hot drool oozes from your " + macro.jawDesc(true) + ".";
  1196. else if (isFatal(macro))
  1197. return "A rain of slobber falls from your maw, inundating " + container.describe(verbose) + " in $VOLUME of slimy drool.";
  1198. else
  1199. return "$VOLUME of your drool rains down from your " + macro.jawDesc(true) + ", washing over " + container.describe(verbose) + ".";
  1200. }
  1201. function defaultMagicShrink(container, macro, verbose, flat) {
  1202. return "You envelop " + container.describeSimple(flat) + " in swirling tendrils of magic, shrinking " + (container.count == 1 ? "it" : "them") + " down!";
  1203. }
  1204. function defaultWingsFlap(container, macro, verbose, flat) {
  1205. if (container.counter == 0) {
  1206. return "You flap your " + macro.wingDesc + " wings.";
  1207. } else {
  1208. return "You flap your " + macro.wingDesc + " wings, blowing away " + container.describe(verbose) + ".";
  1209. }
  1210. }
  1211. function defaultWingsVore(container, macro, verbose, flat) {
  1212. if (container.counter == 0) {
  1213. return "You flap your " + macro.wingDesc + " wings aggressively.";
  1214. } else {
  1215. return "You spread your " + macro.wingDesc + " wings wide, wrapping them around " + container.describe(verbose) + " and ensnaring them";
  1216. }
  1217. }
  1218. function defaultVictimCumFlood(macro) {
  1219. if (isSadistic(macro)) {
  1220. return "drowned in viscous cum";
  1221. } else if (isGory(macro)) {
  1222. return "drowned in cum";
  1223. } else if (isFatal(macro)) {
  1224. return "smothered in cum";
  1225. } else if (isNonFatal(macro)) {
  1226. return "washed away by cum";
  1227. }
  1228. }
  1229. function defaultVictimFemcumFlood(macro) {
  1230. if (isSadistic(macro)) {
  1231. return "drowned in slick femcum";
  1232. } else if (isGory(macro)) {
  1233. return "drowned in femcum";
  1234. } else if (isFatal(macro)) {
  1235. return "smothered in femcum";
  1236. } else if (isNonFatal(macro)) {
  1237. return "washed away by femcum";
  1238. }
  1239. }
  1240. function defaultVictimStomped(macro) {
  1241. if (isSadistic(macro)) {
  1242. return "crushed into pulp beneath your " + macro.footDesc(true);
  1243. } else if (isGory(macro)) {
  1244. return "crushed beneath your " + macro.footDesc(true);
  1245. } else if (isFatal(macro)) {
  1246. return "stomped on";
  1247. } else if (isNonFatal(macro)) {
  1248. return "stepped on";
  1249. }
  1250. }
  1251. function defaultVictimFlexToes(macro) {
  1252. if (isSadistic(macro)) {
  1253. return "ground to a thick paste between your " + macro.toeDesc(true);
  1254. } else if (isGory(macro)) {
  1255. return "crushed to death between your " + macro.toeDesc(true);
  1256. } else if (isFatal(macro)) {
  1257. return "crushed between your " + macro.toeDesc(true);
  1258. } else if (isNonFatal(macro)) {
  1259. return "squeezed in your " + macro.toeDesc(true);
  1260. }
  1261. }
  1262. function defaultVictimEaten(macro) {
  1263. if (isSadistic(macro)) {
  1264. return "devoured and digested down to molten chyme";
  1265. } else if (isGory(macro)) {
  1266. return "consumed and digested alive";
  1267. } else if (isFatal(macro)) {
  1268. return "devoured alive";
  1269. } else if (isNonFatal(macro)) {
  1270. return "swallowed";
  1271. }
  1272. }
  1273. function defaultVictimAssCrush(macro) {
  1274. if (isSadistic(macro)) {
  1275. return "snuffed out under your ass";
  1276. } else if (isGory(macro)) {
  1277. return "crushed by your ass";
  1278. } else if (isFatal(macro)) {
  1279. return "flattened under your ass";
  1280. } else if (isNonFatal(macro)) {
  1281. return "sat on";
  1282. }
  1283. }
  1284. function defaultVictimAssGround(macro) {
  1285. if (isSadistic(macro)) {
  1286. return "ground out of existence beneath your heavy ass";
  1287. } else if (isGory(macro)) {
  1288. return "crushed by your grinding ass";
  1289. } else if (isFatal(macro)) {
  1290. return "flattened by your grinding ass";
  1291. } else if (isNonFatal(macro)) {
  1292. return "ground under your ass";
  1293. }
  1294. }
  1295. function defaultVictimHumped(macro) {
  1296. if (isSadistic(macro)) {
  1297. return "smashed to gory paste by your thrusting hips";
  1298. } else if (isGory(macro)) {
  1299. return "crushed to death by your hips";
  1300. } else if (isFatal(macro)) {
  1301. return "ground on by your sultry hips";
  1302. } else if (isNonFatal(macro)) {
  1303. return "humped";
  1304. }
  1305. }
  1306. function defaultVictimVomit(macro) {
  1307. if (isSadistic(macro)) {
  1308. return "spewed from your caustic depths and left to die";
  1309. } else if (isGory(macro)) {
  1310. return "vomited out in a puddle of acid and chyme";
  1311. } else if (isFatal(macro)) {
  1312. return "puked up from your churning guts";
  1313. } else if (isNonFatal(macro)) {
  1314. return "horked out";
  1315. }
  1316. }
  1317. function defaultVictimChew(macro) {
  1318. if (isSadistic(macro)) {
  1319. return "chewed to a bloody pulp by your scything " + macro.jawDesc(true);
  1320. } else if (isGory(macro)) {
  1321. return "crushed to pulp by your " + macro.jawDesc(true);
  1322. } else if (isFatal(macro)) {
  1323. return "chewed up in your " + macro.jawDesc(true);
  1324. } else if (isNonFatal(macro)) {
  1325. return "gnawed on by your " + macro.jawDesc(true);
  1326. }
  1327. }
  1328. function defaultVictimDrool(macro) {
  1329. if (isSadistic(macro)) {
  1330. return "inundated in your drool and drowned";
  1331. } else if (isGory(macro)) {
  1332. return "swept away by a tide of drool";
  1333. } else if (isFatal(macro)) {
  1334. return "flooded in your drool";
  1335. } else if (isNonFatal(macro)) {
  1336. return "soaked by your drool";
  1337. }
  1338. }
  1339. function defaultVictimAnalVore(macro) {
  1340. if (isSadistic(macro)) {
  1341. return "crammed into your bowels and obliterated";
  1342. } else if (isGory(macro)) {
  1343. return "shoved into your greedy ass";
  1344. } else if (isFatal(macro)) {
  1345. return "slipped into your bowels";
  1346. } else if (isNonFatal(macro)) {
  1347. return "used as toys in your ass";
  1348. }
  1349. }
  1350. function defaultVictimTailSlap(macro) {
  1351. if (isSadistic(macro)) {
  1352. return "cut down like wheat by your swooping, scything " + macro.tailDesc;
  1353. } else if (isGory(macro)) {
  1354. return "smashed to bloody pieces by your " + macro.tailDesc;
  1355. } else if (isFatal(macro)) {
  1356. return "leveled by your " + macro.tailDesc;
  1357. } else if (isNonFatal(macro)) {
  1358. return "thwapped with your " + macro.tailDesc;
  1359. }
  1360. }
  1361. function defaultVictimTailVore(macro) {
  1362. if (isSadistic(macro)) {
  1363. return "snapped up and devoured by your ravenous " + macro.tailNoDesc;
  1364. } else if (isGory(macro)) {
  1365. return "swallowed down by your powerful" + macro.tailNoDesc;
  1366. } else if (isFatal(macro)) {
  1367. return "devoured by your " + macro.tailNoDesc;
  1368. } else if (isNonFatal(macro)) {
  1369. return "gulped down by your " + macro.tailNoDesc;
  1370. }
  1371. }
  1372. function defaultVictimCockSlap(macro) {
  1373. if (isSadistic(macro)) {
  1374. return "obliterated beneath your massive, swinging shaft.";
  1375. } else if (isGory(macro)) {
  1376. return "crushed by your cock";
  1377. } else if (isFatal(macro)) {
  1378. return "flattened under your dick";
  1379. } else if (isNonFatal(macro)) {
  1380. return "smacked with your dick";
  1381. }
  1382. }
  1383. function defaultVictimCockVore(macro) {
  1384. if (isSadistic(macro)) {
  1385. return "plunged into the depths of your shaft";
  1386. } else if (isGory(macro)) {
  1387. return "devoured by your ravenous cock";
  1388. } else if (isFatal(macro)) {
  1389. return "sucked down your shaft";
  1390. } else if (isNonFatal(macro)) {
  1391. return "slipped into your cock";
  1392. }
  1393. }
  1394. function defaultVictimBallSmother(macro) {
  1395. if (isSadistic(macro)) {
  1396. return "reduced to broken gore under your massive balls";
  1397. } else if (isGory(macro)) {
  1398. return "snuffed out by your crushing balls";
  1399. } else if (isFatal(macro)) {
  1400. return "crushed under your balls";
  1401. } else if (isNonFatal(macro)) {
  1402. return "trapped under your balls";
  1403. }
  1404. }
  1405. function defaultVictimSheathCrush(macro) {
  1406. if (isSadistic(macro)) {
  1407. return "crushed and smeared between your shaft and sheath";
  1408. } else if (isGory(macro)) {
  1409. return "ground into paste within your sheath";
  1410. } else if (isFatal(macro)) {
  1411. return "crushed between your sheath and shaft";
  1412. } else if (isNonFatal(macro)) {
  1413. return "squeezed out from your sheath";
  1414. }
  1415. }
  1416. function defaultVictimSheathAbsorb(macro) {
  1417. if (isSadistic(macro)) {
  1418. return "dissolved and absorbed into your tight sheath";
  1419. } else if (isGory(macro)) {
  1420. return "absorbed by the flesh of your sheath";
  1421. } else if (isFatal(macro)) {
  1422. return "absorbed into your sheath";
  1423. } else if (isNonFatal(macro)) {
  1424. return "taken into your sheath";
  1425. }
  1426. }
  1427. function defaultVictimForeskinCrush(macro) {
  1428. if (isSadistic(macro)) {
  1429. return "crushed and smeared between your shaft and foreskin";
  1430. } else if (isGory(macro)) {
  1431. return "ground into paste within your foreskin";
  1432. } else if (isFatal(macro)) {
  1433. return "crushed between your foreskin and shaft";
  1434. } else if (isNonFatal(macro)) {
  1435. return "squeezed out from your foreskin";
  1436. }
  1437. }
  1438. function defaultVictimForeskinAbsorb(macro) {
  1439. if (isSadistic(macro)) {
  1440. return "dissolved and absorbed into your tight foreskin";
  1441. } else if (isGory(macro)) {
  1442. return "absorbed by the flesh of your foreskin";
  1443. } else if (isFatal(macro)) {
  1444. return "absorbed into your foreskin";
  1445. } else if (isNonFatal(macro)) {
  1446. return "taken into your foreskin";
  1447. }
  1448. }
  1449. function defaultVictimCumFlood(macro) {
  1450. if (isSadistic(macro)) {
  1451. return "drowned in a caustic flood of cum";
  1452. } else if (isGory(macro)) {
  1453. return "drowned in your cum";
  1454. } else if (isFatal(macro)) {
  1455. return "washed away by your cum";
  1456. } else if (isNonFatal(macro)) {
  1457. return "flooded with your cum";
  1458. }
  1459. }
  1460. function defaultVictimMaleSpurtMusk(macro) {
  1461. if (isSadistic(macro)) {
  1462. return "dissolved in a tide of slick, musky precum";
  1463. } else if (isGory(macro)) {
  1464. return "drowned in your slick precum";
  1465. } else if (isFatal(macro)) {
  1466. return "washed away by precum";
  1467. } else if (isNonFatal(macro)) {
  1468. return "flooded with your precum";
  1469. }
  1470. }
  1471. function defaultVictimMaleOrgasmMusk(macro) {
  1472. if (isSadistic(macro)) {
  1473. return "corroded by your caustic, overwhelming masculine musk";
  1474. } else if (isGory(macro)) {
  1475. return "snuffed out by your masculine musk";
  1476. } else if (isFatal(macro)) {
  1477. return "overwhelmed by masculine musk";
  1478. } else if (isNonFatal(macro)) {
  1479. return "dazed by masculine musk";
  1480. }
  1481. }
  1482. function defaultVictimUnbirth(macro) {
  1483. if (isSadistic(macro)) {
  1484. return "crushed by your overwhelming womb";
  1485. } else if (isGory(macro)) {
  1486. return "crammed into your womb";
  1487. } else if (isFatal(macro)) {
  1488. return "stuffed into your nethers";
  1489. } else if (isNonFatal(macro)) {
  1490. return "slipped into your slit";
  1491. }
  1492. }
  1493. function defaultVictimFemcumFlood(macro) {
  1494. if (isSadistic(macro)) {
  1495. return "drowned and dissolved in slippery femcum";
  1496. } else if (isGory(macro)) {
  1497. return "drowned in your femcum";
  1498. } else if (isFatal(macro)) {
  1499. return "washed away by femcum";
  1500. } else if (isNonFatal(macro)) {
  1501. return "flooded with femcum";
  1502. }
  1503. }
  1504. function defaultVictimFemaleSpurtMusk(macro) {
  1505. if (isSadistic(macro)) {
  1506. return "suffocated by a spurt of corrosive feminine precum";
  1507. } else if (isGory(macro)) {
  1508. return "snuffed out by a splatter of feminine fluid";
  1509. } else if (isFatal(macro)) {
  1510. return "flooded by your spurting precum";
  1511. } else if (isNonFatal(macro)) {
  1512. return "soaked with your feminine precum";
  1513. }
  1514. }
  1515. function defaultVictimFemaleOrgasmMusk(macro) {
  1516. if (isSadistic(macro)) {
  1517. return "corroded by your caustic, overwhelming feminine musk";
  1518. } else if (isGory(macro)) {
  1519. return "snuffed out by your feminine musk";
  1520. } else if (isFatal(macro)) {
  1521. return "overwhelmed by feminine musk";
  1522. } else if (isNonFatal(macro)) {
  1523. return "dazed by feminine musk";
  1524. }
  1525. }
  1526. function defaultVictimBreastCrush(macro) {
  1527. if (isSadistic(macro)) {
  1528. return "reduced to broken gore beneath your breasts";
  1529. } else if (isGory(macro)) {
  1530. return "crushed to death by your bosom";
  1531. } else if (isFatal(macro)) {
  1532. return "flattened under your heavy breasts";
  1533. } else if (isNonFatal(macro)) {
  1534. return "smooshed by your breasts";
  1535. }
  1536. }
  1537. function defaultVictimCleavageCrush(macro) {
  1538. if (isSadistic(macro)) {
  1539. return "cracked open like gore-filled nuts between your breasts";
  1540. } else if (isGory(macro)) {
  1541. return "crushed to paste between your breasts";
  1542. } else if (isFatal(macro)) {
  1543. return "smashed between your breasts";
  1544. } else if (isNonFatal(macro)) {
  1545. return "squeezed between your breasts";
  1546. }
  1547. }
  1548. function defaultVictimCleavageAbsorb(macro) {
  1549. if (isSadistic(macro)) {
  1550. return "agonizingly absorbed into your greedy bosom";
  1551. } else if (isGory(macro)) {
  1552. return "absorbed into your greedy breasts";
  1553. } else if (isFatal(macro)) {
  1554. return "absorbed by your breasts";
  1555. } else if (isNonFatal(macro)) {
  1556. return "pulled into your breasts";
  1557. }
  1558. }
  1559. function defaultVictimCleavageDrop(macro) {
  1560. if (isSadistic(macro)) {
  1561. return "dropped from your cleavage and dashed to bloody bits";
  1562. } else if (isGory(macro)) {
  1563. return "dropped from your cleavage to their deaths";
  1564. } else if (isFatal(macro)) {
  1565. return "dropped from your cleavage and smashed";
  1566. } else if (isNonFatal(macro)) {
  1567. return "dropped from your cleavage";
  1568. }
  1569. }
  1570. function defaultVictimMilkFlood(macro) {
  1571. if (isSadistic(macro)) {
  1572. return "drenched in and dissolved by your milk";
  1573. } else if (isGory(macro)) {
  1574. return "drowned in your milk";
  1575. } else if (isFatal(macro)) {
  1576. return "washed away by your milk";
  1577. } else if (isNonFatal(macro)) {
  1578. return "flooded in your milk";
  1579. }
  1580. }
  1581. function defaultVictimBreastVore(macro) {
  1582. if (isSadistic(macro)) {
  1583. return "fed into your breasts to be churned and obliterated";
  1584. } else if (isGory(macro)) {
  1585. return "shoved into your greedy bosom and lost for good";
  1586. } else if (isFatal(macro)) {
  1587. return "stuffed into your breasts to be absorbed";
  1588. } else if (isNonFatal(macro)) {
  1589. return "slipped into your nipples";
  1590. }
  1591. }
  1592. function defaultVictimPouchAbsorb(macro) {
  1593. if (isSadistic(macro)) {
  1594. return "crushed, torn, and absorbed by your perilous pouch";
  1595. } else if (isGory(macro)) {
  1596. return "smothered and soaked into the walls of your pouch";
  1597. } else if (isFatal(macro)) {
  1598. return "claimed by your pouch";
  1599. } else if (isNonFatal(macro)) {
  1600. return "absorbed into your pouch";
  1601. }
  1602. }
  1603. function defaultVictimSoulDigest(macro) {
  1604. switch(macro.soulVoreType) {
  1605. case "release":
  1606. return "souls freed from your depths";
  1607. case "body":
  1608. return "souls imprisoned in your body for good";
  1609. case "oblivion":
  1610. return "souls annihilated for eternity";
  1611. }
  1612. }
  1613. function defaultVictimSoulPaw(macro) {
  1614. switch(macro.soulVoreType) {
  1615. case "release":
  1616. return "souls briefly trapped in your paws";
  1617. case "body":
  1618. return "souls claimed forever by your paws";
  1619. case "oblivion":
  1620. return "souls annihilated in your paws";
  1621. }
  1622. }
  1623. function defaultVictimPawStench(macro) {
  1624. if (isSadistic(macro)) {
  1625. return "corroded and melted alive by the stench of your " + macro.footDesc(true);
  1626. } else if (isGory(macro)) {
  1627. return "suffocated by the powerful stench of your " + macro.footDesc(true);
  1628. } else if (isFatal(macro)) {
  1629. return "snuffed out by the scent of your " + macro.footDesc(true);
  1630. } else if (isNonFatal(macro)) {
  1631. return "sickened by the smell of your " + macro.footDesc(true);
  1632. }
  1633. }
  1634. function defaultVictimAssStench(macro) {
  1635. if (isSadistic(macro)) {
  1636. return "reduced to bubbling flesh by the caustic scent of your ass";
  1637. } else if (isGory(macro)) {
  1638. return "suffocated by the rank odor of your ass";
  1639. } else if (isFatal(macro)) {
  1640. return "snuffed out by the scent of your ass";
  1641. } else if (isNonFatal(macro)) {
  1642. return "sickened by the smell of your butt";
  1643. }
  1644. }
  1645. function defaultVictimGasBelch(macro) {
  1646. if (isSadistic(macro)) {
  1647. return "dissolved by your rich, acidic belches";
  1648. } else if (isGory(macro)) {
  1649. return "corroded by your acrid belches";
  1650. } else if (isFatal(macro)) {
  1651. return "slain by your foul, deafening belches";
  1652. } else if (isNonFatal(macro)) {
  1653. return "knocked out by your belches";
  1654. }
  1655. }
  1656. function defaultVictimGasFart(macro) {
  1657. if (isSadistic(macro)) {
  1658. return "burned alive and melted down by your farts";
  1659. } else if (isGory(macro)) {
  1660. return "dissolved by your caustic farts";
  1661. } else if (isFatal(macro)) {
  1662. return "inundated in the miasma of your farts";
  1663. } else if (isNonFatal(macro)) {
  1664. return "knocked out by your farts";
  1665. }
  1666. }
  1667. function defaultVictimPiss(macro) {
  1668. if (isSadistic(macro)) {
  1669. return "drowned and dissolved in acrid piss";
  1670. } else if (isGory(macro)) {
  1671. return "drowned in your acrid piss";
  1672. } else if (isFatal(macro)) {
  1673. return "inundated in hot piss";
  1674. } else if (isNonFatal(macro)) {
  1675. return "flooded with your piss";
  1676. }
  1677. }
  1678. function defaultVictimBladderVore(macro) {
  1679. if (isSadistic(macro)) {
  1680. return "dissolved in a golden-yellow sea of searing piss";
  1681. } else if (isGory(macro)) {
  1682. return "digested in your bladder and pissed out";
  1683. } else if (isFatal(macro)) {
  1684. return "dissolved in your bladder";
  1685. } else if (isNonFatal(macro)) {
  1686. return "absorbed into your bladder";
  1687. }
  1688. }
  1689. function defaultVictimPissStench(macro) {
  1690. if (isSadistic(macro)) {
  1691. return "rent asunder by the miasma wafting from your piss";
  1692. } else if (isGory(macro)) {
  1693. return "corroded and consumed by the stench of your piss";
  1694. } else if (isFatal(macro)) {
  1695. return "snuffed out by the stench of your piss";
  1696. } else if (isNonFatal(macro)) {
  1697. return "sickeded by your smelly piss";
  1698. }
  1699. }
  1700. function defaultVictimScat(macro) {
  1701. if (isSadistic(macro)) {
  1702. return "buried alive and dissolved by your acrid shit";
  1703. } else if (isGory(macro)) {
  1704. return "crushed beneath your scat";
  1705. } else if (isFatal(macro)) {
  1706. return "flattened by your scat";
  1707. } else if (isNonFatal(macro)) {
  1708. return "trapped under your scat";
  1709. }
  1710. }
  1711. function defaultVictimScatStench(macro) {
  1712. if (isSadistic(macro)) {
  1713. return "melted into slag by the wretched miasma of your scat";
  1714. } else if (isGory(macro)) {
  1715. return "killed by the overwhelming smell of your scat";
  1716. } else if (isFatal(macro)) {
  1717. return "snuffed out by your scat's stench";
  1718. } else if (isNonFatal(macro)) {
  1719. return "sickened by your scat";
  1720. }
  1721. }
  1722. function defaultVictimGoo(macro) {
  1723. if (isSadistic(macro)) {
  1724. return "shredded and soaked up by your goo";
  1725. } else if (isGory(macro)) {
  1726. return "digested and dissolved into your goo";
  1727. } else if (isFatal(macro)) {
  1728. return "dissolved in your goo";
  1729. } else if (isNonFatal(macro)) {
  1730. return "turned into more of your goo";
  1731. }
  1732. }
  1733. function defaultVictimPawVore(macro) {
  1734. if (isSadistic(macro)) {
  1735. return "broken down and absorbed directly into your " + macro.footOnlyDesc(true);
  1736. } else if (isGory(macro)) {
  1737. return "crushed under and sucked into your " + macro.footOnlyDesc(true);
  1738. } else if (isFatal(macro)) {
  1739. return "absorbed by your greedy " + macro.footOnlyDesc(true);
  1740. } else if (isNonFatal(macro)) {
  1741. return "absorbed into your " + macro.footOnlyDesc(true);
  1742. }
  1743. }
  1744. function defaultVictimBreathFire(macro) {
  1745. if (isSadistic(macro)) {
  1746. return "cooked alive and reduced to ash by your flaming breath";
  1747. } else if (isGory(macro)) {
  1748. return "burned alive by your fiery breath";
  1749. } else if (isFatal(macro)) {
  1750. return "burned by your scorching breath";
  1751. } else if (isNonFatal(macro)) {
  1752. return "singed by your breath";
  1753. }
  1754. }
  1755. function defaultVictimBreathIce(macro) {
  1756. if (isSadistic(macro)) {
  1757. return "flash-frozen by your breath and shattered into gory dust";
  1758. } else if (isGory(macro)) {
  1759. return "fatally frozen by your icy breath";
  1760. } else if (isFatal(macro)) {
  1761. return "turned to ice sculptures by your breath";
  1762. } else if (isNonFatal(macro)) {
  1763. return "frozen by your breath";
  1764. }
  1765. }
  1766. function defaultVictimBreathElectric(macro) {
  1767. if (isSadistic(macro)) {
  1768. return "blasted into bloody sludge by your shocking breath";
  1769. } else if (isGory(macro)) {
  1770. return "electrocuted by your electric breath";
  1771. } else if (isFatal(macro)) {
  1772. return "fried by your shocking breath";
  1773. } else if (isNonFatal(macro)) {
  1774. return "zapped by your electric breath";
  1775. }
  1776. }
  1777. function defaultVictimBreathSmoke(macro) {
  1778. if (isSadistic(macro)) {
  1779. return "cooked alive and cauterized by your smoky breath";
  1780. } else if (isGory(macro)) {
  1781. return "suffocated by your hot, smoky breath";
  1782. } else if (isFatal(macro)) {
  1783. return "snuffed out by smoky breath";
  1784. } else if (isNonFatal(macro)) {
  1785. return "singed by your smoky breath";
  1786. }
  1787. }
  1788. function defaultVictimBreathRadiation(macro) {
  1789. if (isSadistic(macro)) {
  1790. return "reduced to bubbling, glowing sludge by your radioactive breath";
  1791. } else if (isGory(macro)) {
  1792. return "cooked alive by your radioactive breath";
  1793. } else if (isFatal(macro)) {
  1794. return "nuked by your radioactive breath";
  1795. } else if (isNonFatal(macro)) {
  1796. return "mutated by your radioactive breath";
  1797. }
  1798. }
  1799. function defaultVictimBreathFoul(macro) {
  1800. if (isSadistic(macro)) {
  1801. return "suffocated and slain by thick, miasmic breath";
  1802. } else if (isGory(macro)) {
  1803. return "snuffed out by your foul breath";
  1804. } else if (isFatal(macro)) {
  1805. return "slain by your foul breath";
  1806. } else if (isNonFatal(macro)) {
  1807. return "sickened by your smelly breath";
  1808. }
  1809. }
  1810. function defaultVictimWingsFlap(macro) {
  1811. if (isSadistic(macro)) {
  1812. return "ripped asunder by gusts from your mighty wings";
  1813. } else if (isGory(macro)) {
  1814. return "thrown and dashed to bits by your sweeping wings";
  1815. } else if (isFatal(macro)) {
  1816. return "thrown away by your swooping wings";
  1817. } else if (isNonFatal(macro)) {
  1818. return "blown away by your wings";
  1819. }
  1820. }
  1821. function defaultVictimWingsVore(macro) {
  1822. if (isSadistic(macro)) {
  1823. return "shrink-wrapped in your wings and dissolved";
  1824. } else if (isGory(macro)) {
  1825. return "wrapped up in your airless wings and digested";
  1826. } else if (isFatal(macro)) {
  1827. return "snared in your wings and digested";
  1828. } else if (isNonFatal(macro)) {
  1829. return "trapped in your wings";
  1830. }
  1831. }
  1832. // EATING
  1833. rules["eat"].push({
  1834. "test": function(container, macro) {
  1835. return hasNothing(container);
  1836. },
  1837. "desc": function(container, macro, verbose, flat) {
  1838. return "You scoop up...nothing. Oh well.";
  1839. }
  1840. });
  1841. rules["eat"].push({
  1842. "test": function(container, macro) {
  1843. return hasOnly(container, ["Person"]) &&
  1844. hasLessThan(container, "Person", 6) &&
  1845. macro.height >= 10;
  1846. },
  1847. "desc": function(container, macro, verbose, flat) {
  1848. return "You pluck up " + container.describe() + " and stuff them into your mouth, swallowing lightly to drag them down to your bubbling guts.";
  1849. }
  1850. });
  1851. rules["eat"].push({
  1852. "test": function(container, macro) {
  1853. return hasOnly(container, ["Person"]) &&
  1854. hasExactly(container, "Person", 1) &&
  1855. macro.height < 10;
  1856. },
  1857. "desc": function(container, macro, verbose, flat) {
  1858. return "You grasp " + container.describe() + " and greedily wolf them down, swallowing forcefully to cram them into your bulging stomach. A crass belch escapes your lips as they curl up in your slimy gut.";
  1859. }
  1860. });
  1861. rules["eat"].push({
  1862. "test": function(container, macro) {
  1863. return hasExactly(container, "Car", 1);
  1864. },
  1865. "desc": function(container, macro, verbose, flat) {
  1866. return "You crush " + container.describe(verbose) + " with your tight throat, washing it down with its former passengers."
  1867. }
  1868. });
  1869. rules["eat"].push({
  1870. "test": function(container, macro) {
  1871. return hasExactly(container, "Macro", 1) &&
  1872. nothingLarger(container, "Macro");
  1873. },
  1874. "desc": function(container, macro, verbose, flat) {
  1875. return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + " and decide it will make a suitable meal. You grab them and stuff them into your " + macro.jawDesc(true) + ". As you slurp\
  1876. them down, you feel them " + pickString("catch in your throat for a brief moment before being swallowed.", "grab at your tounge for purchase before going down your throat.","briefly struggle, then go limp.","pound on the inside of your throat.");
  1877. }
  1878. });
  1879. rules["eat"].push({
  1880. "test": function(container, macro) {
  1881. return hasExactly(container, "Small Skyscraper", 1) &&
  1882. nothingLarger(container, "Small Skyscraper") &&
  1883. macro.height < 500;
  1884. },
  1885. "desc": function(container, macro, verbose, flat) {
  1886. return "You drop onto your hands and knees, " + macro.jawDesc(true) + " opening wide to envelop the skyscraper. It glides into your throat as your snout touches the ground,\
  1887. and you suckle on it for a long moment before twisting your head to snap it loose. The entire building, along with " + describe_all(container.contents["Small Skyscraper"].contents, verbose) + "\
  1888. within, plunge into your roiling guts. You wash it down with some delicious treats you slurped up along with it - " + describe_all(container.contents, verbose, ["Small Skyscraper"]) + ".";
  1889. }
  1890. });
  1891. rules["eat"].push({
  1892. "test": function(container, macro) {
  1893. return hasExactly(container, "Small Skyscraper", 2) &&
  1894. nothingLarger(container, "Small Skyscraper") &&
  1895. macro.height < 750;
  1896. },
  1897. "desc": function(container, macro, verbose, flat) {
  1898. return "You drop onto your hands and knees, " + macro.jawDesc(true) + " opening wide to envelop the skyscraper. It glides into your throat as your snout touches the ground,\
  1899. and you suckle on it for a long moment before twisting your head to snap it loose. Without missing a beat, you rise back up, sloppy tongue slathering over the side \
  1900. of the remaining tower, sucking on its tip and roughly shoving it into your maw. It breaks from its foundation, vanishing past your lips as you use two fingers to shove it \
  1901. down your sultry throat. Your gut bubbles as " + describe_all(container.contents["Small Skyscraper"].contents, verbose) + " are crunched and crushed within, along with the \
  1902. " + describe_all(container.contents, verbose, ["Small Skyscraper"]) + " that were unfortunate enough to be caught up by your slimy tongue.";
  1903. }
  1904. });
  1905. rules["eat"].push({
  1906. test: (container, macro) => {
  1907. return hasExactly(container, "Planet", 1) && nothingLarger(container, "Planet");
  1908. },
  1909. desc: (container, macro, verbose, flat) => {
  1910. return [
  1911. "Your colossal",
  1912. macro.jawDesc(true),
  1913. "yawn wide as you drift towards the planet, blotting out the sun in the shadow of your terrifying maw. Your tongue curls along the underside of your snack's crust, slathering it in drool and gently tugging it towards you. Cracks and quakes rock the fragile crust; your body's overwhelming gravity alone is enough to stretch and warp the planet. Before long, it is entombed within your",
  1914. macro.jawDesc(true),
  1915. "and, a heartbeat later, a massive GLURKH drags it into your gullet."
  1916. ].join(" ")
  1917. }
  1918. })
  1919. rules["eat"].push({
  1920. test: (container, macro) => hasAtleast(container, "Planet", 3) && hasLessThan(container, "Planet", 15) && nothingLarger(container, "Planet"),
  1921. desc: (container, macro, verbose, flat) => [
  1922. "You scoop up a plethora of planets, popping them into your",
  1923. macro.jawDesc(true),
  1924. "like the finger-food they've become, tugging each one into your gullet - and on an irreversible one-way journey to your gut - with little gluks and gulps, sealing away all",
  1925. container.contents["Planet"].count,
  1926. "of them within your cosmic body."
  1927. ].join(" ")
  1928. });
  1929. // CHEWING
  1930. rules["chew"].push({
  1931. "test": function(container, macro) {
  1932. return hasOnly(container, ["Person"]) &&
  1933. hasExactly(container, "Person", 1) &&
  1934. isGory(macro) &&
  1935. macro.height < 5;
  1936. }, "desc": function(container, macro, verbose, flat) {
  1937. return "You tackle " + container.describe(verbose) + " and dig into your meal, powerful " + macro.jawDesc(true) + " ripping them to shreds in seconds. You wolf down great mouthfuls \
  1938. of meat, consuming them in a terrifying frenzy that ends with naught but bones lying on the ground.";
  1939. }
  1940. });
  1941. rules["chew"].push({
  1942. "test": function(container, macro) {
  1943. return hasOnly(container, ["Person"]) &&
  1944. hasExactly(container, "Person", 1) &&
  1945. isGory(macro) &&
  1946. macro.height >= 5;
  1947. }, "desc": function(container, macro, verbose, flat) {
  1948. return "You snatch up " + container.describe(verbose) + ", then stuff their lower body into the guillotine that is your ravenous maw - slicing off their legs with \
  1949. a single disgusting <i>crunch</i>, then finishing them off with another ravenous bite that obliterates their torso. Their bleeding head falls from your lips, only to be \
  1950. caught between two fingers and popped back in to be crunched between molars and swallowed.";
  1951. }
  1952. });
  1953. rules["chew"].push({
  1954. "test": function(container, macro) {
  1955. return hasExactly(container, "Car", 1);
  1956. },
  1957. "desc": function(container, macro, verbose, flat) {
  1958. return "You lean down and open your " + macro.jawDesc(true) + " wide, catching " + container.describe(verbose) + ". Holding onto the car with only your " + macro.teethDesc(true) + ", you tilt your head back, opening wider \
  1959. to let the vehicle fall further your mouth, Once the car settles, you start slowly closing your jaw, feeling glass shatter, metal grind, and tires burst as those trapped inside try to escape. Every time your chew you feel your \
  1960. " + macro.teethDesc(true) + " " + macro.biteDesc(false) + " the vehicle into a smaller and smaller lump. After you are satisfied, you tilt your head back and swallow the debries in a single fluid gulp.";
  1961. }
  1962. });
  1963. rules["chew"].push({
  1964. test: (container, macro) => hasExactly(container, "Planet", 1) && nothingLarger(container, "Planet") && isFatal(macro),
  1965. desc: (container, macro, verbose, flat) => [
  1966. "A shadow falls over your next meal - your ",
  1967. macro.jawDesc(true),
  1968. "closing around the rocky sphere like bolt cutters around a chain-link...and then, with a sharp clench, they split the planet in twain. The heat of the planet's core spills out, the homeworld of billions rent asunder by your almighty",
  1969. macro.jawDesc(true) + ".",
  1970. "A few more chews and crunches reduce it to chunky, glowing rubble...and with a flick of your head, the planet's remains are lost to your hunger."
  1971. ].join(" ")
  1972. });
  1973. // STOMPING
  1974. rules["stomp"].push({
  1975. "test": function(container, macro) {
  1976. return hasOnly(container, ["Person"]) &&
  1977. hasExactly(container, "Person", 1) &&
  1978. isFatal(macro);
  1979. }, "desc": function(container, macro, verbose, flat) {
  1980. return "Your heavy " + macro.footDesc() + " slams down on " + container.describe(verbose) + ", smashing the poor thing like an insect.";
  1981. }
  1982. });
  1983. rules["stomp"].push({
  1984. "test": function(container, macro) {
  1985. return hasOnly(container, ["Person"]) &&
  1986. hasExactly(container, "Person", 1) &&
  1987. isGory(macro);
  1988. }, "desc": function(container, macro, verbose, flat) {
  1989. return "Your " + macro.footDesc() + " thumps " + container.describe(verbose) + ", shoving your victim to the ground and cracking them open like an egg.";
  1990. }
  1991. });
  1992. rules["stomp"].push({
  1993. "test": function(container, macro) {
  1994. return hasOnly(container, ["Person"]) &&
  1995. hasExactly(container, "Person", 1) &&
  1996. isGory(macro);
  1997. }, "desc": function(container, macro, verbose, flat) {
  1998. return "Your shadow falls over " + container.describe(verbose) + ", and your " + macro.footDesc() + " follows, crushing their soft body and reducing them to a heap of broken gore.";
  1999. }
  2000. });
  2001. rules["stomp"].push({
  2002. "test": function(container, macro) {
  2003. return hasNothingElse(container, ["Person","Cow","Car"]) &&
  2004. isNonFatal(macro);
  2005. }, "desc": function(container, macro, verbose, flat) {
  2006. return "Your " + macro.footDesc() + " smooshes over " + container.describe(verbose) + ". They stick to your " + macro.toeDesc(true) + ", carried along for the ride as you take another few steps before finally\
  2007. falling off.";
  2008. }
  2009. });
  2010. rules["stomp"].push({
  2011. "test": function(container, macro) {
  2012. return hasOnly(container, ["Person"]) &&
  2013. hasExactly(container, "Person", 1) &&
  2014. isFatal(macro);
  2015. }, "desc": function(container, macro, verbose, flat) {
  2016. return "Your heavy " + macro.footDesc() + " slams down on " + container.describe(verbose) + ", smashing the poor thing like an insect.";
  2017. }
  2018. });
  2019. rules["stomp"].push({
  2020. "test": function(container, macro) {
  2021. return hasOnly(container, ["Bus"]) &&
  2022. hasExactly(container, "Bus", 1) &&
  2023. isFatal(macro);
  2024. }, "desc": function(container, macro, verbose, flat) {
  2025. return "Your heavy " + macro.footDesc() + " slams down on " + container.describe(verbose) + ", smashing the poor thing like an insect.";
  2026. }
  2027. });
  2028. rules["stomp"].push({
  2029. "test": function(container, macro) {
  2030. return hasOnly(container, ["Person","Car", "Bus"]) &&
  2031. hasExactly(container, "Bus", 1) &&
  2032. hasLessThan(container, "Car", 10);
  2033. }, "desc": function(container, macro, verbose, flat) {
  2034. return "You punt a " + container.contents["Bus"].describe(verbose) + ", sending it tumbling down the road into a " + describe_all(container.contents, verbose, flat, ["Bus"]);
  2035. }
  2036. });
  2037. rules["stomp"].push({
  2038. "test": function(container, macro) {
  2039. return hasExactly(container, "Parking Garage", 1) &&
  2040. nothingLarger(container, "Parking Garage");
  2041. }, "desc": function(container, macro, verbose, flat) {
  2042. return (pickString("You bring your " + macro.footDesc() + " down on ", "You kick your " + macro.footDesc() + " through ")) + container.describe(verbose) +", collapsing the structure and setting off car alarms. As the alarms blare, you reposition your " + macro.footDesc() +
  2043. " over the structure, and slam it down; silencing the alarms, and completely demolishing the building.";
  2044. }
  2045. });
  2046. //paw area between 5 and 50
  2047. rules["stomp"].push({
  2048. "test": function(container, macro) {
  2049. return macro.pawArea <= 50 &&
  2050. macro.pawArea > 5 &&
  2051. isNonFatal(macro);
  2052. }, "desc": function(container, macro, verbose, flat) {
  2053. return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " makes contact with the ground, you feel a shock travel up your powerful leg, and see the ground deform beneath it.";
  2054. }
  2055. });
  2056. rules["stomp"].push({
  2057. "test": function(container, macro) {
  2058. return macro.pawArea <= 50 &&
  2059. macro.pawArea > 5 &&
  2060. isFatal(macro);
  2061. }, "desc": function(container, macro, verbose, flat) {
  2062. return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " makes contact with the ground, you feel a shock travel up your powerful leg, and see the ground deform beneath it. \
  2063. Your " + macro.footDesc() + "print is filled with rubble and those unluckly enough to be in your path.";
  2064. }
  2065. });
  2066. rules["stomp"].push({
  2067. "test": function(container, macro) {
  2068. return macro.pawArea <= 50 &&
  2069. macro.pawArea > 5 &&
  2070. isGory(macro);
  2071. }, "desc": function(container, macro, verbose, flat) {
  2072. return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " makes contact with the ground, you feel a shock travel up your powerful leg, and see the ground deform beneath it. \
  2073. Your " + macro.footDesc() + "print is filled with rubble and the mangled corpses of those unluckly enough to be in your path.";
  2074. }
  2075. });
  2076. rules["stomp"].push({
  2077. "test": function(container, macro) {
  2078. return macro.pawArea <= 50 &&
  2079. macro.pawArea > 5 &&
  2080. isSadistic(macro);
  2081. }, "desc": function(container, macro, verbose, flat) {
  2082. return "You slowly bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " makes contact with your prey, you feel those beneath you struggle to overcome \
  2083. the weight bearing down on them, before being completely crushed. You shift a little more of your weight on your outstretched " + macro.footDesc() + " and see blood spray from between your " + macro.toeDesc(true) + ". Lifting your " + macro.footDesc() + " off the \
  2084. ground to examine your " + macro.footDesc() + "print, you see that it is filled with blood, debris, and the mangled corpses of those unluckly enough to be in your path.";
  2085. }
  2086. });
  2087. //Stomping Macro
  2088. rules["stomp"].push({
  2089. "test": function(container, macro) {
  2090. return hasExactly(container, "Macro", 1) &&
  2091. nothingLarger(container, "Macro") &&
  2092. isNonFatal(macro);
  2093. },
  2094. "desc": function(container, macro, verbose, flat) {
  2095. return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power"," and decide it will will be suitable prey."," and decide to show it what being a macro really means.") + " \
  2096. You slam your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " into it's comparatively tiny frame, which sends it into the side of a nearby building. As it attempts to pick itself up, you place your massive " + macro.footDesc() + " on its back, and slam the \
  2097. smaller macro back into the dirt.";
  2098. }
  2099. });
  2100. rules["stomp"].push({
  2101. "test": function(container, macro) {
  2102. return hasExactly(container, "Macro", 1) &&
  2103. nothingLarger(container, "Macro") &&
  2104. isFatal(macro);
  2105. },
  2106. "desc": function(container, macro, verbose, flat) {
  2107. return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power"," and decide it will will be suitable prey."," and decide to show it what being a macro really means.") + "\
  2108. You slam your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " into it's comparatively tiny frame, which sends it into the side of a nearby building. As it attempts to pick itself up, you place your massive " + macro.footDesc() + " on its back, and slam the \
  2109. smaller macro into the dirt where it perishes.";
  2110. }
  2111. });
  2112. rules["stomp"].push({
  2113. "test": function(container, macro) {
  2114. return hasExactly(container, "Macro", 1) &&
  2115. nothingLarger(container, "Macro") &&
  2116. isGory(macro);
  2117. },
  2118. "desc": function(container, macro, verbose, flat) {
  2119. return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power"," and decide it will will be suitable prey."," and decide to show it what being a macro really means.") + " \
  2120. You slam your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " into it's comparatively tiny frame; cracking bones and dashing it against the side of a nearby building. As it attempts to pick itself up, you place your massive " + macro.footDesc() + " on its \
  2121. back, and slam the smaller macro into the dirt. Shifting your weight forward, you feel it struggle beneath your " + macro.toeDesc(true) + " and watch as blood soaks into the ground.";
  2122. }
  2123. });
  2124. rules["stomp"].push({
  2125. "test": function(container, macro) {
  2126. return hasExactly(container, "Macro", 1) &&
  2127. nothingLarger(container, "Macro") &&
  2128. isSadistic(macro);
  2129. },
  2130. "desc": function(container, macro, verbose, flat) {
  2131. return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power"," and decide it will will be suitable prey."," and decide to show it what being a macro really means.") + " \
  2132. You slam your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " into it's comparatively tiny frame; cracking bones and dashing it against the side of a nearby building. As it attempts to drag itself away, you place your massive " + macro.footDesc() + " \
  2133. on its back, and slam the smaller macro into the dirt. Shifting your weight forward, you feel it struggle beneath your " + macro.toeDesc(true) + " and watch as blood soaks into the ground. You hold your stance as you feel it's struggles weaken and fade away. Just as it seems it \
  2134. can struggle no more, you place your entire weight of " + mass(macro.mass, unit) + " on it, and pop it's " + mass(80000, unit, true) + " body like a grape.";
  2135. }
  2136. });
  2137. //paw area over 1000
  2138. rules["stomp"].push({
  2139. "test": function(container, macro) {
  2140. return macro.pawArea <= 1000 &&
  2141. macro.pawArea > 50 &&
  2142. isNonFatal(macro);
  2143. }, "desc": function(container, macro, verbose, flat) {
  2144. return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " impacts its target, you feel its weight sink into the ground. After you lift \
  2145. your " + macro.soleDesc() + ", you notice it has left a deep, clear indent in the ground.";
  2146. }
  2147. });
  2148. rules["stomp"].push({
  2149. "test": function(container, macro) {
  2150. return macro.pawArea <= 1000 &&
  2151. macro.pawArea > 50 &&
  2152. isFatal(macro);
  2153. }, "desc": function(container, macro, verbose, flat) {
  2154. return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " impacts its target, you feel its weight sink into the ground. After you lift \
  2155. your " + macro.soleDesc() + ", a deep indent full of rubble is revealed.";
  2156. }
  2157. });
  2158. rules["stomp"].push({
  2159. "test": function(container, macro) {
  2160. return macro.pawArea <= 1000 &&
  2161. macro.pawArea > 50 &&
  2162. isGory(macro);
  2163. }, "desc": function(container, macro, verbose, flat) {
  2164. return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " impacts its target, you feel its weight sink through buildings and into the \
  2165. ground. After you lift your " + macro.soleDesc() + ", a deep indent full of rubble and mangled corpses is revealed.";
  2166. }
  2167. });
  2168. rules["stomp"].push({
  2169. "test": function(container, macro) {
  2170. return macro.pawArea <= 1000 &&
  2171. macro.pawArea > 50 &&
  2172. isSadistic(macro);
  2173. }, "desc": function(container, macro, verbose, flat) {
  2174. return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " impacts its target, you feel its weight sink through buildings and into the \
  2175. ground. After you lift your " + macro.soleDesc() + ", a deep indent full of blood-smeared rubble is revealed. Bone fragments and rebar stick out of the mess, tangled into a mold of your " + macro.footDesc() + ".";
  2176. }
  2177. });
  2178. //paw area less than 1e7
  2179. rules["stomp"].push({
  2180. "test": function(container, macro) {
  2181. return macro.pawArea <= 1e7 &&
  2182. macro.pawArea > 1000 &&
  2183. isNonFatal(macro);
  2184. }, "desc": function(container, macro, verbose, flat) {
  2185. return "You lift your your colossal " + macro.footDesc() + " up and over " + container.describe(verbose) + ". With a sudden swiftness, you <i>SLAM</i> it down. Your " + macro.footDesc() + " shakes the ground and releases an audible <i>BOOOOM</i>.\
  2186. Once you have lifted your " + macro.footDesc() + ", you notice it has left a " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " crater in the ground.";
  2187. }
  2188. });
  2189. rules["stomp"].push({
  2190. "test": function(container, macro) {
  2191. return macro.pawArea <= 1e7 &&
  2192. macro.pawArea > 1000 &&
  2193. isFatal(macro);
  2194. }, "desc": function(container, macro, verbose, flat) {
  2195. return "You lift your your colossal " + macro.footDesc() + " up and over " + container.describe(verbose) + ". With a sudden swiftness, you <i>SLAM</i> it down. Your " + macro.footDesc() + " shakes the ground and releases an audible <i>BOOOOM</i>.\
  2196. With a back and forth twist, you drive your " + macro.toeDesc() + " deep into the soil. Once you have lifted your " + macro.footDesc() + ", you notice it has left a " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " \
  2197. rubble-lined crater in the ground.";
  2198. }
  2199. });
  2200. rules["stomp"].push({
  2201. "test": function(container, macro) {
  2202. return macro.pawArea <= 1e7 &&
  2203. macro.pawArea > 1000 &&
  2204. isGory(macro);
  2205. }, "desc": function(container, macro, verbose, flat) {
  2206. return "You lift your your colossal " + macro.footDesc() + " up and over " + container.describe(verbose) + ". With a sudden swiftness, you <i>SLAM</i> it down. Your " + macro.footDesc() + " shakes the ground and releases an audible <i>BOOOOM</i>.\
  2207. With a back and forth twist, you drive your " + macro.toeDesc() + " deep into the soil. Once you have lifted your " + macro.footDesc() + ", you notice it has left a " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " \
  2208. rubble-lined crater in the ground. At the center of the crater, a pond of blood and liquified prey is filling, fed by the crater and your dripping " + macro.soleDesc() + ".";
  2209. }
  2210. });
  2211. rules["stomp"].push({
  2212. "test": function(container, macro) {
  2213. return macro.pawArea <= 1e7 &&
  2214. macro.pawArea > 1000 &&
  2215. isSadistic(macro);
  2216. }, "desc": function(container, macro, verbose, flat) {
  2217. return "You lift your your colossal " + macro.footDesc() + " up and over " + container.describe(verbose) + ". With a sudden swiftness, you <i>SLAM</i> it down. Your " + macro.footDesc() + " shakes the ground and releases an audible <i>BOOOOM</i>.\
  2218. With a back and forth twist, your " + macro.toeDesc(true) + " knock over and pulverize buildings, driving them deep into the soil. Once you have lifted your " + macro.footDesc() + ", you notice it has left a " + length(macro.pawLength, unit, true) + " \
  2219. by "+ length(macro.pawWidth, unit, true) + " rubble-lined crater in the ground. At the center of the crater, a pond of blood and liquified prey is filling, fed by the crater and your dripping " + macro.soleDesc() + ".";
  2220. }
  2221. });
  2222. //paw area less than 1e11
  2223. rules["stomp"].push({
  2224. "test": function(container, macro) {
  2225. return macro.pawArea <= 1e11 &&
  2226. macro.pawArea > 1e7 &&
  2227. !hasAtleast(container, "Planet", 1) && //this is to prevent these interactions from running on planets that have been shrunk
  2228. isNonFatal(macro);
  2229. }, "desc": function(container, macro, verbose, flat) {
  2230. return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on "+ container.describe(verbose) + ". You feel it make contact, and cloud of dust spreads around the area. As the dust settles, you can see the clear outline of \
  2231. your " + macro.toeDesc(true) + "preserved in newly formed hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone; forming the wall of the " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " wide \
  2232. dust-filled crater you created.";
  2233. }
  2234. });
  2235. rules["stomp"].push({
  2236. "test": function(container, macro) {
  2237. return macro.pawArea <= 1e11 &&
  2238. macro.pawArea > 1e7 &&
  2239. !hasAtleast(container, "Planet", 1) &&
  2240. isFatal(macro);
  2241. }, "desc": function(container, macro, verbose, flat) {
  2242. return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on "+ container.describe(verbose) + ". You feel it make contact, and cloud of dust spreads around the area. As the dust settles, you can see the clear outline of your " + macro.toeDesc(true) + "\
  2243. preserved in newly formed hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone and twisted steel; forming the wall of the " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " wide debris-filled crater you created.";
  2244. }
  2245. });
  2246. rules["stomp"].push({
  2247. "test": function(container, macro) {
  2248. return macro.pawArea <= 1e11 &&
  2249. macro.pawArea > 1e7 &&
  2250. !hasAtleast(container, "Planet", 1) &&
  2251. isGory(macro);
  2252. }, "desc": function(container, macro, verbose, flat) {
  2253. return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on "+ container.describe(verbose) + ". You feel it make contact, and cloud of dust spreads around the area. As the dust settles, you can see the clear outline of your " + macro.toeDesc(true) + "\
  2254. preserved in debris strewn hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone and twisted steel; forming the wall of the " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " wide gore-filled crater you created. \
  2255. The basin of the crater lined with with a smooth steel, glass, and bone aggregate. Steam rises from the mix as it cools and hardens";
  2256. }
  2257. });
  2258. rules["stomp"].push({
  2259. "test": function(container, macro) {
  2260. return macro.pawArea <= 1e11 &&
  2261. macro.pawArea > 1e7 &&
  2262. !hasAtleast(container, "Planet", 1) &&
  2263. isSadistic(macro);
  2264. }, "desc": function(container, macro, verbose, flat) {
  2265. return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on "+ container.describe(verbose) + ". As you lower your leg, you feel it catch the tops of the taller skycrapers first, collapsing them with no effort. As they fall, you \
  2266. crush more and more buildings until you feel your " + macro.footDesc() + " smash into the ground. You settle into the landscape and cloud of dust spreads around the area. As the dust settles, you can see the clear outline of your " + macro.toeDesc(true) + "preserved in debris strewn \
  2267. hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone and twisted steel; forming the wall of the " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " wide gore-filled crater you created. The basin of the crater \
  2268. lined with with a smooth steel, glass, and bone aggregate. Steam rises from the mix as it cools and hardens";
  2269. }
  2270. });
  2271. //paw area less than 2e14
  2272. rules["stomp"].push({
  2273. "test": function(container, macro) {
  2274. return (macro.pawArea < 2e14 ||
  2275. hasAtleast(container, "Continent", 1)) &&
  2276. macro.pawArea > 1e11 &&
  2277. !hasAtleast(container, "Planet", 1) &&
  2278. isNonFatal(macro);
  2279. }, "desc": function(container, macro, verbose, flat) {
  2280. return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on "+ container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. Your " + macro.footDesc() + "\
  2281. continues sinking into the bedrock until only your enoumous calf is above where the ground was moments before. Two distict, concentric craters have formed below you. The inner one is a " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " image \
  2282. of your "+ macro.footDesc() + " surrounded by irregular mountains that barely peek over the rim of the outer " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its molded print, you notice that \
  2283. the bottom of the smaller crater is filled with deep ravines.";
  2284. }
  2285. });
  2286. rules["stomp"].push({
  2287. "test": function(container, macro) {
  2288. return (macro.pawArea < 2e14 ||
  2289. hasAtleast(container, "Continent", 1)) &&
  2290. macro.pawArea > 1e11 &&
  2291. !hasAtleast(container, "Planet", 1) &&
  2292. isFatal(macro);
  2293. }, "desc": function(container, macro, verbose, flat) {
  2294. return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on "+ container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. Your " + macro.footDesc() + "\
  2295. continues sinking into the bedrock until only your enoumous blood-soaked calf is above where the ground was moments before. Two distict, concentric craters have formed below you. The inner one is a " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " image \
  2296. of your "+ macro.footDesc() + " surrounded by irregular mountains of of broken concrete and steel that barely peek over the rim of the outer " + length((Math.pow(macro.pawArea/Math.PI, .5)* 3), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its \
  2297. molded print, you notice that the bottom of the smaller crater is filled with ravines that reach all the way to the mantle. With time, a supervolcano will form here.";
  2298. }
  2299. });
  2300. rules["stomp"].push({
  2301. "test": function(container, macro) {
  2302. return (macro.pawArea < 2e14 ||
  2303. hasAtleast(container, "Continent", 1)) &&
  2304. macro.pawArea > 1e11 &&
  2305. !hasAtleast(container, "Planet", 1) &&
  2306. isGory(macro);
  2307. }, "desc": function(container, macro, verbose, flat) {
  2308. return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on "+ container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. The shrapnel riding behind the \
  2309. shocwave rips thorugh the area, painting it in red. Your " + macro.footDesc() + " continues sinking into the bedrock until only your enoumous blood-soaked calf is above where the ground was moments before. Two distict, concentric craters have formed below you. The inner one is a \
  2310. " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " image of your "+ macro.footDesc() + " surrounded by irregular mountains composed of broken concrete and steel that barely peek over the rim of the outer \
  2311. " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its molded print, you notice that the bottom of the smaller crater is filled with ravines that reach all the way to the mantle. The lava \
  2312. seeping upwards begins melting the steel, glass, concrete, and bone fragments that surround it.";
  2313. }
  2314. });
  2315. rules["stomp"].push({
  2316. "test": function(container, macro) {
  2317. return (macro.pawArea < 2e14 ||
  2318. hasAtleast(container, "Continent", 1)) &&
  2319. macro.pawArea > 1e11 &&
  2320. !hasAtleast(container, "Planet", 1) &&
  2321. isSadistic(macro);
  2322. }, "desc": function(container, macro, verbose, flat) {
  2323. return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on "+ container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. The shrapnel riding behind the \
  2324. shockave rips thorugh the area, painting it in red. Your " + macro.footDesc() + "continues sinking into the bedrock until only your enoumous blood-soaked calf is above where the ground was moments before. Two distict, concentric craters have formed below you. The inner one is a \
  2325. " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " image of your "+ macro.footDesc() + " surrounded by irregular mountains of of broken concrete and steel that barely peek over the rim of the outer \
  2326. " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its molded print, you notice that the bottom of the smaller crater is filled with ravines that reach all the way to the mantle. The lava \
  2327. seeping upwards begins melting the steel, glass, concrete, and bone fragments that surround it. The simple act of slamming your " + macro.footDesc() + " down has created a " + (1e7 <= (Math.pow(macro.pawArea/Math.PI, .5)* 4) ? "planet-wide":length((Math.pow(macro.pawArea/Math.PI, .5)* 4), unit, true) + " wide") + " \
  2328. wasteland.";
  2329. }
  2330. });
  2331. // stomping a planet
  2332. rules["stomp"].push({
  2333. "test": function(container, macro) {
  2334. return hasExactly(container, "Planet", 1) &&
  2335. hasOnly(container, ["Planet"]) &&
  2336. isFatal(macro);
  2337. }, "desc": function(container, macro, verbose, flat) {
  2338. return "You place your two unbelievably large " + macro.footDesc(true) + " around "+ container.describe(verbose) + " and begin to squeeze it between your " + length(macro.pawWidth, unit, true) + " wide " + macro.toeDesc(true) + ". As you apply pressure, the captive globe \
  2339. begins to bulge outward at the middle, and firmly press against its prison. Continuing to crush it, you feel the continents deform and magma begin to flow over the surface, fighting with and evaporating the oceans. As the last of the water drys up, the atmosphere thins and \
  2340. spreads over your form, cooling the lava against the hard vacuum of space. Left with a crushed rocky orb between your " + macro.footDesc() + ", you start slowly increasing the pressure on the planet, and feel as it goes from a rough sphere to a rapidly crumbling pancake. The \
  2341. remaining rock grinds away to dust as you massage your mighty " + macro.soleDesc(true) + " against each other.";
  2342. }
  2343. });
  2344. rules["stomp"].push({
  2345. "test": function(container, macro) {
  2346. return hasExactly(container, "Planet", 1) &&
  2347. hasOnly(container, ["Planet"]) &&
  2348. isGory(macro);
  2349. }, "desc": function(container, macro, verbose, flat) {
  2350. return "You place your two unbelievably large " + macro.footDesc(true) + " around "+ container.describe(verbose) + ". As your " + macro.soleDesc(true) + " spread across the surface of the planet, the civilization beneath breaks apart and lubricates the land.\
  2351. You shift your " + macro.footDesc() + " for better grip and begin to squeeze the planet between your " + length(macro.pawWidth, unit, true) + " wide " + macro.toeDesc(true) + ". As you apply pressure, the captive globe begins to bulge outward at the middle, \
  2352. and press up against its prison. Continuing to crush it, you feel the continents deform and magma begin to flow over the surface. The surface warms beneath you, as the dwindling oceans fill with cooling stone. As the last of the water drys up, the atmosphere thins \
  2353. and spreads over your form, cooling the remaining lava against the hard vacuum of space. Left with a crushed rocky orb between your " + macro.footDesc() + ", you start slowly increasing the pressure on the planet, and feel as it goes from a rough sphere to a rapidly \
  2354. crumbling pancake. The remaining rock grinds away to dust as you massage your mighty " + macro.soleDesc(true) + " against each other.";
  2355. }
  2356. });
  2357. rules["stomp"].push({
  2358. "test": function(container, macro) {
  2359. return hasExactly(container, "Planet", 1) &&
  2360. hasOnly(container, ["Planet"]) &&
  2361. isSadistic(macro);
  2362. }, "desc": function(container, macro, verbose, flat) {
  2363. return "You place your two unbelievably large " + macro.footDesc(true) + " around "+ container.describe(verbose) + ". As your " + macro.soleDesc(true) + " spread across the surface of the planet, the civilization beneath breaks apart and lubricates the land.\
  2364. You shift your " + macro.footDesc() + " for better grip and begin to squeeze the planet between your " + length(macro.pawWidth, unit, true) + " wide " + macro.toeDesc(true) + ". As you apply pressure, the captive globe begins to bulge outward at the middle, \
  2365. and press up against its prison. Continuing to crush it, you feel the continents deform and magma begin to flow over the surface. The planet burns and dies below you, as the dwindling oceans fill with cooling stone. As the last of the water drys up, the atmosphere thins \
  2366. and spreads over your form, cooling the remaining lava against the hard vacuum of space. Left with a crushed rocky orb between your " + macro.footDesc() + ", you start slowly increasing the pressure on the planet, and feel as it goes from a rough sphere to a rapidly \
  2367. crumbling pancake. The remaining rock grinds away to dust as you massage your mighty " + macro.soleDesc(true) + " against each other.";
  2368. }
  2369. });
  2370. rules["stomp"].push({
  2371. "test": function(container, macro) {
  2372. return (hasAtleast(container, "Star", 1) ||
  2373. hasAtleast(container, "Solar System", 1)) &&
  2374. isFatal(macro);
  2375. }, "desc": function(container, macro, verbose, flat) {
  2376. return "You place your two " + length(macro.pawLength, unit, true) + " long " + macro.footDesc(true) + " around " + container.describe(verbose) + " and begin to squeeze " + (container.count > 1 ? "them" : "it") + " between your " + length(macro.pawWidth, unit, true) + " wide \
  2377. " + macro.toeDesc(true) + ". The crushing gravity your " + macro.footDesc(true) + " generate is enough to vaporize your prey before your " + macro.toeDesc(true) + " even touch each other. As they come together, the energy crushes the remaining dust with enough pressure to form \
  2378. new elements. Eventually nothing remains but the bottom of your " + macro.footDesc(true) + ".";
  2379. }
  2380. });
  2381. // ANAL VORE
  2382. rules["anal-vore"].push({
  2383. "test": function(container, macro) {
  2384. return hasExactly(container, "Person", 1) &&
  2385. hasOnly(container, ["Person"]);
  2386. }, "desc": function(container, macro, verbose, flat) {
  2387. let adjective = ["musky","winding","churning"][Math.floor(Math.random()*3)];
  2388. return "Your weighty rump slams against the ground. A shock of pleasure runs up your spine as a " + container.describe(verbose) + " slides up your ass," +
  2389. (macro.maleParts ? " grinding against your prostate" : "") + ". A powerful clench drags them deeper into your bowels, sealing them away in your " + adjective + " depths.";
  2390. }
  2391. });
  2392. rules["anal-vore"].push({
  2393. "test": function(container, macro) {
  2394. return hasExactly(container, "Car", 1) &&
  2395. hasOnly(container, ["Car"]);
  2396. }, "desc": function(container, macro, verbose, flat) {
  2397. return "You ram " + container.describe(verbose) + " up your ass, biting your lip as it" + (macro.maleParts ? " rubs along your prostate" : " slides into velvety depths") + ".\
  2398. You moan and clench hard, yanking it in with a wet <i>shlrrp</i> and abruplty silencing its blaring horn.";
  2399. }
  2400. });
  2401. rules["anal-vore"].push({
  2402. "test": function(container, macro) {
  2403. return hasExactly(container, "Bus", 1) &&
  2404. hasOnly(container, ["Bus"]);
  2405. }, "desc": function(container, macro, verbose, flat) {
  2406. return "A speeding bus slams on its brakes as you abruptly sit - but it's too late to stop. A gasp flies from your lips as it penetrates your greedy ass, sinking halfway in and coming to a halt. \
  2407. You grunt and squeeze, causing its frame to creak and groan. Two fingers to the back are enough to get it moving again, and it slowly works inside. You shiver and moan, taking it in all the way. \
  2408. Your ass claims " + container.describe(verbose) + ".";
  2409. }
  2410. });
  2411. rules["anal-vore"].push({
  2412. "test": function(container, macro) {
  2413. return hasExactly(container, "Business", 1) &&
  2414. hasOnly(container, ["Business"]);
  2415. }, "desc": function(container, macro, verbose, flat) {
  2416. return "You set your weighty rump down on " + container.describe() + " and feel it penerate your hole. Once your weight has settled you clench your sphincter, seperating the building from its foundations with a <i>crCraCHH</i> \
  2417. pulling it off the groud and inside of your ass. You feel the immense pressure of your anal cavity slowly crushing the building, bringing newfound pleasure with every shift and tremour within the structure.";
  2418. }
  2419. });
  2420. rules["anal-vore"].push({
  2421. "test": function(container, macro) {
  2422. return hasExactly(container, "Train", 1) &&
  2423. hasOnly(container, ["Train"]);
  2424. }, "desc": function(container, macro, verbose, flat) {
  2425. var cars = container.contents["Train"].contents["Train Car"].count;
  2426. return "Your massive fingers wrap around a train, yanking it from the rails with a tremendous screech of metal-on-metal. You squat down low, eyes rolling back in anticipation as you thrust the locomotive towards your massive ass - and then it hits home. A moan of pleasure shakes the earth, your ravenous pucker spread around the engine and sucking it in with a <i>squelch</i>. Powerful muscles squeeze and grab...and " + container.describe(verbose) + " swiftly vanishes into your bowels, every one of the " + cars + " cars a fresh shock of pleasure as they glide into your musky depths.";
  2427. }
  2428. });
  2429. rules["anal-vore"].push({
  2430. "test": function(container, macro) {
  2431. return hasExactly(container, "Planet", 1) &&
  2432. hasOnly(container, ["Planet"]);
  2433. }, "desc": function(container, macro, verbose, flat) {
  2434. return "Your enormous hands guide a planet towards your cheeks - pressing it firmly into your pucker with a dull, muffled <i>shlph</i>...and " + container.describe(verbose) + " sinks into your bowels, sealed away from the universe...";
  2435. }
  2436. });
  2437. //Cock Vore
  2438. rules["cock-vore"].push({
  2439. "test": function(container, macro) {
  2440. return macro.dickMass <= 1000 &&
  2441. container.count > 0;
  2442. }, "desc": function(container, macro, verbose, flat) {
  2443. return "You snatch " + container.describe(verbose) + " from the ground and shove them inside your " + macro.describeDick + ". With a <i>sluurp</i> you pull them deep into your shaft. You watch as the bulge in your manhood \
  2444. gets pulled closer to your body by powerful clenches, until it vanishes into your " + pickString("throbbing","churning","eager","awaiting","heavy") + " balls.";
  2445. }
  2446. });
  2447. rules["cock-vore"].push({
  2448. "test": function(container, macro) {
  2449. return macro.dickMass <= 50000 &&
  2450. macro.dickMass > 1000 &&
  2451. container.count > 0;
  2452. }, "desc": function(container, macro, verbose, flat) {
  2453. return "You pluck " + container.describe(verbose) + " from the ground and shove them against the head of your " + length(macro.dickDiameter, unit, true) + " wide " + macro.describeDick + ". They struggle to escape your grasp, while your cockslit \
  2454. opens and devours them with a <i>sluuurP</i>. You watch as the squirming bulge in your manhood travels down your shaft until it vanishes into your " + pickString("throbbing","churning","eager","awaiting","heavy") + " balls.";
  2455. }
  2456. });
  2457. rules["cock-vore"].push({
  2458. "test": function(container, macro) {
  2459. return macro.dickMass <= 5000000 &&
  2460. macro.dickMass > 50000 &&
  2461. container.count > 0;
  2462. }, "desc": function(container, macro, verbose, flat) {
  2463. return "Your gigantic fingers reach down and grab " + container.describe(verbose) + ". Holding them in your iron grip, you raise them to your awaitng " + macro.describeDick + ". As they struggle to escape, your cockslit opens wide and envelops your prey. Once it has swallowed everything, it clamps down and pulls those unfortunate enough to be in your shaft deep inside,\
  2464. packing down its meal with muffled <i>snAps</i> and <i>CRRUnCHes</i>. Enventually your prey reaches the base of your cock, and everything left gets shoved into your " + pickString("throbbing","churning","eager","awaiting","heavy") + " balls with a final mighty clench.";
  2465. }
  2466. });
  2467. rules["cock-vore"].push({
  2468. "test": function(container, macro) {
  2469. return macro.dickMass <= 1e9 &&
  2470. macro.dickMass > 5000000 &&
  2471. container.count > 0;
  2472. }, "desc": function(container, macro, verbose, flat) {
  2473. return "You lay the " + length(macro.dickDiameter, unit, true) + " wide tip of your cock on the ground and thrust forward, filling your cock with " + container.describe(verbose) + ". The tip of your member bulges with its cargo. As you slowly clench to drag your prey into your bulging dick, the sensation of them rubbing against the inside of your cock causes you to release a glob of precum that lubricates your stretched passage. \
  2474. After several more powerful clenches, you feel the bulge pass the halfway mark of your " + macro.describeDick + ". The speed of the bulge picks up, as the entirety of your captive prey has been thoughly lubricated. You feel them slide through your utethra, and shudder with anticipation as they approach your \
  2475. " + pickString("throbbing","churning","eager","awaiting","heavy","mammoth") + " balls. Finally your meal reaches your body, and drops into your cum factories.";
  2476. }
  2477. });
  2478. rules["cock-vore"].push({
  2479. "test": function(container, macro) {
  2480. return macro.dickMass <= 1e14 &&
  2481. macro.dickMass > 1e9 &&
  2482. container.count > 0;
  2483. }, "desc": function(container, macro, verbose, flat) {
  2484. return "You lay the " + length(macro.dickDiameter, unit, true) + " wide tip of your cock on the ground and grind it along the earth, ripping up the terrain and giving all in your path nowhere to go; except into your " + macro.describeDick + ". The colossal tip of your member bulges with " + container.describe(verbose) + ". As you slowly clench your mighty rod, you feel your prey shift and slide along the inside of your cum channel. \
  2485. After a few more moments of pure pleasure, you feel the bulge pass the halfway mark of your tool. The speed of the bulge picks up, as the entirety of your captive prey has been compacted and lubricated by their journey. With every pull, a shudder of ecstasy goes up your spine, until those inside your cock finally reach their ultimate destination, \
  2486. your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls.";
  2487. }
  2488. });
  2489. rules["cock-vore"].push({
  2490. "test": function(container, macro) {
  2491. return macro.dickMass <= 1e19 &&
  2492. macro.dickMass > 1e14 &&
  2493. container.count > 0;
  2494. }, "desc": function(container, macro, verbose, flat) {
  2495. return "You lay your " + length(macro.dickDiameter, unit, true) + " across member on the terrain and begin using your mammoth dick muscles to create a mighty wind, pulling in the surrounding landscape, ripping up the terrain and pulling it within your " + macro.describeDick + ". The colossal slit at the tip of your staff opens wide as buildings, trees, and everything else gets sucked inside.\
  2496. You feel the prey sliding down your cock rub against your utethra as they pass through. You can even see some of the larger buildings as small, quick moving bulges within your manhood. After several minutes of sucking, your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls are filled by " + container.describe(verbose) + ". As you shift you cock off the ground, you \
  2497. the satisfying weight of your prey bounce and jiggle within your sack.";
  2498. }
  2499. });
  2500. rules["cock-vore"].push({
  2501. "test": function(container, macro) {
  2502. return (macro.dickMass <= 1e23 ||
  2503. nothingLarger(container, "Continent")) &&
  2504. macro.dickMass > 1e19 &&
  2505. container.count > 0;
  2506. }, "desc": function(container, macro, verbose, flat) {
  2507. return "You lay your " + length(macro.dickDiameter, unit, true) + " across member on the planet and begin using your enourmous dick muscles to vacuum in the surrounding landscape, ripping up huge chunks of the terrain and pulling them inside your " + macro.describeDick + ". The ginormous gaping slit at the tip of your colossal dick opens wide as cities, rivers, lakes, and mountains vanish into your depths. \
  2508. A steady stream of unbroken friction rubs against the inside of your mammoth tool, almost causing you to black out from pleasure. As your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls fill, you start slowing down your enormous contractions, until you have " + container.describe(verbose) + " captive within your stretched sack.";
  2509. }
  2510. });
  2511. rules["cock-vore"].push({
  2512. "test": function(container, macro) {
  2513. return hasExactly(container, "Planet", 1) &&
  2514. hasOnly(container, ["Planet"]) &&
  2515. macro.dickGirth <= 2.5e14;
  2516. }, "desc": function(container, macro, verbose, flat) {
  2517. return "You shove your " + length(macro.dickDiameter, unit, true) + " wide throbbing cockhead against the planet as your greedy slit stretches wide. The globe shudders and begins to slowly enter your stretched hole. As you get closer and closer to covering an entire hemisphere with \
  2518. your " + macro.describeDick + ", you feel the pressure rise. Shoving the planet inside your cock takes more and more effort, until with a final shove, you feel your tip of your dick pass the center of the sphere, and hold it snug. You stop to squeeze your shaft, and feel how far it has been stretched outward.\
  2519. You begin flexing your cock to bring the world fully inside your enourmous prick, and after a few more gulps, light ceases to fall on Earth. You help your cock along with its planetary feast by grabbing it and slowly pulling down the shaft, lodging the planet deeper, and deeper, and deeper within you.\
  2520. After what seems like a lifetime of pleasure, the world finally reaches the base of your thick cock, and squeezes down into your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls. You reach down and touch your sack, feeling it digest " + container.describe(verbose) + ".";
  2521. }
  2522. });
  2523. rules["cock-vore"].push({
  2524. "test": function(container, macro) {
  2525. return hasExactly(container, "Planet", 1) &&
  2526. hasOnly(container, ["Planet"]) &&
  2527. macro.dickGirth > 2.5e14;
  2528. }, "desc": function(container, macro, verbose, flat) {
  2529. return "You shove your " + length(macro.dickDiameter, unit, true) + " wide throbbing cockhead against the planet as your greedy slit stretches wide to envelop it. You feel it slowly enter your gaping hole and after a few massive clences of your " + macro.describeDick + ", light ceases to fall on Earth. \
  2530. You run your fingers down you shaft, feeling the bulge, and massaging it along. The slurping of your cock pulls it toward your abdomen until it eventually runs out of length, and is squeezed down into your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls. You reach down and touch your sack, feeling it digest " + container.describe(verbose) + ".";
  2531. }
  2532. });
  2533. rules["cock-vore"].push({
  2534. "test": function(container, macro) {
  2535. return hasAtleast(container, "Star", 1) ||
  2536. hasAtleast(container, "Solar System", 1)
  2537. }, "desc": function(container, macro, verbose, flat) {
  2538. return "You open your cumslit wide and let gravity fill your " + length(macro.dickDiameter, unit, true) + " wide throbbing cockhead with " + container.describe(verbose) + ". The tip of your cock closes and begins clenching to pull your prey deeper. \
  2539. You run your fingers down your " + macro.describeDick + ", feeling it work its meal deeper within your shaft, and massaging it ensure everything inside continues towards your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls. \
  2540. As your cock finishes its work, you feel the passage to your balls stretch wide, fill, and them empty as your balls fill, and begin the process of digestion.";
  2541. }
  2542. });
  2543. //Ball Smother
  2544. //Balls weigh 1,000kg or less
  2545. rules["ball-smother"].push({
  2546. "test": function(container, macro) {
  2547. return macro.ballMass <= 1000 &&
  2548. container.count > 0 &&
  2549. isNonFatal(macro);
  2550. }, "desc": function(container, macro, verbose, flat) {
  2551. return "Your giant balls impact the ground with a <i>thud</i>, pinning " + container.describe(verbose) + " between your weighty orbs.";
  2552. }
  2553. });
  2554. rules["ball-smother"].push({
  2555. "test": function(container, macro) {
  2556. return macro.ballMass <= 1000 &&
  2557. container.count > 0 &&
  2558. isFatal(macro);
  2559. }, "desc": function(container, macro, verbose, flat) {
  2560. return "Your " + mass(macro.ballMass, unit, true) + " balls impact the ground with a <i>thud</i>, crushing " + container.describe(verbose) + ".";
  2561. }
  2562. });
  2563. rules["ball-smother"].push({
  2564. "test": function(container, macro) {
  2565. return macro.ballMass <= 1000 &&
  2566. container.count > 0 &&
  2567. isGory(macro);
  2568. }, "desc": function(container, macro, verbose, flat) {
  2569. return "Your " + mass(macro.ballMass, unit, true) + " balls impact the ground with a <i>thud</i> trapping " + container.describe(verbose) + " and grinding them into the pavement. They briefly struggle to escape before succumbing to the weight bearing down on them.";
  2570. }
  2571. });
  2572. rules["ball-smother"].push({
  2573. "test": function(container, macro) {
  2574. return macro.ballMass <= 1000 &&
  2575. container.count > 0 &&
  2576. isSadistic(macro);
  2577. }, "desc": function(container, macro, verbose, flat) {
  2578. return "Your " + mass(macro.ballMass, unit, true) + " balls impact the ground with a <i>thud</i> trapping " + container.describe(verbose) + " and grinding them into the pavement. They briefly struggle to escape before being crushed into a gory mess that leaves a slick of blood on your swinging sack.";
  2579. }
  2580. });
  2581. //Balls weigh 50,000kg or less
  2582. rules["ball-smother"].push({
  2583. "test": function(container, macro) {
  2584. return macro.ballMass <= 50000 &&
  2585. macro.ballMass > 1000 &&
  2586. container.count > 0 &&
  2587. isNonFatal(macro);
  2588. }, "desc": function(container, macro, verbose, flat) {
  2589. return "Your " + length(macro.ballDiameter, unit, true) + " wide balls impact the ground with a <i>thump</i>. They spread over " + container.describe(verbose) + " and settle into the ground.";
  2590. }
  2591. });
  2592. rules["ball-smother"].push({
  2593. "test": function(container, macro) {
  2594. return macro.ballMass <= 50000 &&
  2595. macro.ballMass > 1000 &&
  2596. container.count > 0 &&
  2597. isFatal(macro);
  2598. }, "desc": function(container, macro, verbose, flat) {
  2599. return "Your " + length(macro.ballDiameter, unit, true) + " wide balls swing down and into " + container.describe(verbose) + " destroying everything in their path and leaving a gouge in the ground.";
  2600. }
  2601. });
  2602. rules["ball-smother"].push({
  2603. "test": function(container, macro) {
  2604. return macro.ballMass <= 50000 &&
  2605. macro.ballMass > 1000 &&
  2606. container.count > 0 &&
  2607. isGory(macro);
  2608. }, "desc": function(container, macro, verbose, flat) {
  2609. return "Your " + length(macro.ballDiameter, unit, true) + " wide balls swing down and into " + container.describe(verbose) + " with the force of a wrecking ball. The momentum of the swing destroying everything in their path and leaving a trail of destruction.";
  2610. }
  2611. });
  2612. rules["ball-smother"].push({
  2613. "test": function(container, macro) {
  2614. return macro.ballMass <= 50000 &&
  2615. macro.ballMass > 1000 &&
  2616. container.count > 0 &&
  2617. isSadistic(macro);
  2618. }, "desc": function(container, macro, verbose, flat) {
  2619. return "Your " + length(macro.ballDiameter, unit, true) + " wide balls swing down and into " + container.describe(verbose) + " with the force of a wrecking ball. The momentum of your mighty sack destroying everything in its path and leaving a trail of destruction. Your balls swing back through the remains of your prey, the massive weight converting everything remaining into unidentifiable detritus.";
  2620. }
  2621. });
  2622. //Balls weigh 5,000,000kg or less
  2623. rules["ball-smother"].push({
  2624. "test": function(container, macro) {
  2625. return macro.ballMass <= 5000000 &&
  2626. macro.ballMass > 50000 &&
  2627. container.count > 0 &&
  2628. isNonFatal(macro);
  2629. }, "desc": function(container, macro, verbose, flat) {
  2630. return "Your " + length(macro.ballDiameter, unit, true) + " wide balls cast a shadow over " + container.describe(verbose) + " for a few seconds before coming to rest. You feel your sack shift as it settles into the landscape";
  2631. }
  2632. });
  2633. rules["ball-smother"].push({
  2634. "test": function(container, macro) {
  2635. return macro.ballMass <= 5000000 &&
  2636. macro.ballMass > 50000 &&
  2637. container.count > 0 &&
  2638. isFatal(macro);
  2639. }, "desc": function(container, macro, verbose, flat) {
  2640. return "Your " + length(macro.ballDiameter, unit, true) + " wide balls cast a shadow over " + container.describe(verbose) + " for a few seconds before slamming into the earth with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift as it slowly pulverizes everything unfortunate enough to be trapped beneath it. When you heave your weighty orbs off the ground, only rubble remains.";
  2641. }
  2642. });
  2643. rules["ball-smother"].push({
  2644. "test": function(container, macro) {
  2645. return macro.ballMass <= 5000000 &&
  2646. macro.ballMass > 50000 &&
  2647. container.count > 0 &&
  2648. isGory(macro);
  2649. }, "desc": function(container, macro, verbose, flat) {
  2650. return "Your " + length(macro.ballDiameter, unit, true) + " wide balls cast a shadow over " + container.describe(verbose) + " for a few seconds before slamming into the earth with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift and settle as it slowly pulverizes everything unfortunate enough to be trapped beneath it. After you heave your weighty orbs off the ground all that remains of your victims is gore streaked rubble and twisted steel.";
  2651. }
  2652. });
  2653. rules["ball-smother"].push({
  2654. "test": function(container, macro) {
  2655. return macro.ballMass <= 5000000 &&
  2656. macro.ballMass > 50000 &&
  2657. container.count > 0 &&
  2658. isSadistic(macro);
  2659. }, "desc": function(container, macro, verbose, flat) {
  2660. return "Your " + length(macro.ballDiameter, unit, true) + " wide balls cast a shadow over " + container.describe(verbose) + " for a few seconds before slamming into the earth with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift and settle as it slowly pulverizes everything unfortunate enough to be trapped beneath it. After you heave your weighty orbs off the ground you see that those that were trapped beneath your cum factories are nothing but crumpled bodies lying amist the rubble.";
  2661. }
  2662. });
  2663. //Balls Weigh 1e9 kg or less
  2664. rules["ball-smother"].push({
  2665. "test": function(container, macro) {
  2666. return macro.ballMass <= 1e9 &&
  2667. macro.ballMass > 5000000 &&
  2668. container.count > 0 &&
  2669. isNonFatal(macro);
  2670. }, "desc": function(container, macro, verbose, flat) {
  2671. return "Your " + length(macro.ballDiameter, unit, true) + " thick balls briefly eclipse the sun before coming to rest on " + container.describe(verbose) + " with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift as it spreads over the terrain and forms two noticable indents.";
  2672. }
  2673. });
  2674. rules["ball-smother"].push({
  2675. "test": function(container, macro) {
  2676. return macro.ballMass <= 1e9 &&
  2677. macro.ballMass > 5000000 &&
  2678. container.count > 0 &&
  2679. isFatal(macro);
  2680. }, "desc": function(container, macro, verbose, flat) {
  2681. return "Your " + length(macro.ballDiameter, unit, true) + " thick balls briefly eclipse the sun before crushing " + container.describe(verbose) + " with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift as it slowly pulverizes everything unfortunate enough to be trapped beneath it. When you finally heave your mighty manhood off the ground, you notice 2 massive divots in the terrain; testimony of your immense power.";
  2682. }
  2683. });
  2684. rules["ball-smother"].push({
  2685. "test": function(container, macro) {
  2686. return macro.ballMass <= 1e9 &&
  2687. macro.ballMass > 5000000 &&
  2688. container.count > 0 &&
  2689. isGory(macro);
  2690. }, "desc": function(container, macro, verbose, flat) {
  2691. return "Your " + length(macro.ballDiameter, unit, true) + " thick balls briefly eclipse the sun before pulverizing " + container.describe(verbose) + " with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift and settle as it slowly pulverizes everything unfortunate enough to be trapped beneath it. When you finally heave your mighty manhood off the ground, you notice 2 massive divots filled with rubble and gore in the terrain; testimony of your immense power.";
  2692. }
  2693. });
  2694. rules["ball-smother"].push({
  2695. "test": function(container, macro) {
  2696. return macro.ballMass <= 1e9 &&
  2697. macro.ballMass > 5000000 &&
  2698. container.count > 0 &&
  2699. isSadistic(macro);
  2700. }, "desc": function(container, macro, verbose, flat) {
  2701. return "Your " + length(macro.ballDiameter, unit, true) + " thick balls briefly eclipse the sun before pulverizing " + container.describe(verbose) + " with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack move and shudder as it's immense bulk flattens everything unfortunate enough to be trapped beneath it. When you finally heave your mighty manhood off the ground, you notice 2 massive divots filled with rubble and gore in the terrain; a fitting grave for those lesser than you.";
  2702. }
  2703. });
  2704. //Balls Weigh 1e12 kg or less
  2705. rules["ball-smother"].push({
  2706. "test": function(container, macro) {
  2707. return macro.ballMass <= 1e12 &&
  2708. macro.ballMass > 1e9 &&
  2709. container.count > 0 &&
  2710. isNonFatal(macro);
  2711. }, "desc": function(container, macro, verbose, flat) {
  2712. return "Your " + length(macro.ballDiameter, unit, true) + " diameter balls blot out the sky before coming to rest on " + container.describe(verbose) + " with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack push the ground aside to form two massive craters.";
  2713. }
  2714. });
  2715. rules["ball-smother"].push({
  2716. "test": function(container, macro) {
  2717. return macro.ballMass <= 1e12 &&
  2718. macro.ballMass > 1e9 &&
  2719. container.count > 0 &&
  2720. isFatal(macro);
  2721. }, "desc": function(container, macro, verbose, flat) {
  2722. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " diameter balls blot out the sky as they approach your target. The unstoppable force of your gigantic testicles <i>CRASHES</i> through " + container.describe(verbose) + " with little \
  2723. resistance, pancaking them into the ground. The violent impact generates a shockwave that bowls over surrounding trees and buildings. As you you heave your sack off the ground, two massive craters have formed at the impact site.";
  2724. }
  2725. });
  2726. rules["ball-smother"].push({
  2727. "test": function(container, macro) {
  2728. return macro.ballMass <= 1e12 &&
  2729. macro.ballMass > 1e9 &&
  2730. container.count > 0 &&
  2731. isGory(macro);
  2732. }, "desc": function(container, macro, verbose, flat) {
  2733. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " diameter balls blot out the sky as they approach your target. The unstoppable force of your gigantic testicles <i>CRASHES</i> through " + container.describe(verbose) + " with little \
  2734. resistance, pancaking them into the ground. The violent impact generates a shockwave that bowls over surrounding trees and buildings. As you heave your sack off the ground, two massive craters have formed at the impact site. A pool of blood and musk is rapidly forming at the bottom of each crater, with peices of debris floating in them.";
  2735. }
  2736. });
  2737. rules["ball-smother"].push({
  2738. "test": function(container, macro) {
  2739. return macro.ballMass <= 1e12 &&
  2740. macro.ballMass > 1e9 &&
  2741. container.count > 0 &&
  2742. isSadistic(macro);
  2743. }, "desc": function(container, macro, verbose, flat) {
  2744. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " diameter balls blot out the sky as they approach your target. The unstoppable force of your gigantic testicles <i>CRASHES</i> through " + container.describe(verbose) + " with little \
  2745. resistance, pancaking them into the ground. The violent impact generates a shockwave that bowls over surrounding trees and buildings. As you heave your sack off the ground, two massive craters have formed at the impact site. A pool of blood and musk is rapidly forming at the bottom of each crater, with bones and peices of debris floating in them.";
  2746. }
  2747. });
  2748. //Balls Weigh 1e15 kg or less
  2749. rules["ball-smother"].push({
  2750. "test": function(container, macro) {
  2751. return macro.ballMass <= 1e15 &&
  2752. macro.ballMass > 1e12 &&
  2753. container.count > 0 &&
  2754. isNonFatal(macro);
  2755. }, "desc": function(container, macro, verbose, flat) {
  2756. return "Your " + length(macro.ballDiameter, unit, true) + " wide balls cast darkness over " + container.describe(verbose) + " before settling into the terrain with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your gigantic orbs shovel out a spot for themselves with their mass alone.";
  2757. }
  2758. });
  2759. rules["ball-smother"].push({
  2760. "test": function(container, macro) {
  2761. return macro.ballMass <= 1e15 &&
  2762. macro.ballMass > 1e12 &&
  2763. container.count > 0 &&
  2764. isFatal(macro);
  2765. }, "desc": function(container, macro, verbose, flat) {
  2766. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " wide balls cast darkness over the land as they swing low and right through " + container.describe(verbose) + " like a hot knife through butter. \
  2767. You shudder as you feel the force of the impact travel through the entirety of your testicles. The shockwave travels for " + length(macro.ballDiameter, unit, true) + " destroying all in its path. As the initial impact subsides you feel your \
  2768. enormous balls shift away from each other as they furrow into the landscape.";
  2769. }
  2770. });
  2771. rules["ball-smother"].push({
  2772. "test": function(container, macro) {
  2773. return macro.ballMass <= 1e15 &&
  2774. macro.ballMass > 1e12 &&
  2775. container.count > 0 &&
  2776. isGory(macro);
  2777. }, "desc": function(container, macro, verbose, flat) {
  2778. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " wide balls cast darkness over the land as they swing low and right through " + container.describe(verbose) + " like a hot knife through butter. \
  2779. You shudder as you feel the force of the impact travel through the entirety of your testicles. The shockwave travels for " + length(macro.ballDiameter, unit, false) + " tossing people into the air and drestroying all in its path. As the \
  2780. initial impact subsides you feel your enormous balls shift away from each other as they furrow into the landscape and over the people that attempted to flee.";
  2781. }
  2782. });
  2783. rules["ball-smother"].push({
  2784. "test": function(container, macro) {
  2785. return macro.ballMass <= 1e15 &&
  2786. macro.ballMass > 1e12 &&
  2787. container.count > 0 &&
  2788. isSadistic(macro);
  2789. }, "desc": function(container, macro, verbose, flat) {
  2790. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " wide balls cast darkness over the land as they swing low and right through " + container.describe(verbose) + " like a hot knife through butter. \
  2791. You shudder as you feel the force of the impact travel through the entirety of your testicles. The shockwave travels for " + length(macro.ballDiameter, unit, false) + " tossing people into the air and drestroying all in its path. As the \
  2792. initial impact subsides you feel your enormous balls shift away from each other as they furrow into the landscape and over the people that attempted to flee. The ground is stained red with blood and gore.";
  2793. }
  2794. });
  2795. //Balls Weigh 1e20 kg or less
  2796. rules["ball-smother"].push({
  2797. "test": function(container, macro) {
  2798. return macro.ballMass <= 1e20 &&
  2799. macro.ballMass > 1e15 &&
  2800. container.count > 0 &&
  2801. isNonFatal(macro);
  2802. }, "desc": function(container, macro, verbose, flat) {
  2803. return "Your " + length(macro.ballDiameter, unit, true) + " thick balls cause night to fall before they come to rest on" + container.describe(verbose) + " . Each titanic testicle weighing " + mass(macro.ballMass, unit, false) + " . The craters left by each orb will scar the planet until its destruction.";
  2804. }
  2805. });
  2806. rules["ball-smother"].push({
  2807. "test": function(container, macro) {
  2808. return macro.ballMass <= 1e20 &&
  2809. macro.ballMass > 1e15 &&
  2810. container.count > 0 &&
  2811. isFatal(macro);
  2812. }, "desc": function(container, macro, verbose, flat) {
  2813. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " thick balls cause night to fall over the land. As they contact earth, they obliterate " + container.describe(verbose) + " with a dull <i>booOOOOooOOM</i>. \
  2814. The immesive forces involved cause your cum factories to bounce up into the air before coming down on the same spot. The second impact drives your titanic balls deep into the ground while throwing shrapnel in every direction. The craters left by your gonads will scar the planet until its destruction.";
  2815. }
  2816. });
  2817. rules["ball-smother"].push({
  2818. "test": function(container, macro) {
  2819. return macro.ballMass <= 1e20 &&
  2820. macro.ballMass > 1e15 &&
  2821. container.count > 0 &&
  2822. isGory(macro);
  2823. }, "desc": function(container, macro, verbose, flat) {
  2824. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " thick balls cause night to fall over the land. As they contact earth, they obliterate " + container.describe(verbose) + " with a dull <i>booOOOOooOOM</i>. \
  2825. The immesive forces involved cause your cum factories to bounce up into the air before coming down on the same spot. The second impact drives your titanic balls deep into the ground while throwing shrapnel in every direction. The craters left by your gonads quickly fill with various fluids, leaving two lakes forever on the planet.";
  2826. }
  2827. });
  2828. rules["ball-smother"].push({
  2829. "test": function(container, macro) {
  2830. return macro.ballMass <= 1e20 &&
  2831. macro.ballMass > 1e15 &&
  2832. container.count > 0 &&
  2833. isSadistic(macro);
  2834. }, "desc": function(container, macro, verbose, flat) {
  2835. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " thick balls cause night to fall over the land. As they contact earth, they obliterate " + container.describe(verbose) + " with a dull <i>booOOOOooOOM</i>. \
  2836. The immesive forces involved cause your cum factories to bounce up into the air before coming down on the same spot. The second impact drives your titanic balls deep into the ground while throwing rubble, bodies, and shrapnel in every direction. The craters left by your gonads quickly fill with various fluids, leaving two lakes forever on the planet.";
  2837. }
  2838. });
  2839. //Balls Weigh 1e24 kg or less
  2840. rules["ball-smother"].push({
  2841. "test": function(container, macro) {
  2842. return macro.ballMass <= 1e24 &&
  2843. macro.ballMass > 1e20 &&
  2844. container.count > 0 &&
  2845. isNonFatal(macro);
  2846. }, "desc": function(container, macro, verbose, flat) {
  2847. return "The Gravatational pull of your " + length(macro.ballDiameter, unit, true) + " across balls cause night to fall before they come to rest on" + container.describe(verbose) + " . Each monstrous testicle weighing " + mass(macro.ballMass, unit, false) + " . The impact of your manhood creating mountains and shaking earth";
  2848. }
  2849. });
  2850. rules["ball-smother"].push({
  2851. "test": function(container, macro) {
  2852. return macro.ballMass <= 1e24 &&
  2853. macro.ballMass > 1e20 &&
  2854. container.count > 0 &&
  2855. isFatal(macro);
  2856. }, "desc": function(container, macro, verbose, flat) {
  2857. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " across balls cause night to fall over the land. As they slam into the earth, they obliterate " + container.describe(verbose) + " with a thunderous <i>BOOOOOOM</i>. \
  2858. You feel the Earth twang and vibrate with the impact. The crater kicks up enough dust to throw off the seasons. Large fissures spread away from your privates in all directions, while the aftershocks of the impact alter and destroy the geology of the surrounding area.";
  2859. }
  2860. });
  2861. rules["ball-smother"].push({
  2862. "test": function(container, macro) {
  2863. return macro.ballMass <= 1e24 &&
  2864. macro.ballMass > 1e20 &&
  2865. container.count > 0 &&
  2866. isGory(macro);
  2867. }, "desc": function(container, macro, verbose, flat) {
  2868. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " across balls cause night to fall over the land. As they slam into the earth, they obliterate " + container.describe(verbose) + " with a thunderous <i>BOOOOOOM</i>. \
  2869. You feel the Earth twang and vibrate with the impact. The crater kicks up enough dust to throw off the seasons. Those that survived the blast are deafened as windows shatter around them and buildings shake on the verge of collapse. Large fissures spread away from your privates in all directions, while the aftershocks of the impact alter and destroy the geology of the surrounding area.";
  2870. }
  2871. });
  2872. rules["ball-smother"].push({
  2873. "test": function(container, macro) {
  2874. return macro.ballMass <= 1e24 &&
  2875. macro.ballMass > 1e20 &&
  2876. container.count > 0 &&
  2877. isSadistic(macro);
  2878. }, "desc": function(container, macro, verbose, flat) {
  2879. return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " across balls cause night to fall over the land. As they slam into the earth, they obliterate " + container.describe(verbose) + " with a thunderous <i>BOOOOOOM</i>. \
  2880. You feel the Earth twang and vibrate with the impact. The crater kicks up enough dust to throw off the seasons. Those that survived the blast are deafened as windows shatter around them and buildings shake on the verge of collapse. Large fissures spread away from your privates in all directions, while the aftershocks of the impact alter and destroy the geology of the surrounding area. \
  2881. You smell the tang of copper in the air, and know that the next rainfall with be red with the blood of those you have slaughtered.";
  2882. }
  2883. });
  2884. //Balls Weigh more than 1e24 kg
  2885. rules["ball-smother"].push({
  2886. "test": function(container, macro) {
  2887. return macro.ballMass > 1e24 &&
  2888. container.count > 0 &&
  2889. isNonFatal(macro);
  2890. }, "desc": function(container, macro, verbose, flat) {
  2891. return "The gravitational pull of your " + mass(macro.ballMass, unit, true) + " balls draw " + container.describe(verbose) + " into your sack, smushing them firmly against your " + length(macro.ballDiameter, unit, true) + " wide balls. ";
  2892. }
  2893. });
  2894. rules["ball-smother"].push({
  2895. "test": function(container, macro) {
  2896. return macro.ballMass > 1e24 &&
  2897. container.count > 0 &&
  2898. isFatal(macro);
  2899. }, "desc": function(container, macro, verbose, flat) {
  2900. return "The gravitational pull of your " + mass(macro.ballMass, unit, true) + " balls draw " + container.describe(verbose) + " into your sack, crushing " + (container.count == 1 ? "it" : "them") + " firmly against your " + length(macro.ballDiameter, unit, true) + " wide balls. The gravity each of your orbs tearing " + (container.count == 1 ? "it" : "them") + " asunder, spreading the debris across \
  2901. your sack, flattening and grinding until nothing remains but your colossal manhood.";
  2902. }
  2903. });
  2904. rules["ball-smother"].push({
  2905. "test": function(container, macro) {
  2906. return macro.ballMass > 1e24 &&
  2907. container.count > 0 &&
  2908. isGory(macro);
  2909. }, "desc": function(container, macro, verbose, flat) {
  2910. return "The gravitational pull of your " + mass(macro.ballMass, unit, true) + " balls draw " + container.describe(verbose) + " into your sack, obliterating " + (container.count == 1 ? "it" : "them") + " with \
  2911. your " + length(macro.ballDiameter, unit, true) + " wide balls. The gravity each of your orbs tearing " + (container.count == 1 ? "it" : "them") + " asunder. The many fragments of the collision \
  2912. expand outward before being pulled back against your groin. The debris spread across your sack, flattening and grinding until nothing remains but your colossal manhood.";
  2913. }
  2914. });
  2915. rules["ball-smother"].push({
  2916. "test": function(container, macro) {
  2917. return macro.ballMass > 1e24 &&
  2918. container.count > 0 &&
  2919. isSadistic(macro);
  2920. }, "desc": function(container, macro, verbose, flat) {
  2921. return "The gravitational pull of your " + mass(macro.ballMass, unit, true) + " balls draw " + container.describe(verbose) + " into your sack, decimating " + (container.count == 1 ? "it" : "them") + " with \
  2922. your " + length(macro.ballDiameter, unit, true) + " wide balls. The gravity each of your orbs ripping and tearing " + (container.count == 1 ? "it" : "them") + " asunder. The many fragments of the collision \
  2923. expand outward before being pulled back against your groin. The debris spread across your sack, flattening and grinding until nothing remains but your colossal manhood.";
  2924. }
  2925. });
  2926. //male orgasm
  2927. rules["male-orgasm"].push({
  2928. "test": function(container, macro, spurtVolume) {
  2929. return hasOnly(container, ["Person"]) &&
  2930. hasExactly(container, "Person", 1) &&
  2931. isNonFatal(macro);
  2932. }, "desc": function(container, macro, spurtVolume) {
  2933. return "You're cumming! Your " + macro.describeDick + " erupts, hosing down " + container.describe(verbose) + " with $VOLUME of your seed.";
  2934. }
  2935. });
  2936. rules["male-orgasm"].push({
  2937. "test": function(container, macro, spurtVolume) {
  2938. return hasOnly(container, ["Person"]) &&
  2939. hasExactly(container, "Person", 1) &&
  2940. isFatal(macro);
  2941. }, "desc": function(container, macro, spurtVolume) {
  2942. return "You're cumming! Your " + macro.describeDick + " erupts, shoving " + container.describe(verbose) + " them into a wall and drowning them in a $VOLUME-torrent of cum.";
  2943. }
  2944. });
  2945. rules["male-orgasm"].push({
  2946. "test": function(container, macro, spurtVolume) {
  2947. return hasOnly(container, ["Person"]) &&
  2948. hasExactly(container, "Person", 1) &&
  2949. isGory(macro);
  2950. }, "desc": function(container, macro, spurtVolume) {
  2951. return "You're cumming! Your " + macro.describeDick + " erupts, shoving " + container.describe(verbose) + " them into a wall; pinning them in place and suffocating them in a $VOLUME-torrent of cum.";
  2952. }
  2953. });
  2954. rules["male-orgasm"].push({
  2955. "test": function(container, macro, spurtVolume) {
  2956. return hasOnly(container, ["Person"]) &&
  2957. hasExactly(container, "Person", 1) &&
  2958. isSadistic(macro);
  2959. }, "desc": function(container, macro, spurtVolume) {
  2960. return "You're cumming! Your " + macro.describeDick + " erupts, shoving " + container.describe(verbose) + " them into a wall; pinning them in place with a $VOLUME-torrent of cum. As they gasp for breath, your cum fills their lungs and stomach. \
  2961. Their form falls lifeless on the ground once your cumshot has ended.";
  2962. }
  2963. });
  2964. //more than 5 and less than 50
  2965. rules["male-orgasm"].push({
  2966. "test": function(container, macro, spurtVolume) {
  2967. return spurtVolume <= 50 &&
  2968. spurtVolume > 5 &&
  2969. isNonFatal(macro);
  2970. }, "desc": function(container, macro, spurtVolume) {
  2971. return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + ".";
  2972. }
  2973. });
  2974. rules["male-orgasm"].push({
  2975. "test": function(container, macro, spurtVolume) {
  2976. return spurtVolume <= 50 &&
  2977. spurtVolume > 5 &&
  2978. isFatal(macro);
  2979. }, "desc": function(container, macro, spurtVolume) {
  2980. return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + ", shoving your prey against a nearby building. As your stream tapers off, you see that none of your prey could withstand the pressure of your cumshot.";
  2981. }
  2982. });
  2983. rules["male-orgasm"].push({
  2984. "test": function(container, macro, spurtVolume) {
  2985. return spurtVolume <= 50 &&
  2986. spurtVolume > 5 &&
  2987. isGory(macro);
  2988. }, "desc": function(container, macro, spurtVolume) {
  2989. return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + ", shoving your prey against a nearby building. As your stream tapers off, you see that none of your prey could withstand the pressure of your \
  2990. cumshot. The rubble and hardening cum covering the wall holds your victims in place against the structure.";
  2991. }
  2992. });
  2993. rules["male-orgasm"].push({
  2994. "test": function(container, macro, spurtVolume) {
  2995. return spurtVolume <= 50 &&
  2996. spurtVolume > 5 &&
  2997. isSadistic(macro);
  2998. }, "desc": function(container, macro, spurtVolume) {
  2999. return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + ", crushing your prey against a nearby building. As your stream tapers off, you see that none of your prey could withstand the pressure of your \
  3000. cumshot. The rubble and red-dyed cum covering the wall holds your victims in place against the structure.";
  3001. }
  3002. });
  3003. //less than 5e2
  3004. rules["male-orgasm"].push({
  3005. "test": function(container, macro, spurtVolume) {
  3006. return spurtVolume <= 500 &&
  3007. spurtVolume > 50 &&
  3008. isNonFatal(macro);
  3009. }, "desc": function(container, macro, spurtVolume) {
  3010. return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUMEs of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + ".";
  3011. }
  3012. });
  3013. rules["male-orgasm"].push({
  3014. "test": function(container, macro, spurtVolume) {
  3015. return spurtVolume <= 500 &&
  3016. spurtVolume > 50 &&
  3017. isFatal(macro);
  3018. }, "desc": function(container, macro, spurtVolume) {
  3019. return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUMEs of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + ", crushing and downing them at the same time.";
  3020. }
  3021. });
  3022. rules["male-orgasm"].push({
  3023. "test": function(container, macro, spurtVolume) {
  3024. return spurtVolume <= 500 &&
  3025. spurtVolume > 50 &&
  3026. isGory(macro);
  3027. }, "desc": function(container, macro, spurtVolume) {
  3028. return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUMEs of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + ", compacting and mangling everything in its path. As your cumshot ends, \
  3029. a thick stream of pink frothing fluids pours into nearby sewer drains, filling and clogging them.";
  3030. }
  3031. });
  3032. rules["male-orgasm"].push({
  3033. "test": function(container, macro, spurtVolume) {
  3034. return spurtVolume <= 500 &&
  3035. spurtVolume > 50 &&
  3036. isSadistic(macro);
  3037. }, "desc": function(container, macro, spurtVolume) {
  3038. return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUME of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + ", compacting and mangling everything in its path. The sheer pressure propelling \
  3039. your cum severs limbs and crumples steel. As your cumshot ends, a thick stream of pink frothing fluids pours into nearby sewer drains, filling and clogging them.";
  3040. }
  3041. });
  3042. //less than 5e3
  3043. rules["male-orgasm"].push({
  3044. "test": function(container, macro, spurtVolume) {
  3045. return spurtVolume <= 5000 &&
  3046. spurtVolume > 500 &&
  3047. isNonFatal(macro);
  3048. }, "desc": function(container, macro, spurtVolume) {
  3049. return "You're cumming! Your " + macro.ballDiameter + " balls bounce and your " + macro.describeDick + "begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + ".";
  3050. }
  3051. });
  3052. rules["male-orgasm"].push({
  3053. "test": function(container, macro, spurtVolume) {
  3054. return spurtVolume <= 5000 &&
  3055. spurtVolume > 500 &&
  3056. isFatal(macro);
  3057. }, "desc": function(container, macro, spurtVolume) {
  3058. return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls bounce and your " + macro.describeDick + " begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + ".\
  3059. Limbs and rubble float away on the jizz, vanishing into the storm drains and down the street.";
  3060. }
  3061. });
  3062. rules["male-orgasm"].push({
  3063. "test": function(container, macro, spurtVolume) {
  3064. return spurtVolume <= 5000 &&
  3065. spurtVolume > 500 &&
  3066. isGory(macro);
  3067. }, "desc": function(container, macro, spurtVolume) {
  3068. return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls bounce and your " + macro.describeDick + " begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + ".\
  3069. The torrent of jizz seeps away; leaving behind rubble and corpses.";
  3070. }
  3071. });
  3072. rules["male-orgasm"].push({
  3073. "test": function(container, macro, spurtVolume) {
  3074. return spurtVolume <= 5000 &&
  3075. spurtVolume > 500 &&
  3076. isGory(macro);
  3077. }, "desc": function(container, macro, spurtVolume) {
  3078. return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls bounce and your " + macro.describeDick + " begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + ".\
  3079. The torrent of jizz and blood seeps away; leaving behind rubble and corpses.";
  3080. }
  3081. });
  3082. //less than 1e6
  3083. rules["male-orgasm"].push({
  3084. "test": function(container, macro, spurtVolume) {
  3085. return spurtVolume <= 1e6 &&
  3086. spurtVolume > 5000 &&
  3087. isNonFatal(macro);
  3088. }, "desc": function(container, macro, spurtVolume) {
  3089. return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + ".";
  3090. }
  3091. });
  3092. rules["male-orgasm"].push({
  3093. "test": function(container, macro, spurtVolume) {
  3094. return spurtVolume <= 1e6 &&
  3095. spurtVolume > 5000 &&
  3096. isFatal(macro);
  3097. }, "desc": function(container, macro, spurtVolume) {
  3098. return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + " in a suffocating \
  3099. wave of jizz.";
  3100. }
  3101. });
  3102. rules["male-orgasm"].push({
  3103. "test": function(container, macro, spurtVolume) {
  3104. return spurtVolume <= 1e6 &&
  3105. spurtVolume > 5000 &&
  3106. isGory(macro);
  3107. }, "desc": function(container, macro, spurtVolume) {
  3108. return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + " in a suffocating \
  3109. wave of jizz. The debris filled river of cum rages down the street, revealing more twisted steel and corpses with every building it brushes past.";
  3110. }
  3111. });
  3112. rules["male-orgasm"].push({
  3113. "test": function(container, macro, spurtVolume) {
  3114. return spurtVolume <= 1e6 &&
  3115. spurtVolume > 5000 &&
  3116. isSadistic(macro);
  3117. }, "desc": function(container, macro, spurtVolume) {
  3118. return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + " in a suffocating \
  3119. wave of jizz. The debris filled river of cum and gore rages down the street, revealing more twisted steel and corpses with every building it brushes past.";
  3120. }
  3121. });
  3122. //less than 1e9
  3123. rules["male-orgasm"].push({
  3124. "test": function(container, macro, spurtVolume) {
  3125. return spurtVolume <= 1e9 &&
  3126. spurtVolume > 1e6 &&
  3127. isNonFatal(macro);
  3128. }, "desc": function(container, macro, spurtVolume) {
  3129. return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum covers " + container.describe(verbose) + ".";
  3130. }
  3131. });
  3132. rules["male-orgasm"].push({
  3133. "test": function(container, macro, spurtVolume) {
  3134. return spurtVolume <= 1e9 &&
  3135. spurtVolume > 1e6 &&
  3136. isFatal(macro);
  3137. }, "desc": function(container, macro, spurtVolume) {
  3138. return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum smashes apart " + container.describe(verbose) + ".";
  3139. }
  3140. });
  3141. rules["male-orgasm"].push({
  3142. "test": function(container, macro, spurtVolume) {
  3143. return spurtVolume <= 1e9 &&
  3144. spurtVolume > 1e6 &&
  3145. isGory(macro);
  3146. }, "desc": function(container, macro, spurtVolume) {
  3147. return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum smashes apart " + container.describe(verbose) + " as \
  3148. it flies through air. Those caught in its path are smashed to pieces and dragged away by the intense current. The sheer volume of fluid overwelmes the sewers; you see cum spew from manholes and strom drains for several blocks.";
  3149. }
  3150. });
  3151. rules["male-orgasm"].push({
  3152. "test": function(container, macro, spurtVolume) {
  3153. return spurtVolume <= 1e9 &&
  3154. spurtVolume > 1e6 &&
  3155. isSadistic(macro);
  3156. }, "desc": function(container, macro, spurtVolume) {
  3157. return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum smashes apart " + container.describe(verbose) + " as \
  3158. it flies through air. Those caught in its path are smashed to pieces and dragged away by the intense current. The sheer volume of fluid overwelmes the sewers; you see cum, gore, glass, and steel spew from manholes and strom drains for several blocks.";
  3159. }
  3160. });
  3161. //less than 1e12
  3162. rules["male-orgasm"].push({
  3163. "test": function(container, macro, spurtVolume) {
  3164. return spurtVolume <= 1e12 &&
  3165. spurtVolume > 1e9 &&
  3166. isNonFatal(macro);
  3167. }, "desc": function(container, macro, spurtVolume) {
  3168. return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and onto " + container.describe(verbose) + ".";
  3169. }
  3170. });
  3171. rules["male-orgasm"].push({
  3172. "test": function(container, macro, spurtVolume) {
  3173. return spurtVolume <= 1e12 &&
  3174. spurtVolume > 1e9 &&
  3175. isFatal(macro);
  3176. }, "desc": function(container, macro, spurtVolume) {
  3177. return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and splashes over " + container.describe(verbose) + " with more ferocity than the flood from a broken dam. \
  3178. After the massive barrage lands, its viscously sloshes down the natural contours of the land, dragging trees and buildings deep into a nearby valley. The sheer volume of dirt and detritus that it picks up darkens the fluid into an opaque tide of frothing brown.";
  3179. }
  3180. });
  3181. rules["male-orgasm"].push({
  3182. "test": function(container, macro, spurtVolume) {
  3183. return spurtVolume <= 1e12 &&
  3184. spurtVolume > 1e9 &&
  3185. isGory(macro);
  3186. }, "desc": function(container, macro, spurtVolume) {
  3187. return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and splashes over " + container.describe(verbose) + " with more ferocity than the flood from a broken dam. \
  3188. After the massive barrage lands, its viscously sloshes down the natural contours of the land, dragging trees, people, animals, and buildings deep into a nearby valley. The sheer volume of dirt and detritus that it picks up darkens the fluid into an opaque tide of \
  3189. frothing brown. You watch as the sticky mess flows away from you, leaving only the foundations of buildings and rocks in its bed.";
  3190. }
  3191. });
  3192. rules["male-orgasm"].push({
  3193. "test": function(container, macro, spurtVolume) {
  3194. return spurtVolume <= 1e12 &&
  3195. spurtVolume > 1e9 &&
  3196. isGory(macro);
  3197. }, "desc": function(container, macro, spurtVolume) {
  3198. return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and splashes over " + container.describe(verbose) + " with more ferocity than the flood from a broken dam. \
  3199. After the massive barrage lands, its viscously sloshes down the natural contours of the land, dragging trees, people, animals, and buildings deep into a nearby valley. The sheer volume of dirt and detritus that it picks up darkens the fluid into an opaque tide of \
  3200. frothing brown. You watch as the sticky mess flows away from you, leaving only the foundations of buildings and rocks in its bed. The retreating semen also reveals the mangeled and drowned corpses of your victims.";
  3201. }
  3202. });
  3203. //less than 1e16
  3204. rules["male-orgasm"].push({
  3205. "test": function(container, macro, spurtVolume) {
  3206. return spurtVolume <= 1e16 &&
  3207. spurtVolume > 1e12 &&
  3208. isNonFatal(macro);
  3209. }, "desc": function(container, macro, spurtVolume) {
  3210. return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that clips a nearby cloud. A white tsunami envelopes " + container.describe(verbose) + ".";
  3211. }
  3212. });
  3213. rules["male-orgasm"].push({
  3214. "test": function(container, macro, spurtVolume) {
  3215. return spurtVolume <= 1e16 &&
  3216. spurtVolume > 1e12 &&
  3217. isFatal(macro);
  3218. }, "desc": function(container, macro, spurtVolume) {
  3219. return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that clips a nearby cloud. A white tsunami wipes out " + container.describe(verbose) + ".";
  3220. }
  3221. });
  3222. rules["male-orgasm"].push({
  3223. "test": function(container, macro, spurtVolume) {
  3224. return spurtVolume <= 1e16 &&
  3225. spurtVolume > 1e12 &&
  3226. isGory(macro);
  3227. }, "desc": function(container, macro, spurtVolume) {
  3228. return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that clips a nearby cloud. A white tsunami wipes out " + container.describe(verbose) + ". As the mighty wave crashes through city grids, it \
  3229. moves with surprising speed, catching up to and destroying fleeing vehicles.";
  3230. }
  3231. });
  3232. rules["male-orgasm"].push({
  3233. "test": function(container, macro, spurtVolume) {
  3234. return spurtVolume <= 1e16 &&
  3235. spurtVolume > 1e12 &&
  3236. isSadistic(macro);
  3237. }, "desc": function(container, macro, spurtVolume) {
  3238. return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that anniliates a flock of birds. A white tsunami wipes out " + container.describe(verbose) + ". As the mighty wave crashes through city grids, it \
  3239. moves with surprising speed, catching up to and destroying fleeing vehicles. Your cum smashes dams, bridges, and erodes the land as it travels, cutting a deep channel the local rivers begin flowing into.";
  3240. }
  3241. });
  3242. //less than 5e19
  3243. rules["male-orgasm"].push({
  3244. "test": function(container, macro, spurtVolume) {
  3245. return spurtVolume <= 5e19 &&
  3246. spurtVolume > 1e16 &&
  3247. !hasAtleast(container, "Planet", 1) &&
  3248. isNonFatal(macro);
  3249. }, "desc": function(container, macro, spurtVolume) {
  3250. return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum lands, it washes over " + container.describe(verbose) + ".";
  3251. }
  3252. });
  3253. rules["male-orgasm"].push({
  3254. "test": function(container, macro, spurtVolume) {
  3255. return spurtVolume <= 5e19 &&
  3256. spurtVolume > 1e16 &&
  3257. !hasAtleast(container, "Planet", 1) &&
  3258. isFatal(macro);
  3259. }, "desc": function(container, macro, spurtVolume) {
  3260. return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum roars across the plaent, it smashes through " + container.describe(verbose) + ".";
  3261. }
  3262. });
  3263. rules["male-orgasm"].push({
  3264. "test": function(container, macro, spurtVolume) {
  3265. return spurtVolume <= 1e19 &&
  3266. spurtVolume > 1e16 &&
  3267. !!hasAtleast(container,"Planet", 1) &&
  3268. isGory(macro);
  3269. }, "desc": function(container, macro, spurtVolume) {
  3270. return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum roars across the plaent, it smashes through " + container.describe(verbose) + ". Everything your semen rolls across \
  3271. is basted to smithereens as it carves a deep chasm. The destroyed buildings and people it swept along are deposited at the sides of the chasm, forming an unstable wall of gore and rubble.";
  3272. }
  3273. });
  3274. rules["male-orgasm"].push({
  3275. "test": function(container, macro, spurtVolume) {
  3276. return spurtVolume <= 5e19 &&
  3277. spurtVolume > 1e16 &&
  3278. !hasAtleast(container,"Planet", 1) &&
  3279. isSadistic(macro);
  3280. }, "desc": function(container, macro, spurtVolume) {
  3281. return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum roars across the plaent, it smashes through " + container.describe(verbose) + ". Everything your semen rolls across \
  3282. is basted to smithereens as it carves a deep gore lined chasm that extends from where it landed to the ocean. As it hits the ocean the resulting wave reverses the tide, dashes ships, and turns the water into an inhabitable murky soup. The destroyed \
  3283. buildings and people it swept along are deposited at the bottom of the bay.";
  3284. }
  3285. });
  3286. //less than 1e25
  3287. rules["male-orgasm"].push({
  3288. "test": function(container, macro, spurtVolume) {
  3289. return spurtVolume <= 1e25 &&
  3290. spurtVolume > 5e19 &&
  3291. !hasAtleast(container,"Planet", 1) &&
  3292. isNonFatal(macro);
  3293. }, "desc": function(container, macro, spurtVolume) {
  3294. return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load sprays down on" + container.describe(verbose) + ".";
  3295. }
  3296. });
  3297. rules["male-orgasm"].push({
  3298. "test": function(container, macro, spurtVolume) {
  3299. return spurtVolume <= 1e25 &&
  3300. spurtVolume > 5e19 &&
  3301. !hasAtleast(container,"Planet", 1) &&
  3302. isFatal(macro);
  3303. }, "desc": function(container, macro, spurtVolume) {
  3304. return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load punches through " + container.describe(verbose) + " without \
  3305. even slowing down. Runing out of land to wash over, it sloshes to an ocean, sending huge waves of cum and seawater hundereds of feet into the sky.";
  3306. }
  3307. });
  3308. rules["male-orgasm"].push({
  3309. "test": function(container, macro, spurtVolume) {
  3310. return spurtVolume <= 1e25 &&
  3311. spurtVolume > 5e19 &&
  3312. !hasAtleast(container,"Planet", 1) &&
  3313. isGory(macro);
  3314. }, "desc": function(container, macro, spurtVolume) {
  3315. return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load punches through " + container.describe(verbose) + " without \
  3316. even slowing down. Runing out of land to wash over, it sloshes to an ocean, sending huge waves of cum and seawater hundereds of feet into the sky. As the thick goopy mix settles down, the increased volume causes tsunamis and floods over the entire globe.";
  3317. }
  3318. });
  3319. rules["male-orgasm"].push({
  3320. "test": function(container, macro, spurtVolume) {
  3321. return spurtVolume <= 1e25 &&
  3322. spurtVolume > 5e19 &&
  3323. !hasAtleast(container,"Planet", 1) &&
  3324. isSadistic(macro);
  3325. }, "desc": function(container, macro, spurtVolume) {
  3326. return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load punches through " + container.describe(verbose) + " without \
  3327. even slowing down. Runing out of land to wash over, it sloshes to an ocean, sending huge waves of cum and seawater hundereds of feet into the sky. Every ship sailing on that ocean is overwhelmed by the force and capsizes. As the thick goopy mix \
  3328. settles down, the increased volume causes tsunamis and floods over the entire globe. The sticky white surface is coveved by dead marine life; schools of bloated tuna, giant squid, sharks, and whales.";
  3329. }
  3330. });
  3331. //cum envelops planet
  3332. rules["male-orgasm"].push({
  3333. "test": function(container, macro, spurtVolume) {
  3334. return hasExactly(container, "Planet", 1) &&
  3335. hasOnly(container, ["Planet"]) &&
  3336. isNonFatal(macro);
  3337. }, "desc": function(container, macro, spurtVolume) {
  3338. return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen are flung into space, where they contact and completly cover " + container.describe(verbose) + ".";
  3339. }
  3340. });
  3341. rules["male-orgasm"].push({
  3342. "test": function(container, macro, spurtVolume) {
  3343. return hasExactly(container, "Planet", 1) &&
  3344. hasOnly(container, ["Planet"]) &&
  3345. isFatal(macro);
  3346. }, "desc": function(container, macro, spurtVolume) {
  3347. return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen wash over " + container.describe(verbose) + ". The once green globe is now a sloshing white ocean of sticky cum.";
  3348. }
  3349. });
  3350. rules["male-orgasm"].push({
  3351. "test": function(container, macro, spurtVolume) {
  3352. return hasExactly(container, "Planet", 1) &&
  3353. hasOnly(container, ["Planet"]) &&
  3354. isGory(macro);
  3355. }, "desc": function(container, macro, spurtVolume) {
  3356. return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen wash over " + container.describe(verbose) + ". When your seed splashes over the surface, it instantly crushes and \
  3357. wipes away an entire civilization. The once green globe is now a sloshing white ocean of sticky cum.";
  3358. }
  3359. });
  3360. rules["male-orgasm"].push({
  3361. "test": function(container, macro, spurtVolume) {
  3362. return hasExactly(container, "Planet", 1) &&
  3363. hasOnly(container, ["Planet"]) &&
  3364. isSadistic(macro);
  3365. }, "desc": function(container, macro, spurtVolume) {
  3366. return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen wash over " + container.describe(verbose) + ". Your seed crashes into the center of the globe and creads outward, \
  3367. slowly enveloping the world. As it spreads through the oceans and continents in a " + length((Math.pow(spurtVolume, 1/3)*.5), unit, true) + " high wave, it instantly crushes and wipes away an entire civilization. The once green globe \
  3368. is now a sloshing white ocean of sticky cum.";
  3369. }
  3370. });
  3371. //cum larger than planet
  3372. rules["male-orgasm"].push({
  3373. "test": function(container, macro, spurtVolume) {
  3374. return (hasAtleast(container, "Star", 1) ||
  3375. hasAtleast(container, "Solar System", 1)) &&
  3376. isNonFatal(macro);
  3377. }, "desc": function(container, macro, spurtVolume) {
  3378. return "You're cumming! Your " + macro.describeDick + " expells a $VOLUME cumshot into deep space. As it floats away, the gravity it generates pulls " + container.describe(verbose) + " inside of the sticky fluid.";
  3379. }
  3380. });
  3381. rules["male-orgasm"].push({
  3382. "test": function(container, macro, spurtVolume) {
  3383. return (hasAtleast(container, "Star", 1) ||
  3384. hasAtleast(container, "Solar System", 1)) &&
  3385. isFatal(macro);
  3386. }, "desc": function(container, macro, spurtVolume) {
  3387. return "You're cumming! Your " + macro.describeDick + " expells a $VOLUME cumshot into deep space. As it floats away, the gravity it generates traps " + container.describe(verbose) + " inside of the sticky fluid forever.";
  3388. }
  3389. });
  3390. //precum-male
  3391. //contains a person
  3392. rules["male-spurt"].push({
  3393. "test": function(container, macro, spurtVolume) {
  3394. return hasOnly(container, ["Person"]) &&
  3395. hasExactly(container, "Person", 1) &&
  3396. isNonFatal(macro);
  3397. }, "desc": function(container, macro, spurtVolume) {
  3398. return "$VOLUMEs of precum sprays from your " + macro.describeDick + ". The musky stream covers " + container.describe(verbose) + ".";
  3399. }
  3400. });
  3401. rules["male-spurt"].push({
  3402. "test": function(container, macro, spurtVolume) {
  3403. return hasOnly(container, ["Person"]) &&
  3404. hasExactly(container, "Person", 1) &&
  3405. isFatal(macro);
  3406. }, "desc": function(container, macro, spurtVolume) {
  3407. return "$VOLUMEs of precum leaks from your " + macro.describeDick + ". The musky stream covers " + container.describe(verbose) + ", drowing them.";
  3408. }
  3409. });
  3410. rules["male-spurt"].push({
  3411. "test": function(container, macro, spurtVolume) {
  3412. return hasOnly(container, ["Person"]) &&
  3413. hasExactly(container, "Person", 1) &&
  3414. isGory(macro);
  3415. }, "desc": function(container, macro, spurtVolume) {
  3416. return "$VOLUMEs of precum leaks from your " + macro.describeDick + ". The musky stream falls over the shoulders of " + container.describe(verbose) + ", knocking them unconsious. They fall face down in the puddle and slowly drown in your pre.";
  3417. }
  3418. });
  3419. rules["male-spurt"].push({
  3420. "test": function(container, macro, spurtVolume) {
  3421. return hasOnly(container, ["Person"]) &&
  3422. hasExactly(container, "Person", 1) &&
  3423. isSadistic(macro);
  3424. }, "desc": function(container, macro, spurtVolume) {
  3425. return "You grab " + container.describe(verbose) + " and hold their face against your " + length(macro.dickDiameter,unit, true) + " wide cockhead. $VOLUMEs of precum leaks from your " + macro.describeDick + " and down their streched throat. The musky \
  3426. discarge fills their lungs and stomach, until your precum runs out of room and begins to leak out of your victim's nose and eyeballs. You drop your toy, watching them fall to the ground and try to cough up the suffocating fluid. Pre pours from their \
  3427. mouth, while they slump over and die.";
  3428. }
  3429. });
  3430. //more than 5 and less than 50
  3431. rules["male-spurt"].push({
  3432. "test": function(container, macro, spurtVolume) {
  3433. return spurtVolume <= 50 &&
  3434. spurtVolume > 5 &&
  3435. isNonFatal(macro);
  3436. }, "desc": function(container, macro, spurtVolume) {
  3437. return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes over " + container.describe(verbose) + ".";
  3438. }
  3439. });
  3440. rules["male-spurt"].push({
  3441. "test": function(container, macro, spurtVolume) {
  3442. return spurtVolume <= 50 &&
  3443. spurtVolume > 5 &&
  3444. isFatal(macro);
  3445. }, "desc": function(container, macro, spurtVolume) {
  3446. return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes onto the street; crushing " + container.describe(verbose) + ".";
  3447. }
  3448. });
  3449. rules["male-spurt"].push({
  3450. "test": function(container, macro, spurtVolume) {
  3451. return spurtVolume <= 50 &&
  3452. spurtVolume > 5 &&
  3453. isGory(macro);
  3454. }, "desc": function(container, macro, spurtVolume) {
  3455. return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes onto the street; crushing " + container.describe(verbose) + ". The bloodstained pool of precum washes down the street and \
  3456. pours into a nearby stromdrain.";
  3457. }
  3458. });
  3459. rules["male-spurt"].push({
  3460. "test": function(container, macro, spurtVolume) {
  3461. return spurtVolume <= 50 &&
  3462. spurtVolume > 5 &&
  3463. isSadistic(macro);
  3464. }, "desc": function(container, macro, spurtVolume) {
  3465. return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes onto the street; crushing " + container.describe(verbose) + ". The bloodstained pool of precum washes broken glass and \
  3466. " + pickString("intestines","gore","organs") + " down the street and into a nearby stormdrain.";
  3467. }
  3468. });
  3469. //less than 5e2
  3470. rules["male-spurt"].push({
  3471. "test": function(container, macro, spurtVolume) {
  3472. return spurtVolume <= 5e2 &&
  3473. spurtVolume > 50 &&
  3474. isNonFatal(macro);
  3475. }, "desc": function(container, macro, spurtVolume) {
  3476. return "$VOLUMEs of precum flow out of your urethra, soaking " + container.describe(verbose) + " and filling the air with your musk.";
  3477. }
  3478. });
  3479. rules["male-spurt"].push({
  3480. "test": function(container, macro, spurtVolume) {
  3481. return spurtVolume <= 5e2 &&
  3482. spurtVolume > 50 &&
  3483. isFatal(macro);
  3484. }, "desc": function(container, macro, spurtVolume) {
  3485. return "$VOLUMEs of precum flow out of your urethra, trapping " + container.describe(verbose) + " within a pond of your pre-ejaculate.";
  3486. }
  3487. });
  3488. rules["male-spurt"].push({
  3489. "test": function(container, macro, spurtVolume) {
  3490. return spurtVolume <= 5e2 &&
  3491. spurtVolume > 50 &&
  3492. isGory(macro);
  3493. }, "desc": function(container, macro, spurtVolume) {
  3494. return "$VOLUMEs of precum flow out of your urethra, trapping " + container.describe(verbose) + " within a pond of your pre-ejaculate. Those unlucky enough to be in the way are crushed by the sudden swell of the fluid. Their floating \
  3495. corpses dye the fluid a dark red.";
  3496. }
  3497. });
  3498. rules["male-spurt"].push({
  3499. "test": function(container, macro, spurtVolume) {
  3500. return spurtVolume <= 5e2 &&
  3501. spurtVolume > 50 &&
  3502. isSadistic(macro);
  3503. }, "desc": function(container, macro, spurtVolume) {
  3504. return "$VOLUMEs of precum flow out of your urethra, trapping " + container.describe(verbose) + " within a pond of your pre-ejaculate. Those unlucky enough to be in the way are crushed by the sudden swell of the fluid. Their floating \
  3505. corpses slowly break apart; dyeing the fluid a dark red.";
  3506. }
  3507. });
  3508. //less than 1e4
  3509. rules["male-spurt"].push({
  3510. "test": function(container, macro, spurtVolume) {
  3511. return spurtVolume <= 1e4 &&
  3512. spurtVolume > 5e2 &&
  3513. isNonFatal(macro);
  3514. }, "desc": function(container, macro, spurtVolume) {
  3515. return "Your " + macro.describeDick + " spews $VOLUMEs of precum, dousing " + container.describe(verbose) + " with your emmisions.";
  3516. }
  3517. });
  3518. rules["male-spurt"].push({
  3519. "test": function(container, macro, spurtVolume) {
  3520. return spurtVolume <= 1e4 &&
  3521. spurtVolume > 5e2 &&
  3522. isFatal(macro);
  3523. }, "desc": function(container, macro, spurtVolume) {
  3524. return "Your " + macro.describeDick + " spews $VOLUMEs of precum, smothering " + container.describe(verbose) + " with your emmisions.";
  3525. }
  3526. });
  3527. rules["male-spurt"].push({
  3528. "test": function(container, macro, spurtVolume) {
  3529. return spurtVolume <= 1e4 &&
  3530. spurtVolume > 5e2 &&
  3531. isGory(macro);
  3532. }, "desc": function(container, macro, spurtVolume) {
  3533. return "Your " + macro.describeDick + " spews $VOLUMEs of precum, smothering " + container.describe(verbose) + " with your emmisions. The slick fluid doesn't instanstly kill your prey; they attmept to crawl out of it while gasping and choking.";
  3534. }
  3535. });
  3536. rules["male-spurt"].push({
  3537. "test": function(container, macro, spurtVolume) {
  3538. return spurtVolume <= 1e4 &&
  3539. spurtVolume > 5e2 &&
  3540. isSadistic(macro);
  3541. }, "desc": function(container, macro, spurtVolume) {
  3542. return "Your " + macro.describeDick + " spews $VOLUMEs of precum, smothering " + container.describe(verbose) + " with your emmisions. The slick fluid ozzes over your prey, soaking and shoving them into the mud. \
  3543. You watch as they gasp and choke inside their liquid prison; unsucessefully attempting to crawl out.";
  3544. }
  3545. });
  3546. //less than 1e6
  3547. rules["male-spurt"].push({
  3548. "test": function(container, macro, spurtVolume) {
  3549. return spurtVolume <= 1e6 &&
  3550. spurtVolume > 1e4 &&
  3551. isNonFatal(macro);
  3552. }, "desc": function(container, macro, spurtVolume) {
  3553. return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + ".";
  3554. }
  3555. });
  3556. rules["male-spurt"].push({
  3557. "test": function(container, macro, spurtVolume) {
  3558. return spurtVolume <= 1e6 &&
  3559. spurtVolume > 1e4 &&
  3560. isFatal(macro);
  3561. }, "desc": function(container, macro, spurtVolume) {
  3562. return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + ". The speed and sheer mass of the falling \
  3563. pre ensures that the area where it lands is obliterated.";
  3564. }
  3565. });
  3566. rules["male-spurt"].push({
  3567. "test": function(container, macro, spurtVolume) {
  3568. return spurtVolume <= 1e6 &&
  3569. spurtVolume > 1e4 &&
  3570. isGory(macro);
  3571. }, "desc": function(container, macro, spurtVolume) {
  3572. return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + ". The speed and sheer mass of the falling \
  3573. pre ensures that the area where it lands is converted to a musky mudpit filled with rubble and corpses.";
  3574. }
  3575. });
  3576. rules["male-spurt"].push({
  3577. "test": function(container, macro, spurtVolume) {
  3578. return spurtVolume <= 1e6 &&
  3579. spurtVolume > 1e4 &&
  3580. isSadistic(macro);
  3581. }, "desc": function(container, macro, spurtVolume) {
  3582. return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + ". The speed and sheer mass of the falling \
  3583. pre ensures that the area where it lands is converted to a musky mudpit filled with rubble and corpses. A mix of pre-ejaculate, blood, and nuggest of flesh flow away from the area; a grisly warning that shows what happens to those in your way.";
  3584. }
  3585. });
  3586. //less than 1e12
  3587. rules["male-spurt"].push({
  3588. "test": function(container, macro, spurtVolume) {
  3589. return spurtVolume <= 1e9 &&
  3590. spurtVolume > 1e6 &&
  3591. isNonFatal(macro);
  3592. }, "desc": function(container, macro, spurtVolume) {
  3593. return "$VOLUMEs of pre rages out of your cavernous urethra, slicking your " + macro.describeDick + " and raining on " + container.describe() + ".";
  3594. }
  3595. });
  3596. rules["male-spurt"].push({
  3597. "test": function(container, macro, spurtVolume) {
  3598. return spurtVolume <= 1e9 &&
  3599. spurtVolume > 1e6 &&
  3600. isFatal(macro);
  3601. }, "desc": function(container, macro, spurtVolume) {
  3602. return "$VOLUMEs of pre sloshes out of your gaping cockslit, slicking your " + macro.describeDick + " and flooding out " + container.describe() + ". Each massive drop of your fluid creates a crater and resulting lake when they land,\
  3603. saturating the area with the proof of your passion.";
  3604. }
  3605. });
  3606. rules["male-spurt"].push({
  3607. "test": function(container, macro, spurtVolume) {
  3608. return spurtVolume <= 1e9 &&
  3609. spurtVolume > 1e6 &&
  3610. isGory(macro);
  3611. }, "desc": function(container, macro, spurtVolume) {
  3612. return "$VOLUMEs of pre sloshes out of your gaping cockslit, slicking your " + macro.describeDick + " and flooding out " + container.describe() + ". Each massive drop of your fluid crushes buildings, creating a crater and resulting lake \
  3613. when they land, saturating the rubble with the signs of your passion.";
  3614. }
  3615. });
  3616. rules["male-spurt"].push({
  3617. "test": function(container, macro, spurtVolume) {
  3618. return spurtVolume <= 1e9 &&
  3619. spurtVolume > 1e6 &&
  3620. isSadistic(macro);
  3621. }, "desc": function(container, macro, spurtVolume) {
  3622. return "$VOLUMEs of pre sloshes out of your gaping cockslit, slicking your " + macro.describeDick + " and flooding out " + container.describe() + ". Each massive drop of your fluid crushes buildings and creats a crater when they land, \
  3623. saturating the rubble with a lake of your passion. Those that narrowly escaped the initial splash flail about helplessly in the slick mud until they eventually tire out and suffocate.";
  3624. }
  3625. });
  3626. //less than 1e12
  3627. rules["male-spurt"].push({
  3628. "test": function(container, macro, spurtVolume) {
  3629. return spurtVolume <= 1e12 &&
  3630. spurtVolume > 1e9 &&
  3631. isNonFatal(macro);
  3632. }, "desc": function(container, macro, spurtVolume) {
  3633. return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and splashing over " + container.describe() + ".";
  3634. }
  3635. });
  3636. rules["male-spurt"].push({
  3637. "test": function(container, macro, spurtVolume) {
  3638. return spurtVolume <= 1e12 &&
  3639. spurtVolume > 1e9 &&
  3640. isFatal(macro);
  3641. }, "desc": function(container, macro, spurtVolume) {
  3642. return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and engulfing "
  3643. + container.describe() + ". Waves of your pre carve out new canyons and " + pickString("overwhelm a dam in the distance.","swell the rivers into a frothy tide.","form a lake of lust");
  3644. }
  3645. });
  3646. rules["male-spurt"].push({
  3647. "test": function(container, macro, spurtVolume) {
  3648. return spurtVolume <= 1e12 &&
  3649. spurtVolume > 1e9 &&
  3650. isGory(macro);
  3651. }, "desc": function(container, macro, spurtVolume) {
  3652. return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and engulfing "
  3653. + container.describe() + ". Waves of your pre carve out new canyons and " + pickString("overwhelm a dam, flooding a town with a soup of mud, pre, bodies, and rubble.","swell the rivers into a frothy tide that smashes boats and buildings apart.","turn a farming valley into a lake of of gore and lust");
  3654. }
  3655. });
  3656. rules["male-spurt"].push({
  3657. "test": function(container, macro, spurtVolume) {
  3658. return spurtVolume <= 1e12 &&
  3659. spurtVolume > 1e9 &&
  3660. isSadistic(macro);
  3661. }, "desc": function(container, macro, spurtVolume) {
  3662. return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and engulfing "
  3663. + container.describe() + ". As your fluid flows across the land, small splashes of red along its edge mark bodies being pulverized.";
  3664. }
  3665. });
  3666. //--------TODO LIST-----
  3667. //precum "male-spurt"
  3668. //musk
  3669. //boobs
  3670. //waste "marking territory"
  3671. //more interactions for donning/doffing shoes
  3672. //smaller approx units
  3673. //home planet rules
  3674. //moon, dead planet, dwarf planet, asteroid, gas giant
  3675. //stomping interactions based on different footwear
  3676. //commerical vehicles
  3677. //more objects on city/town continent scale(maybe countries)
  3678. //clean up growth with make/break sphere, circle, rect, and cube
  3679. //make unit prefrencerance a saved value
  3680. //cum text for skyscraper : cum text for single macro
  3681. //powerplants factories
  3682. //anal vore test "ring seals to the ground and pulls in" usde weight of rear to pull in more mass