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.
 
 
 

280 wiersze
6.6 KiB

  1. var baseHeight = 3.65;
  2. var baseMass = 1360;
  3. var scale = 1;
  4. var strolling = false;
  5. var maxStomachDigest = 10;
  6. var maxBowelsDigest = 10;
  7. victims = {};
  8. function toggle_auto()
  9. {
  10. strolling = !strolling;
  11. document.getElementById("strolling-indicator").innerHTML = strolling ? "Strolling" : "Standing";
  12. if (strolling)
  13. update(["You start walking."]);
  14. else
  15. update(["You stop walking."]);
  16. }
  17. function initVictims()
  18. {
  19. return {
  20. "Person": 0,
  21. "Car": 0,
  22. "Bus": 0,
  23. "Tram": 0,
  24. "Motorcycle": 0,
  25. "House": 0,
  26. "Train": 0,
  27. "Train Car": 0,
  28. "Parking Garage": 0,
  29. "Overpass": 0,
  30. };
  31. };
  32. // lists out total people
  33. function summarize(sum, fatal = true)
  34. {
  35. return "(" + sum["Person"] + " " + (fatal ? (sum["Person"] > 1 ? "kills" : "kill") : (sum["Person"] > 1 ? "people" : "person")) + ")";
  36. }
  37. var stomach = []
  38. var bowels = []
  39. function getOnePrey(area)
  40. {
  41. var potential = ["Person", "Car", "Bus", "Tram", "House", "Train", "Parking Garage"];
  42. var potAreas = []
  43. potential.forEach(function (x) {
  44. potAreas.push([x,areas[x]]);
  45. });
  46. potAreas = potAreas.sort(function (x,y) {
  47. return x[1] < y[1];
  48. });
  49. for (var i=0; i<potAreas.length; i++) {
  50. x = potAreas[i];
  51. if (x[1] < area) {
  52. return new things[x[0]](1);
  53. }
  54. };
  55. return new Person(1);
  56. }
  57. function getPrey(region, area)
  58. {
  59. switch(region)
  60. {
  61. case "suburb": return suburbPrey(area);
  62. }
  63. }
  64. function suburbPrey(area)
  65. {
  66. return fill_area2(area, {"Person": 0.5, "House": 0.5, "Car": 0.2, "Tram": 0.1, "Bus": 0.1});
  67. }
  68. function updateVictims(type,prey)
  69. {
  70. var sums = prey.sum();
  71. for (var key in sums) {
  72. if (sums.hasOwnProperty(key)) {
  73. victims[type][key] += sums[key];
  74. }
  75. }
  76. }
  77. function scaleAddMass(scale, baseMass, mass)
  78. {
  79. var startMass = Math.pow(scale, 3) * baseMass;
  80. var newMass = startMass + mass;
  81. return Math.pow(newMass / baseMass, 1/3) ;
  82. }
  83. function feed()
  84. {
  85. var prey = getPrey("suburb", 0.5*scale*scale);
  86. var line = prey.eat() + " " + summarize(prey.sum(), false);
  87. var preyMass = prey.sum_property("mass");
  88. scale = scaleAddMass(scale, baseMass, preyMass);
  89. stomach.push(prey);
  90. if (stomach.length == 1)
  91. setTimeout(function() { doDigest("stomach"); }, 15000);
  92. updateVictims("stomach",prey);
  93. update([line]);
  94. }
  95. function stomp()
  96. {
  97. var prey = getPrey("suburb", 1.5*scale*scale);
  98. var line = prey.stomp() + " " + summarize(prey.sum(), true);
  99. var preyMass = prey.sum_property("mass");
  100. scale = scaleAddMass(scale, baseMass, preyMass);
  101. updateVictims("stomped",prey);
  102. update([line]);
  103. }
  104. function anal_vore()
  105. {
  106. var prey = getOnePrey(scale*scale);
  107. var crushed = getPrey("suburb",3*scale*scale);
  108. var line1 = prey.anal_vore() + " " + summarize(prey.sum(), false);
  109. var line2 = crushed.buttcrush() + " " + summarize(crushed.sum(), false)
  110. var preyMass = prey.sum_property("mass");
  111. var crushedMass = prey.sum_property("mass");
  112. scale = scaleAddMass(scale, baseMass, preyMass);
  113. scale = scaleAddMass(scale, baseMass, crushedMass);
  114. bowels.push(prey);
  115. if (bowels.length == 1)
  116. setTimeout(function() { doDigest("bowels"); }, 15000);
  117. updateVictims("bowels",prey);
  118. updateVictims("stomped",crushed);
  119. update([line1,line2]);
  120. }
  121. function update(lines = [])
  122. {
  123. var log = document.getElementById("log");
  124. lines.forEach(function (x) {
  125. var line = document.createElement('div');
  126. line.innerHTML = x;
  127. log.appendChild(line);
  128. });
  129. log.scrollTop = log.scrollHeight;
  130. var height = baseHeight * scale;
  131. var mass = baseMass * Math.pow(scale, 3);
  132. document.getElementById("height").innerHTML = "Height: " + Math.round(height * 3) + " feet";
  133. document.getElementById("mass").innerHTML = "Mass: " + Math.round(mass * 2.2) + " pounds";
  134. for (var type in victims) {
  135. if (victims.hasOwnProperty(type)) {
  136. for (var key in victims[type]){
  137. if (victims[type].hasOwnProperty(key)) {
  138. if (document.getElementById("stats-" + type + "-" + key) == null) {
  139. if (victims[type][key] == 0)
  140. continue;
  141. child = document.createElement('div');
  142. child.id = "stats-" + type + "-" + key;
  143. child.classList.add("stat-line");
  144. document.getElementById("stats-" + type).appendChild(child);
  145. }
  146. document.getElementById("stats-" + type + "-" + key).innerHTML = key + ": " + victims[type][key];
  147. }
  148. }
  149. }
  150. }
  151. }
  152. function pick_move()
  153. {
  154. if (!strolling) {
  155. setTimeout(pick_move, 2000);
  156. return;
  157. }
  158. var choice = Math.random();
  159. if (choice < 0.2) {
  160. anal_vore();
  161. setTimeout(pick_move, 2000);
  162. } else if (choice < 0.6) {
  163. stomp();
  164. setTimeout(pick_move, 2000);
  165. } else {
  166. feed();
  167. setTimeout(pick_move, 2000);
  168. }
  169. }
  170. function grow()
  171. {
  172. scale *= 1.2;
  173. update();
  174. }
  175. // pop the list and digest that object
  176. function doDigest(containerName)
  177. {
  178. var digestType = containerName == "stomach" ? stomach : bowels;
  179. var count = 0
  180. if (containerName == "stomach") {
  181. count = stomach.length;
  182. count = Math.min(count,maxStomachDigest);
  183. } else if (containerName == "bowels") {
  184. count = bowels.length;
  185. count = Math.min(count,maxBowelsDigest);
  186. }
  187. var container = new Container();
  188. while (count > 0) {
  189. --count;
  190. var toDigest = digestType.shift();
  191. if (toDigest.name != "Container")
  192. toDigest = new Container([toDigest]);
  193. container = container.merge(toDigest);
  194. }
  195. var digested = container.sum();
  196. for (var key in victims[containerName]) {
  197. if (victims[containerName].hasOwnProperty(key) && digested.hasOwnProperty(key) ) {
  198. victims["digested"][key] += digested[key];
  199. victims[containerName][key] -= digested[key];
  200. }
  201. }
  202. if (containerName == "stomach")
  203. update(["Your stomach gurgles as it digests " + container.describe(false) + " " + summarize(container.sum())]);
  204. else if (containerName == "bowels")
  205. update(["Your bowels churn as they absorb " + container.describe(false) + " " + summarize(container.sum())]);
  206. if (digestType.length > 0) {
  207. setTimeout(function() {
  208. doDigest(containerName);
  209. }, 15000);
  210. }
  211. }
  212. window.addEventListener('load', function(event) {
  213. victims["stomped"] = initVictims();
  214. victims["digested"] = initVictims();
  215. victims["stomach"] = initVictims();
  216. victims["bowels"] = initVictims();
  217. document.getElementById("button-grow").addEventListener("click",grow);
  218. document.getElementById("button-feed").addEventListener("click",feed);
  219. document.getElementById("button-stomp").addEventListener("click",stomp);
  220. document.getElementById("button-anal_vore").addEventListener("click",anal_vore);
  221. document.getElementById("button-stroll").addEventListener("click",toggle_auto);
  222. setTimeout(pick_move, 2000);
  223. update();
  224. });