cookie clicker but bigger
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

1733 lines
39 KiB

  1. "use strict";
  2. const start_color = "#882222";
  3. const end_color = "#228888";
  4. //const range = chroma.scale([start_color, end_color]).mode("lab");
  5. const range = chroma.cubehelix().scale().domain([-0.2, 1]).mode("lab");
  6. // literally just stealing these from cookie clicker
  7. const tiers = [
  8. "#fffeff",
  9. "#fa8ce3",
  10. "#00dffe",
  11. "#ffca32",
  12. "#e8d676",
  13. "#a7c091",
  14. "#6c5759",
  15. "#d4c1bc",
  16. "#9bb637",
  17. "#05ddf8",
  18. "#b76133",
  19. "#e1dfde"
  20. ]
  21. const resourceTypes = {
  22. "food": {
  23. name: "food",
  24. desc: "Earned from eating. Pays for lots of things.",
  25. generated: true
  26. },
  27. "powerups": {
  28. name: "power crystals",
  29. desc: "Earned from clicking powerups. Pays for powerup upgrades.",
  30. generated: false
  31. }
  32. }
  33. deepFreeze(resourceTypes);
  34. const buildings = {
  35. "micro": {
  36. "name": "Micro",
  37. "plural": "Micros",
  38. "desc": "A tasty, squirmy treat.",
  39. "cost": {
  40. "food": 1e1
  41. },
  42. "prod": {
  43. "food": 1e-1 / 1
  44. },
  45. "icon": "fa-universal-access"
  46. },
  47. "anthro": {
  48. "name": "Anthro",
  49. "plural": "Anthros",
  50. "desc": "Something more substantial to sate your hunger.",
  51. "cost": {
  52. "food": 1e2
  53. },
  54. "prod": {
  55. "food": 1e0 / 1.1
  56. },
  57. "icon": "fa-male"
  58. },
  59. "car": {
  60. "name": "Car",
  61. "plural": "Cars",
  62. "desc": "Crunchy shell, tasty center.",
  63. "cost": {
  64. "food": 1.2e3
  65. },
  66. "prod": {
  67. "food": 1e1 / 1.2
  68. },
  69. "icon": "fa-car"
  70. },
  71. "bus": {
  72. "name": "Bus",
  73. "plural": "Buses",
  74. "desc": "Probably the worst place to be when a macro is aroud.",
  75. "cost": {
  76. "food": 1.4e4
  77. },
  78. "prod": {
  79. "food": 1e2 / 1.3
  80. },
  81. "icon": "fa-bus"
  82. },
  83. "house": {
  84. "name": "House",
  85. "plural": "Houses",
  86. "desc": "Home sweet home - but it doesn't taste sweet?",
  87. "cost": {
  88. "food": 1.6e5
  89. },
  90. "prod": {
  91. "food": 1e3 / 1.4
  92. },
  93. "icon": "fa-home"
  94. },
  95. "apartment": {
  96. "name": "Apartment",
  97. "plural": "Apartments",
  98. "desc": "More snacks, less packaging.",
  99. "cost": {
  100. "food": 1.8e6
  101. },
  102. "prod": {
  103. "food": 1e4 / 1.5
  104. },
  105. "icon": "fa-building"
  106. },
  107. "block": {
  108. "name": "Block",
  109. "plural": "Blocks",
  110. "desc": "A whole pile of buildings.",
  111. "cost": {
  112. "food": 2e7
  113. },
  114. "prod": {
  115. "food": 1e5 / 1.6
  116. },
  117. "icon": "fa-warehouse"
  118. },
  119. "town": {
  120. "name": "Town",
  121. "plural": "Towns",
  122. "desc": "'Tourist trap' has never been this literal.",
  123. "cost": {
  124. "food": 2.2e8
  125. },
  126. "prod": {
  127. "food": 1e6 / 1.7
  128. },
  129. "icon": "fa-store"
  130. },
  131. "city": {
  132. "name": "City",
  133. "plural": "Cities",
  134. "desc": "Please no sitty on our city.",
  135. "cost": {
  136. "food": 2.4e9
  137. },
  138. "prod": {
  139. "food": 1e7 / 1.8
  140. },
  141. "icon": "fa-city"
  142. },
  143. "metro": {
  144. "name": "Metropolis",
  145. "plural": "Metropolises",
  146. "desc": "A big ol' city. Tasty, too.",
  147. "cost": {
  148. "food": 2.6e10
  149. },
  150. "prod": {
  151. "food": 1e8 / 1.9
  152. },
  153. "icon": "fa-landmark"
  154. },
  155. "county": {
  156. "name": "County",
  157. "plural": "Counties",
  158. "desc": "Why salt the land when you can slurp it?",
  159. "cost": {
  160. "food": 2.8e11
  161. },
  162. "prod": {
  163. "food": 1e9 / 2
  164. },
  165. "icon": "fa-map"
  166. },
  167. "state": {
  168. "name": "State",
  169. "plural": "States",
  170. "desc": "The United States is made up of...43 states - no, 42...",
  171. "cost": {
  172. "food": 3e12
  173. },
  174. "prod": {
  175. "food": 1e10 / 2.1
  176. },
  177. "icon": "fa-map-signs"
  178. },
  179. "country": {
  180. "name": "Country",
  181. "plural": "Countries",
  182. "desc": "One nation, under paw.",
  183. "cost": {
  184. "food": 3.2e13
  185. },
  186. "prod": {
  187. "food": 1e11 / 2.2
  188. },
  189. "icon": "fa-flag"
  190. },
  191. "continent": {
  192. "name": "Continent",
  193. "plural": "Continents",
  194. "desc": "Earth-shattering appetite!",
  195. "cost": {
  196. "food": 3.4e14
  197. },
  198. "prod": {
  199. "food": 1e12 / 2.3
  200. },
  201. "icon": "fa-mountain"
  202. },
  203. "planet": {
  204. "name": "Planet",
  205. "plural": "Planets",
  206. "desc": "Earth appetite!",
  207. "cost": {
  208. "food": 3.6e15
  209. },
  210. "prod": {
  211. "food": 1e13 / 2.4
  212. },
  213. "icon": "fa-globe-europe"
  214. },
  215. "solar-system": {
  216. "name": "Solar System",
  217. "plural": "Solar Systems",
  218. "desc": "Earths appetite!",
  219. "cost": {
  220. "food": 3.8e16
  221. },
  222. "prod": {
  223. "food": 1e14 / 2.5
  224. },
  225. "icon": "fa-meteor"
  226. },
  227. "galaxy": {
  228. "name": "Galaxy",
  229. "plural": "Galaxies",
  230. "desc": "In a galaxy far, far down your gullet...",
  231. "cost": {
  232. "food": 4.0e17
  233. },
  234. "prod": {
  235. "food": 1e15 / 2.6
  236. },
  237. "icon": "fa-sun"
  238. },
  239. "universe": {
  240. "name": "Universe",
  241. "plural": "Universes",
  242. "desc": "Into the you-verse.",
  243. "cost": {
  244. "food": 4.2e18
  245. },
  246. "prod": {
  247. "food": 1e16 / 2.7
  248. },
  249. "icon": "fa-asterisk"
  250. },
  251. "multiverse": {
  252. "name": "Multiverse",
  253. "plural": "Multiverses",
  254. "desc": "This is getting very silly.",
  255. "cost": {
  256. "food": 4.4e19
  257. },
  258. "prod": {
  259. "food": 1e17 / 2.8
  260. },
  261. "icon": "fa-infinity"
  262. }
  263. }
  264. deepFreeze(buildings);
  265. const effect_types = {
  266. "prod": {
  267. "apply": function (effect, productivity) {
  268. return scaleCost(productivity, effect.amount);
  269. },
  270. "desc": function (effect) {
  271. return round(effect.amount, 2) + "x food production from " + buildings[effect.target].plural;
  272. }
  273. },
  274. "prod-all": {
  275. "apply": function (effect, productivity) {
  276. return scaleCost(productivity, effect.amount);
  277. },
  278. "desc": function (effect) {
  279. return round((effect.amount - 1) * 100) + "% increase to food production";
  280. }
  281. },
  282. "helper": {
  283. "apply": function (effect, productivity, helperCount) {
  284. return scaleCost(productivity, 1 + effect.amount * helperCount);
  285. },
  286. "desc": function (effect) {
  287. return "+" + round(effect.amount * 100) + "% food/sec from " + buildings[effect.helped].name + " for every " + buildings[effect.helper].name + " owned.";
  288. }
  289. },
  290. "click": {
  291. "apply": function (effect, bonus, productivity) {
  292. return bonus + productivity * effect.amount;
  293. },
  294. "desc": function (effect) {
  295. return round(effect.amount * 100) + "% of food/sec gained per click";
  296. }
  297. },
  298. "click-victim": {
  299. "desc": function (effect) {
  300. return "Devour larger prey";
  301. }
  302. },
  303. "powerup-freq": {
  304. "apply": function (effect, delay) {
  305. return delay * effect.amount;
  306. },
  307. "desc": function (effect) {
  308. return "Speed up powerup spawns by " + Math.round((1 / effect.amount - 1) * 100) + "%";
  309. }
  310. }
  311. }
  312. deepFreeze(effect_types);
  313. let upgrades = {
  314. }
  315. function createTemplateUpgrades() {
  316. createProdUpgrades();
  317. createProdAllUpgrades();
  318. createClickUpgrades();
  319. createHelperUpgrades();
  320. createClickVictimUpgrades();
  321. createPowerupFreqUpgrades();
  322. createFreeBuildingPowerups();
  323. createNews();
  324. deepFreeze(upgrades);
  325. deepFreeze(powerups);
  326. deepFreeze(news);
  327. }
  328. const prodUpgradeCounts = [1, 25, 50, 100, 150];
  329. const prodUpgradeColors = range.colors(5);
  330. function createProdUpgrades() {
  331. for (const [key, value] of Object.entries(prodUpgradeText)) {
  332. let counter = 1;
  333. let prefix = key + "-prod-";
  334. for (let contents of value) {
  335. upgrades[prefix + counter] = {
  336. "name": contents.name,
  337. "desc": contents.desc,
  338. "icon": [
  339. { icon: buildings[key].icon, color: tiers[counter - 1] }
  340. ],
  341. "cost": {
  342. "food": buildings[key].cost.food * 5 * Math.pow(10, counter - 1)
  343. },
  344. "effects": [
  345. {
  346. "type": "prod",
  347. "amount": 2 + (counter - 1) * 0.25,
  348. "target": key
  349. }
  350. ]
  351. };
  352. upgrades[prefix + counter]["prereqs"] = {};
  353. upgrades[prefix + counter]["prereqs"]["buildings"] = {};
  354. upgrades[prefix + counter]["prereqs"]["buildings"][key] = prodUpgradeCounts[counter - 1];
  355. if (counter > 1) {
  356. upgrades[prefix + counter]["prereqs"]["upgrades"] = [
  357. prefix + (counter - 1)
  358. ];
  359. }
  360. counter += 1;
  361. }
  362. }
  363. }
  364. const prodAllUpgradeColors = range.colors(10)
  365. function createProdAllUpgrades() {
  366. let prefix = "prod-all-"
  367. let counter = 1;
  368. for (let contents of prodAllUpgradeText) {
  369. upgrades[prefix + counter] = {
  370. "name": contents.name,
  371. "desc": contents.desc,
  372. "icon": [
  373. { icon: "fa-cogs", color: tiers[counter - 1] }
  374. ],
  375. "cost": {
  376. "food": 5 * Math.pow(10, counter + 1)
  377. },
  378. "effects": [
  379. {
  380. "type": "prod-all",
  381. "amount": 1.05
  382. }
  383. ],
  384. "prereqs": {
  385. "productivity": {
  386. "food": Math.pow(10, counter)
  387. }
  388. }
  389. };
  390. if (counter > 1) {
  391. upgrades[prefix + counter]["prereqs"].upgrades = [
  392. prefix + (counter - 1)
  393. ];
  394. }
  395. counter += 1;
  396. }
  397. }
  398. const clickUpgradeColors = range.colors(10);
  399. function createClickUpgrades() {
  400. let prefix = "prod-click-";
  401. let counter = 1;
  402. for (let contents of clickUpgradeText) {
  403. upgrades[prefix + counter] = {
  404. name: contents.name,
  405. desc: contents.desc,
  406. icon: [
  407. { icon: "fa-hand-pointer", color: tiers[counter - 1] }
  408. ],
  409. cost: {
  410. food: Math.pow(10, (counter * 2) + 1)
  411. },
  412. effects: [
  413. {
  414. type: "click",
  415. amount: 0.01
  416. }
  417. ],
  418. prereqs: {
  419. productivity: {
  420. food: Math.pow(10, counter)
  421. }
  422. }
  423. };
  424. if (counter > 1) {
  425. upgrades[prefix + counter]["prereqs"].upgrades = [
  426. prefix + (counter - 1)
  427. ];
  428. }
  429. counter += 1;
  430. }
  431. }
  432. const helperUpgradeColors = range.colors(3);
  433. function createHelperUpgrades() {
  434. const infix = "-help-";
  435. let previousHelped = undefined;
  436. Object.entries(helperUpgradeText).forEach(([helper, helpees]) => {
  437. const prefix = helper;
  438. Object.entries(helpees).forEach(([helped, texts]) => {
  439. const suffix = helped;
  440. let counter = 1;
  441. for (let text of texts) {
  442. const key = prefix + infix + suffix + "-" + counter;
  443. upgrades[key] = {
  444. "name": text.name,
  445. "desc": text.desc,
  446. "icon": [
  447. { icon: "fa-hand-holding", color: "black" },
  448. { icon: buildings[helped].icon, color: tiers[counter - 1], transform: "scale(0.5, 0.5) translate(0, -30px)" }
  449. ],
  450. "cost": {
  451. "food": buildings[helper].cost.food * 25 * counter + buildings[helped].cost.food * 50 * counter
  452. },
  453. "effects": [
  454. {
  455. "type": "helper",
  456. "helper": helper,
  457. "helped": helped,
  458. "amount": 0.01 * counter
  459. }
  460. ],
  461. "prereqs": {
  462. "buildings": {
  463. },
  464. "upgrades": [
  465. helper + "-prod-1"
  466. ]
  467. }
  468. };
  469. upgrades[key]["prereqs"]["buildings"][helper] = 10 * counter;
  470. upgrades[key]["prereqs"]["buildings"][helped] = 1;
  471. if (counter > 1) {
  472. upgrades[key]["prereqs"]["upgrades"].push(prefix + infix + suffix + "-" + (counter - 1))
  473. }
  474. if (previousHelped !== undefined && counter == 1) {
  475. upgrades[key]["prereqs"]["upgrades"].push(prefix + infix + previousHelped + "-" + "1")
  476. }
  477. counter += 1;
  478. }
  479. previousHelped = helped;
  480. });
  481. });
  482. }
  483. const clickVictimUpgradeColors = range.colors(Object.keys(buildings).length - 1);
  484. function createClickVictimUpgrades() {
  485. const prefix = "click-";
  486. let counter = 1;
  487. let previous = "micro";
  488. Object.entries(clickVictimUpgradeText).forEach(([key, text]) => {
  489. let newColor = clickVictimUpgradeColors[counter - 1] + "dd";
  490. upgrades[prefix + key] = {
  491. "name": text.name,
  492. "desc": text.desc,
  493. "icon": [
  494. { icon: buildings[key].icon, color: "#eee" },
  495. { icon: "fa-hand-pointer", color: newColor, transform: "scale(0.75, 0.75) translate(20px, 20px) rotate(-15deg)" }
  496. ],
  497. "cost": {
  498. "food": 1000 * Math.pow(10, counter)
  499. },
  500. "effects": [
  501. {
  502. "type": "click-victim",
  503. "id": key
  504. }
  505. ],
  506. "prereqs": {
  507. "upgrades": [
  508. ]
  509. }
  510. };
  511. if (counter > 1) {
  512. upgrades[prefix + key].prereqs.upgrades.push(prefix + previous);
  513. }
  514. counter += 1;
  515. previous = key;
  516. });
  517. }
  518. const powerupFreqColors = range.colors(5);
  519. function createPowerupFreqUpgrades() {
  520. const prefix = "powerup-freq-";
  521. let counter = 1;
  522. powerupFreqUpgradeText.forEach(text => {
  523. upgrades[prefix + counter] = {
  524. "name": text.name,
  525. "desc": text.desc,
  526. "icon": [
  527. { icon: "fa-drumstick-bite", color: tiers[counter - 1] }
  528. ],
  529. "cost": {
  530. "food": Math.pow(10, counter+3),
  531. "powerups": Math.pow(counter, 2)
  532. },
  533. "effects": [
  534. {
  535. "type": "powerup-freq",
  536. "id": prefix + counter,
  537. "amount": 0.75 + 0.03 * (counter - 1)
  538. }
  539. ],
  540. "prereqs": {
  541. "upgrades": [
  542. ],
  543. "stats": {
  544. "powerups": 1
  545. }
  546. }
  547. };
  548. if (counter > 1) {
  549. upgrades[prefix + counter].prereqs.upgrades.push(prefix + (counter - 1));
  550. }
  551. counter += 1;
  552. });
  553. }
  554. let prodUpgradeText = {
  555. "micro": [
  556. {
  557. "name": "Bigger Micros",
  558. "desc": "A macro micro? It's more filling, for sure.",
  559. },
  560. {
  561. "name": "Beefy Micros",
  562. "desc": "25% more protein, 10% fewer carbs."
  563. },
  564. {
  565. "name": "Delicious Micros",
  566. "desc": "Betcha' can't eat just one."
  567. },
  568. {
  569. "name": "Irresistable Micros",
  570. "desc": "Genetically engineered to be delectable."
  571. },
  572. {
  573. "name": "Exquisite Micros",
  574. "desc": "Dangerously delicious."
  575. }
  576. ],
  577. "anthro": [
  578. {
  579. "name": "Willing Prey",
  580. "desc": "Why bother chasing down your meal?"
  581. },
  582. {
  583. "name": "Fattened Prey",
  584. "desc": "9 calories per gram!"
  585. },
  586. {
  587. "name": "Mesmerized Prey",
  588. "desc": "Why bother walking to your meal?"
  589. },
  590. {
  591. "name": "Food-Safe Lubricant",
  592. "desc": "Ease them down your gullet with ease. Thanks, chemistry!"
  593. },
  594. {
  595. "name": "Mandatory Meal Training",
  596. "desc": "Educating prey on basic food etiquette helps reduce maw congestion and speeds digestion by 27%."
  597. }
  598. ],
  599. "car": [
  600. {
  601. "name": "HOV Lane",
  602. "desc": "Think of the environment! And of your impending digestion, I guess."
  603. },
  604. {
  605. "name": "Lightweight Frames",
  606. "desc": "Although crunchy, the shell around the snacks isn't very appetizing."
  607. },
  608. {
  609. "name": "Traffic Engineering",
  610. "desc": "Maximizing throughput into your gullet."
  611. },
  612. {
  613. "name": "Super Highways",
  614. "desc": "Six lanes! Fresh pavement! A ravenous maw!"
  615. },
  616. {
  617. "name": "Stacked Cars",
  618. "desc": "When we couldn't make the roads any wider, we tried stacking the cars higher."
  619. }
  620. ],
  621. "bus": [
  622. {
  623. "name": "Bus Passes",
  624. "desc": "Save on greenhouse emissions. Save your predator's effort. Everyone wins!"
  625. },
  626. {
  627. "name": "Double Deckers",
  628. "desc": "Stack 'em up! Slurp 'em down!"
  629. },
  630. {
  631. "name": "Articulated Buses",
  632. "desc": "The bend really helps them slip down your throat."
  633. },
  634. {
  635. "name": "Tour Buses",
  636. "desc": "People come from around the world to see your intestinal tract.",
  637. },
  638. {
  639. "name": "Double Double Deckers",
  640. "desc": "Hard to swallow, true, but filling nonetheless."
  641. }
  642. ],
  643. "house": [
  644. {
  645. "name": "Second Story",
  646. "desc": "Twice as many snacks, half as much chewing."
  647. },
  648. {
  649. "name": "Remodeling",
  650. "desc": "Strip out that icky asbestos."
  651. },
  652. {
  653. "name": "Smaller Yards",
  654. "desc": "Less wasted space. More wasted homes."
  655. },
  656. {
  657. "name": "House Parties",
  658. "desc": "More people! More party! More prey!"
  659. },
  660. {
  661. "name": "Suburbia",
  662. "desc": "It's like a buffet line!"
  663. }
  664. ],
  665. "apartment": [
  666. {
  667. "name": "Rent Subsidies",
  668. "desc": "Encourage high-density living. Enjoy the result."
  669. },
  670. {
  671. "name": "High-Rises",
  672. "desc": "These sure are some Tilted Towers..."
  673. },
  674. {
  675. "name": "Reverse Eviction",
  676. "desc": "Forcibly putting people IN your lunch!"
  677. },
  678. {
  679. "name": "Higher High-Rises",
  680. "desc": "Almost as tall as you! Almost."
  681. },
  682. {
  683. "name": "Vertical Beds",
  684. "desc": "You can fit way more people in a studio apartment with this one weird tip..."
  685. }
  686. ],
  687. "block": [
  688. {
  689. "name": "Street Sweepers",
  690. "desc": "Keeps the gunk off the sidewalk, and thus, off your tongue."
  691. },
  692. {
  693. "name": "Zoning Laws",
  694. "desc": "Mandatory prey-per-square-meter requirements."
  695. },
  696. {
  697. "name": "Alleyway Appetizers",
  698. "desc": "You can fit people *between* the buildings."
  699. },
  700. {
  701. "name": "Block Party",
  702. "desc": "Everyone's invited!"
  703. },
  704. {
  705. "name": "Vertical Blocks",
  706. "desc": "There's no reason you can't stack them on top of each other, right?"
  707. }
  708. ],
  709. "town": [
  710. {
  711. "name": "Going to Town",
  712. "desc": "That's where the food is."
  713. },
  714. {
  715. "name": "Going to Town, II: Revelations",
  716. "desc": "That's where the food is, again."
  717. },
  718. {
  719. "name": "Going to Town 0: Origins",
  720. "desc": "That's where the food was."
  721. },
  722. {
  723. "name": "Going to Town III: Revengeance",
  724. "desc": "Look, it's just how nature works. Food gets ate."
  725. },
  726. {
  727. "name": "Going to Town IV: Endgame",
  728. "desc": "Food IS something one considers when eating the universe."
  729. }
  730. ],
  731. "city": [
  732. {
  733. "name": "Gridlock",
  734. "desc": "Keeps people within arm's reach."
  735. },
  736. {
  737. "name": "Skyscrapers",
  738. "desc": "Corn on the cob? Corn on the cob."
  739. },
  740. {
  741. "name": "Protest March",
  742. "desc": "\"We have rights!\" chants the crowd. Unfortunately, they also have calories."
  743. },
  744. {
  745. "name": "Urban Sprawl",
  746. "desc": "What a lovely spread of Hors d'oeuvres!"
  747. },
  748. {
  749. "name": "Sim City",
  750. "desc": "You wouldn't download a city."
  751. }
  752. ],
  753. "metro": [
  754. {
  755. "name": "Suburbia",
  756. "desc": "As far as the eye can see!"
  757. },
  758. {
  759. "name": "Mass Transit",
  760. "desc": "Mass transit? Ass transit."
  761. },
  762. {
  763. "name": "Slackened Building Codes",
  764. "desc": "Who cares about things over 'overcrowding'?"
  765. },
  766. {
  767. "name": "Over-Ground Subway",
  768. "desc": "Putting the subway above-ground makes it a *lot* easier to feed on."
  769. },
  770. {
  771. "name": "No Building Codes",
  772. "desc": "Just cram people inside."
  773. }
  774. ],
  775. "county": [
  776. {
  777. "name": "County Roads",
  778. "desc": "Eh, close enough."
  779. },
  780. {
  781. "name": "Redistricting",
  782. "desc": "Optimize your snacking excursions."
  783. },
  784. {
  785. "name": "Peoplesheds",
  786. "desc": "Like watersheds, but, you know, people."
  787. },
  788. {
  789. "name": "Economic Stimulus",
  790. "desc": "Just kidding! It's just an excuse to devour more people."
  791. },
  792. {
  793. "name": "Giant Pile of People",
  794. "desc": "Literally no pretenses anymore. You're just eating big piles of people."
  795. }
  796. ],
  797. "state": [
  798. {
  799. "name": "States' Rights",
  800. "desc": "...to feed you lots and lots of people."
  801. },
  802. {
  803. "name": "Interstate Commerce",
  804. "desc": "Exports: People. Imports: Not people."
  805. },
  806. {
  807. "name": "Gerrymandering",
  808. "desc": "Unethical? Yes. Illegal? Maybe. Delicious? Absolutely!"
  809. },
  810. {
  811. "name": "State of Hunger",
  812. "desc": "It's a regional emergency! Feed the poor beast!"
  813. },
  814. {
  815. "name": "Arcologies",
  816. "desc": "Just put everyone in one building. One big building."
  817. }
  818. ],
  819. "country": [
  820. {
  821. "name": "Country Roads",
  822. "desc": "Take me hooooooome / to the plaaaaaace / where GULP."
  823. },
  824. {
  825. "name": "Election Mawnth",
  826. "desc": "Get out the vote! Get in the monster!"
  827. },
  828. {
  829. "name": "Voretime Economy",
  830. "desc": "Better than a wartime economy."
  831. },
  832. {
  833. "name": "Two-Party Stomach",
  834. "desc": "We take the parties, and we put them in the stomach. Truly bipartisan!"
  835. },
  836. {
  837. "name": "Civil Vore",
  838. "desc": "I ran out of puns."
  839. },
  840. ],
  841. "continent": [
  842. {
  843. "name": "Continental Drift",
  844. "desc": "Drifting right into your mouth."
  845. },
  846. {
  847. "name": "Queso",
  848. "desc": "To go with the continent chips."
  849. },
  850. {
  851. "name": "More Queso",
  852. "desc": "To go with the queso and the continent chips."
  853. },
  854. {
  855. "name": "Pangaea",
  856. "desc": "It's like a BIG corn chip."
  857. },
  858. {
  859. "name": "Extra Dip",
  860. "desc": "MORE."
  861. }
  862. ],
  863. "planet": [
  864. {
  865. "name": "Flat Earth Rebuttal",
  866. "desc": "A flat earth wouldn't have the chewy center."
  867. },
  868. {
  869. "name": "Extra Quarters",
  870. "desc": "To put in the gumball machine."
  871. },
  872. {
  873. "name": "Earth-Like Planets",
  874. "desc": "They're a *lot* easier to eat than the gas giants."
  875. },
  876. {
  877. "name": "Ringworlds",
  878. "desc": "They're artificial, yes, but they're very nutritious."
  879. },
  880. {
  881. "name": "BFG",
  882. "desc": "The Big Fucking Gumball"
  883. }
  884. ],
  885. "solar-system": [
  886. {
  887. "name": "Sol Survivor",
  888. "desc": "Just kidding! Sol didn't survive."
  889. },
  890. {
  891. "name": "Solar Snacks",
  892. "desc": "Betcha' can't just eat one."
  893. },
  894. {
  895. "name": "Orbital Plain",
  896. "desc": "Sometimes you just want the vanilla flavor."
  897. },
  898. {
  899. "name": "Comet Cruncher",
  900. "desc": "A refreshing icy treat."
  901. },
  902. {
  903. "name": "Vorrery",
  904. "desc": "Orrery. Vorrery. Heh."
  905. }
  906. ],
  907. "galaxy": [
  908. {
  909. "name": "Galactic Hitman",
  910. "desc": "You're basically a hitman, right? You're taking people out."
  911. },
  912. {
  913. "name": "Mass Effect",
  914. "desc": "All of the mass you're eating is gonna have an effect on your waistline."
  915. },
  916. {
  917. "name": "Star Vores",
  918. "desc": "Munch."
  919. },
  920. {
  921. "name": "Star Citizens",
  922. "desc": "I'm sure we'll get to eat them eventually."
  923. },
  924. {
  925. "name": "Good Old Galaxies",
  926. "desc": "There are some great gems out there."
  927. }
  928. ],
  929. "universe": [
  930. {
  931. "name": "Universal Healthcare",
  932. "desc": "Gotta keep everyone in peak condition, right?"
  933. },
  934. {
  935. "name": "Big Crunch",
  936. "desc": "A heckin cromch."
  937. },
  938. {
  939. "name": "Bigger Cosmological Constant",
  940. "desc": "I don't know what this does, but it sure makes things tastier!"
  941. },
  942. {
  943. "name": "Big Bang 2",
  944. "desc": "If the big bang was so good..."
  945. },
  946. {
  947. "name": "Spacetime Salad",
  948. "desc": "Don't forget the quantum salt!"
  949. }
  950. ],
  951. "multiverse": [
  952. {
  953. "name": "Theory of Everything",
  954. "desc": "My theory: everything is edible."
  955. },
  956. {
  957. "name": "Extradimensional Fork",
  958. "desc": "To eat the multiverses with, duh."
  959. },
  960. {
  961. "name": "Multi-Multiverses",
  962. "desc": "Eh, why not?"
  963. },
  964. {
  965. "name": "More Food",
  966. "desc": "We're running out of ideas here."
  967. },
  968. {
  969. "name": "Gorge 2",
  970. "desc": "Coming Soon™"
  971. }
  972. ],
  973. }
  974. let prodAllUpgradeText = [
  975. {
  976. "name": "Sloth Metabolism",
  977. "desc": "Burn those calories. Eventually."
  978. },
  979. {
  980. "name": "Decent Metabolism",
  981. "desc": "Picking up the pace."
  982. },
  983. {
  984. "name": "Perky Metabolism",
  985. "desc": "Sweat a little."
  986. },
  987. {
  988. "name": "Quick Metabolism",
  989. "desc": "Burn those calories."
  990. },
  991. {
  992. "name": "Speedy Metabolism",
  993. "desc": "More prey, more power."
  994. },
  995. {
  996. "name": "Fast Metabolism",
  997. "desc": "You're a furnace. Fueled by people."
  998. },
  999. {
  1000. "name": "Powerful Metabolism",
  1001. "desc": "Digest them all."
  1002. },
  1003. {
  1004. "name": "Unbelievable Metabolism",
  1005. "desc": "Digest them all and more."
  1006. },
  1007. {
  1008. "name": "Supernatural Metabolism",
  1009. "desc": "Digest everything."
  1010. },
  1011. {
  1012. "name": "Godly Metabolism",
  1013. "desc": "Digest."
  1014. }
  1015. ]
  1016. const clickUpgradeText = [
  1017. {
  1018. "name": "Grabby Hands",
  1019. "desc": "Gathers prey, opens rooftops"
  1020. },
  1021. {
  1022. "name": "Long Tongue",
  1023. "desc": "Catches stragglers, tastes architecture"
  1024. },
  1025. {
  1026. "name": "Sharp Eyes",
  1027. "desc": "Spots snacks, probably unblinking"
  1028. },
  1029. {
  1030. "name": "Sensitive Nose",
  1031. "desc": "Sniffs meals, savors scents"
  1032. },
  1033. {
  1034. "name": "Sensitive Ears",
  1035. "desc": "Hears screams, finds leftovers"
  1036. },
  1037. {
  1038. "name": "Greedy Hands",
  1039. "desc": "Hoards prey, no leftovers"
  1040. },
  1041. {
  1042. "name": "Nimble Tongue",
  1043. "desc": "Snares snacks, without escape"
  1044. },
  1045. {
  1046. "name": "Eagle Eyes",
  1047. "desc": "Scans streets, always keen"
  1048. },
  1049. {
  1050. "name": "Keen Nose",
  1051. "desc": "Finds prey, never fooled"
  1052. },
  1053. {
  1054. "name": "Perfect Ears",
  1055. "desc": "Senses scuttles, won't relent"
  1056. },
  1057. ]
  1058. const helperUpgradeText = {
  1059. "anthro": {
  1060. "micro": [
  1061. {
  1062. "name": "Gatherers",
  1063. "desc": "Why bother chasing them, really?"
  1064. },
  1065. {
  1066. "name": "Servants",
  1067. "desc": "Why bother walking anywhere, really?"
  1068. }
  1069. ],
  1070. "car": [
  1071. {
  1072. name: "Drivers",
  1073. desc: "Better than a baby driver"
  1074. }
  1075. ],
  1076. bus: [
  1077. {
  1078. name: "Thank the bus driver",
  1079. desc: "Thank the bus driver"
  1080. }
  1081. ],
  1082. house: [
  1083. {
  1084. name: "Carpenters",
  1085. desc: "It's tool time!"
  1086. }
  1087. ],
  1088. apartment: [
  1089. {
  1090. name: "Landlords",
  1091. desc: "Eat 'em"
  1092. }
  1093. ],
  1094. block: [
  1095. {
  1096. name: "Inspectors",
  1097. desc: "Bringing everything up to code"
  1098. }
  1099. ],
  1100. town: [
  1101. {
  1102. name: "Mayors",
  1103. desc: "I Vored"
  1104. }
  1105. ],
  1106. city: [
  1107. {
  1108. name: "Councils",
  1109. desc: "Pass those ordinances"
  1110. }
  1111. ],
  1112. metro: [
  1113. {
  1114. name: "Urban Planners",
  1115. desc: "Blueprints? Chewprints."
  1116. }
  1117. ],
  1118. county: [
  1119. {
  1120. name: "Survey Crews",
  1121. desc: "You don't want to chip a tooth on a hard bit of rock, now do you?"
  1122. }
  1123. ],
  1124. state: [
  1125. {
  1126. name: "Census Takers",
  1127. desc: "Population: You"
  1128. }
  1129. ],
  1130. country: [
  1131. {
  1132. name: "Senators",
  1133. desc: "Lobbying for a better, tastier future"
  1134. }
  1135. ],
  1136. continent: [
  1137. {
  1138. name: "Drifters",
  1139. desc: "Because of continental drift. Duh."
  1140. }
  1141. ],
  1142. planet: [
  1143. {
  1144. name: "Geologists",
  1145. desc: "Turns out that the mantle is actually REALLY TASTY"
  1146. }
  1147. ],
  1148. "solar-system": [
  1149. {
  1150. name: "Astronauts",
  1151. desc: "With enough effort, the moon WILL be turned to cheese"
  1152. }
  1153. ],
  1154. galaxy: [
  1155. {
  1156. name: "Voyagers",
  1157. desc: "Boldly snacking where no macro has snacked before"
  1158. }
  1159. ],
  1160. universe: [
  1161. {
  1162. name: "Reality Warpers",
  1163. desc: "I'm pretty sure this is heretical..."
  1164. }
  1165. ],
  1166. multiverse: [
  1167. {
  1168. name: "Fractal Servants",
  1169. desc: "So very many!"
  1170. }
  1171. ]
  1172. }
  1173. }
  1174. const clickVictimUpgradeText = {
  1175. "anthro": {
  1176. "name": "Same-Size Prey",
  1177. "desc": "Devour an anthro with every click"
  1178. },
  1179. "car": {
  1180. "name": "Car Crusher",
  1181. "desc": "Consume a car with every click"
  1182. },
  1183. "bus": {
  1184. "name": "Bus Buffet",
  1185. "desc": "Swallow an entire bus with every click"
  1186. },
  1187. "house": {
  1188. "name": "Homewrecker",
  1189. "desc": "Eat a home with every click"
  1190. },
  1191. "apartment": {
  1192. "name": "Rent-Seeker",
  1193. "desc": "Guzzle an apartment with every click"
  1194. },
  1195. "block": {
  1196. "name": "Block Breaker",
  1197. "desc": "Gulp an entire block with every click"
  1198. },
  1199. "town": {
  1200. "name": "Town Terrorizer",
  1201. "desc": "Bolt down a whole town with every click"
  1202. },
  1203. "city": {
  1204. "name": "City Cafe",
  1205. "desc": "Feast on an entire city with every click"
  1206. },
  1207. "metro": {
  1208. "name": "Metro Muncher",
  1209. "desc": "Polish off a metropolis with every click"
  1210. },
  1211. "county": {
  1212. "name": "County Glurk",
  1213. "desc": "Ingest an entire county with every click"
  1214. },
  1215. "state": {
  1216. "name": "Stomached State",
  1217. "desc": "Gobble an entire state with every click"
  1218. },
  1219. "country": {
  1220. "name": "Country Chow",
  1221. "desc": "Erase a country with every click"
  1222. },
  1223. "continent": {
  1224. "name": "Continental Drift",
  1225. "desc": "Chow down on a continent with every click"
  1226. },
  1227. "planet": {
  1228. "name": "Popcorn Planets",
  1229. "desc": "Ingest a planet whole with every click"
  1230. },
  1231. "solar-system": {
  1232. "name": "Solar Snacks",
  1233. "desc": "Dine on whole solar systems with every click"
  1234. },
  1235. "galaxy": {
  1236. "name": "Galactic Center",
  1237. "desc": "Dispatch a galaxy with every click"
  1238. },
  1239. "universe": {
  1240. "name": "Universal Predator",
  1241. "desc": "Digest a universe with every click"
  1242. },
  1243. "multiverse": {
  1244. "name": "Omniscience",
  1245. "desc": "Gorge on the multiverse"
  1246. }
  1247. };
  1248. const powerupFreqUpgradeText = [
  1249. {
  1250. name: "All-You-Can-Eat",
  1251. desc: "Pour on the powerups.",
  1252. },
  1253. {
  1254. name: "Buffet",
  1255. desc: "Chow down on more and more.",
  1256. },
  1257. {
  1258. name: "Bottomless Bowl",
  1259. desc: "Eat up!",
  1260. },
  1261. {
  1262. name: "Endless Edibles",
  1263. desc: "For every one you eat, two more appear.",
  1264. },
  1265. {
  1266. name: "UNLIMITED BREADSTICKS",
  1267. desc: "UNLIMITED BREADSTICKS",
  1268. }
  1269. ]
  1270. // to avoid yoinking stuff from global variables directly...
  1271. // state.ownedUpgrades == ownedUpgrades
  1272. // state.resources == resources
  1273. // state.currentProductivity == currentProductivity
  1274. // state.belongings == belongings
  1275. const news = [
  1276. {
  1277. condition: state => {
  1278. return true;
  1279. },
  1280. lines: [
  1281. state => "SPORTS!"
  1282. ]
  1283. }
  1284. ]
  1285. function createNews() {
  1286. createNewsFoodAmount();
  1287. createNewsStart();
  1288. createNewsFoodRate();
  1289. createNewsFoodRatePermanent();
  1290. createNewsBuildingCount();
  1291. }
  1292. function createNewsFoodAmount() {
  1293. }
  1294. function createNewsStart() {
  1295. let counter = 0;
  1296. for (let set of newsStartText) {
  1297. const factor = counter;
  1298. let cond;
  1299. cond = state => {
  1300. return state.currentProductivity.food < 5
  1301. }
  1302. news.push({
  1303. condition: cond,
  1304. lines: set
  1305. });
  1306. counter += 1;
  1307. };
  1308. }
  1309. function createNewsFoodRate() {
  1310. let counter = 0;
  1311. for (let set of newsFoodRateText) {
  1312. const factor = counter;
  1313. let cond;
  1314. if (counter + 1 == newsFoodRateText.length) {
  1315. cond = state => {
  1316. return state.currentProductivity.food >= 5*Math.pow(10, factor)
  1317. }
  1318. } else {
  1319. cond = state => {
  1320. return state.currentProductivity.food >= 5*Math.pow(10, factor) &&
  1321. state.currentProductivity.food < 5*Math.pow(10, (factor+1))
  1322. }
  1323. }
  1324. news.push({
  1325. condition: cond,
  1326. lines: set
  1327. });
  1328. counter += 1;
  1329. };
  1330. }
  1331. function createNewsFoodRatePermanent() {
  1332. let counter = 0;
  1333. for (let set of newsFoodRatePermanentText) {
  1334. const factor = counter;
  1335. let cond = state => {
  1336. return state.currentProductivity.food >= 5*Math.pow(10, factor)
  1337. }
  1338. news.push({
  1339. condition: cond,
  1340. lines: set
  1341. });
  1342. counter += 1;
  1343. };
  1344. }
  1345. function createNewsBuildingCount() {
  1346. Object.entries(newsBuildingCountText).forEach(([key, sets]) => {
  1347. for (let [i, set] of sets.entries()) {
  1348. const conditions = [];
  1349. conditions.push(state => state.belongings[key].count >= newsBuildingCountCutoffs[i]);
  1350. news.push({
  1351. condition: state => conditions.every(cond => cond(state)),
  1352. lines: set
  1353. })
  1354. }
  1355. });
  1356. }
  1357. const newsBuildingCountCutoffs = [
  1358. 1,
  1359. 25,
  1360. 50,
  1361. 100,
  1362. 150,
  1363. 200,
  1364. 300,
  1365. 400,
  1366. 500
  1367. ]
  1368. const newsStartText = [
  1369. state => "This just in: Everything is fine",
  1370. state => "\"Kinda hungry ngl,\" tweets " + macroDesc.name,
  1371. state => "There are no giant monsters!"
  1372. ]
  1373. const newsFoodRateText = [
  1374. [
  1375. state => "Your neighbors are complaining about the noise",
  1376. state => "You are a very hungry caterpillar",
  1377. state => "You're hungry enough to eat an entire burger"
  1378. ],
  1379. [
  1380. state => "You ate your neighbors",
  1381. state => "Your former neighbors' neighbors are complaining about the noise",
  1382. state => "You're hungry enough to eat a whole turkey",
  1383. ],
  1384. [
  1385. state => "You no longer have any neighbors",
  1386. state => "You're hungry enough to eat a whole person"
  1387. ],
  1388. [
  1389. state => "You're hungry enough to eat a whole bunch of people"
  1390. ],
  1391. [
  1392. state => "You're hungry enough to eat a LOT of people"
  1393. ],
  1394. [
  1395. state => "You're very hungry"
  1396. ]
  1397. ]
  1398. const newsFoodRatePermanentText = [
  1399. [
  1400. state => "Should we be concerned by " + macroDesc.name + "'s ever-growing hunger? \"No,\" says local " + macroDesc.species + "."
  1401. ],
  1402. [
  1403. state => weekday() + " night football game cancelled due to " + macroDesc.species + " slobbering all over the field."
  1404. ],
  1405. [
  1406. state => weekday() + " night football game cancelled due to " + macroDesc.species + " eating everyone involved."
  1407. ]
  1408. ]
  1409. const newsBuildingCountText = {
  1410. micro: [
  1411. [
  1412. state => "Micro-only diet: fad or fact? Our experts weigh in.",
  1413. state => "\"What's the deal with micros, anyway?\" asks local comedian."
  1414. ],
  1415. [
  1416. state => "\"I don't have a problem,\" says macro eating " + showBuilding("micro") + " per second",
  1417. state => "\"Isn't it weird how macros eat so many micros?\" asked confused citizen. \"Like, doesn't that mean they're double micros?\""
  1418. ],
  1419. [
  1420. state => "Local macro celebrated for cleaning up the \"unending tide\" of micros",
  1421. ],
  1422. [
  1423. state => "That's a lot of micros."
  1424. ]
  1425. ],
  1426. anthro: [
  1427. [
  1428. state => "\"Nobody liked those guys anyway\" - few people concerned about " + macroDesc.name + "'s newly-acquired taste for people"
  1429. ],
  1430. [
  1431. state => "#FeedThe" + capitalize(macroDesc.species) + " is trending on Twitter."
  1432. ],
  1433. [
  1434. state => "\"average person eats 3 people a year\" factoid actualy just statistical error. average person eats 0 people per year. Peoples " + macroDesc.name + ", who lives on planet & eats over " + 8640 * belongings.anthro.count + " each day, is an outlier adn should not have been counted"
  1435. ],
  1436. [
  1437. state => "A new study finds that " + macroDesc.name + " has, indeed, eaten everyone."
  1438. ],
  1439. [
  1440. state => "A newer study finds that " + macroDesc.name + " has, actually eaten everyone <i>TWICE</i>."
  1441. ]
  1442. ],
  1443. car: [
  1444. [
  1445. state => "Car insurance premiums up " + (state.belongings.car.count * 3 + 12) + "%. Why? Our experts weigh in."
  1446. ]
  1447. ],
  1448. bus: [
  1449. [
  1450. state => "Macro craze fuels explosion in bus ridership."
  1451. ],
  1452. [
  1453. state => "Isn't it kind of weird how well-designed buses are for macros? Like, really. I saw a " + macroDesc.name + " stick one up " + macroDesc.proPossessive + " a-"
  1454. ]
  1455. ],
  1456. house: [
  1457. [
  1458. state => "Property values skyrocket as the huge " + macroDesc.species + " starts munching on buildings."
  1459. ],
  1460. [
  1461. state => "\"Full House\" eclipsed by new sitcom, \"Full Of House\""
  1462. ]
  1463. ],
  1464. apartment: [
  1465. [
  1466. state => "Construction is booming thanks to the macro's thooming"
  1467. ]
  1468. ],
  1469. block: [
  1470. [
  1471. state => "BLOCK PARTY! WOOO!"
  1472. ]
  1473. ],
  1474. town: [
  1475. [
  1476. state => "Yes, we get it. " + macroDesc.name + " is going to town. Good one."
  1477. ]
  1478. ],
  1479. city: [
  1480. [
  1481. state => "Public opinion remains indifferent about consumption of whole cities - \"downtown was kind of ugly; someone had to take intiative,\" claims local citizen."
  1482. ]
  1483. ],
  1484. metro: [
  1485. [
  1486. state => "What is a metro? Why did " + macroDesc.name + " start eating them? Our experts weigh in."
  1487. ]
  1488. ],
  1489. county: [
  1490. [
  1491. state => "\"Obviously,\" says an unfazed governor, \"we didn't really need that many counties. No need to worry.\""
  1492. ]
  1493. ],
  1494. state: [
  1495. [
  1496. state => "\"Obviously,\" says an unfazed governor, \"we were planning to move the capital to " + macroDesc.name + "'s digestive tract all along. No need to worry.\""
  1497. ]
  1498. ],
  1499. country: [
  1500. [
  1501. state => "State governor realizes the entire country got ate; sources report that he is \"mildly fazed\"."
  1502. ]
  1503. ],
  1504. continent: [
  1505. [
  1506. state => "Tonight at 11: Multiple reports from Australia that the continent \"ƃoʇ qloopʎ ɐʇǝ\". Why? Our experts weigh in."
  1507. ]
  1508. ],
  1509. planet: [
  1510. [
  1511. state => "The Earth has been eaten. Everyone on it has been eaten.",
  1512. state => macroDesc.name + " has eaten the entire planet."
  1513. ]
  1514. ],
  1515. "solar-system": [
  1516. [
  1517. state => "Scientists propose new \"" + macroDesc.name + " Unit\" to replace the outdated Astronomical Unit."
  1518. ]
  1519. ],
  1520. galaxy: [
  1521. [
  1522. state => "\"Please stop telling us that this is Star Vores\", pleads an exasperated news anchor. \"We know.\""
  1523. ]
  1524. ],
  1525. universe: [
  1526. [
  1527. state => "Decades of scientific speculation have been abruptly resolved by the Big " + macroDesc.name + " Theory."
  1528. ]
  1529. ],
  1530. multiverse: [
  1531. [
  1532. state => "BIG munch"
  1533. ]
  1534. ],
  1535. }
  1536. const powerups = {
  1537. "instant-food": {
  1538. name: "Free Food",
  1539. description: "Tasty!",
  1540. icon: "fa-drumstick-bite",
  1541. prereqs: state => true,
  1542. effect: state => state.resources.food += state.currentProductivity.food * 300,
  1543. popup: (self, e) => {
  1544. clickPopup("GULP!", "gulp", [e.clientX, e.clientY]);
  1545. clickPopup("+300 seconds of food", "food", [e.clientX, e.clientY]);
  1546. }
  1547. },
  1548. "double": {
  1549. name: "Double Dip",
  1550. description: "Quintupled productivity!",
  1551. icon: "fa-cogs",
  1552. duration: 30000,
  1553. prereqs: state => true,
  1554. effect: state => state.currentProductivity.food *= 5,
  1555. popup: (self, e) => {
  1556. clickPopup("VROOM!", "gulp", [e.clientX, e.clientY]);
  1557. }
  1558. },
  1559. "click": {
  1560. name: "Chaos Click",
  1561. description: "A hundred times the clicking!",
  1562. icon: "fa-hand-pointer",
  1563. duration: 20000,
  1564. prereqs: state => true,
  1565. effect: state => state.clickPowers.clickMultiplier *= 100,
  1566. popup: (self, e) => clickPopup("CLICK TIME!!", "gulp", [e.clientX, e.clientY])
  1567. }
  1568. }
  1569. function createFreeBuildingPowerups() {
  1570. const prefix = "free-";
  1571. Object.entries(freeBuildingPowerupText).forEach(([building, text]) => {
  1572. const key = prefix + building;
  1573. powerups[key] = {
  1574. name: text.name,
  1575. description: text.desc,
  1576. icon: buildings[building].icon,
  1577. prereqs: state => state.belongings[building].count > 0 && state.belongings[building].count < 100,
  1578. effect: state => state.belongings[building].count += 1,
  1579. popup: (self, e) => clickPopup("+1 " + buildings[building].name, "food", [e.clientX, e.clientY])
  1580. }
  1581. });
  1582. }
  1583. const freeBuildingPowerupText = {
  1584. car: {
  1585. name: "Free Car",
  1586. desc: "It's FREE!"
  1587. },
  1588. bus: {
  1589. name: "Deserted Bus",
  1590. desc: "Just kidding. It's full of people."
  1591. }
  1592. }
  1593. const statTypes = {
  1594. powerups: {
  1595. name: "Powerups Clicked"
  1596. },
  1597. seconds: {
  1598. name: "Seconds Played"
  1599. },
  1600. clicks: {
  1601. name: "Clicks"
  1602. },
  1603. foodClicked: {
  1604. name: "Food from clicks"
  1605. },
  1606. food: {
  1607. name: "Total food"
  1608. }
  1609. }
  1610. const options = {
  1611. name: {
  1612. name: "Name",
  1613. type: "text",
  1614. set: value => macroDesc.name = value,
  1615. get: () => macroDesc.name
  1616. },
  1617. species: {
  1618. name: "Species",
  1619. type: "text",
  1620. set: value => macroDesc.species = value,
  1621. get: () => macroDesc.species
  1622. },
  1623. subject: {
  1624. name: "Subject pronoun (e.g. he/she)",
  1625. type: "text",
  1626. set: value => macroDesc.proSubject = value,
  1627. get: () => macroDesc.proSubject
  1628. },
  1629. possessive: {
  1630. name: "Possessive pronoun (e.g. his/her)",
  1631. type: "text",
  1632. set: value => macroDesc.proPossessive = value,
  1633. get: () => macroDesc.proPossessive
  1634. },
  1635. object: {
  1636. name: "Object pronoun (e.g. him/her)",
  1637. type: "text",
  1638. set: value => macroDesc.proObject = value,
  1639. get: () => macroDesc.proObject
  1640. }
  1641. }
  1642. deepFreeze(prodUpgradeText);
  1643. deepFreeze(prodAllUpgradeText);
  1644. deepFreeze(clickUpgradeText);
  1645. deepFreeze(helperUpgradeText);
  1646. deepFreeze(clickVictimUpgradeText);
  1647. deepFreeze(powerupFreqUpgradeText);