big steppy
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

1138 wiersze
29 KiB

  1. var strolling = false;
  2. var maxStomachDigest = 10;
  3. var maxBowelsDigest = 10;
  4. var unit = "metric";
  5. var verbose = true;
  6. var biome = "suburb";
  7. var newline = " ";
  8. victims = {};
  9. var macro =
  10. {
  11. "scaling": function(value, scale, factor) { return value * Math.pow(scale,factor); },
  12. "species": "crux",
  13. "color" : "blue",
  14. "baseHeight": 2.26,
  15. get height() { return this.scaling(this.baseHeight, this.scale, 1); },
  16. "baseMass": 135,
  17. get mass () { return this.scaling(this.baseMass, this.scale, 3); },
  18. "basePawArea": 0.1,
  19. get pawArea() { return this.scaling(this.basePawArea, this.scale, 2); },
  20. "baseAnalVoreArea": 0.1,
  21. get analVoreArea() { return this.scaling(this.baseAnalVoreArea, this.scale, 2); },
  22. "baseAssArea": 0.4,
  23. get assArea() { return this.scaling(this.baseAssArea, this.scale, 2); },
  24. "baseHandArea": 0.3,
  25. get handArea() { return this.scaling(this.baseHandArea, this.scale, 2); },
  26. "baseDickLength": 0.3048,
  27. "baseDickDiameter": 0.08,
  28. "dickDensity": 1000,
  29. "dickScale": 1,
  30. get dickLength() { return this.scaling(this.baseDickLength * this.dickScale, this.scale, 1); },
  31. get dickDiameter() { return this.scaling(this.baseDickDiameter * this.dickScale, this.scale, 1); },
  32. get dickGirth() {
  33. return Math.pow((this.dickDiameter / 2),2) * Math.PI;
  34. },
  35. get dickArea() {
  36. return this.dickLength * this.dickDiameter * Math.PI / 2;
  37. },
  38. get dickVolume() {
  39. return this.dickLength * Math.pow(this.dickDiameter/2,2) * Math.PI;
  40. },
  41. get dickMass() {
  42. return this.dickVolume * this.dickDensity;
  43. },
  44. "baseBallDiameter": 0.05,
  45. "ballDensity": 1000,
  46. "ballScale": 1,
  47. get ballDiameter() { return this.scaling(this.baseBallDiameter * this.ballScale, this.scale, 1); },
  48. get ballArea() { return 2 * Math.PI * Math.pow(this.ballDiameter/2, 2) },
  49. get ballVolume() {
  50. var radius = this.ballDiameter / 2;
  51. return 4/3 * Math.PI * Math.pow(radius,3);
  52. },
  53. get ballMass() {
  54. var volume = this.ballVolume;
  55. return volume * this.ballDensity;
  56. },
  57. "baseCumRatio": 0.25,
  58. "cumScale": 1,
  59. get cumVolume() {
  60. return this.ballVolume * this.baseCumRatio * this.cumScale + Math.max(0,this.cumStorage.amount - this.cumStorage.limit);
  61. },
  62. "baseVaginaLength": 0.1,
  63. "baseVaginaWidth": 0.05,
  64. "vaginaScale": 1,
  65. get vaginaLength() { return this.scaling(this.baseVaginaLength * this.vaginaScale, this.scale, 1); },
  66. get vaginaWidth() { return this.scaling(this.baseVaginaWidth * this.vaginaScale, this.scale, 1); },
  67. get vaginaArea() { return this.vaginaLength * this.vaginaWidth },
  68. get vaginaVolume() { return this.vaginaArea * this.vaginaWidth },
  69. "femcumRatio": 0.25,
  70. "femcumScale": 1,
  71. get femcumVolume() {
  72. return this.vaginaVolume * this.femcumRatio * this.femcumScale + Math.max(0,this.femcumStorage.amount - this.femcumStorage.limit);
  73. },
  74. "baseBreastDiameter": 0.1,
  75. "breastScale": 1,
  76. "breastDensity": 1000,
  77. get breastDiameter() { return this.scaling(this.baseDickLength * this.breastScale, this.scale, 1); },
  78. get breastArea() {
  79. return 2 * Math.PI * Math.pow(this.breastDiameter/2,2);
  80. },
  81. get breastVolume() {
  82. var radius = this.breastDiameter / 2;
  83. return 4/3 * Math.PI * Math.pow(radius,3);
  84. },
  85. get breastMass() {
  86. var volume = this.breastVolume;
  87. return volume * this.breastDensity;
  88. },
  89. "digest": function(organ) {
  90. var count = Math.min(organ.contents.length, organ.maxDigest);
  91. var container = new Container();
  92. while (count > 0) {
  93. var victim = organ.contents.shift();
  94. if (victim.name != "Container")
  95. victim = new Container([victim]);
  96. container = container.merge(victim);
  97. --count;
  98. }
  99. var digested = container.sum();
  100. for (var key in victims[organ.name]) {
  101. if (victims[organ.name].hasOwnProperty(key) && digested.hasOwnProperty(key) ) {
  102. victims["digested"][key] += digested[key];
  103. victims[organ.name][key] -= digested[key];
  104. }
  105. }
  106. var line = organ.describeDigestion(container);
  107. organ.fill(this,container);
  108. var summary = summarize(container.sum());
  109. update([line,summary,newline]);
  110. },
  111. "stomach": {
  112. "name": "stomach",
  113. "feed": function(prey) {
  114. this.feedFunc(prey,this,this.owner);
  115. },
  116. "feedFunc": function(prey,self,owner) {
  117. if (self.contents.length == 0)
  118. setTimeout(function() { owner.digest(self) }, 15000);
  119. this.contents.push(prey);
  120. },
  121. "describeDigestion": function(container) {
  122. return "Your stomach gurgles as it digests " + container.describe(false);
  123. },
  124. "fill": function(owner,container) {
  125. //no-op
  126. },
  127. "contents": [],
  128. "maxDigest": 5
  129. },
  130. "bowels": {
  131. "name" : "bowels",
  132. "feed": function(prey) {
  133. this.feedFunc(prey,this,this.owner);
  134. },
  135. "feedFunc": function(prey,self,owner) {
  136. if (self.contents.length == 0)
  137. setTimeout(function() { owner.digest(self) }, 15000);
  138. this.contents.push(prey);
  139. },
  140. "describeDigestion" : function(container) {
  141. return "Your bowels churn as they absorb " + container.describe(false);
  142. },
  143. "fill": function(owner,container) {
  144. //no-op
  145. },
  146. "contents" : [],
  147. "maxDigest" : 3
  148. },
  149. "womb": {
  150. "name" : "womb",
  151. "feed": function(prey) {
  152. this.feedFunc(prey,this,this.owner);
  153. },
  154. "feedFunc": function(prey,self,owner) {
  155. if (self.contents.length == 0)
  156. setTimeout(function() { owner.digest(self) }, 15000);
  157. this.contents.push(prey);
  158. },
  159. "describeDigestion" : function(container) {
  160. return "Your womb squeezes as it dissolves " + container.describe(false);
  161. },
  162. "fill": function(owner,container) {
  163. owner.femcumStorage.amount += container.sum_property("mass") / 1e3;
  164. },
  165. "contents" : [],
  166. "maxDigest" : 1
  167. },
  168. "balls": {
  169. "name" : "balls",
  170. "feed": function(prey) {
  171. this.feedFunc(prey,this,this.owner);
  172. },
  173. "feedFunc": function(prey,self,owner) {
  174. if (self.contents.length == 0)
  175. setTimeout(function() { owner.digest(self) }, 15000);
  176. this.contents.push(prey);
  177. },
  178. "describeDigestion": function(container) {
  179. return "Your balls slosh as they transform " + container.describe(false) + " into cum";
  180. },
  181. "fill": function(owner,container) {
  182. owner.cumStorage.amount += container.sum_property("mass") / 1e3;
  183. },
  184. "contents" : [],
  185. "maxDigest" : 1
  186. },
  187. "init": function() {
  188. this.stomach.owner = this;
  189. this.bowels.owner = this;
  190. this.womb.owner = this;
  191. this.balls.owner = this;
  192. this.cumStorage.owner = this;
  193. this.femcumStorage.owner = this;
  194. if (this.maleParts)
  195. this.fillCum(this)
  196. if (this.femaleParts)
  197. this.fillFemcum(this)
  198. },
  199. "maleParts": true,
  200. "femaleParts": true,
  201. "fillCum": function(self) {
  202. self.cumStorage.amount += self.ballVolume / 30;
  203. if (self.cumStorage.amount > self.cumStorage.limit)
  204. self.arouse(10 * (self.cumStorage.amount / self.cumStorage.limit - 1));
  205. setTimeout(function () { self.fillCum(self) }, 1000);
  206. update();
  207. },
  208. "fillFemcum": function(self) {
  209. self.femcumStorage.amount += self.vaginaVolume / 30;
  210. if (self.femcumStorage.amount > self.femcumStorage.limit)
  211. self.arouse(10 * (self.femcumStorage.amount / self.femcumStorage.limit - 1));
  212. setTimeout(function () { self.fillFemcum(self) }, 1000);
  213. update();
  214. },
  215. "cumStorage": {
  216. "amount": 0,
  217. get limit() {
  218. return this.owner.ballVolume;
  219. }
  220. },
  221. "femcumStorage": {
  222. "amount": 0,
  223. get limit() {
  224. return this.owner.vaginaVolume;
  225. }
  226. },
  227. "orgasm": false,
  228. "arousal": 0,
  229. "arouse": function(amount) {
  230. this.arousal += amount;
  231. if (this.arousal >= 100) {
  232. this.arousal = 100;
  233. if (!this.orgasm) {
  234. this.orgasm = true;
  235. if (this.maleParts) {
  236. this.maleOrgasm(this);
  237. }
  238. if (this.femaleParts) {
  239. this.femaleOrgasm(this);
  240. }
  241. }
  242. }
  243. },
  244. "quench": function(amount) {
  245. this.arousal -= amount;
  246. if (this.arousal <= 0) {
  247. this.arousal = 0;
  248. if (this.orgasm) {
  249. this.orgasm = false;
  250. }
  251. }
  252. },
  253. "maleOrgasm": function(self) {
  254. if (self.orgasm) {
  255. self.quench(10);
  256. var amount = Math.min(this.cumVolume, this.cumStorage.amount);
  257. this.cumStorage.amount -= amount;
  258. male_orgasm(amount);
  259. setTimeout(function() { self.maleOrgasm(self) }, 2000);
  260. }
  261. },
  262. "femaleOrgasm": function(self) {
  263. if (this.orgasm) {
  264. this.quench(10);
  265. var amount = Math.min(this.femcumVolume, this.femcumStorage.amount);
  266. this.femcumStorage.amount -= amount;
  267. female_orgasm(amount);
  268. setTimeout(function() { self.femaleOrgasm(self) }, 2000);
  269. }
  270. },
  271. get description() {
  272. result = [];
  273. line = "You are a " + length(macro.height, unit, true) + " tall " + macro.species + ". You weigh " + mass(macro.mass, unit) + ".";
  274. result.push(line);
  275. if (this.maleParts) {
  276. line = "Your " + length(macro.dickLength, unit, true) + " long dick hangs from your hips, with two " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + "-wide balls hanging beneath.";
  277. result.push(line);
  278. }
  279. if (this.femaleParts) {
  280. line = "Your glistening " + length(macro.vaginaLength, unit, true) + " long slit is oozing between your legs."
  281. result.push(line);
  282. line = "You have two " + length(macro.breastDiameter, unit, true) + "-wide breasts that weigh " + mass(macro.breastMass, unit) + " apiece.";
  283. result.push(line);
  284. }
  285. return result;
  286. },
  287. "scale": 1,
  288. "scaleWithMass": function(mass) {
  289. var startMass = this.mass;
  290. var newMass = startMass + mass;
  291. this.scale = Math.pow(newMass / this.baseMass, 1/3);
  292. }
  293. }
  294. function look()
  295. {
  296. var desc = macro.description;
  297. var line2 = ""
  298. if (macro.height > 1e6)
  299. line2 = "You're standing...on pretty much everything at once.";
  300. else
  301. switch(biome) {
  302. case "rural": line2 = "You're standing amongst rural farmhouses and expansive ranches. Cattle are milling about at your feet."; break;
  303. case "suburb": line2 = "You're striding through the winding roads of a suburb."; break;
  304. case "city": line2 = "You're terrorizing the streets of a city. Heavy traffic, worsened by your rampage, is everywhere."; break;
  305. case "downtown": line2 = "You're lurking amongst the skyscrapers of downtown. The streets are packed, and the buildings are practically begging you to knock them over.";
  306. }
  307. desc = desc.concat([newline,line2,newline]);
  308. update(desc);
  309. }
  310. function get_living_prey(sum) {
  311. var total = 0;
  312. for (var key in sum) {
  313. if (sum.hasOwnProperty(key)) {
  314. if (key == "Person" || key == "Cow")
  315. total += sum[key];
  316. }
  317. }
  318. return total;
  319. }
  320. function toggle_auto()
  321. {
  322. strolling = !strolling;
  323. document.getElementById("button-stroll").innerHTML = "Status: " + (strolling ? "Strolling" : "Standing");
  324. if (strolling)
  325. update(["You start walking.",newline]);
  326. else
  327. update(["You stop walking.",newline]);
  328. }
  329. function change_location()
  330. {
  331. switch(biome) {
  332. case "suburb": biome = "city"; break;
  333. case "city": biome = "downtown"; break;
  334. case "downtown": biome = "rural"; break;
  335. case "rural": biome = "suburb"; break;
  336. }
  337. document.getElementById("button-location").innerHTML = "Location: " + biome.charAt(0).toUpperCase() + biome.slice(1);
  338. }
  339. function toggle_units()
  340. {
  341. switch(unit) {
  342. case "metric": unit = "customary"; break;
  343. case "customary": unit = "approx"; break;
  344. case "approx": unit = "metric"; break;
  345. }
  346. document.getElementById("button-units").innerHTML = "Units: " + unit.charAt(0).toUpperCase() + unit.slice(1);
  347. update();
  348. }
  349. function toggle_verbose()
  350. {
  351. verbose = !verbose;
  352. document.getElementById("button-verbose").innerHTML = "Descriptions: " + (verbose ? "Verbose" : "Simple");
  353. }
  354. function initVictims()
  355. {
  356. return {
  357. "Person": 0,
  358. "Cow": 0,
  359. "Car": 0,
  360. "Bus": 0,
  361. "Tram": 0,
  362. "Motorcycle": 0,
  363. "House": 0,
  364. "Barn": 0,
  365. "Small Skyscraper": 0,
  366. "Train": 0,
  367. "Train Car": 0,
  368. "Parking Garage": 0,
  369. "Overpass": 0,
  370. "Town": 0,
  371. "City": 0,
  372. "Continent": 0,
  373. "Planet": 0
  374. };
  375. };
  376. // lists out total people
  377. function summarize(sum, fatal = true)
  378. {
  379. var count = get_living_prey(sum);
  380. return "<b>(" + count + " " + (fatal ? (count > 1 ? "kills" : "kill") : (count > 1 ? "prey" : "prey")) + ")</b>";
  381. }
  382. function getOnePrey(biome,area)
  383. {
  384. var potential = ["Person"];
  385. if(macro.height > 1e6)
  386. potential = ["Town","City","Continent","Planet"];
  387. else
  388. switch(biome) {
  389. case "suburb": potential = ["Person", "Car", "Bus", "Train", "House"]; break;
  390. case "city": potential = ["Person", "Car", "Bus", "Train", "Tram", "House", "Parking Garage"]; break;
  391. case "downtown": potential = ["Person", "Car", "Bus", "Tram", "Small Skyscraper", "Parking Garage"]; break;
  392. case "rural": potential = ["Person", "Barn", "House", "Cow"]; break;
  393. }
  394. var potAreas = []
  395. potential.forEach(function (x) {
  396. potAreas.push([x,areas[x]]);
  397. });
  398. potAreas = potAreas.sort(function (x,y) {
  399. return y[1] - x[1];
  400. });
  401. for (var i=0; i<potAreas.length; i++) {
  402. x = potAreas[i];
  403. if (x[1] < area) {
  404. return new things[x[0]](1);
  405. }
  406. };
  407. return new Person(1);
  408. }
  409. function getPrey(region, area)
  410. {
  411. var weights = {"Person": 1};
  412. if (macro.height > 1e6) {
  413. weights = {
  414. "Town": 0.1,
  415. "City": 0.05,
  416. "Continent": 0.5,
  417. "Planet": 1
  418. }
  419. }
  420. else {
  421. switch(region)
  422. {
  423. case "rural": weights = {
  424. "Person": 0.05,
  425. "House": 0.01,
  426. "Barn": 0.01,
  427. "Cow": 0.2
  428. }; break;
  429. case "suburb": weights = {
  430. "Person": 0.5,
  431. "House": 0.5,
  432. "Car": 0.2,
  433. "Train": 0.1,
  434. "Bus": 0.1
  435. }; break;
  436. case "city": weights = {
  437. "Person": 0.5,
  438. "House": 0.2,
  439. "Car": 0.2,
  440. "Train": 0.1,
  441. "Bus": 0.1,
  442. "Tram": 0.1,
  443. "Parking Garage": 0.02
  444. }; break;
  445. case "downtown": weights = {
  446. "Person": 0.5,
  447. "Car": 0.3,
  448. "Bus": 0.15,
  449. "Tram": 0.1,
  450. "Parking Garage": 0.02,
  451. "Small Skyscraper": 0.4
  452. }; break;
  453. }
  454. }
  455. return fill_area2(area,weights);
  456. }
  457. function updateVictims(type,prey)
  458. {
  459. var sums = prey.sum();
  460. for (var key in sums) {
  461. if (sums.hasOwnProperty(key)) {
  462. victims[type][key] += sums[key];
  463. }
  464. }
  465. }
  466. function feed()
  467. {
  468. var area = macro.handArea;
  469. var prey = getPrey(biome, area);
  470. var line = prey.eat(verbose)
  471. var linesummary = summarize(prey.sum(), false);
  472. var people = get_living_prey(prey.sum());
  473. var sound = "Ulp";
  474. if (people < 3) {
  475. sound = "Ulp.";
  476. } else if (people < 10) {
  477. sound = "Gulp.";
  478. } else if (people < 50) {
  479. sound = "Glrrp.";
  480. } else if (people < 500) {
  481. sound = "Glrrrpkh!";
  482. } else if (people < 5000) {
  483. sound = "GLRRKPKH!";
  484. } else {
  485. sound = "Oh the humanity!";
  486. }
  487. var preyMass = prey.sum_property("mass");
  488. macro.scaleWithMass(preyMass);
  489. macro.stomach.feed(prey);
  490. macro.arouse(5);
  491. updateVictims("stomach",prey);
  492. update([sound,line,linesummary,newline]);
  493. }
  494. function stomp()
  495. {
  496. var area = macro.pawArea;
  497. var prey = getPrey(biome, area);
  498. var line = prey.stomp(verbose)
  499. var linesummary = summarize(prey.sum(), true);
  500. var people = get_living_prey(prey.sum());
  501. var sound = "Thump";
  502. if (people < 3) {
  503. sound = "Thump!";
  504. } else if (people < 10) {
  505. sound = "Squish!";
  506. } else if (people < 50) {
  507. sound = "Crunch!";
  508. } else if (people < 500) {
  509. sound = "CRUNCH!";
  510. } else if (people < 5000) {
  511. sound = "CRRUUUNCH!!";
  512. } else {
  513. sound = "Oh the humanity!";
  514. }
  515. var preyMass = prey.sum_property("mass");
  516. macro.scaleWithMass(preyMass);
  517. macro.arouse(5);
  518. updateVictims("stomped",prey);
  519. update([sound,line,linesummary,newline]);
  520. }
  521. function anal_vore()
  522. {
  523. var area = macro.analVoreArea;
  524. var prey = getOnePrey(biome,area);
  525. area = macro.assArea;
  526. var crushed = getPrey(biome,area);
  527. var line1 = prey.anal_vore(verbose, macro.height);
  528. var line1summary = summarize(prey.sum(), false);
  529. var line2 = crushed.buttcrush(verbose);
  530. var line2summary = summarize(crushed.sum(), true);
  531. var people = get_living_prey(prey.sum());
  532. var sound = "Shlp";
  533. if (people < 3) {
  534. sound = "Shlp.";
  535. } else if (people < 10) {
  536. sound = "Squelch.";
  537. } else if (people < 50) {
  538. sound = "Shlurrp.";
  539. } else if (people < 500) {
  540. sound = "SHLRP!";
  541. } else if (people < 5000) {
  542. sound = "SQLCH!!";
  543. } else {
  544. sound = "Oh the humanity!";
  545. }
  546. var people = get_living_prey(crushed.sum());
  547. var sound2 = "Thump";
  548. if (people < 3) {
  549. sound2 = "Thump!";
  550. } else if (people < 10) {
  551. sound2 = "Squish!";
  552. } else if (people < 50) {
  553. sound2 = "Crunch!";
  554. } else if (people < 500) {
  555. sound2 = "CRUNCH!";
  556. } else if (people < 5000) {
  557. sound2 = "CRRUUUNCH!!";
  558. } else {
  559. sound2 = "Oh the humanity!";
  560. }
  561. var preyMass = prey.sum_property("mass");
  562. var crushedMass = prey.sum_property("mass");
  563. macro.scaleWithMass(preyMass);
  564. macro.scaleWithMass(crushedMass);
  565. macro.bowels.feed(prey);
  566. macro.arouse(10);
  567. updateVictims("bowels",prey);
  568. updateVictims("stomped",crushed);
  569. update([sound,line1,line1summary,newline,sound2,line2,line2summary,newline]);
  570. }
  571. function breast_crush()
  572. {
  573. var area = macro.breastArea;
  574. var prey = getPrey(biome, area);
  575. var line = prey.breast_crush(verbose);
  576. var linesummary = summarize(prey.sum(), true);
  577. var people = get_living_prey(prey.sum());
  578. var sound = "Thump";
  579. if (people < 3) {
  580. sound = "Thump!";
  581. } else if (people < 10) {
  582. sound = "Squish!";
  583. } else if (people < 50) {
  584. sound = "Crunch!";
  585. } else if (people < 500) {
  586. sound = "CRUNCH!";
  587. } else if (people < 5000) {
  588. sound = "CRRUUUNCH!!";
  589. } else {
  590. sound = "Oh the humanity!";
  591. }
  592. var preyMass = prey.sum_property("mass");
  593. macro.scaleWithMass(preyMass);
  594. macro.arouse(10);
  595. updateVictims("breasts",prey);
  596. update([sound,line,linesummary,newline]);
  597. }
  598. function unbirth()
  599. {
  600. var area = macro.vaginaArea;
  601. var prey = getPrey(biome, area);
  602. var line = prey.unbirth(verbose)
  603. var linesummary = summarize(prey.sum(), false);
  604. var people = get_living_prey(prey.sum());
  605. var sound = "";
  606. if (people < 3) {
  607. sound = "Shlp.";
  608. } else if (people < 10) {
  609. sound = "Squelch.";
  610. } else if (people < 50) {
  611. sound = "Shlurrp.";
  612. } else if (people < 500) {
  613. sound = "SHLRP!";
  614. } else if (people < 5000) {
  615. sound = "SQLCH!!";
  616. } else {
  617. sound = "Oh the humanity!";
  618. }
  619. var preyMass = prey.sum_property("mass");
  620. macro.scaleWithMass(preyMass);
  621. macro.womb.feed(prey);
  622. macro.arouse(20);
  623. updateVictims("womb",prey);
  624. update([sound,line,linesummary,newline]);
  625. }
  626. function cockslap()
  627. {
  628. var area = macro.dickArea;
  629. var prey = getPrey(biome, area);
  630. var line = prey.cockslap(verbose)
  631. var linesummary = summarize(prey.sum(), true);
  632. var people = get_living_prey(prey.sum());
  633. var sound = "Thump";
  634. if (people < 3) {
  635. sound = "Thump!";
  636. } else if (people < 10) {
  637. sound = "Squish!";
  638. } else if (people < 50) {
  639. sound = "Crunch!";
  640. } else if (people < 500) {
  641. sound = "CRUNCH!";
  642. } else if (people < 5000) {
  643. sound = "CRRUUUNCH!!";
  644. } else {
  645. sound = "Oh the humanity!";
  646. }
  647. var preyMass = prey.sum_property("mass");
  648. macro.scaleWithMass(preyMass);
  649. macro.arouse(15);
  650. updateVictims("cock",prey);
  651. update([sound,line,linesummary,newline]);
  652. }
  653. function cock_vore()
  654. {
  655. var area = macro.dickGirth;
  656. var prey = getPrey(biome, area);
  657. var line = prey.cock_vore(verbose)
  658. var linesummary = summarize(prey.sum(), true);
  659. var people = get_living_prey(prey.sum());
  660. var sound = "lp";
  661. if (people < 3) {
  662. sound = "Shlp.";
  663. } else if (people < 10) {
  664. sound = "Squelch.";
  665. } else if (people < 50) {
  666. sound = "Shlurrp.";
  667. } else if (people < 500) {
  668. sound = "SHLRP!";
  669. } else if (people < 5000) {
  670. sound = "SQLCH!!";
  671. } else {
  672. sound = "Oh the humanity!";
  673. }
  674. var preyMass = prey.sum_property("mass");
  675. macro.scaleWithMass(preyMass);
  676. macro.balls.feed(prey);
  677. macro.arouse(20);
  678. updateVictims("balls",prey);
  679. update([sound,line,linesummary,newline]);
  680. }
  681. function ball_smother()
  682. {
  683. var area = macro.ballArea * 2;
  684. var prey = getPrey(biome, area);
  685. var line = prey.ball_smother(verbose)
  686. var linesummary = summarize(prey.sum(), true);
  687. var people = get_living_prey(prey.sum());
  688. var sound = "Thump";
  689. if (people < 3) {
  690. sound = "Thump!";
  691. } else if (people < 10) {
  692. sound = "Squish!";
  693. } else if (people < 50) {
  694. sound = "Smoosh!";
  695. } else if (people < 500) {
  696. sound = "SMOOSH!";
  697. } else if (people < 5000) {
  698. sound = "SMOOOOOSH!!";
  699. } else {
  700. sound = "Oh the humanity!";
  701. }
  702. var preyMass = prey.sum_property("mass");
  703. macro.scaleWithMass(preyMass);
  704. macro.arouse(10);
  705. updateVictims("balls",prey);
  706. update([sound,line,linesummary,newline]);
  707. }
  708. function male_orgasm(vol)
  709. {
  710. var area = Math.pow(vol, 2/3);
  711. var prey = getPrey(biome, area);
  712. var line = prey.male_orgasm(verbose).replace("$VOLUME",volume(vol,unit,false))
  713. var linesummary = summarize(prey.sum(), true);
  714. var people = get_living_prey(prey.sum());
  715. var sound = "Spurt!";
  716. if (people < 3) {
  717. sound = "Spurt!";
  718. } else if (people < 10) {
  719. sound = "Sploosh!";
  720. } else if (people < 50) {
  721. sound = "Sploooooosh!";
  722. } else if (people < 500) {
  723. sound = "SPLOOSH!";
  724. } else if (people < 5000) {
  725. sound = "SPLOOOOOOOOOOSH!!";
  726. } else {
  727. sound = "Oh the humanity!";
  728. }
  729. var preyMass = prey.sum_property("mass");
  730. macro.scaleWithMass(preyMass);
  731. updateVictims("splooged",prey);
  732. update([sound,line,linesummary,newline]);
  733. }
  734. function female_orgasm(vol)
  735. {
  736. var area = Math.pow(vol, 2/3);
  737. var prey = getPrey(biome, area);
  738. var line = prey.female_orgasm(verbose).replace("$VOLUME",volume(vol,unit,false));
  739. var linesummary = summarize(prey.sum(), true);
  740. var people = get_living_prey(prey.sum());
  741. var sound = "Spurt!";
  742. if (people < 3) {
  743. sound = "Spurt!";
  744. } else if (people < 10) {
  745. sound = "Sploosh!";
  746. } else if (people < 50) {
  747. sound = "Sploooooosh!";
  748. } else if (people < 500) {
  749. sound = "SPLOOSH!";
  750. } else if (people < 5000) {
  751. sound = "SPLOOOOOOOOOOSH!!";
  752. } else {
  753. sound = "Oh the humanity!";
  754. }
  755. var preyMass = prey.sum_property("mass");
  756. macro.scaleWithMass(preyMass);
  757. updateVictims("splooged",prey);
  758. update([sound,line,linesummary,newline]);
  759. }
  760. function update(lines = [])
  761. {
  762. var log = document.getElementById("log");
  763. lines.forEach(function (x) {
  764. var line = document.createElement('div');
  765. line.innerHTML = x;
  766. log.appendChild(line);
  767. });
  768. if (lines.length > 0)
  769. log.scrollTop = log.scrollHeight;
  770. document.getElementById("height").innerHTML = "Height: " + length(macro.height, unit);
  771. document.getElementById("mass").innerHTML = "Mass: " + mass(macro.mass, unit);
  772. document.getElementById("arousal").innerHTML = "Arousal: " + round(macro.arousal,0) + "%";
  773. document.getElementById("cum").innerHTML = "Cum: " + volume(macro.cumStorage.amount,unit,false) + "/" + volume(macro.cumStorage.limit,unit,false);
  774. document.getElementById("femcum").innerHTML = "Femcum: " + volume(macro.femcumStorage.amount,unit,false) + "/" + volume(macro.femcumStorage.limit,unit,false);
  775. for (var type in victims) {
  776. if (victims.hasOwnProperty(type)) {
  777. for (var key in victims[type]){
  778. if (victims[type].hasOwnProperty(key) && victims[type][key] > 0) {
  779. document.getElementById("stat-" + key).style.display = "table-row";
  780. document.getElementById("stat-" + type + "-" + key).innerHTML = victims[type][key];
  781. }
  782. }
  783. }
  784. }
  785. }
  786. function pick_move()
  787. {
  788. if (!strolling) {
  789. setTimeout(pick_move, 1500 * Math.sqrt(macro.scale));
  790. return;
  791. }
  792. var choice = Math.random();
  793. if (choice < 0.2) {
  794. anal_vore();
  795. } else if (choice < 0.6) {
  796. stomp();
  797. } else {
  798. feed();
  799. }
  800. setTimeout(pick_move, 1500 * Math.sqrt(macro.scale));
  801. }
  802. function grow()
  803. {
  804. var oldHeight = macro.height;
  805. var oldMass = macro.mass;
  806. macro.scale *= 1.2;
  807. var newHeight = macro.height;
  808. var newMass = macro.mass;
  809. var heightDelta = newHeight - oldHeight;
  810. var massDelta = newMass - oldMass;
  811. var heightStr = length(heightDelta, unit);
  812. var massStr = mass(massDelta, unit);
  813. update(["Power surges through you as you grow " + heightStr + " taller and gain " + massStr + " of mass",newline]);
  814. }
  815. function grow_lots()
  816. {
  817. var oldHeight = macro.height;
  818. var oldMass = macro.mass;
  819. macro.scale *= 100;
  820. var newHeight = macro.height;
  821. var newMass = macro.mass;
  822. var heightDelta = newHeight - oldHeight;
  823. var massDelta = newMass - oldMass;
  824. var heightStr = length(heightDelta, unit);
  825. var massStr = mass(massDelta, unit);
  826. update(["Power surges through you as you grow " + heightStr + " taller and gain " + massStr + " of mass",newline]);
  827. }
  828. function option_male() {
  829. macro.maleParts = !macro.maleParts;
  830. document.getElementById("button-male-genitals").innerHTML = (macro.maleParts ? "Male genitals on" : "Male genitals off");
  831. }
  832. function option_female() {
  833. macro.femaleParts = !macro.femaleParts;
  834. document.getElementById("button-female-genitals").innerHTML = (macro.femaleParts ? "Female genitals on" : "Female genitals off");
  835. }
  836. function preset(name) {
  837. switch(name){
  838. case "Fen":
  839. macro.species = "crux";
  840. macro.baseHeight = 2.2606;
  841. macro.baseMass = 124.738;
  842. break;
  843. case "Renard":
  844. macro.species = "fox";
  845. macro.baseHeight = 1.549;
  846. macro.baseMass = 83.9;
  847. case "Vulpes":
  848. macro.species = "fox";
  849. macro.baseHeight = 20000;
  850. macro.baseMass = 180591661866272;
  851. }
  852. }
  853. function startGame() {
  854. document.getElementById("option-panel").style.display = 'none';
  855. document.getElementById("action-panel").style.display = 'flex';
  856. victimTypes = ["stomped","digested","stomach","bowels"];
  857. if (macro.maleParts) {
  858. victimTypes = victimTypes.concat(["cock","balls"]);
  859. } else {
  860. document.getElementById("button-cockslap").style.display = 'none';
  861. document.getElementById("button-cock_vore").style.display = 'none';
  862. document.getElementById("button-ball_smother").style.display = 'none';
  863. document.getElementById("cum").style.display = 'none';
  864. }
  865. if (macro.femaleParts) {
  866. victimTypes = victimTypes.concat(["breasts"],["womb"]);
  867. } else {
  868. document.getElementById("button-breast_crush").style.display = 'none';
  869. document.getElementById("button-unbirth").style.display = 'none';
  870. document.getElementById("femcum").style.display = 'none';
  871. }
  872. if (macro.maleParts || macro.femaleParts) {
  873. victimTypes.push("splooged");
  874. }
  875. var table = document.getElementById("victim-table");
  876. var tr = document.createElement('tr');
  877. var th = document.createElement('th');
  878. th.innerHTML = "Method";
  879. tr.appendChild(th);
  880. for (var i = 0; i < victimTypes.length; i++) {
  881. var th = document.createElement('th');
  882. th.classList.add("victim-table-cell");
  883. th.innerHTML = victimTypes[i].charAt(0).toUpperCase() + victimTypes[i].slice(1);
  884. tr.appendChild(th);
  885. }
  886. table.appendChild(tr);
  887. for (var key in things) {
  888. if (things.hasOwnProperty(key) && key != "Container") {
  889. var tr = document.createElement('tr');
  890. tr.id = "stat-" + key;
  891. tr.style.display = "none";
  892. var th = document.createElement('th');
  893. th.innerHTML = key;
  894. tr.appendChild(th);
  895. for (var i = 0; i < victimTypes.length; i++) {
  896. var th = document.createElement('th');
  897. th.innerHTML = 0;
  898. th.id = "stat-" + victimTypes[i] + "-" + key;
  899. tr.appendChild(th);
  900. }
  901. table.appendChild(tr);
  902. }
  903. }
  904. //var species = document.getElementById("option-species").value;
  905. //var re = /^[a-zA-Z\- ]+$/;
  906. // tricksy tricksy players
  907. //if (re.test(species)) {
  908. // macro.species = species;
  909. //}
  910. macro.init();
  911. update();
  912. document.getElementById("stat-container").style.display = 'flex';
  913. }
  914. window.addEventListener('load', function(event) {
  915. victims["stomped"] = initVictims();
  916. victims["digested"] = initVictims();
  917. victims["stomach"] = initVictims();
  918. victims["bowels"] = initVictims();
  919. victims["breasts"] = initVictims();
  920. victims["womb"] = initVictims();
  921. victims["cock"] = initVictims();
  922. victims["balls"] = initVictims();
  923. victims["smothered"] = initVictims();
  924. victims["splooged"] = initVictims();
  925. document.getElementById("button-look").addEventListener("click",look);
  926. document.getElementById("button-grow").addEventListener("click",grow);
  927. document.getElementById("button-feed").addEventListener("click",feed);
  928. document.getElementById("button-stomp").addEventListener("click",stomp);
  929. document.getElementById("button-breast_crush").addEventListener("click",breast_crush);
  930. document.getElementById("button-unbirth").addEventListener("click",unbirth);
  931. document.getElementById("button-cockslap").addEventListener("click",cockslap);
  932. document.getElementById("button-cock_vore").addEventListener("click",cock_vore);
  933. document.getElementById("button-ball_smother").addEventListener("click",ball_smother);
  934. document.getElementById("button-anal_vore").addEventListener("click",anal_vore);
  935. document.getElementById("button-stroll").addEventListener("click",toggle_auto);
  936. document.getElementById("button-location").addEventListener("click",change_location);
  937. document.getElementById("button-units").addEventListener("click",toggle_units);
  938. document.getElementById("button-verbose").addEventListener("click",toggle_verbose);
  939. document.getElementById("button-grow-lots").addEventListener("click",grow_lots);
  940. document.getElementById("button-male-genitals").addEventListener("click",option_male);
  941. document.getElementById("button-female-genitals").addEventListener("click",option_female);
  942. document.getElementById("button-start").addEventListener("click",startGame);
  943. setTimeout(pick_move, 2000);
  944. });