cookie clicker but bigger
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

891 lines
18 KiB

  1. "use strict";
  2. const resourceTypes = {
  3. "food": {
  4. name: "Food"
  5. }
  6. }
  7. const buildings = {
  8. "micro": {
  9. "name": "Micro",
  10. "plural": "Micros",
  11. "desc": "A tasty, squirmy treat.",
  12. "cost": 1e1,
  13. "prod": 1e-1/1,
  14. "icon": "fa-universal-access"
  15. },
  16. "anthro": {
  17. "name": "Anthro",
  18. "plural": "Anthros",
  19. "desc": "Something more substantial to sate your hunger.",
  20. "cost": 1e2,
  21. "prod": 1e0/1.1,
  22. "icon": "fa-male"
  23. },
  24. "car": {
  25. "name": "Car",
  26. "plural": "Cars",
  27. "desc": "Crunchy shell, tasty center.",
  28. "cost": 1.2e3,
  29. "prod": 1e1/1.2,
  30. "icon": "fa-car"
  31. },
  32. "bus": {
  33. "name": "Bus",
  34. "plural": "Buses",
  35. "desc": "Probably the worst place to be when a macro is aroud.",
  36. "cost": 1.4e4,
  37. "prod": 1e2/1.3,
  38. "icon": "fa-bus"
  39. },
  40. "house": {
  41. "name": "House",
  42. "plural": "Houses",
  43. "desc": "Home sweet home - but it doesn't taste sweet?",
  44. "cost": 1.6e5,
  45. "prod": 1e3/1.4,
  46. "icon": "fa-home"
  47. },
  48. "apartment": {
  49. "name": "Apartment",
  50. "plural": "Apartments",
  51. "desc": "More snacks, less packaging.",
  52. "cost": 1.8e6,
  53. "prod": 1e4/1.5,
  54. "icon": "fa-building"
  55. },
  56. "block": {
  57. "name": "Block",
  58. "plural": "Blocks",
  59. "desc": "A whole pile of buildings.",
  60. "cost": 2e7,
  61. "prod": 1e5/1.6,
  62. "icon": "fa-warehouse"
  63. },
  64. "town": {
  65. "name": "Town",
  66. "plural": "Towns",
  67. "desc": "'Tourist trap' has never been this literal.",
  68. "cost": 2.2e8,
  69. "prod": 1e6/1.7,
  70. "icon": "fa-store"
  71. },
  72. "city": {
  73. "name": "City",
  74. "plural": "Cities",
  75. "desc": "Please no sitty on our city.",
  76. "cost": 2.4e9,
  77. "prod": 1e7/1.8,
  78. "icon": "fa-city"
  79. },
  80. "metro": {
  81. "name": "Metropolis",
  82. "plural": "Metropolises",
  83. "desc": "A big ol' city. Tasty, too.",
  84. "cost": 2.6e10,
  85. "prod": 1e8/1.9,
  86. "icon": "fa-landmark"
  87. },
  88. "county": {
  89. "name": "County",
  90. "plural": "Counties",
  91. "desc": "Why salt the land when you can slurp it?",
  92. "cost": 2.8e11,
  93. "prod": 1e9/2,
  94. "icon": "fa-map"
  95. },
  96. "state": {
  97. "name": "State",
  98. "plural": "States",
  99. "desc": "The United States is made up of...43 states - no, 42...",
  100. "cost": 3e12,
  101. "prod": 1e10/2.1,
  102. "icon": "fa-map-signs"
  103. },
  104. "country": {
  105. "name": "Country",
  106. "plural": "Countries",
  107. "desc": "One nation, under paw.",
  108. "cost": 3.2e13,
  109. "prod": 1e11/2.2,
  110. "icon": "fa-flag"
  111. },
  112. "continent": {
  113. "name": "Continent",
  114. "plural": "Continents",
  115. "desc": "Earth-shattering appetite!",
  116. "cost": 3.4e14,
  117. "prod": 1e12/2.3,
  118. "icon": "fa-mountain"
  119. },
  120. "planet": {
  121. "name": "Planet",
  122. "plural": "Planets",
  123. "desc": "Earth appetite!",
  124. "cost": 3.6e15,
  125. "prod": 1e13/2.4,
  126. "icon": "fa-globe-europe"
  127. },
  128. "solar-system": {
  129. "name": "Solar System",
  130. "plural": "Solar Systems",
  131. "desc": "Earths appetite!",
  132. "cost": 3.8e16,
  133. "prod": 1e14/2.5,
  134. "icon": "fa-meteor"
  135. },
  136. "galaxy": {
  137. "name": "Galaxy",
  138. "plural": "Galaxy",
  139. "desc": "In a galaxy far, far down your gullet...",
  140. "cost": 4.0e17,
  141. "prod": 1e15/2.6,
  142. "icon": "fa-sun"
  143. },
  144. "universe": {
  145. "name": "Universe",
  146. "plural": "Universes",
  147. "desc": "Into the you-verse.",
  148. "cost": 4.2e18,
  149. "prod": 1e16/2.7,
  150. "icon": "fa-asterisk"
  151. },
  152. "multiverse": {
  153. "name": "Multiverse",
  154. "plural": "Multiverses",
  155. "desc": "This is getting very silly.",
  156. "cost": 4.4e19,
  157. "prod": 1e17/2.8,
  158. "icon": "fa-infinity"
  159. }
  160. }
  161. const effect_types = {
  162. "prod": {
  163. "apply": function(effect, productivity) {
  164. return productivity * effect.amount;
  165. },
  166. "desc": function(effect) {
  167. return round(effect.amount, 2) + "x food production from " + buildings[effect.target].plural;
  168. }
  169. },
  170. "prod-all": {
  171. "apply": function(effect, productivity) {
  172. return productivity * effect.amount;
  173. },
  174. "desc": function(effect) {
  175. return round((effect.amount - 1) * 100) + "% increase to food production";
  176. }
  177. },
  178. "helper": {
  179. "apply": function(effect, productivity, helperCount) {
  180. return productivity * (1 + effect.amount * helperCount);
  181. },
  182. "desc": function(effect) {
  183. return "+" + round(effect.amount * 100) + "% food/sec from " + buildings[effect.helped].name + " for every " + buildings[effect.helper].name + " owned.";
  184. }
  185. },
  186. "click": {
  187. "apply": function(effect, bonus, productivity) {
  188. return bonus + productivity * effect.amount;
  189. },
  190. "desc": function(effect) {
  191. return round(effect.amount * 100) + "% of food/sec gained per click";
  192. }
  193. }
  194. }
  195. let upgrades = {
  196. }
  197. function createTemplateUpgrades() {
  198. createProdUpgrades();
  199. createProdAllUpgrades();
  200. createClickUpgrades();
  201. createHelperUpgrades();
  202. }
  203. const prodUpgradeCounts = [1, 5, 10, 25, 50, 75, 100];
  204. function createProdUpgrades() {
  205. for (const [key, value] of Object.entries(prodUpgradeText)) {
  206. let counter = 1;
  207. let prefix = key + "-prod-";
  208. for (let contents of value) {
  209. upgrades[prefix + counter] = {
  210. "name": contents.name,
  211. "desc": contents.desc,
  212. "icon": buildings[key].icon,
  213. "cost": {
  214. "food": buildings[key].cost * 5 * Math.pow(10,counter - 1)
  215. },
  216. "effects": [
  217. {
  218. "type": "prod",
  219. "amount": 2 + (counter - 1) * 0.25,
  220. "target": key
  221. }
  222. ]
  223. };
  224. upgrades[prefix + counter]["prereqs"] = {};
  225. upgrades[prefix + counter]["prereqs"]["buildings"] = {};
  226. upgrades[prefix + counter]["prereqs"]["buildings"][key] = prodUpgradeCounts[counter - 1];
  227. if (counter > 1) {
  228. upgrades[prefix + counter]["prereqs"]["upgrades"] = [
  229. prefix + (counter - 1)
  230. ];
  231. }
  232. counter += 1;
  233. }
  234. }
  235. }
  236. function createProdAllUpgrades() {
  237. let prefix = "prod-all-"
  238. let counter = 1;
  239. for (let contents of prodAllUpgradeText) {
  240. upgrades[prefix + counter] = {
  241. "name": contents.name,
  242. "desc": contents.desc,
  243. "icon": "fa-cogs",
  244. "cost": {
  245. "food": 5 * Math.pow(10, counter+1)
  246. },
  247. "effects": [
  248. {
  249. "type": "prod-all",
  250. "amount": 1.05
  251. }
  252. ],
  253. "prereqs": {
  254. "productivity": {
  255. "food": Math.pow(10, counter)
  256. }
  257. }
  258. };
  259. if (counter > 1) {
  260. upgrades[prefix + counter]["prereqs"].upgrades = [
  261. prefix + (counter - 1)
  262. ];
  263. }
  264. counter += 1;
  265. }
  266. }
  267. function createClickUpgrades() {
  268. let prefix = "prod-click-";
  269. let counter = 1 ;
  270. for (let contents of clickUpgradeText) {
  271. upgrades[prefix + counter] = {
  272. name: contents.name,
  273. desc: contents.desc,
  274. icon: "fa-hand-pointer",
  275. cost: {
  276. food: Math.pow(10, (counter*2)+1)
  277. },
  278. effects: [
  279. {
  280. type: "click",
  281. amount: 0.01
  282. }
  283. ],
  284. prereqs: {
  285. productivity: {
  286. food: Math.pow(10, counter)
  287. }
  288. }
  289. };
  290. if (counter > 1) {
  291. upgrades[prefix + counter]["prereqs"].upgrades = [
  292. prefix + (counter - 1)
  293. ];
  294. }
  295. counter += 1;
  296. }
  297. }
  298. function createHelperUpgrades() {
  299. const infix = "-help-";
  300. Object.entries(helperUpgradeText).forEach(([helper, helpees]) => {
  301. const prefix = helper;
  302. Object.entries(helpees).forEach(([helped, texts]) => {
  303. const suffix = helped;
  304. let counter = 1;
  305. for (let text of texts) {
  306. const key = prefix + infix + suffix + "-" + counter;
  307. console.log(key);
  308. upgrades[key] = {
  309. "name": text.name,
  310. "desc": text.desc,
  311. "icon": "fa-hand-holding",
  312. "cost": {
  313. "food": buildings[helper].cost * 25 * counter + buildings[helped].cost * 50 * counter
  314. },
  315. "effects": [
  316. {
  317. "type": "helper",
  318. "helper": helper,
  319. "helped": helped,
  320. "amount": 0.01 * counter
  321. }
  322. ],
  323. "prereqs": {
  324. "buildings": {
  325. },
  326. "upgrades": [
  327. helper + "-prod-1"
  328. ]
  329. }
  330. };
  331. upgrades[key]["prereqs"]["buildings"][helper] = 10 * counter;
  332. if (counter > 1) {
  333. upgrades[key]["prereqs"]["upgrades"].push(prefix + infix + suffix + "-" + (counter - 1) )
  334. }
  335. counter += 1;
  336. }
  337. });
  338. });
  339. }
  340. let prodUpgradeText = {
  341. "micro": [
  342. {
  343. "name": "Bigger Micros",
  344. "desc": "A macro micro? It's more filling, for sure.",
  345. },
  346. {
  347. "name": "Beefy Micros",
  348. "desc": "25% more protein, 10% fewer carbs."
  349. },
  350. {
  351. "name": "Delicious Micros",
  352. "desc": "Betcha' can't eat just one."
  353. },
  354. {
  355. "name": "Irresistable Micros",
  356. "desc": "Genetically engineered to be delectable."
  357. },
  358. {
  359. "name": "Exquisite Micros",
  360. "desc": "Dangerously delicious."
  361. }
  362. ],
  363. "anthro": [
  364. {
  365. "name": "Willing Prey",
  366. "desc": "Why bother chasing down your meal?"
  367. },
  368. {
  369. "name": "Fattened Prey",
  370. "desc": "9 calories per gram!"
  371. },
  372. {
  373. "name": "Mesmerized Prey",
  374. "desc": "Why bother walking to your meal?"
  375. },
  376. {
  377. "name": "Food-Safe Lubricant",
  378. "desc": "Ease them down your gullet with ease. Thanks, chemistry!"
  379. },
  380. {
  381. "name": "Mandatory Meal Training",
  382. "desc": "Educating prey on basic food etiquette helps reduce maw congestion and speeds digestion by 27%."
  383. }
  384. ],
  385. "car": [
  386. {
  387. "name": "HOV Lane",
  388. "desc": "Think of the environment! And of your impending digestion, I guess."
  389. },
  390. {
  391. "name": "Lightweight Frames",
  392. "desc": "Although crunchy, the shell around the snacks isn't very appetizing."
  393. },
  394. {
  395. "name": "Traffic Engineering",
  396. "desc": "Maximizing throughput into your gullet."
  397. },
  398. {
  399. "name": "Super Highways",
  400. "desc": "Six lanes! Fresh pavement! A ravenous maw!"
  401. },
  402. {
  403. "name": "Stacked Cars",
  404. "desc": "When we couldn't make the roads any wider, we tried stacking the cars higher."
  405. }
  406. ],
  407. "bus": [
  408. {
  409. "name": "Bus Passes",
  410. "desc": "Save on greenhouse emissions. Save your predator's effort. Everyone wins!"
  411. },
  412. {
  413. "name": "Double Deckers",
  414. "desc": "Stack 'em up! Slurp 'em down!"
  415. },
  416. {
  417. "name": "Articulated Buses",
  418. "desc": "The bend really helps them slip down your throat."
  419. },
  420. {
  421. "name": "Tour Buses",
  422. "desc": "People come from around the world to see your intestinal tract.",
  423. },
  424. {
  425. "name": "Double Double Deckers",
  426. "desc": "Hard to swallow, true, but filling nonetheless."
  427. }
  428. ],
  429. "house": [
  430. {
  431. "name": "Second Story",
  432. "desc": "Twice as many snacks, half as much chewing."
  433. },
  434. {
  435. "name": "Remodeling",
  436. "desc": "Strip out that icky asbestos."
  437. },
  438. {
  439. "name": "Smaller Yards",
  440. "desc": "Less wasted space. More wasted homes."
  441. },
  442. {
  443. "name": "House Parties",
  444. "desc": "More people! More party! More prey!"
  445. },
  446. {
  447. "name": "Suburbia",
  448. "desc": "It's like a buffet line!"
  449. }
  450. ],
  451. "apartment": [
  452. {
  453. "name": "Rent Subsidies",
  454. "desc": "Encourage high-density living. Enjoy the result."
  455. },
  456. {
  457. "name": "High-Rises",
  458. "desc": "These sure are some Tilted Towers..."
  459. },
  460. {
  461. "name": "Reverse Eviction",
  462. "desc": "Forcibly putting people IN your lunch!"
  463. },
  464. {
  465. "name": "Higher High-Rises",
  466. "desc": "Almost as tall as you! Almost."
  467. },
  468. {
  469. "name": "Vertical Beds",
  470. "desc": "You can fit way more people in a studio apartment with this one weird tip..."
  471. }
  472. ],
  473. "block": [
  474. {
  475. "name": "Street Sweepers",
  476. "desc": "Keeps the gunk off the sidewalk, and thus, off your tongue."
  477. },
  478. {
  479. "name": "Zoning Laws",
  480. "desc": "Mandatory prey-per-square-meter requirements."
  481. },
  482. {
  483. "name": "Alleyway Appetizers",
  484. "desc": "You can fit people *between* the buildings."
  485. },
  486. {
  487. "name": "Block Party",
  488. "desc": "Everyone's invited!"
  489. },
  490. {
  491. "name": "Vertical Blocks",
  492. "desc": "There's no reason you can't stack them on top of each other, right?"
  493. }
  494. ],
  495. "town": [
  496. {
  497. "name": "Going to Town",
  498. "desc": "That's where the food is."
  499. },
  500. {
  501. "name": "Going to Town, II: Revelations",
  502. "desc": "That's where the food is, again."
  503. },
  504. {
  505. "name": "Going to Town 0: Origins",
  506. "desc": "That's where the food was."
  507. },
  508. {
  509. "name": "Going to Town III: Revengeance",
  510. "desc": "Look, it's just how nature works. Food gets ate."
  511. },
  512. {
  513. "name": "Going to Town IV: Endgame",
  514. "desc": "Food IS something one considers when eating the universe."
  515. }
  516. ],
  517. "city": [
  518. {
  519. "name": "Gridlock",
  520. "desc": "Keeps people within arm's reach."
  521. },
  522. {
  523. "name": "Skyscrapers",
  524. "desc": "Corn on the cob? Corn on the cob."
  525. },
  526. {
  527. "name": "Protest March",
  528. "desc": "\"We have rights!\" chants the crowd. Unfortunately, they also have calories."
  529. },
  530. {
  531. "name": "Urban Sprawl",
  532. "desc": "What a lovely spread of Hors d'oeuvres!"
  533. },
  534. {
  535. "name": "Sim City",
  536. "desc": "You wouldn't download a city."
  537. }
  538. ],
  539. "metro": [
  540. {
  541. "name": "metro-1",
  542. "desc": ""
  543. },
  544. {
  545. "name": "metro-2",
  546. "desc": ""
  547. },
  548. {
  549. "name": "metro-3",
  550. "desc": ""
  551. },
  552. {
  553. "name": "metro-4",
  554. "desc": ""
  555. },
  556. {
  557. "name": "metro-5",
  558. "desc": ""
  559. }
  560. ],
  561. "county": [
  562. {
  563. "name": "County Roads",
  564. "desc": "Eh, close enough."
  565. },
  566. {
  567. "name": "county-2",
  568. "desc": ""
  569. },
  570. {
  571. "name": "county-3",
  572. "desc": ""
  573. },
  574. {
  575. "name": "county-4",
  576. "desc": ""
  577. },
  578. {
  579. "name": "county-5",
  580. "desc": ""
  581. }
  582. ],
  583. "state": [
  584. {
  585. "name": "state-1",
  586. "desc": ""
  587. },
  588. {
  589. "name": "state-2",
  590. "desc": ""
  591. },
  592. {
  593. "name": "state-3",
  594. "desc": ""
  595. },
  596. {
  597. "name": "state-4",
  598. "desc": ""
  599. },
  600. {
  601. "name": "state-5",
  602. "desc": ""
  603. }
  604. ],
  605. "country": [
  606. {
  607. "name": "Country Roads",
  608. "desc": "Take me hooooooome / to the plaaaaaace / where GULP"
  609. },
  610. {
  611. "name": "country-2",
  612. "desc": ""
  613. },
  614. {
  615. "name": "country-3",
  616. "desc": ""
  617. },
  618. {
  619. "name": "country-4",
  620. "desc": ""
  621. },
  622. {
  623. "name": "country-5",
  624. "desc": ""
  625. }
  626. ],
  627. "continent": [
  628. {
  629. "name": "continent-1",
  630. "desc": ""
  631. },
  632. {
  633. "name": "continent-2",
  634. "desc": ""
  635. },
  636. {
  637. "name": "continent-3",
  638. "desc": ""
  639. },
  640. {
  641. "name": "continent-4",
  642. "desc": ""
  643. },
  644. {
  645. "name": "continent-5",
  646. "desc": ""
  647. }
  648. ],
  649. "planet": [
  650. {
  651. "name": "planet-1",
  652. "desc": ""
  653. },
  654. {
  655. "name": "planet-2",
  656. "desc": ""
  657. },
  658. {
  659. "name": "planet-3",
  660. "desc": ""
  661. },
  662. {
  663. "name": "planet-4",
  664. "desc": ""
  665. },
  666. {
  667. "name": "planet-5",
  668. "desc": ""
  669. }
  670. ],
  671. "solar-system": [
  672. {
  673. "name": "solar-system-1",
  674. "desc": ""
  675. },
  676. {
  677. "name": "solar-system-2",
  678. "desc": ""
  679. },
  680. {
  681. "name": "solar-system-3",
  682. "desc": ""
  683. },
  684. {
  685. "name": "solar-system-4",
  686. "desc": ""
  687. },
  688. {
  689. "name": "solar-system-5",
  690. "desc": ""
  691. }
  692. ],
  693. "galaxy": [
  694. {
  695. "name": "galaxy-1",
  696. "desc": ""
  697. },
  698. {
  699. "name": "galaxy-2",
  700. "desc": ""
  701. },
  702. {
  703. "name": "galaxy-3",
  704. "desc": ""
  705. },
  706. {
  707. "name": "galaxy-4",
  708. "desc": ""
  709. },
  710. {
  711. "name": "galaxy-5",
  712. "desc": ""
  713. }
  714. ],
  715. "universe": [
  716. {
  717. "name": "universe-1",
  718. "desc": ""
  719. },
  720. {
  721. "name": "universe-2",
  722. "desc": ""
  723. },
  724. {
  725. "name": "universe-3",
  726. "desc": ""
  727. },
  728. {
  729. "name": "universe-4",
  730. "desc": ""
  731. },
  732. {
  733. "name": "universe-5",
  734. "desc": ""
  735. }
  736. ],
  737. "multiverse": [
  738. {
  739. "name": "multiverse-1",
  740. "desc": ""
  741. },
  742. {
  743. "name": "multiverse-2",
  744. "desc": ""
  745. },
  746. {
  747. "name": "multiverse-3",
  748. "desc": ""
  749. },
  750. {
  751. "name": "multiverse-4",
  752. "desc": ""
  753. },
  754. {
  755. "name": "multiverse-5",
  756. "desc": ""
  757. }
  758. ],
  759. }
  760. let prodAllUpgradeText = [
  761. {
  762. "name": "Sloth Metabolism",
  763. "desc": "Burn those calories. Eventually."
  764. },
  765. {
  766. "name": "Decent Metabolism",
  767. "desc": "Picking up the pace."
  768. },
  769. {
  770. "name": "Perky Metabolism",
  771. "desc": "Sweat a little."
  772. },
  773. {
  774. "name": "Quick Metabolism",
  775. "desc": "Burn those calories."
  776. },
  777. {
  778. "name": "Speedy Metabolism",
  779. "desc": "More prey, more power."
  780. },
  781. {
  782. "name": "Fast Metabolism",
  783. "desc": "You're a furnace. Fueled by people."
  784. },
  785. {
  786. "name": "Powerful Metabolism",
  787. "desc": "Digest them all."
  788. },
  789. {
  790. "name": "Unbelievable Metabolism",
  791. "desc": "Digest them all and more."
  792. },
  793. {
  794. "name": "Supernatural Metabolism",
  795. "desc": "Digest everything."
  796. },
  797. {
  798. "name": "Godly Metabolism",
  799. "desc": "Digest."
  800. }
  801. ]
  802. const clickUpgradeText = [
  803. {
  804. "name": "Grabby Hands",
  805. "desc": "Gathers prey, opens rooftops"
  806. },
  807. {
  808. "name": "Long Tongue",
  809. "desc": "Catches stragglers, tastes architecture"
  810. },
  811. {
  812. "name": "Sharp Eyes",
  813. "desc": "Spots snacks, probably unblinking"
  814. },
  815. {
  816. "name": "Sensitive Nose",
  817. "desc": "Sniffs meals, savors scents"
  818. },
  819. {
  820. "name": "Sensitive Ears",
  821. "desc": "Hears screams, finds leftovers"
  822. },
  823. {
  824. "name": "Greedy Hands",
  825. "desc": "Hoards prey, no leftovers"
  826. },
  827. {
  828. "name": "Nimble Tongue",
  829. "desc": "Snares snacks, without escape"
  830. },
  831. {
  832. "name": "Eagle Eyes",
  833. "desc": "Scans streets, always keen"
  834. },
  835. {
  836. "name": "Keen Nose",
  837. "desc": "Finds prey, never fooled"
  838. },
  839. {
  840. "name": "Perfect Ears",
  841. "desc": "Senses scuttles, won't relent"
  842. },
  843. ]
  844. const helperUpgradeText = {
  845. "anthro": {
  846. "micro": [
  847. {
  848. "name": "Gatherers",
  849. "desc": "Why bother chasing them, really?"
  850. },
  851. {
  852. "name": "Servants",
  853. "desc": "Why bother walking anywhere, really?"
  854. },
  855. ]
  856. }
  857. }