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

239 строки
4.8 KiB

  1. var baseHeight = 3.65;
  2. var baseMass = 1360;
  3. var scale = 1;
  4. var strolling = false;
  5. victims = {};
  6. function toggle_auto()
  7. {
  8. strolling = !strolling;
  9. }
  10. function initVictims()
  11. {
  12. return {
  13. "Person": 0,
  14. "Car": 0,
  15. "Bus": 0,
  16. "Motorcycle": 0,
  17. "House": 0,
  18. "Train": 0,
  19. "Parking Garage": 0,
  20. "Overpass": 0
  21. };
  22. };
  23. function getOnePrey(area)
  24. {
  25. var potential = ["Person", "Car", "Bus", "House", "Train", "Parking Garage"];
  26. var potAreas = []
  27. potential.forEach(function (x) {
  28. potAreas.push([x,areas[x]]);
  29. });
  30. potAreas = potAreas.sort(function (x,y) {
  31. return x[1] < y[1];
  32. });
  33. for (var i=0; i<potAreas.length; i++) {
  34. x = potAreas[i];
  35. if (x[1] < area) {
  36. return new things[x[0]](1);
  37. }
  38. };
  39. return new Person(1);
  40. }
  41. function getPrey(region, area)
  42. {
  43. switch(region)
  44. {
  45. case "suburb": return suburbPrey(area);
  46. }
  47. }
  48. function suburbPrey(area)
  49. {
  50. return fill_area(area, {"Person": 0.5, "House": 0.5, "Car": 0.2});
  51. }
  52. function updateVictims(type,prey)
  53. {
  54. var sums = prey.sum();
  55. for (var key in sums) {
  56. if (sums.hasOwnProperty(key)) {
  57. victims[type][key] += sums[key];
  58. }
  59. }
  60. }
  61. function scaleAddMass(scale, baseMass, mass)
  62. {
  63. var startMass = Math.pow(scale, 3) * baseMass;
  64. var newMass = startMass + mass;
  65. return Math.pow(newMass / baseMass, 1/3) ;
  66. }
  67. function feed()
  68. {
  69. var prey = getPrey("suburb", 0.5*scale*scale);
  70. var line = prey.eat();
  71. var preyMass = prey.sum_property("mass");
  72. scale = scaleAddMass(scale, baseMass, preyMass);
  73. updateVictims("stomach",prey);
  74. update([line]);
  75. }
  76. function stomp()
  77. {
  78. var prey = getPrey("suburb", 1.5*scale*scale);
  79. var line = prey.stomp();
  80. var preyMass = prey.sum_property("mass");
  81. scale = scaleAddMass(scale, baseMass, preyMass);
  82. updateVictims("stomped",prey);
  83. update([line]);
  84. }
  85. function anal_vore()
  86. {
  87. var prey = getOnePrey(scale*scale*2)
  88. var line = prey.anal_vore();
  89. var preyMass = prey.sum_property("mass");
  90. scale = scaleAddMass(scale, baseMass, preyMass);
  91. updateVictims("bowels",prey);
  92. update([line]);
  93. }
  94. function update(lines = [])
  95. {
  96. var log = document.getElementById("log");
  97. lines.forEach(function (x) {
  98. var line = document.createElement('div');
  99. line.innerHTML = x;
  100. log.appendChild(line);
  101. });
  102. log.scrollTop = log.scrollHeight;
  103. var height = baseHeight * scale;
  104. var mass = baseMass * Math.pow(scale, 3);
  105. document.getElementById("height").innerHTML = "Height: " + Math.round(height * 3) + " feet";
  106. document.getElementById("mass").innerHTML = "Mass: " + Math.round(mass * 2.2) + " pounds";
  107. for (var type in victims) {
  108. if (victims.hasOwnProperty(type)) {
  109. for (var key in victims[type]){
  110. if (victims[type].hasOwnProperty(key)) {
  111. if (document.getElementById("stats-" + type + "-" + key) == null) {
  112. if (victims[type][key] == 0)
  113. continue;
  114. child = document.createElement('div');
  115. child.id = "stats-" + type + "-" + key;
  116. child.classList.add("stat-line");
  117. document.getElementById("stats-" + type).appendChild(child);
  118. }
  119. document.getElementById("stats-" + type + "-" + key).innerHTML = key + ": " + victims[type][key];
  120. }
  121. }
  122. }
  123. }
  124. }
  125. function pick_move()
  126. {
  127. if (!strolling) {
  128. setTimeout(pick_move, 2000);
  129. return;
  130. }
  131. var choice = Math.random();
  132. if (choice < 0.2) {
  133. anal_vore();
  134. setTimeout(pick_move, 2000);
  135. } else if (choice < 0.6) {
  136. stomp();
  137. setTimeout(pick_move, 2000);
  138. } else {
  139. feed();
  140. setTimeout(pick_move, 2000);
  141. }
  142. }
  143. function grow()
  144. {
  145. scale *= 1.2;
  146. update();
  147. }
  148. function digest()
  149. {
  150. var newlyDigested = initVictims();
  151. var stomach = victims["stomach"];
  152. for (var key in stomach) {
  153. if (stomach.hasOwnProperty(key)) {
  154. var digested = Math.ceil(stomach[key] / 2);
  155. newlyDigested[key] += digested;
  156. victims["digested"][key] += digested;
  157. victims["stomach"][key] -= digested;
  158. }
  159. }
  160. var bowels = victims["bowels"];
  161. for (var key in bowels) {
  162. if (bowels.hasOwnProperty(key)) {
  163. var digested = Math.ceil(bowels[key] / 3);
  164. newlyDigested[key] += digested;
  165. victims["digested"][key] += digested;
  166. victims["bowels"][key] -= digested;
  167. }
  168. }
  169. var melted = [];
  170. for (var key in newlyDigested) {
  171. if (newlyDigested.hasOwnProperty(key) && newlyDigested[key] > 0) {
  172. melted.push(new things[key](newlyDigested[key]));
  173. }
  174. }
  175. var meltedTotal = new Container(melted);
  176. if (meltedTotal.count > 0)
  177. update(["Your stomach gurgles as it digests " + meltedTotal.describe()]);
  178. else
  179. update();
  180. setTimeout(digest, 5000);
  181. }
  182. window.addEventListener('load', function(event) {
  183. victims["stomped"] = initVictims();
  184. victims["digested"] = initVictims();
  185. victims["stomach"] = initVictims();
  186. victims["bowels"] = initVictims();
  187. setTimeout(pick_move, 2000);
  188. setTimeout(digest, 5000);
  189. update();
  190. });