big steppy
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

1583 строки
42 KiB

  1. var strolling = false;
  2. var maxStomachDigest = 10;
  3. var maxBowelsDigest = 10;
  4. var unit = "metric";
  5. var numbers = "full";
  6. var verbose = true;
  7. var biome = "suburb";
  8. var newline = " ";
  9. victims = {};
  10. var macro =
  11. {
  12. "scaling": function(value, scale, factor) { return value * Math.pow(scale,factor); },
  13. "species": "crux",
  14. "color" : "blue",
  15. "baseHeight": 2.26,
  16. get height() { return this.scaling(this.baseHeight, this.scale, 1); },
  17. "baseMass": 135,
  18. get mass () { return this.scaling(this.baseMass, this.scale, 3); },
  19. "basePawArea": 0.1,
  20. get pawArea() { return this.scaling(this.basePawArea, this.scale, 2); },
  21. "baseAnalVoreArea": 0.1,
  22. get analVoreArea() { return this.scaling(this.baseAnalVoreArea, this.scale, 2); },
  23. "baseAssArea": 0.4,
  24. get assArea() { return this.scaling(this.baseAssArea * this.assScale, this.scale, 2); },
  25. "baseHandArea": 0.1,
  26. get handArea() { return this.scaling(this.baseHandArea, this.scale, 2); },
  27. "assScale": 1,
  28. "dickType": "canine",
  29. "baseDickLength": 0.3,
  30. "baseDickDiameter": 0.08,
  31. "dickDensity": 1000,
  32. "dickScale": 1,
  33. get dickLength() {
  34. factor = 1;
  35. if (!this.arousalEnabled || this.arousal < 25) {
  36. factor = 0.5;
  37. } else if (this.arousal < 75) {
  38. factor = 0.5 + (this.arousal - 25) / 100;
  39. }
  40. return this.scaling(this.baseDickLength * this.dickScale * factor, this.scale, 1);
  41. },
  42. get dickDiameter() {
  43. factor = 1;
  44. if (!this.arousalEnabled || this.arousal < 25) {
  45. factor = 0.5;
  46. } else if (this.arousal < 75) {
  47. factor = 0.5 + (this.arousal - 25) / 100;
  48. }
  49. return this.scaling(this.baseDickDiameter * this.dickScale * factor, this.scale, 1);
  50. },
  51. get dickGirth() {
  52. return Math.pow((this.dickDiameter/ 2),2) * Math.PI;
  53. },
  54. get dickArea() {
  55. return this.dickLength* this.dickDiameter* Math.PI / 2;
  56. },
  57. get dickVolume() {
  58. return this.dickLength* Math.pow(this.dickDiameter2,2) * Math.PI;
  59. },
  60. get dickMass() {
  61. return this.dickVolume* this.dickDensity;
  62. },
  63. "baseBallDiameter": 0.05,
  64. "ballDensity": 1000,
  65. "ballScale": 1,
  66. get ballDiameter() { return this.scaling(this.baseBallDiameter * this.ballScale, this.scale, 1); },
  67. get ballArea() { return 2 * Math.PI * Math.pow(this.ballDiameter/2, 2) },
  68. get ballVolume() {
  69. var radius = this.ballDiameter / 2;
  70. return 4/3 * Math.PI * Math.pow(radius,3);
  71. },
  72. get ballMass() {
  73. var volume = this.ballVolume;
  74. return volume * this.ballDensity;
  75. },
  76. "baseCumRatio": 1,
  77. "cumScale": 1,
  78. get cumVolume() {
  79. return this.dickGirth * this.baseCumRatio * this.cumScale * (1 + this.edge) + Math.max(0,this.cumStorage.amount - this.cumStorage.limit);
  80. },
  81. "baseVaginaLength": 0.1,
  82. "baseVaginaWidth": 0.05,
  83. "vaginaScale": 1,
  84. get vaginaLength() { return this.scaling(this.baseVaginaLength * this.vaginaScale, this.scale, 1); },
  85. get vaginaWidth() { return this.scaling(this.baseVaginaWidth * this.vaginaScale, this.scale, 1); },
  86. get vaginaArea() { return this.vaginaLength * this.vaginaWidth },
  87. get vaginaVolume() { return this.vaginaArea * this.vaginaWidth },
  88. "baseFemcumRatio": 1,
  89. "femcumScale": 1,
  90. get femcumVolume() {
  91. return this.vaginaArea * this.baseFemcumRatio * this.femcumScale * (1 + this.edge) + Math.max(0,this.femcumStorage.amount - this.femcumStorage.limit);
  92. },
  93. "baseBreastDiameter": 0.1,
  94. "breastScale": 1,
  95. "breastDensity": 1000,
  96. get breastDiameter() { return this.scaling(this.baseBreastDiameter * this.breastScale, this.scale, 1); },
  97. get breastArea() {
  98. return 2 * Math.PI * Math.pow(this.breastDiameter/2,2);
  99. },
  100. get breastVolume() {
  101. var radius = this.breastDiameter / 2;
  102. return 4/3 * Math.PI * Math.pow(radius,3);
  103. },
  104. get breastMass() {
  105. var volume = this.breastVolume;
  106. return volume * this.breastDensity;
  107. },
  108. "digest": function(owner,organ) {
  109. var count = Math.min(organ.contents.length, organ.maxDigest);
  110. var container = new Container();
  111. while (count > 0) {
  112. var victim = organ.contents.shift();
  113. if (victim.name != "Container")
  114. victim = new Container([victim]);
  115. container = container.merge(victim);
  116. --count;
  117. }
  118. var digested = container.sum();
  119. for (var key in victims[organ.name]) {
  120. if (victims[organ.name].hasOwnProperty(key) && digested.hasOwnProperty(key) ) {
  121. victims["digested"][key] += digested[key];
  122. victims[organ.name][key] -= digested[key];
  123. }
  124. }
  125. var line = organ.describeDigestion(container);
  126. organ.fill(this,container);
  127. var summary = summarize(container.sum());
  128. if (organ.contents.length > 0) {
  129. setTimeout(function() { owner.digest(owner,organ) }, 15000);
  130. }
  131. update([line,summary,newline]);
  132. },
  133. "stomach": {
  134. "name": "stomach",
  135. "feed": function(prey) {
  136. this.feedFunc(prey,this,this.owner);
  137. },
  138. "feedFunc": function(prey,self,owner) {
  139. if (self.contents.length == 0)
  140. setTimeout(function() { owner.digest(owner,self) }, 15000);
  141. this.contents.push(prey);
  142. },
  143. "describeDigestion": function(container) {
  144. return describe("stomach",container,this.owner,verbose);
  145. },
  146. "fill": function(owner,container) {
  147. //no-op
  148. },
  149. "contents": [],
  150. "maxDigest": 5
  151. },
  152. "bowels": {
  153. "name" : "bowels",
  154. "feed": function(prey) {
  155. this.feedFunc(prey,this,this.owner);
  156. },
  157. "feedFunc": function(prey,self,owner) {
  158. if (self.contents.length == 0)
  159. setTimeout(function() { owner.digest(owner,self) }, 15000);
  160. this.contents.push(prey);
  161. },
  162. "describeDigestion" : function(container) {
  163. return describe("bowels",container,this.owner,verbose);
  164. },
  165. "fill": function(owner,container) {
  166. //no-op
  167. },
  168. "contents" : [],
  169. "maxDigest" : 3
  170. },
  171. "womb": {
  172. "name" : "womb",
  173. "feed": function(prey) {
  174. this.feedFunc(prey,this,this.owner);
  175. },
  176. "feedFunc": function(prey,self,owner) {
  177. if (self.contents.length == 0)
  178. setTimeout(function() { owner.digest(owner,self) }, 15000);
  179. this.contents.push(prey);
  180. },
  181. "describeDigestion" : function(container) {
  182. return describe("womb",container,this.owner,verbose);
  183. },
  184. "fill": function(owner,container) {
  185. owner.femcumStorage.amount += container.sum_property("mass") / 1e3;
  186. },
  187. "contents" : [],
  188. "maxDigest" : 1
  189. },
  190. "balls": {
  191. "name" : "balls",
  192. "feed": function(prey) {
  193. this.feedFunc(prey,this,this.owner);
  194. },
  195. "feedFunc": function(prey,self,owner) {
  196. if (self.contents.length == 0)
  197. setTimeout(function() { owner.digest(owner,self) }, 15000);
  198. this.contents.push(prey);
  199. },
  200. "describeDigestion": function(container) {
  201. return describe("balls",container,this.owner,verbose);
  202. },
  203. "fill": function(owner,container) {
  204. owner.cumStorage.amount += container.sum_property("mass") / 1e3;
  205. },
  206. "contents" : [],
  207. "maxDigest" : 1
  208. },
  209. "init": function() {
  210. this.stomach.owner = this;
  211. this.bowels.owner = this;
  212. this.womb.owner = this;
  213. this.balls.owner = this;
  214. this.cumStorage.owner = this;
  215. this.femcumStorage.owner = this;
  216. if (this.maleParts)
  217. this.fillCum(this)
  218. if (this.femaleParts)
  219. this.fillFemcum(this)
  220. if (this.maleParts || this.femaleParts) {
  221. this.quenchExcess(this);
  222. }
  223. },
  224. "maleParts": true,
  225. "femaleParts": true,
  226. "fillCum": function(self) {
  227. self.cumStorage.amount += self.cumScale * self.ballVolume / 120;
  228. if (self.cumStorage.amount > self.cumStorage.limit)
  229. self.arouse(10 * (self.cumStorage.amount / self.cumStorage.limit - 1));
  230. setTimeout(function () { self.fillCum(self) }, 1000);
  231. update();
  232. },
  233. "fillFemcum": function(self) {
  234. self.femcumStorage.amount += self.femcumScale * self.vaginaVolume / 120;
  235. if (self.femcumStorage.amount > self.femcumStorage.limit)
  236. self.arouse(10 * (self.femcumStorage.amount / self.femcumStorage.limit - 1));
  237. setTimeout(function () { self.fillFemcum(self) }, 1000);
  238. update();
  239. },
  240. "cumStorage": {
  241. "amount": 0,
  242. get limit() {
  243. return this.owner.ballVolume;
  244. }
  245. },
  246. "femcumStorage": {
  247. "amount": 0,
  248. get limit() {
  249. return this.owner.vaginaVolume;
  250. }
  251. },
  252. "orgasm": false,
  253. "afterglow": false,
  254. "arousalEnabled": true,
  255. "arousalFactor": 1,
  256. "arousal": 0,
  257. "edge": 0,
  258. "arouse": function(amount) {
  259. if (!this.arousalEnabled)
  260. return;
  261. if (this.afterglow)
  262. return;
  263. this.arousal += amount * this.arousalFactor;
  264. if (this.arousal >= 200) {
  265. this.arousal = 200;
  266. if (!this.orgasm) {
  267. this.orgasm = true;
  268. if (this.maleParts) {
  269. this.maleOrgasm(this);
  270. }
  271. if (this.femaleParts) {
  272. this.femaleOrgasm(this);
  273. }
  274. }
  275. }
  276. },
  277. "quench": function(amount) {
  278. if (!this.arousalEnabled)
  279. return;
  280. this.arousal -= amount;
  281. if (this.arousal <= 100) {
  282. if (this.orgasm) {
  283. this.orgasm = false;
  284. this.afterglow = true;
  285. }
  286. }
  287. if (this.arousal < 0) {
  288. this.arousal = 0;
  289. this.afterglow = false;
  290. }
  291. update();
  292. },
  293. "quenchExcess": function(self) {
  294. if (self.arousalEnabled) {
  295. if (self.arousal > 100 && !self.orgasm) {
  296. self.arousal = Math.max(100,self.arousal-1);
  297. self.edge += Math.sqrt((self.arousal - 100)) / 500;
  298. self.edge = Math.min(1,self.edge);
  299. self.edge = Math.max(0,self.edge - 0.002);
  300. update();
  301. } else if (self.afterglow) {
  302. self.quench(0.5);
  303. self.edge = Math.max(0,self.edge - 0.01);
  304. }
  305. }
  306. setTimeout(function() { self.quenchExcess(self); }, 200);
  307. },
  308. "maleOrgasm": function(self) {
  309. if (!this.arousalEnabled)
  310. return;
  311. if (self.orgasm) {
  312. self.quench(10);
  313. var amount = Math.min(this.cumVolume, this.cumStorage.amount);
  314. this.cumStorage.amount -= amount;
  315. male_orgasm(amount);
  316. setTimeout(function() { self.maleOrgasm(self) }, 2000);
  317. }
  318. },
  319. "femaleOrgasm": function(self) {
  320. if (!this.arousalEnabled)
  321. return;
  322. if (this.orgasm) {
  323. this.quench(10);
  324. var amount = Math.min(this.femcumVolume, this.femcumStorage.amount);
  325. this.femcumStorage.amount -= amount;
  326. female_orgasm(amount);
  327. setTimeout(function() { self.femaleOrgasm(self) }, 2000);
  328. }
  329. },
  330. get description() {
  331. result = [];
  332. line = "You are a " + length(macro.height, unit, true) + " tall " + macro.species + ". You weigh " + mass(macro.mass, unit) + ".";
  333. result.push(line);
  334. if (this.arousalEnabled) {
  335. if (this.afterglow) {
  336. result.push("You're basking in the afterglow of a powerful orgasm.");
  337. }
  338. else if (this.orgasm) {
  339. result.push("You're cumming!");
  340. } else if (this.arousal < 25) {
  341. } else if (this.arousal < 75) {
  342. result.push("You're feeling a little aroused.");
  343. } else if (this.arousal < 150) {
  344. result.push("You're feeling aroused.");
  345. } else if (this.arousal < 200) {
  346. result.push("You're on the edge of an orgasm!");
  347. }
  348. }
  349. if (this.maleParts) {
  350. line = "Your " + this.describeDick + " cock hangs from your hips, with two " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + "-wide balls hanging beneath.";
  351. result.push(line);
  352. }
  353. if (this.femaleParts) {
  354. line = "Your glistening " + this.describeVagina + " slit peeks out from between your legs."
  355. result.push(line);
  356. line = "You have two " + length(macro.breastDiameter, unit, true) + "-wide breasts that weigh " + mass(macro.breastMass, unit) + " apiece.";
  357. result.push(line);
  358. }
  359. return result;
  360. },
  361. get describeDick() {
  362. state = "";
  363. if (!this.arousalEnabled) {
  364. state = "limp";
  365. } else if (this.orgasm) {
  366. state = "spurting";
  367. } else {
  368. if (this.arousal < 25) {
  369. state = "limp";
  370. } else if (this.arousal < 75) {
  371. state = "swelling";
  372. } else if (this.arousal < 100) {
  373. state = "erect";
  374. } else if (this.arousal < 150) {
  375. state = "erect, throbbing";
  376. } else if (this.arousal < 200) {
  377. state = "erect, throbbing, pre-soaked";
  378. }
  379. }
  380. return length(macro.dickLength, unit, true) + " long " + state + " " + macro.dickType;
  381. },
  382. get describeVagina() {
  383. state = "";
  384. if (!this.arousalEnabled) {
  385. state = "unassuming";
  386. } else if (this.orgasm) {
  387. state = "gushing, quivering";
  388. } else {
  389. if (this.arousal < 25) {
  390. state = "unassuming";
  391. } else if (this.arousal < 75) {
  392. state = "moist";
  393. } else if (this.arousal < 100) {
  394. state = "glistening";
  395. } else if (this.arousal < 150) {
  396. state = "dripping";
  397. } else if (this.arousal < 200) {
  398. state = "dripping, quivering";
  399. }
  400. }
  401. return length(macro.vaginaLength, unit, true) + " long " + state
  402. },
  403. "growthPoints": 0,
  404. "addGrowthPoints": function(mass) {
  405. this.growthPoints += Math.round(50 * mass / (this.scale*this.scale));
  406. },
  407. // 0 = entirely non-fatal
  408. // 1 = fatal, but not specific
  409. // 2 = gory
  410. "brutality": 1,
  411. "scale": 1,
  412. }
  413. function look()
  414. {
  415. var desc = macro.description;
  416. var line2 = ""
  417. if (macro.height > 1e12)
  418. line2 = "You're pretty much everywhere at once.";
  419. else if (macro.height > 1e6)
  420. line2 = "You're standing...on pretty much everything at once.";
  421. else
  422. switch(biome) {
  423. case "rural": line2 = "You're standing amongst rural farmhouses and expansive ranches. Cattle are milling about at your feet."; break;
  424. case "suburb": line2 = "You're striding through the winding roads of a suburb."; break;
  425. case "city": line2 = "You're terrorizing the streets of a city. Heavy traffic, worsened by your rampage, is everywhere."; break;
  426. 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.";
  427. }
  428. desc = desc.concat([newline,line2,newline]);
  429. update(desc);
  430. }
  431. function get_living_prey(sum) {
  432. var total = 0;
  433. for (var key in sum) {
  434. if (sum.hasOwnProperty(key)) {
  435. if (key == "Person" || key == "Cow")
  436. total += sum[key];
  437. }
  438. }
  439. return total;
  440. }
  441. function toggle_auto()
  442. {
  443. strolling = !strolling;
  444. document.getElementById("button-stroll").innerHTML = "Status: " + (strolling ? "Strolling" : "Standing");
  445. if (strolling)
  446. update(["You start walking.",newline]);
  447. else
  448. update(["You stop walking.",newline]);
  449. }
  450. function change_location()
  451. {
  452. switch(biome) {
  453. case "suburb": biome = "city"; break;
  454. case "city": biome = "downtown"; break;
  455. case "downtown": biome = "rural"; break;
  456. case "rural": biome = "suburb"; break;
  457. }
  458. document.getElementById("button-location").innerHTML = "Location: " + biome.charAt(0).toUpperCase() + biome.slice(1);
  459. }
  460. function toggle_units()
  461. {
  462. switch(unit) {
  463. case "metric": unit = "customary"; break;
  464. case "customary": unit = "approx"; break;
  465. case "approx": unit = "metric"; break;
  466. }
  467. document.getElementById("button-units").innerHTML = "Units: " + unit.charAt(0).toUpperCase() + unit.slice(1);
  468. update();
  469. }
  470. function toggle_numbers() {
  471. switch(numbers) {
  472. case "full": numbers="prefix"; break;
  473. case "prefix": numbers="words"; break;
  474. case "words": numbers = "scientific"; break;
  475. case "scientific": numbers = "full"; break;
  476. }
  477. document.getElementById("button-numbers").innerHTML = "Numbers: " + numbers.charAt(0).toUpperCase() + numbers.slice(1);
  478. update();
  479. }
  480. function toggle_verbose()
  481. {
  482. verbose = !verbose;
  483. document.getElementById("button-verbose").innerHTML = "Descriptions: " + (verbose ? "Verbose" : "Simple");
  484. }
  485. function toggle_arousal()
  486. {
  487. macro.arousalEnabled = !macro.arousalEnabled;
  488. document.getElementById("button-arousal").innerHTML = (macro.arousalEnabled ? "Arousal On" : "Arousal Off");
  489. if (macro.arousalEnabled) {
  490. document.getElementById("arousal").style.display = "block";
  491. document.getElementById("edge").style.display = "block";
  492. } else {
  493. document.getElementById("arousal").style.display = "none";
  494. document.getElementById("edge").style.display = "none";
  495. }
  496. }
  497. function initVictims()
  498. {
  499. return {
  500. "Person": 0,
  501. "Cow": 0,
  502. "Car": 0,
  503. "Bus": 0,
  504. "Tram": 0,
  505. "Motorcycle": 0,
  506. "House": 0,
  507. "Barn": 0,
  508. "Small Skyscraper": 0,
  509. "Large Skyscraper": 0,
  510. "Train": 0,
  511. "Train Car": 0,
  512. "Parking Garage": 0,
  513. "Overpass": 0,
  514. "Town": 0,
  515. "City": 0,
  516. "Continent": 0,
  517. "Planet": 0,
  518. "Star": 0,
  519. "Solar System": 0,
  520. "Galaxy": 0
  521. };
  522. };
  523. // lists out total people
  524. function summarize(sum, fatal = true)
  525. {
  526. var word;
  527. var count = get_living_prey(sum);
  528. if (fatal && macro.brutality > 0)
  529. word = count > 1 ? "kills" : "kill";
  530. else if (!fatal && macro.brutality > 0)
  531. word = "prey";
  532. else
  533. word = count > 1 ? "victims" : "victim";
  534. return "<b>(" + count + " " + word + ")</b>";
  535. }
  536. function getOnePrey(biome,area)
  537. {
  538. var potential = ["Person"];
  539. if (macro.height > 1e12)
  540. potential = ["Planet","Star","Solar System","Galaxy"];
  541. else if (macro.height > 1e6)
  542. potential = ["Town","City","Continent","Planet"];
  543. else
  544. switch(biome) {
  545. case "suburb": potential = ["Person", "Car", "Bus", "Train", "House"]; break;
  546. case "city": potential = ["Person", "Car", "Bus", "Train", "Tram", "House", "Parking Garage"]; break;
  547. case "downtown": potential = ["Person", "Car", "Bus", "Tram", "Small Skyscraper", "Large Skyscraper", "Parking Garage"]; break;
  548. case "rural": potential = ["Person", "Barn", "House", "Cow"]; break;
  549. }
  550. var potAreas = []
  551. potential.forEach(function (x) {
  552. potAreas.push([x,areas[x]]);
  553. });
  554. potAreas = potAreas.sort(function (x,y) {
  555. return y[1] - x[1];
  556. });
  557. for (var i=0; i<potAreas.length; i++) {
  558. x = potAreas[i];
  559. if (x[1] < area) {
  560. return new Container([new things[x[0]](1)]);
  561. }
  562. };
  563. return new Container([new Person(1)]);
  564. }
  565. function getPrey(region, area)
  566. {
  567. var weights = {"Person": 1};
  568. if (macro.height > 1e12) {
  569. weights = {
  570. "Planet": 1e-10,
  571. "Star": 1e-10,
  572. "Solar System": 1e-10,
  573. "Galaxy": 1e-10
  574. }
  575. }
  576. else if (macro.height > 1e6) {
  577. weights = {
  578. "Town": 0.1,
  579. "City": 0.05,
  580. "Continent": 0.005,
  581. "Planet": 0.0001
  582. }
  583. }
  584. else {
  585. switch(region)
  586. {
  587. case "rural": weights = {
  588. "Person": 0.05,
  589. "House": 0.01,
  590. "Barn": 0.01,
  591. "Cow": 0.2
  592. }; break;
  593. case "suburb": weights = {
  594. "Person": 0.5,
  595. "House": 0.5,
  596. "Car": 0.2,
  597. "Train": 0.1,
  598. "Bus": 0.1
  599. }; break;
  600. case "city": weights = {
  601. "Person": 0.5,
  602. "House": 0.2,
  603. "Car": 0.2,
  604. "Train": 0.1,
  605. "Bus": 0.1,
  606. "Tram": 0.1,
  607. "Parking Garage": 0.02
  608. }; break;
  609. case "downtown": weights = {
  610. "Person": 0.5,
  611. "Car": 0.3,
  612. "Bus": 0.15,
  613. "Tram": 0.1,
  614. "Parking Garage": 0.02,
  615. "Small Skyscraper": 0.4,
  616. "Large Skyscraper": 0.1
  617. }; break;
  618. }
  619. }
  620. return fill_area(area,weights);
  621. }
  622. function updateVictims(type,prey)
  623. {
  624. var sums = prey.sum();
  625. for (var key in sums) {
  626. if (sums.hasOwnProperty(key)) {
  627. victims[type][key] += sums[key];
  628. }
  629. }
  630. }
  631. function feed()
  632. {
  633. var area = macro.handArea;
  634. var prey = getPrey(biome, area);
  635. var line = describe("eat", prey, macro, verbose)
  636. var linesummary = summarize(prey.sum(), false);
  637. var people = get_living_prey(prey.sum());
  638. var sound = "";
  639. if (people == 0) {
  640. sound = "";
  641. } else if (people < 3) {
  642. sound = "Ulp.";
  643. } else if (people < 10) {
  644. sound = "Gulp.";
  645. } else if (people < 50) {
  646. sound = "Glrrp.";
  647. } else if (people < 500) {
  648. sound = "Glrrrpkh!";
  649. } else if (people < 5000) {
  650. sound = "GLRRKPKH!";
  651. } else {
  652. sound = "Oh the humanity!";
  653. }
  654. var preyMass = prey.sum_property("mass");
  655. macro.addGrowthPoints(preyMass);
  656. macro.stomach.feed(prey);
  657. macro.arouse(5);
  658. updateVictims("stomach",prey);
  659. update([sound,line,linesummary,newline]);
  660. }
  661. function stomp()
  662. {
  663. var area = macro.pawArea;
  664. var prey = getPrey(biome, area);
  665. var line = describe("stomp", prey, macro, verbose)
  666. var linesummary = summarize(prey.sum(), true);
  667. var people = get_living_prey(prey.sum());
  668. var sound = "Thump";
  669. if (people < 3) {
  670. sound = "Thump!";
  671. } else if (people < 10) {
  672. sound = "Squish!";
  673. } else if (people < 50) {
  674. sound = "Crunch!";
  675. } else if (people < 500) {
  676. sound = "CRUNCH!";
  677. } else if (people < 5000) {
  678. sound = "CRRUUUNCH!!";
  679. } else {
  680. sound = "Oh the humanity!";
  681. }
  682. var preyMass = prey.sum_property("mass");
  683. macro.addGrowthPoints(preyMass);
  684. macro.arouse(5);
  685. updateVictims("stomped",prey);
  686. update([sound,line,linesummary,newline]);
  687. }
  688. function grind()
  689. {
  690. var area = macro.assArea / 2;
  691. if (macro.maleParts)
  692. area += macro.dickArea
  693. if (macro.femalePartS)
  694. area += macro.vaginaArea;
  695. var prey = getPrey(biome,area);
  696. var line = describe("grind", prey, macro, verbose);
  697. var linesummary = summarize(prey.sum(), true);
  698. var people = get_living_prey(prey.sum());
  699. var sound = "";
  700. if (people < 3) {
  701. sound = "Thump.";
  702. } else if (people < 10) {
  703. sound = "Crunch.";
  704. } else if (people < 50) {
  705. sound = "Crrrrunch.";
  706. } else if (people < 500) {
  707. sound = "SMASH!";
  708. } else if (people < 5000) {
  709. sound = "CCCRASH!!";
  710. } else {
  711. sound = "Oh the humanity!";
  712. }
  713. var preyMass = prey.sum_property("mass");
  714. macro.addGrowthPoints(preyMass);
  715. macro.arouse(20);
  716. updateVictims("ground",prey);
  717. update([sound,line,linesummary,newline]);
  718. }
  719. function anal_vore()
  720. {
  721. var area = macro.analVoreArea;
  722. var prey = getOnePrey(biome,area);
  723. area = macro.assArea;
  724. var crushed = getPrey(biome,area);
  725. var line1 = describe("anal-vore", prey, macro, verbose);
  726. var line1summary = summarize(prey.sum(), false);
  727. var line2 = describe("ass-crush", crushed, macro, verbose);
  728. var line2summary = summarize(crushed.sum(), true);
  729. var people = get_living_prey(prey.sum());
  730. var sound = "Shlp";
  731. if (people < 3) {
  732. sound = "Shlp.";
  733. } else if (people < 10) {
  734. sound = "Squelch.";
  735. } else if (people < 50) {
  736. sound = "Shlurrp.";
  737. } else if (people < 500) {
  738. sound = "SHLRP!";
  739. } else if (people < 5000) {
  740. sound = "SQLCH!!";
  741. } else {
  742. sound = "Oh the humanity!";
  743. }
  744. var people = get_living_prey(crushed.sum());
  745. var sound2 = "Thump";
  746. if (people < 3) {
  747. sound2 = "Thump!";
  748. } else if (people < 10) {
  749. sound2 = "Squish!";
  750. } else if (people < 50) {
  751. sound2 = "Crunch!";
  752. } else if (people < 500) {
  753. sound2 = "CRUNCH!";
  754. } else if (people < 5000) {
  755. sound2 = "CRRUUUNCH!!";
  756. } else {
  757. sound2 = "Oh the humanity!";
  758. }
  759. var preyMass = prey.sum_property("mass");
  760. var crushedMass = prey.sum_property("mass");
  761. macro.addGrowthPoints(preyMass);
  762. macro.addGrowthPoints(crushedMass);
  763. macro.bowels.feed(prey);
  764. macro.arouse(10);
  765. updateVictims("bowels",prey);
  766. updateVictims("stomped",crushed);
  767. update([sound,line1,line1summary,newline,sound2,line2,line2summary,newline]);
  768. }
  769. function breast_crush()
  770. {
  771. var area = macro.breastArea;
  772. var prey = getPrey(biome, area);
  773. var line = describe("breast-crush", prey, macro, verbose);
  774. var linesummary = summarize(prey.sum(), true);
  775. var people = get_living_prey(prey.sum());
  776. var sound = "Thump";
  777. if (people < 3) {
  778. sound = "Thump!";
  779. } else if (people < 10) {
  780. sound = "Squish!";
  781. } else if (people < 50) {
  782. sound = "Crunch!";
  783. } else if (people < 500) {
  784. sound = "CRUNCH!";
  785. } else if (people < 5000) {
  786. sound = "CRRUUUNCH!!";
  787. } else {
  788. sound = "Oh the humanity!";
  789. }
  790. var preyMass = prey.sum_property("mass");
  791. macro.addGrowthPoints(preyMass);
  792. macro.arouse(10);
  793. updateVictims("breasts",prey);
  794. update([sound,line,linesummary,newline]);
  795. }
  796. function unbirth()
  797. {
  798. var area = macro.vaginaArea;
  799. var prey = getPrey(biome, area);
  800. var line = describe("unbirth", prey, macro, verbose)
  801. var linesummary = summarize(prey.sum(), false);
  802. var people = get_living_prey(prey.sum());
  803. var sound = "";
  804. if (people < 3) {
  805. sound = "Shlp.";
  806. } else if (people < 10) {
  807. sound = "Squelch.";
  808. } else if (people < 50) {
  809. sound = "Shlurrp.";
  810. } else if (people < 500) {
  811. sound = "SHLRP!";
  812. } else if (people < 5000) {
  813. sound = "SQLCH!!";
  814. } else {
  815. sound = "Oh the humanity!";
  816. }
  817. var preyMass = prey.sum_property("mass");
  818. macro.addGrowthPoints(preyMass);
  819. macro.womb.feed(prey);
  820. macro.arouse(20);
  821. updateVictims("womb",prey);
  822. update([sound,line,linesummary,newline]);
  823. }
  824. function cockslap()
  825. {
  826. var area = macro.dickArea;
  827. var prey = getPrey(biome, area);
  828. var line = describe("cockslap", prey, macro, verbose)
  829. var linesummary = summarize(prey.sum(), true);
  830. var people = get_living_prey(prey.sum());
  831. var sound = "Thump";
  832. if (people < 3) {
  833. sound = "Thump!";
  834. } else if (people < 10) {
  835. sound = "Squish!";
  836. } else if (people < 50) {
  837. sound = "Crunch!";
  838. } else if (people < 500) {
  839. sound = "CRUNCH!";
  840. } else if (people < 5000) {
  841. sound = "CRRUUUNCH!!";
  842. } else {
  843. sound = "Oh the humanity!";
  844. }
  845. var preyMass = prey.sum_property("mass");
  846. macro.addGrowthPoints(preyMass);
  847. macro.arouse(15);
  848. updateVictims("cock",prey);
  849. update([sound,line,linesummary,newline]);
  850. }
  851. function cock_vore()
  852. {
  853. var area = macro.dickGirth;
  854. var prey = getPrey(biome, area);
  855. var line = describe("cock-vore", prey, macro, verbose)
  856. var linesummary = summarize(prey.sum(), false);
  857. var people = get_living_prey(prey.sum());
  858. var sound = "lp";
  859. if (people < 3) {
  860. sound = "Shlp.";
  861. } else if (people < 10) {
  862. sound = "Squelch.";
  863. } else if (people < 50) {
  864. sound = "Shlurrp.";
  865. } else if (people < 500) {
  866. sound = "SHLRP!";
  867. } else if (people < 5000) {
  868. sound = "SQLCH!!";
  869. } else {
  870. sound = "Oh the humanity!";
  871. }
  872. var preyMass = prey.sum_property("mass");
  873. macro.addGrowthPoints(preyMass);
  874. macro.balls.feed(prey);
  875. macro.arouse(20);
  876. updateVictims("balls",prey);
  877. update([sound,line,linesummary,newline]);
  878. }
  879. function ball_smother()
  880. {
  881. var area = macro.ballArea * 2;
  882. var prey = getPrey(biome, area);
  883. var line = describe("ball-smother", prey, macro, verbose)
  884. var linesummary = summarize(prey.sum(), true);
  885. var people = get_living_prey(prey.sum());
  886. var sound = "Thump";
  887. if (people < 3) {
  888. sound = "Thump!";
  889. } else if (people < 10) {
  890. sound = "Squish!";
  891. } else if (people < 50) {
  892. sound = "Smoosh!";
  893. } else if (people < 500) {
  894. sound = "SMOOSH!";
  895. } else if (people < 5000) {
  896. sound = "SMOOOOOSH!!";
  897. } else {
  898. sound = "Oh the humanity!";
  899. }
  900. var preyMass = prey.sum_property("mass");
  901. macro.addGrowthPoints(preyMass);
  902. macro.arouse(10);
  903. updateVictims("balls",prey);
  904. update([sound,line,linesummary,newline]);
  905. }
  906. function male_orgasm(vol)
  907. {
  908. var area = Math.pow(vol, 2/3);
  909. var prey = getPrey(biome, area);
  910. var line = describe("male-orgasm", prey, macro, verbose).replace("$VOLUME",volume(vol,unit,false))
  911. var linesummary = summarize(prey.sum(), true);
  912. var people = get_living_prey(prey.sum());
  913. var sound = "Spurt!";
  914. if (people < 3) {
  915. sound = "Spurt!";
  916. } else if (people < 10) {
  917. sound = "Sploosh!";
  918. } else if (people < 50) {
  919. sound = "Sploooooosh!";
  920. } else if (people < 500) {
  921. sound = "SPLOOSH!";
  922. } else if (people < 5000) {
  923. sound = "SPLOOOOOOOOOOSH!!";
  924. } else {
  925. sound = "Oh the humanity!";
  926. }
  927. var preyMass = prey.sum_property("mass");
  928. macro.addGrowthPoints(preyMass);
  929. updateVictims("splooged",prey);
  930. update([sound,line,linesummary,newline]);
  931. }
  932. function female_orgasm(vol)
  933. {
  934. var area = Math.pow(vol, 2/3);
  935. var prey = getPrey(biome, area);
  936. var line = describe("female-orgasm", prey, macro, verbose).replace("$VOLUME",volume(vol,unit,false));
  937. var linesummary = summarize(prey.sum(), true);
  938. var people = get_living_prey(prey.sum());
  939. var sound = "Spurt!";
  940. if (people < 3) {
  941. sound = "Spurt!";
  942. } else if (people < 10) {
  943. sound = "Sploosh!";
  944. } else if (people < 50) {
  945. sound = "Sploooooosh!";
  946. } else if (people < 500) {
  947. sound = "SPLOOSH!";
  948. } else if (people < 5000) {
  949. sound = "SPLOOOOOOOOOOSH!!";
  950. } else {
  951. sound = "Oh the humanity!";
  952. }
  953. var preyMass = prey.sum_property("mass");
  954. macro.addGrowthPoints(preyMass);
  955. updateVictims("splooged",prey);
  956. update([sound,line,linesummary,newline]);
  957. }
  958. function transformNumbers(line)
  959. {
  960. return line.toString().replace(/[0-9]+(\.[0-9]+)?(e\+[0-9]+)?/g, function(text) { return number(text, numbers); });
  961. }
  962. function update(lines = [])
  963. {
  964. var log = document.getElementById("log");
  965. lines.forEach(function (x) {
  966. var line = document.createElement('div');
  967. line.innerHTML = transformNumbers(x);
  968. log.appendChild(line);
  969. });
  970. if (lines.length > 0)
  971. log.scrollTop = log.scrollHeight;
  972. document.getElementById("height").innerHTML = "Height: " + transformNumbers(length(macro.height, unit));
  973. document.getElementById("mass").innerHTML = "Mass: " + transformNumbers(mass(macro.mass, unit));
  974. document.getElementById("growth-points").innerHTML = "Growth Points:" + macro.growthPoints;
  975. document.getElementById("arousal").innerHTML = "Arousal: " + round(macro.arousal,0) + "%";
  976. document.getElementById("edge").innerHTML = "Edge: " + round(macro.edge * 100,0) + "%";
  977. document.getElementById("cum").innerHTML = "Cum: " + transformNumbers(volume(macro.cumStorage.amount,unit,false))
  978. document.getElementById("cumPercent").innerHTML = Math.round(macro.cumStorage.amount / macro.cumStorage.limit * 100) + "%";
  979. document.getElementById("femcum").innerHTML = "Femcum: " + transformNumbers(volume(macro.femcumStorage.amount,unit,false));
  980. document.getElementById("femcumPercent").innerHTML = Math.round(macro.femcumStorage.amount / macro.femcumStorage.limit * 100) + "%";
  981. for (var type in victims) {
  982. if (victims.hasOwnProperty(type)) {
  983. for (var key in victims[type]){
  984. if (victims[type].hasOwnProperty(key) && victims[type][key] > 0) {
  985. document.getElementById("stat-" + key).style.display = "table-row";
  986. document.getElementById("stat-" + type + "-" + key).innerHTML = number(victims[type][key],numbers);
  987. }
  988. }
  989. }
  990. }
  991. }
  992. function pick_move()
  993. {
  994. if (!strolling) {
  995. setTimeout(pick_move, 1500 * Math.sqrt(macro.scale));
  996. return;
  997. }
  998. var choice = Math.random();
  999. if (choice < 0.2) {
  1000. anal_vore();
  1001. } else if (choice < 0.6) {
  1002. stomp();
  1003. } else {
  1004. feed();
  1005. }
  1006. setTimeout(pick_move, 1500 * Math.sqrt(macro.scale));
  1007. }
  1008. function grow_pick(times) {
  1009. if (document.getElementById("part-body").checked == true) {
  1010. grow(times);
  1011. }
  1012. else if (document.getElementById("part-ass").checked == true) {
  1013. grow_ass(times);
  1014. }
  1015. else if (document.getElementById("part-dick").checked == true) {
  1016. grow_dick(times);
  1017. }
  1018. else if (document.getElementById("part-balls").checked == true) {
  1019. grow_balls(times);
  1020. }
  1021. else if (document.getElementById("part-breasts").checked == true) {
  1022. grow_breasts(times);
  1023. }
  1024. else if (document.getElementById("part-vagina").checked == true) {
  1025. grow_vagina(times);
  1026. }
  1027. }
  1028. function grow(times=1)
  1029. {
  1030. if (macro.growthPoints < 100 * times) {
  1031. update(["You don't feel like growing right now."]);
  1032. return;
  1033. }
  1034. macro.growthPoints -= 100 * times;
  1035. var oldHeight = macro.height;
  1036. var oldMass = macro.mass;
  1037. macro.scale *= Math.pow(1.02,times);
  1038. var newHeight = macro.height;
  1039. var newMass = macro.mass;
  1040. var heightDelta = newHeight - oldHeight;
  1041. var massDelta = newMass - oldMass;
  1042. var heightStr = length(heightDelta, unit);
  1043. var massStr = mass(massDelta, unit);
  1044. update(["Power surges through you as you grow " + heightStr + " taller and gain " + massStr + " of mass",newline]);
  1045. }
  1046. function grow_dick(times=1)
  1047. {
  1048. if (macro.growthPoints < 10 * times) {
  1049. update(["You don't feel like growing right now."]);
  1050. return;
  1051. }
  1052. macro.growthPoints -= 10 * times;
  1053. var oldLength = macro.dickLength;
  1054. var oldMass = macro.dickMass;
  1055. macro.dickScale = Math.pow(macro.dickScale * macro.dickScale + 1.02*times, 1/2) ;
  1056. var lengthDelta = macro.dickLength - oldLength;
  1057. var massDelta = macro.dickMass - oldMass;
  1058. update(["Power surges through you as your " + macro.dickType + " cock grows " + length(lengthDelta, unit, false) + " longer and gains " + mass(massDelta, unit, false) + " of mass",newline]);
  1059. }
  1060. function grow_balls(times=1)
  1061. {
  1062. if (macro.growthPoints < 10 * times) {
  1063. update(["You don't feel like growing right now."]);
  1064. return;
  1065. }
  1066. macro.growthPoints -= 10 * times;
  1067. var oldDiameter = macro.ballDiameter;
  1068. var oldMass = macro.ballMass;
  1069. macro.ballScale = Math.pow(macro.ballScale * macro.ballScale + 1.02*times, 1/2) ;
  1070. var diameterDelta = macro.ballDiameter - oldDiameter;
  1071. var massDelta = macro.ballMass - oldMass;
  1072. update(["Power surges through you as your balls swell by " + length(diameterDelta, unit, false) + ", gaining " + mass(massDelta, unit, false) + " of mass apiece",newline]);
  1073. }
  1074. function grow_breasts(times=1)
  1075. {
  1076. if (macro.growthPoints < 10 * times) {
  1077. update(["You don't feel like growing right now."]);
  1078. return;
  1079. }
  1080. macro.growthPoints -= 10 * times;
  1081. var oldDiameter = macro.breastDiameter;
  1082. var oldMass = macro.breastMass;
  1083. macro.breastScale = Math.pow(macro.breastScale * macro.breastScale + 1.02*times, 1/2) ;
  1084. var diameterDelta = macro.breastDiameter - oldDiameter;
  1085. var massDelta = macro.breastMass - oldMass;
  1086. update(["Power surges through you as your breasts swell by " + length(diameterDelta, unit, false) + ", gaining " + mass(massDelta, unit, false) + " of mass apiece",newline]);
  1087. }
  1088. function grow_vagina(times=1)
  1089. {
  1090. if (macro.growthPoints < 10 * times) {
  1091. update(["You don't feel like growing right now."]);
  1092. return;
  1093. }
  1094. macro.growthPoints -= 10 * times;
  1095. var oldLength = macro.vaginaLength;
  1096. macro.vaginaScale = Math.pow(macro.vaginaScale * macro.vaginaScale + 1.02*times, 1/2) ;
  1097. var lengthDelta = macro.vaginaLength - oldLength;
  1098. update(["Power surges through you as your moist slit expands by by " + length(lengthDelta, unit, false),newline]);
  1099. }
  1100. function grow_ass(times=1)
  1101. {
  1102. if (macro.growthPoints < 10 * times) {
  1103. update(["You don't feel like growing right now."]);
  1104. return;
  1105. }
  1106. macro.growthPoints -= 10 * times;
  1107. var oldDiameter = Math.pow(macro.assArea,1/2);
  1108. macro.assScale = Math.pow(macro.assScale * macro.assScale + 1.02*times, 1/2) ;
  1109. var diameterDelta = Math.pow(macro.assArea,1/2) - oldDiameter;
  1110. update(["Power surges through you as your ass swells by " + length(diameterDelta, unit, false),newline]);
  1111. }
  1112. function grow_lots()
  1113. {
  1114. var oldHeight = macro.height;
  1115. var oldMass = macro.mass;
  1116. macro.scale *= 100;
  1117. var newHeight = macro.height;
  1118. var newMass = macro.mass;
  1119. var heightDelta = newHeight - oldHeight;
  1120. var massDelta = newMass - oldMass;
  1121. var heightStr = length(heightDelta, unit);
  1122. var massStr = mass(massDelta, unit);
  1123. update(["Power surges through you as you grow " + heightStr + " taller and gain " + massStr + " of mass",newline]);
  1124. }
  1125. function preset(name) {
  1126. switch(name){
  1127. case "Fen":
  1128. macro.species = "crux";
  1129. macro.baseHeight = 2.2606;
  1130. macro.baseMass = 124.738;
  1131. break;
  1132. case "Renard":
  1133. macro.species = "fox";
  1134. macro.baseHeight = 1.549;
  1135. macro.baseMass = 83.9;
  1136. case "Vulpes":
  1137. macro.species = "fox";
  1138. macro.baseHeight = 20000;
  1139. macro.baseMass = 180591661866272;
  1140. }
  1141. }
  1142. function saveSettings() {
  1143. storage = window.localStorage;
  1144. settings = {};
  1145. form = document.forms.namedItem("custom-species-form");
  1146. for (var i=0; i<form.length; i++) {
  1147. if (form[i].value != "") {
  1148. if (form[i].type == "text")
  1149. settings[form[i].name] = form[i].value;
  1150. else if (form[i].type == "number")
  1151. settings[form[i].name] = parseFloat(form[i].value);
  1152. else if (form[i].type == "checkbox") {
  1153. settings[form[i].name] = form[i].checked;
  1154. }
  1155. }
  1156. }
  1157. storage.setItem('settings',JSON.stringify(settings));
  1158. }
  1159. function loadSettings() {
  1160. if (window.localStorage.getItem('settings') == null)
  1161. return;
  1162. storage = window.localStorage;
  1163. settings = JSON.parse(storage.getItem('settings'));
  1164. form = document.forms.namedItem("custom-species-form");
  1165. for (var i=0; i<form.length; i++) {
  1166. if (settings[form[i].name] != undefined) {
  1167. if (form[i].type == "text")
  1168. form[i].value = settings[form[i].name];
  1169. else if (form[i].type == "number")
  1170. form[i].value = settings[form[i].name];
  1171. else if (form[i].type == "checkbox") {
  1172. form[i].checked = settings[form[i].name];
  1173. }
  1174. }
  1175. }
  1176. }
  1177. function startGame(e) {
  1178. form = document.forms.namedItem("custom-species-form");
  1179. for (var i=0; i<form.length; i++) {
  1180. if (form[i].value != "") {
  1181. if (form[i].type == "text")
  1182. macro[form[i].name] = form[i].value;
  1183. else if (form[i].type == "number")
  1184. macro[form[i].name] = parseFloat(form[i].value);
  1185. else if (form[i].type == "checkbox") {
  1186. macro[form[i].name] = form[i].checked;
  1187. } else if (form[i].type == "radio") {
  1188. if (form[i].checked) {
  1189. switch(form[i].id) {
  1190. case "brutality-0": macro.brutality = 0; break;
  1191. case "brutality-1": macro.brutality = 1; break;
  1192. case "brutality-2": macro.brutality = 2; break;
  1193. }
  1194. }
  1195. }
  1196. }
  1197. }
  1198. document.getElementById("log-area").style.display = 'inline';
  1199. document.getElementById("option-panel").style.display = 'none';
  1200. document.getElementById("action-panel").style.display = 'flex';
  1201. victimTypes = ["stomped","digested","stomach","bowels","ground"];
  1202. if (macro.maleParts) {
  1203. victimTypes = victimTypes.concat(["cock","balls"]);
  1204. } else {
  1205. document.getElementById("button-cockslap").style.display = 'none';
  1206. document.getElementById("button-cock_vore").style.display = 'none';
  1207. document.getElementById("button-ball_smother").style.display = 'none';
  1208. document.getElementById("cum").style.display = 'none';
  1209. document.querySelector("#part-balls+label").style.display = 'none';
  1210. document.querySelector("#part-dick+label").style.display = 'none';
  1211. }
  1212. if (macro.femaleParts) {
  1213. victimTypes = victimTypes.concat(["breasts"],["womb"]);
  1214. } else {
  1215. document.getElementById("button-breast_crush").style.display = 'none';
  1216. document.getElementById("button-unbirth").style.display = 'none';
  1217. document.getElementById("femcum").style.display = 'none';
  1218. document.querySelector("#part-breasts+label").style.display = 'none';
  1219. document.querySelector("#part-vagina+label").style.display = 'none';
  1220. }
  1221. if (macro.maleParts || macro.femaleParts) {
  1222. victimTypes.push("splooged");
  1223. }
  1224. var table = document.getElementById("victim-table");
  1225. var tr = document.createElement('tr');
  1226. var th = document.createElement('th');
  1227. th.innerHTML = "Method";
  1228. tr.appendChild(th);
  1229. for (var i = 0; i < victimTypes.length; i++) {
  1230. var th = document.createElement('th');
  1231. th.classList.add("victim-table-cell");
  1232. th.innerHTML = victimTypes[i].charAt(0).toUpperCase() + victimTypes[i].slice(1);
  1233. tr.appendChild(th);
  1234. }
  1235. table.appendChild(tr);
  1236. for (var key in things) {
  1237. if (things.hasOwnProperty(key) && key != "Container") {
  1238. var tr = document.createElement('tr');
  1239. tr.id = "stat-" + key;
  1240. tr.style.display = "none";
  1241. var th = document.createElement('th');
  1242. th.innerHTML = key;
  1243. tr.appendChild(th);
  1244. for (var i = 0; i < victimTypes.length; i++) {
  1245. var th = document.createElement('th');
  1246. th.innerHTML = 0;
  1247. th.id = "stat-" + victimTypes[i] + "-" + key;
  1248. tr.appendChild(th);
  1249. }
  1250. table.appendChild(tr);
  1251. }
  1252. }
  1253. document.getElementById("button-arousal").innerHTML = (macro.arousalEnabled ? "Arousal On" : "Arousal Off");
  1254. if (!macro.arousalEnabled) {
  1255. document.getElementById("arousal").style.display = "none";
  1256. document.getElementById("edge").style.display = "none";
  1257. }
  1258. //var species = document.getElementById("option-species").value;
  1259. //var re = /^[a-zA-Z\- ]+$/;
  1260. // tricksy tricksy players
  1261. //if (re.test(species)) {
  1262. // macro.species = species;
  1263. //}
  1264. macro.init();
  1265. update();
  1266. document.getElementById("stat-container").style.display = 'flex';
  1267. }
  1268. window.addEventListener('load', function(event) {
  1269. victims["stomped"] = initVictims();
  1270. victims["digested"] = initVictims();
  1271. victims["stomach"] = initVictims();
  1272. victims["bowels"] = initVictims();
  1273. victims["breasts"] = initVictims();
  1274. victims["womb"] = initVictims();
  1275. victims["cock"] = initVictims();
  1276. victims["balls"] = initVictims();
  1277. victims["smothered"] = initVictims();
  1278. victims["splooged"] = initVictims();
  1279. victims["ground"] = initVictims();
  1280. document.getElementById("button-look").addEventListener("click",look);
  1281. document.getElementById("button-feed").addEventListener("click",feed);
  1282. document.getElementById("button-stomp").addEventListener("click",stomp);
  1283. document.getElementById("button-breast_crush").addEventListener("click",breast_crush);
  1284. document.getElementById("button-unbirth").addEventListener("click",unbirth);
  1285. document.getElementById("button-cockslap").addEventListener("click",cockslap);
  1286. document.getElementById("button-cock_vore").addEventListener("click",cock_vore);
  1287. document.getElementById("button-ball_smother").addEventListener("click",ball_smother);
  1288. document.getElementById("button-grind").addEventListener("click",grind);
  1289. document.getElementById("button-anal_vore").addEventListener("click",anal_vore);
  1290. document.getElementById("button-stroll").addEventListener("click",toggle_auto);
  1291. document.getElementById("button-location").addEventListener("click",change_location);
  1292. document.getElementById("button-numbers").addEventListener("click",toggle_numbers);
  1293. document.getElementById("button-units").addEventListener("click",toggle_units);
  1294. document.getElementById("button-verbose").addEventListener("click",toggle_verbose);
  1295. document.getElementById("button-arousal").addEventListener("click",toggle_arousal);
  1296. document.getElementById("button-grow-lots").addEventListener("click",grow_lots);
  1297. document.getElementById("button-amount-1").addEventListener("click",function() { grow_pick(1); });
  1298. document.getElementById("button-amount-5").addEventListener("click",function() { grow_pick(5); });
  1299. document.getElementById("button-amount-10").addEventListener("click",function() { grow_pick(10); });
  1300. document.getElementById("button-amount-20").addEventListener("click",function() { grow_pick(20); });
  1301. document.getElementById("button-amount-50").addEventListener("click",function() { grow_pick(50); });
  1302. document.getElementById("button-amount-100").addEventListener("click",function() { grow_pick(100); });
  1303. document.getElementById("button-load-custom").addEventListener("click",loadSettings);
  1304. document.getElementById("button-save-custom").addEventListener("click",saveSettings);
  1305. document.getElementById("button-start").addEventListener("click",startGame);
  1306. setTimeout(pick_move, 2000);
  1307. });